diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6f5a290..6d92ea4a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -127,7 +127,7 @@ jobs: - name: doc tests run: cargo test --package ${{ matrix.package }} --doc - integration-test-eigenlayer: + eigenlayer-tests: timeout-minutes: 90 runs-on: ubuntu-latest steps: @@ -175,5 +175,8 @@ jobs: - name: Build (release) integration test run: cargo build --release -p incredible-squaring-blueprint-eigenlayer - - name: tests - run: RUST_LOG=gadget=trace cargo test --package blueprint-test-utils test_eigenlayer_incredible_squaring_blueprint -- --nocapture + - name: eigenlayer incredible squaring blueprint test + run: RUST_LOG=gadget=trace cargo test --package incredible-squaring-blueprint-eigenlayer test_eigenlayer_incredible_squaring_blueprint -- --nocapture + + - name: eigenlayer context test + run: RUST_LOG=gadget=trace cargo test --package blueprint-examples test_eigenlayer_context -- --nocapture diff --git a/Cargo.lock b/Cargo.lock index cc093a8a..15d81a9e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1953,12 +1953,20 @@ dependencies = [ "alloy-sol-types 0.7.7", "alloy-transport 0.1.4", "alloy-transport-http 0.1.4", + "async-trait", + "blueprint-build-utils", "blueprint-metadata", + "blueprint-test-utils", "color-eyre", + "eigensdk", + "gadget-io", "gadget-sdk", "reqwest 0.12.9", + "serde", "serde_json", + "tempfile", "tokio", + "tokio-util 0.7.12", "tracing", "uuid 1.11.0", ] @@ -2026,6 +2034,7 @@ dependencies = [ "libp2p", "log", "parking_lot 0.12.3", + "serde", "sp-core", "sp-io", "subxt", @@ -4807,6 +4816,7 @@ name = "gadget-sdk" version = "0.4.0" dependencies = [ "alloy-contract", + "alloy-json-abi", "alloy-network", "alloy-primitives 0.7.7", "alloy-provider", @@ -6156,6 +6166,7 @@ dependencies = [ "serde_json", "sp-core", "subxt-signer", + "tempfile", "thiserror", "tokio", "tokio-util 0.7.12", diff --git a/blueprint-test-utils/Cargo.toml b/blueprint-test-utils/Cargo.toml index 26fbba28..a3a1abca 100644 --- a/blueprint-test-utils/Cargo.toml +++ b/blueprint-test-utils/Cargo.toml @@ -14,7 +14,6 @@ license.workspace = true default = ["std"] std = ["sp-core/std", "gadget-io/std", "gadget-sdk/std"] wasm = ["gadget-io/wasm-bindgen", "gadget-sdk/wasm"] -eigenlayer_test = [] [dependencies] # Core dependencies @@ -22,6 +21,7 @@ async-trait = { workspace = true } blueprint-manager = { workspace = true } futures = { workspace = true } parking_lot = { workspace = true } +serde = { workspace = true } tokio = { workspace = true, features = ["full"] } # Logging and error handling diff --git a/blueprint-test-utils/src/binding/incrediblesquaringtaskmanager.rs b/blueprint-test-utils/src/binding/incrediblesquaringtaskmanager.rs new file mode 100644 index 00000000..e441c60c --- /dev/null +++ b/blueprint-test-utils/src/binding/incrediblesquaringtaskmanager.rs @@ -0,0 +1,8352 @@ +#![allow(clippy::all)] + +#[doc = "\n\nGenerated by the following Solidity interface...\n```solidity\ninterface IncredibleSquaringTaskManager {\n struct CheckSignaturesIndices {\n uint32[] nonSignerQuorumBitmapIndices;\n uint32[] quorumApkIndices;\n uint32[] totalStakeIndices;\n uint32[][] nonSignerStakeIndices;\n }\n struct G1Point {\n uint256 X;\n uint256 Y;\n }\n struct G2Point {\n uint256[2] X;\n uint256[2] Y;\n }\n struct NonSignerStakesAndSignature {\n uint32[] nonSignerQuorumBitmapIndices;\n G1Point[] nonSignerPubkeys;\n G1Point[] quorumApks;\n G2Point apkG2;\n G1Point sigma;\n uint32[] quorumApkIndices;\n uint32[] totalStakeIndices;\n uint32[][] nonSignerStakeIndices;\n }\n struct Operator {\n address operator;\n bytes32 operatorId;\n uint96 stake;\n }\n struct QuorumStakeTotals {\n uint96[] signedStakeForQuorum;\n uint96[] totalStakeForQuorum;\n }\n struct Task {\n uint256 numberToBeSquared;\n uint32 taskCreatedBlock;\n bytes quorumNumbers;\n uint32 quorumThresholdPercentage;\n }\n struct TaskResponse {\n uint32 referenceTaskIndex;\n uint256 numberSquared;\n }\n struct TaskResponseMetadata {\n uint32 taskResponsedBlock;\n bytes32 hashOfNonSigners;\n }\n\n event Initialized(uint8 version);\n event NewTaskCreated(uint32 indexed taskIndex, Task task);\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n event Paused(address indexed account, uint256 newPausedStatus);\n event PauserRegistrySet(address pauserRegistry, address newPauserRegistry);\n event StaleStakesForbiddenUpdate(bool value);\n event TaskChallengedSuccessfully(uint32 indexed taskIndex, address indexed challenger);\n event TaskChallengedUnsuccessfully(uint32 indexed taskIndex, address indexed challenger);\n event TaskCompleted(uint32 indexed taskIndex);\n event TaskResponded(TaskResponse taskResponse, TaskResponseMetadata taskResponseMetadata);\n event Unpaused(address indexed account, uint256 newPausedStatus);\n\n constructor(address _registryCoordinator, uint32 _taskResponseWindowBlock);\n\n function TASK_CHALLENGE_WINDOW_BLOCK() external view returns (uint32);\n function TASK_RESPONSE_WINDOW_BLOCK() external view returns (uint32);\n function aggregator() external view returns (address);\n function allTaskHashes(uint32) external view returns (bytes32);\n function allTaskResponses(uint32) external view returns (bytes32);\n function blsApkRegistry() external view returns (address);\n function checkSignatures(bytes32 msgHash, bytes memory quorumNumbers, uint32 referenceBlockNumber, NonSignerStakesAndSignature memory params) external view returns (QuorumStakeTotals memory, bytes32);\n function createNewTask(uint256 numberToBeSquared, uint32 quorumThresholdPercentage, bytes memory quorumNumbers) external;\n function delegation() external view returns (address);\n function generator() external view returns (address);\n function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes memory quorumNumbers, bytes32[] memory nonSignerOperatorIds) external view returns (CheckSignaturesIndices memory);\n function getOperatorState(address registryCoordinator, bytes memory quorumNumbers, uint32 blockNumber) external view returns (Operator[][] memory);\n function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) external view returns (uint256, Operator[][] memory);\n function getQuorumBitmapsAtBlockNumber(address registryCoordinator, bytes32[] memory operatorIds, uint32 blockNumber) external view returns (uint256[] memory);\n function getTaskResponseWindowBlock() external view returns (uint32);\n function initialize(address _pauserRegistry, address initialOwner, address _aggregator, address _generator) external;\n function latestTaskNum() external view returns (uint32);\n function owner() external view returns (address);\n function pause(uint256 newPausedStatus) external;\n function pauseAll() external;\n function paused(uint8 index) external view returns (bool);\n function paused() external view returns (uint256);\n function pauserRegistry() external view returns (address);\n function raiseAndResolveChallenge(Task memory task, TaskResponse memory taskResponse, TaskResponseMetadata memory taskResponseMetadata, G1Point[] memory pubkeysOfNonSigningOperators) external;\n function registryCoordinator() external view returns (address);\n function renounceOwnership() external;\n function respondToTask(Task memory task, TaskResponse memory taskResponse, NonSignerStakesAndSignature memory nonSignerStakesAndSignature) external;\n function setPauserRegistry(address newPauserRegistry) external;\n function setStaleStakesForbidden(bool value) external;\n function stakeRegistry() external view returns (address);\n function staleStakesForbidden() external view returns (bool);\n function taskNumber() external view returns (uint32);\n function taskSuccesfullyChallenged(uint32) external view returns (bool);\n function transferOwnership(address newOwner) external;\n function trySignatureAndApkVerification(bytes32 msgHash, G1Point memory apk, G2Point memory apkG2, G1Point memory sigma) external view returns (bool pairingSuccessful, bool siganatureIsValid);\n function unpause(uint256 newPausedStatus) external;\n}\n```\n\n...which was generated by the following JSON ABI:\n```json\n[\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_registryCoordinator\",\n \"type\": \"address\",\n \"internalType\": \"contract IRegistryCoordinator\"\n },\n {\n \"name\": \"_taskResponseWindowBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"TASK_CHALLENGE_WINDOW_BLOCK\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"TASK_RESPONSE_WINDOW_BLOCK\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"aggregator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allTaskHashes\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allTaskResponses\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"blsApkRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IBLSApkRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"checkSignatures\",\n \"inputs\": [\n {\n \"name\": \"msgHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"referenceBlockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\n \"components\": [\n {\n \"name\": \"nonSignerQuorumBitmapIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"nonSignerPubkeys\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct BN254.G1Point[]\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"quorumApks\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct BN254.G1Point[]\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"apkG2\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G2Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n }\n ]\n },\n {\n \"name\": \"sigma\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"quorumApkIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"totalStakeIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"nonSignerStakeIndices\",\n \"type\": \"uint32[][]\",\n \"internalType\": \"uint32[][]\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IBLSSignatureChecker.QuorumStakeTotals\",\n \"components\": [\n {\n \"name\": \"signedStakeForQuorum\",\n \"type\": \"uint96[]\",\n \"internalType\": \"uint96[]\"\n },\n {\n \"name\": \"totalStakeForQuorum\",\n \"type\": \"uint96[]\",\n \"internalType\": \"uint96[]\"\n }\n ]\n },\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createNewTask\",\n \"inputs\": [\n {\n \"name\": \"numberToBeSquared\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"quorumThresholdPercentage\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"delegation\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IDelegationManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"generator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getCheckSignaturesIndices\",\n \"inputs\": [\n {\n \"name\": \"registryCoordinator\",\n \"type\": \"address\",\n \"internalType\": \"contract IRegistryCoordinator\"\n },\n {\n \"name\": \"referenceBlockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"nonSignerOperatorIds\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct OperatorStateRetriever.CheckSignaturesIndices\",\n \"components\": [\n {\n \"name\": \"nonSignerQuorumBitmapIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"quorumApkIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"totalStakeIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"nonSignerStakeIndices\",\n \"type\": \"uint32[][]\",\n \"internalType\": \"uint32[][]\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOperatorState\",\n \"inputs\": [\n {\n \"name\": \"registryCoordinator\",\n \"type\": \"address\",\n \"internalType\": \"contract IRegistryCoordinator\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"blockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[][]\",\n \"internalType\": \"struct OperatorStateRetriever.Operator[][]\",\n \"components\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"stake\",\n \"type\": \"uint96\",\n \"internalType\": \"uint96\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOperatorState\",\n \"inputs\": [\n {\n \"name\": \"registryCoordinator\",\n \"type\": \"address\",\n \"internalType\": \"contract IRegistryCoordinator\"\n },\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"blockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"tuple[][]\",\n \"internalType\": \"struct OperatorStateRetriever.Operator[][]\",\n \"components\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"stake\",\n \"type\": \"uint96\",\n \"internalType\": \"uint96\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getQuorumBitmapsAtBlockNumber\",\n \"inputs\": [\n {\n \"name\": \"registryCoordinator\",\n \"type\": \"address\",\n \"internalType\": \"contract IRegistryCoordinator\"\n },\n {\n \"name\": \"operatorIds\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n },\n {\n \"name\": \"blockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getTaskResponseWindowBlock\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_pauserRegistry\",\n \"type\": \"address\",\n \"internalType\": \"contract IPauserRegistry\"\n },\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_aggregator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_generator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"latestTaskNum\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pauseAll\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [\n {\n \"name\": \"index\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pauserRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPauserRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"raiseAndResolveChallenge\",\n \"inputs\": [\n {\n \"name\": \"task\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IIncredibleSquaringTaskManager.Task\",\n \"components\": [\n {\n \"name\": \"numberToBeSquared\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"taskCreatedBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"quorumThresholdPercentage\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ]\n },\n {\n \"name\": \"taskResponse\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IIncredibleSquaringTaskManager.TaskResponse\",\n \"components\": [\n {\n \"name\": \"referenceTaskIndex\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"numberSquared\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"taskResponseMetadata\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IIncredibleSquaringTaskManager.TaskResponseMetadata\",\n \"components\": [\n {\n \"name\": \"taskResponsedBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"hashOfNonSigners\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"pubkeysOfNonSigningOperators\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct BN254.G1Point[]\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"registryCoordinator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IRegistryCoordinator\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"respondToTask\",\n \"inputs\": [\n {\n \"name\": \"task\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IIncredibleSquaringTaskManager.Task\",\n \"components\": [\n {\n \"name\": \"numberToBeSquared\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"taskCreatedBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"quorumThresholdPercentage\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ]\n },\n {\n \"name\": \"taskResponse\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IIncredibleSquaringTaskManager.TaskResponse\",\n \"components\": [\n {\n \"name\": \"referenceTaskIndex\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"numberSquared\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"nonSignerStakesAndSignature\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\n \"components\": [\n {\n \"name\": \"nonSignerQuorumBitmapIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"nonSignerPubkeys\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct BN254.G1Point[]\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"quorumApks\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct BN254.G1Point[]\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"apkG2\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G2Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n }\n ]\n },\n {\n \"name\": \"sigma\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"quorumApkIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"totalStakeIndices\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n },\n {\n \"name\": \"nonSignerStakeIndices\",\n \"type\": \"uint32[][]\",\n \"internalType\": \"uint32[][]\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPauserRegistry\",\n \"inputs\": [\n {\n \"name\": \"newPauserRegistry\",\n \"type\": \"address\",\n \"internalType\": \"contract IPauserRegistry\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setStaleStakesForbidden\",\n \"inputs\": [\n {\n \"name\": \"value\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"stakeRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IStakeRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"staleStakesForbidden\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"taskNumber\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"taskSuccesfullyChallenged\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"trySignatureAndApkVerification\",\n \"inputs\": [\n {\n \"name\": \"msgHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"apk\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"apkG2\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G2Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n }\n ]\n },\n {\n \"name\": \"sigma\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"pairingSuccessful\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"siganatureIsValid\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialized\",\n \"inputs\": [\n {\n \"name\": \"version\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"NewTaskCreated\",\n \"inputs\": [\n {\n \"name\": \"taskIndex\",\n \"type\": \"uint32\",\n \"indexed\": true,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"task\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IIncredibleSquaringTaskManager.Task\",\n \"components\": [\n {\n \"name\": \"numberToBeSquared\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"taskCreatedBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"quorumThresholdPercentage\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PauserRegistrySet\",\n \"inputs\": [\n {\n \"name\": \"pauserRegistry\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"contract IPauserRegistry\"\n },\n {\n \"name\": \"newPauserRegistry\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"contract IPauserRegistry\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"StaleStakesForbiddenUpdate\",\n \"inputs\": [\n {\n \"name\": \"value\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TaskChallengedSuccessfully\",\n \"inputs\": [\n {\n \"name\": \"taskIndex\",\n \"type\": \"uint32\",\n \"indexed\": true,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"challenger\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TaskChallengedUnsuccessfully\",\n \"inputs\": [\n {\n \"name\": \"taskIndex\",\n \"type\": \"uint32\",\n \"indexed\": true,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"challenger\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TaskCompleted\",\n \"inputs\": [\n {\n \"name\": \"taskIndex\",\n \"type\": \"uint32\",\n \"indexed\": true,\n \"internalType\": \"uint32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TaskResponded\",\n \"inputs\": [\n {\n \"name\": \"taskResponse\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IIncredibleSquaringTaskManager.TaskResponse\",\n \"components\": [\n {\n \"name\": \"referenceTaskIndex\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"numberSquared\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"taskResponseMetadata\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IIncredibleSquaringTaskManager.TaskResponseMetadata\",\n \"components\": [\n {\n \"name\": \"taskResponsedBlock\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"hashOfNonSigners\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }\n]\n```"] +#[allow(missing_docs)] +#[allow(non_camel_case_types, non_snake_case, clippy::style)] +pub mod IncredibleSquaringTaskManager { + use super::*; + use ::alloy_sol_types; + use serde::{Deserialize, Serialize}; + #[doc = r" The creation / init bytecode of the contract."] + #[doc = r""] + #[doc = r" ```text"] + #[doc = "0x6101206040523480156200001257600080fd5b5060405162005e4b38038062005e4b8339810160408190526200003591620001f7565b81806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b591906200023e565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013391906200023e565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b391906200023e565b6001600160a01b031660e052506097805460ff1916600117905563ffffffff16610100525062000265565b6001600160a01b0381168114620001f457600080fd5b50565b600080604083850312156200020b57600080fd5b82516200021881620001de565b602084015190925063ffffffff811681146200023357600080fd5b809150509250929050565b6000602082840312156200025157600080fd5b81516200025e81620001de565b9392505050565b60805160a05160c05160e05161010051615b54620002f76000396000818161027d0152818161059c015261195e0152600081816105650152612bf201526000818161041e0152818161224d0152612dd401526000818161044501528181612faa015261316c01526000818161049201528181610e0b015281816128dc01528181612a550152612c8f0152615b546000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80636b532e9e116101255780638da5cb5b116100ad578063f2fde38b1161007c578063f2fde38b14610587578063f5c9899d1461059a578063f63c5bab146105c0578063f8c8765e146105c8578063fabc1cbc146105db57600080fd5b80638da5cb5b14610521578063b98d090814610532578063cefdc1d41461053f578063df5cf7231461056057600080fd5b8063715018a6116100f4578063715018a6146104d557806372d18e8d146104dd5780637afa1eed146104eb578063886f1195146104fe5780638b00ce7c1461051157600080fd5b80636b532e9e146104675780636b92787e1461047a5780636d14a9871461048d5780636efb4636146104b457600080fd5b80634f739f74116101a85780635c155662116101775780635c155662146103ce5780635c975abb146103ee5780635decc3f5146103f65780635df4594614610419578063683048351461044057600080fd5b80634f739f7414610360578063595c6a67146103805780635ac86ab7146103885780635baec9a0146103bb57600080fd5b8063245a7bfc116101ef578063245a7bfc146102b45780632cb223d5146102df5780632d89f6fc1461030d5780633563b0d11461032d578063416c7e5e1461034d57600080fd5b806310d67a2f14610221578063136439dd14610236578063171f1d5b146102495780631ad4318914610278575b600080fd5b61023461022f3660046146c2565b6105ee565b005b6102346102443660046146df565b6106aa565b61025c610257366004614849565b6107e9565b6040805192151583529015156020830152015b60405180910390f35b61029f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161026f565b60cd546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161026f565b6102ff6102ed3660046148b7565b60cb6020526000908152604090205481565b60405190815260200161026f565b6102ff61031b3660046148b7565b60ca6020526000908152604090205481565b61034061033b3660046148d4565b610973565b60405161026f9190614a2f565b61023461035b366004614a57565b610e09565b61037361036e366004614abc565b610f7e565b60405161026f9190614bc0565b6102346116a6565b6103ab610396366004614c8a565b606654600160ff9092169190911b9081161490565b604051901515815260200161026f565b6102346103c9366004614f75565b61176d565b6103e16103dc366004614fe9565b611bec565b60405161026f9190615095565b6066546102ff565b6103ab6104043660046148b7565b60cc6020526000908152604090205460ff1681565b6102c77f000000000000000000000000000000000000000000000000000000000000000081565b6102c77f000000000000000000000000000000000000000000000000000000000000000081565b6102346104753660046150d9565b611db4565b61023461048836600461515f565b612386565b6102c77f000000000000000000000000000000000000000000000000000000000000000081565b6104c76104c23660046151ba565b612527565b60405161026f92919061527a565b610234613421565b60c95463ffffffff1661029f565b60ce546102c7906001600160a01b031681565b6065546102c7906001600160a01b031681565b60c95461029f9063ffffffff1681565b6033546001600160a01b03166102c7565b6097546103ab9060ff1681565b61055261054d3660046152c3565b613435565b60405161026f929190615305565b6102c77f000000000000000000000000000000000000000000000000000000000000000081565b6102346105953660046146c2565b6135c7565b7f000000000000000000000000000000000000000000000000000000000000000061029f565b61029f606481565b6102346105d6366004615326565b61363d565b6102346105e93660046146df565b61378e565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610641573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106659190615382565b6001600160a01b0316336001600160a01b03161461069e5760405162461bcd60e51b81526004016106959061539f565b60405180910390fd5b6106a7816138ea565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071691906153e9565b6107325760405162461bcd60e51b815260040161069590615406565b606654818116146107ab5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610695565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106108315761083161544e565b60200201518951600160200201518a602001516000600281106108565761085661544e565b60200201518b602001516001600281106108725761087261544e565b602090810291909101518c518d8301516040516108cf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6108f29190615464565b905061096561090b61090488846139e1565b8690613a72565b610913613b07565b61095b61094c85610946604080518082018252600080825260209182015281518083019092526001825260029082015290565b906139e1565b6109558c613bc7565b90613a72565b886201d4c0613c56565b909890975095505050505050565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d99190615382565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190615382565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa59190615382565b9050600086516001600160401b03811115610ac257610ac26146f8565b604051908082528060200260200182016040528015610af557816020015b6060815260200190600190039081610ae05790505b50905060005b8751811015610dfd576000888281518110610b1857610b1861544e565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa158015610b79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ba19190810190615486565b905080516001600160401b03811115610bbc57610bbc6146f8565b604051908082528060200260200182016040528015610c0757816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610bda5790505b50848481518110610c1a57610c1a61544e565b602002602001018190525060005b8151811015610de7576040518060600160405280876001600160a01b03166347b314e8858581518110610c5d57610c5d61544e565b60200260200101516040518263ffffffff1660e01b8152600401610c8391815260200190565b602060405180830381865afa158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc49190615382565b6001600160a01b03168152602001838381518110610ce457610ce461544e565b60200260200101518152602001896001600160a01b031663fa28c627858581518110610d1257610d1261544e565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d929190615516565b6001600160601b0316815250858581518110610db057610db061544e565b60200260200101518281518110610dc957610dc961544e565b60200260200101819052508080610ddf90615555565b915050610c28565b5050508080610df590615555565b915050610afb565b50979650505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8b9190615382565b6001600160a01b0316336001600160a01b031614610f375760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610695565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b610fa96040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d9190615382565b905061103a6040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e9061106a908b908990899060040161556e565b600060405180830381865afa158015611087573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110af91908101906155b5565b81526040516340e03a8160e11b81526001600160a01b038316906381c07502906110e1908b908b908b9060040161566c565b600060405180830381865afa1580156110fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112691908101906155b5565b6040820152856001600160401b03811115611143576111436146f8565b60405190808252806020026020018201604052801561117657816020015b60608152602001906001900390816111615790505b50606082015260005b60ff81168711156115b7576000856001600160401b038111156111a4576111a46146f8565b6040519080825280602002602001820160405280156111cd578160200160208202803683370190505b5083606001518360ff16815181106111e7576111e761544e565b602002602001018190525060005b868110156114b75760008c6001600160a01b03166304ec63518a8a858181106112205761122061544e565b905060200201358e8860000151868151811061123e5761123e61544e565b60200260200101516040518463ffffffff1660e01b815260040161127b9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bc9190615695565b9050806001600160c01b03166000036113635760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a401610695565b8a8a8560ff168181106113785761137861544e565b60016001600160c01b038516919093013560f81c1c821690910390506114a457856001600160a01b031663dd9846b98a8a858181106113b9576113b961544e565b905060200201358d8d8860ff168181106113d5576113d561544e565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f91906156be565b85606001518560ff16815181106114685761146861544e565b602002602001015184815181106114815761148161544e565b63ffffffff90921660209283029190910190910152826114a081615555565b9350505b50806114af81615555565b9150506111f5565b506000816001600160401b038111156114d2576114d26146f8565b6040519080825280602002602001820160405280156114fb578160200160208202803683370190505b50905060005b8281101561157c5784606001518460ff16815181106115225761152261544e565b6020026020010151818151811061153b5761153b61544e565b60200260200101518282815181106115555761155561544e565b63ffffffff909216602092830291909101909101528061157481615555565b915050611501565b508084606001518460ff16815181106115975761159761544e565b6020026020010181905250505080806115af906156db565b91505061117f565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190615382565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c9061164f908b908b908e906004016156fa565b600060405180830381865afa15801561166c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261169491908101906155b5565b60208301525098975050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171291906153e9565b61172e5760405162461bcd60e51b815260040161069590615406565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60cd546001600160a01b031633146117c75760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c65720000006044820152606401610695565b60006117d960408501602086016148b7565b90503660006117eb6040870187615724565b9092509050600061180260808801606089016148b7565b905060ca600061181560208901896148b7565b63ffffffff1663ffffffff1681526020019081526020016000205487604051602001611841919061576a565b60405160208183030381529060405280519060200120146118ca5760405162461bcd60e51b815260206004820152603d60248201527f737570706c696564207461736b20646f6573206e6f74206d617463682074686560448201527f206f6e65207265636f7264656420696e2074686520636f6e74726163740000006064820152608401610695565b600060cb816118dc60208a018a6148b7565b63ffffffff1663ffffffff16815260200190815260200160002054146119595760405162461bcd60e51b815260206004820152602c60248201527f41676772656761746f722068617320616c726561647920726573706f6e64656460448201526b20746f20746865207461736b60a01b6064820152608401610695565b6119837f00000000000000000000000000000000000000000000000000000000000000008561580c565b63ffffffff164363ffffffff1611156119f45760405162461bcd60e51b815260206004820152602d60248201527f41676772656761746f722068617320726573706f6e64656420746f207468652060448201526c7461736b20746f6f206c61746560981b6064820152608401610695565b600086604051602001611a07919061584e565b604051602081830303815290604052805190602001209050600080611a2f8387878a8c612527565b9150915060005b85811015611b2e578460ff1683602001518281518110611a5857611a5861544e565b6020026020010151611a6a919061585c565b6001600160601b0316606484600001518381518110611a8b57611a8b61544e565b60200260200101516001600160601b0316611aa6919061587f565b1015611b1c576040805162461bcd60e51b81526020600482015260248101919091527f5369676e61746f7269657320646f206e6f74206f776e206174206c656173742060448201527f7468726573686f6c642070657263656e74616765206f6620612071756f72756d6064820152608401610695565b80611b2681615555565b915050611a36565b5060408051808201825263ffffffff43168152602080820184905291519091611b5b918c91849101615896565b6040516020818303038152906040528051906020012060cb60008c6000016020810190611b8891906148b7565b63ffffffff1663ffffffff168152602001908152602001600020819055507f349c1ee60e4e8972ee9dba642c1774543d5c4136879b7f4caaf04bf81a487a2a8a82604051611bd7929190615896565b60405180910390a15050505050505050505050565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401611c1e9291906158c2565b600060405180830381865afa158015611c3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6391908101906155b5565b9050600084516001600160401b03811115611c8057611c806146f8565b604051908082528060200260200182016040528015611ca9578160200160208202803683370190505b50905060005b8551811015611daa57866001600160a01b03166304ec6351878381518110611cd957611cd961544e565b602002602001015187868581518110611cf457611cf461544e565b60200260200101516040518463ffffffff1660e01b8152600401611d319392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d729190615695565b6001600160c01b0316828281518110611d8d57611d8d61544e565b602090810291909101015280611da281615555565b915050611caf565b5095945050505050565b6000611dc360208501856148b7565b63ffffffff8116600090815260cb6020526040902054909150853590611e355760405162461bcd60e51b815260206004820152602160248201527f5461736b206861736e2774206265656e20726573706f6e64656420746f2079656044820152601d60fa1b6064820152608401610695565b8484604051602001611e48929190615916565b60408051601f19818403018152918152815160209283012063ffffffff8516600090815260cb90935291205414611ee75760405162461bcd60e51b815260206004820152603d60248201527f5461736b20726573706f6e736520646f6573206e6f74206d617463682074686560448201527f206f6e65207265636f7264656420696e2074686520636f6e74726163740000006064820152608401610695565b63ffffffff8216600090815260cc602052604090205460ff1615611f7f5760405162461bcd60e51b815260206004820152604360248201527f54686520726573706f6e736520746f2074686973207461736b2068617320616c60448201527f7265616479206265656e206368616c6c656e676564207375636365737366756c606482015262363c9760e91b608482015260a401610695565b6064611f8e60208601866148b7565b611f98919061580c565b63ffffffff164363ffffffff1611156120195760405162461bcd60e51b815260206004820152603760248201527f546865206368616c6c656e676520706572696f6420666f72207468697320746160448201527f736b2068617320616c726561647920657870697265642e0000000000000000006064820152608401610695565b6000612025828061587f565b905060208601358114600181900361207357604051339063ffffffff8616907ffd3e26beeb5967fc5a57a0446914eabc45b4aa474c67a51b4b5160cac60ddb0590600090a350505050612380565b600085516001600160401b0381111561208e5761208e6146f8565b6040519080825280602002602001820160405280156120b7578160200160208202803683370190505b50905060005b8651811015612129576120fa8782815181106120db576120db61544e565b6020026020010151805160009081526020918201519091526040902090565b82828151811061210c5761210c61544e565b60209081029190910101528061212181615555565b9150506120bd565b50600061213c60408b0160208c016148b7565b8260405160200161214e92919061594c565b604051602081830303815290604052805190602001209050876020013581146121f85760405162461bcd60e51b815260206004820152605060248201527f546865207075626b657973206f66206e6f6e2d7369676e696e67206f7065726160448201527f746f727320737570706c69656420627920746865206368616c6c656e6765722060648201526f30b932903737ba1031b7b93932b1ba1760811b608482015260a401610695565b600087516001600160401b03811115612213576122136146f8565b60405190808252806020026020018201604052801561223c578160200160208202803683370190505b50905060005b885181101561232f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e8bb9ae685838151811061228c5761228c61544e565b60200260200101516040518263ffffffff1660e01b81526004016122b291815260200190565b602060405180830381865afa1580156122cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f39190615382565b8282815181106123055761230561544e565b6001600160a01b03909216602092830291909101909101528061232781615555565b915050612242565b5063ffffffff8716600081815260cc6020526040808220805460ff19166001179055513392917fc20d1bb0f1623680306b83d4ff4bb99a2beb9d86d97832f3ca40fd13a29df1ec91a3505050505050505b50505050565b60ce546001600160a01b031633146123ea5760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b6064820152608401610695565b612421604051806080016040528060008152602001600063ffffffff16815260200160608152602001600063ffffffff1681525090565b84815263ffffffff438116602080840191909152908516606083015260408051601f850183900483028101830190915283815290849084908190840183828082843760009201919091525050505060408083019190915251612487908290602001615994565b60408051601f19818403018152828252805160209182012060c9805463ffffffff908116600090815260ca90945293909220555416907f1695b8d06ec800b4615e745cfb5bd00c1f2875615d42925c3b5afa543bb24c48906124ea908490615994565b60405180910390a260c9546125069063ffffffff16600161580c565b60c9805463ffffffff191663ffffffff929092169190911790555050505050565b604080518082019091526060808252602082015260008481036125a05760405162461bcd60e51b81526020600482015260376024820152600080516020615aff83398151915260448201527f7265733a20656d7074792071756f72756d20696e7075740000000000000000006064820152608401610695565b604083015151851480156125b8575060a08301515185145b80156125c8575060c08301515185145b80156125d8575060e08301515185145b6126425760405162461bcd60e51b81526020600482015260416024820152600080516020615aff83398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610695565b825151602084015151146126ba5760405162461bcd60e51b815260206004820152604460248201819052600080516020615aff833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610695565b4363ffffffff168463ffffffff16106127295760405162461bcd60e51b815260206004820152603c6024820152600080516020615aff83398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610695565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b0381111561276a5761276a6146f8565b604051908082528060200260200182016040528015612793578160200160208202803683370190505b506020820152866001600160401b038111156127b1576127b16146f8565b6040519080825280602002602001820160405280156127da578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b0381111561280e5761280e6146f8565b604051908082528060200260200182016040528015612837578160200160208202803683370190505b5081526020860151516001600160401b03811115612857576128576146f8565b604051908082528060200260200182016040528015612880578160200160208202803683370190505b50816020018190525060006129528a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015612929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294d9190615a16565b613e7a565b905060005b876020015151811015612bce5761297d886020015182815181106120db576120db61544e565b836020015182815181106129935761299361544e565b60209081029190910101528015612a535760208301516129b4600183615a33565b815181106129c4576129c461544e565b602002602001015160001c836020015182815181106129e5576129e561544e565b602002602001015160001c11612a53576040805162461bcd60e51b8152602060048201526024810191909152600080516020615aff83398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610695565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec635184602001518381518110612a9857612a9861544e565b60200260200101518b8b600001518581518110612ab757612ab761544e565b60200260200101516040518463ffffffff1660e01b8152600401612af49392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b359190615695565b6001600160c01b031683600001518281518110612b5457612b5461544e565b602002602001018181525050612bba610904612b8e8486600001518581518110612b8057612b8061544e565b602002602001015116613f0d565b8a602001518481518110612ba457612ba461544e565b6020026020010151613f3890919063ffffffff16565b945080612bc681615555565b915050612957565b5050612bd98361401b565b60975490935060ff16600081612bf0576000612c72565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c729190615a46565b905060005b8a8110156132f0578215612dd2578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f86818110612cce57612cce61544e565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615a46565b612d3c9190615a5f565b11612dd25760405162461bcd60e51b81526020600482015260666024820152600080516020615aff83398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610695565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d84818110612e1357612e1361544e565b9050013560f81c60f81b60f81c8c8c60a001518581518110612e3757612e3761544e565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015612e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb79190615a72565b6001600160401b031916612eda8a6040015183815181106120db576120db61544e565b67ffffffffffffffff191614612f765760405162461bcd60e51b81526020600482015260616024820152600080516020615aff83398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610695565b612fa689604001518281518110612f8f57612f8f61544e565b602002602001015187613a7290919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110612fe957612fe961544e565b9050013560f81c60f81b60f81c8c8c60c00151858151811061300d5761300d61544e565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015613069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308d9190615516565b856020015182815181106130a3576130a361544e565b6001600160601b039092166020928302919091018201528501518051829081106130cf576130cf61544e565b6020026020010151856000015182815181106130ed576130ed61544e565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a60200151518110156132db57613165866000015182815181106131375761313761544e565b60200260200101518f8f868181106131515761315161544e565b600192013560f81c9290921c811614919050565b156132c9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f868181106131ab576131ab61544e565b9050013560f81c60f81b60f81c8e896020015185815181106131cf576131cf61544e565b60200260200101518f60e0015188815181106131ed576131ed61544e565b602002602001015187815181106132065761320661544e565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa15801561326a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328e9190615516565b87518051859081106132a2576132a261544e565b602002602001018181516132b69190615a9d565b6001600160601b03169052506001909101905b806132d381615555565b915050613111565b505080806132e890615555565b915050612c77565b50505060008061330a8c868a606001518b608001516107e9565b915091508161337b5760405162461bcd60e51b81526020600482015260436024820152600080516020615aff83398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610695565b806133dc5760405162461bcd60e51b81526020600482015260396024820152600080516020615aff83398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610695565b505060008782602001516040516020016133f792919061594c565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6134296140b6565b6134336000614110565b565b60408051600180825281830190925260009160609183916020808301908036833701905050905084816000815181106134705761347061544e565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e906134ac90889086906004016158c2565b600060405180830381865afa1580156134c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134f191908101906155b5565b6000815181106135035761350361544e565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa15801561356f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135939190615695565b6001600160c01b0316905060006135a982614162565b9050816135b78a838a610973565b9550955050505050935093915050565b6135cf6140b6565b6001600160a01b0381166136345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610695565b6106a781614110565b600054610100900460ff161580801561365d5750600054600160ff909116105b806136775750303b158015613677575060005460ff166001145b6136da5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610695565b6000805460ff1916600117905580156136fd576000805461ff0019166101001790555b61370885600061422e565b61371184614110565b60cd80546001600160a01b038086166001600160a01b03199283161790925560ce8054928516929091169190911790558015613787576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138059190615382565b6001600160a01b0316336001600160a01b0316146138355760405162461bcd60e51b81526004016106959061539f565b6066541981196066541916146138b35760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610695565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107de565b6001600160a01b0381166139785760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610695565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526139fd6145d3565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080613a2c57fe5b5080613a6a5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610695565b505092915050565b6040805180820190915260008082526020820152613a8e6145f1565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080613ac957fe5b5080613a6a5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610695565b613b0f61460f565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080613bf7600080516020615adf83398151915286615464565b90505b613c0381614318565b9093509150600080516020615adf8339815191528283098303613c3c576040805180820190915290815260208101919091529392505050565b600080516020615adf833981519152600182089050613bfa565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613c88614634565b60005b6002811015613e4d576000613ca182600661587f565b9050848260028110613cb557613cb561544e565b60200201515183613cc7836000615a5f565b600c8110613cd757613cd761544e565b6020020152848260028110613cee57613cee61544e565b60200201516020015183826001613d059190615a5f565b600c8110613d1557613d1561544e565b6020020152838260028110613d2c57613d2c61544e565b6020020151515183613d3f836002615a5f565b600c8110613d4f57613d4f61544e565b6020020152838260028110613d6657613d6661544e565b6020020151516001602002015183613d7f836003615a5f565b600c8110613d8f57613d8f61544e565b6020020152838260028110613da657613da661544e565b602002015160200151600060028110613dc157613dc161544e565b602002015183613dd2836004615a5f565b600c8110613de257613de261544e565b6020020152838260028110613df957613df961544e565b602002015160200151600160028110613e1457613e1461544e565b602002015183613e25836005615a5f565b600c8110613e3557613e3561544e565b60200201525080613e4581615555565b915050613c8b565b50613e56614653565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b600080613e868461439a565b9050808360ff166001901b11613f045760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610695565b90505b92915050565b6000805b8215613f0757613f22600184615a33565b9092169180613f3081615abd565b915050613f11565b60408051808201909152600080825260208201526102008261ffff1610613f945760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610695565b8161ffff16600103613fa7575081613f07565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161061401057600161ffff871660ff83161c81169003613ff357613ff08484613a72565b93505b613ffd8384613a72565b92506201fffe600192831b169101613fc3565b509195945050505050565b6040805180820190915260008082526020820152815115801561404057506020820151155b1561405e575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020615adf83398151915284602001516140919190615464565b6140a990600080516020615adf833981519152615a33565b905292915050565b919050565b6033546001600160a01b031633146134335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610695565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060008061417084613f0d565b61ffff166001600160401b0381111561418b5761418b6146f8565b6040519080825280601f01601f1916602001820160405280156141b5576020820181803683370190505b5090506000805b8251821080156141cd575061010081105b15614224576001811b935085841615614214578060f81b8383815181106141f6576141f661544e565b60200101906001600160f81b031916908160001a9053508160010191505b61421d81615555565b90506141bc565b5090949350505050565b6065546001600160a01b031615801561424f57506001600160a01b03821615155b6142d15760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610695565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2614314826138ea565b5050565b60008080600080516020615adf8339815191526003600080516020615adf83398151915286600080516020615adf83398151915288890909089050600061438e827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615adf83398151915261452a565b91959194509092505050565b6000610100825111156144235760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610695565b815160000361443457506000919050565b6000808360008151811061444a5761444a61544e565b0160200151600160f89190911c81901b92505b8451811015614521578481815181106144785761447861544e565b0160200151600160f89190911c1b915082821161450d5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610695565b9181179161451a81615555565b905061445d565b50909392505050565b600080614535614653565b61453d614671565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061457a57fe5b50826145c85760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610695565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061462261468f565b815260200161462f61468f565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146106a757600080fd5b6000602082840312156146d457600080fd5b8135613f04816146ad565b6000602082840312156146f157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715614730576147306146f8565b60405290565b60405161010081016001600160401b0381118282101715614730576147306146f8565b604051601f8201601f191681016001600160401b0381118282101715614781576147816146f8565b604052919050565b60006040828403121561479b57600080fd5b6147a361470e565b9050813581526020820135602082015292915050565b600082601f8301126147ca57600080fd5b6147d261470e565b8060408401858111156147e457600080fd5b845b818110156147fe5780358452602093840193016147e6565b509095945050505050565b60006080828403121561481b57600080fd5b61482361470e565b905061482f83836147b9565b815261483e83604084016147b9565b602082015292915050565b600080600080610120858703121561486057600080fd5b843593506148718660208701614789565b92506148808660608701614809565b915061488f8660e08701614789565b905092959194509250565b63ffffffff811681146106a757600080fd5b80356140b18161489a565b6000602082840312156148c957600080fd5b8135613f048161489a565b6000806000606084860312156148e957600080fd5b83356148f4816146ad565b92506020848101356001600160401b038082111561491157600080fd5b818701915087601f83011261492557600080fd5b813581811115614937576149376146f8565b614949601f8201601f19168501614759565b9150808252888482850101111561495f57600080fd5b8084840185840137600084828401015250809450505050614982604085016148ac565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015614a21578385038a52825180518087529087019087870190845b81811015614a0c57835180516001600160a01b031684528a8101518b8501526040908101516001600160601b031690840152928901926060909201916001016149c8565b50509a87019a955050918501916001016149aa565b509298975050505050505050565b602081526000614a42602083018461498b565b9392505050565b80151581146106a757600080fd5b600060208284031215614a6957600080fd5b8135613f0481614a49565b60008083601f840112614a8657600080fd5b5081356001600160401b03811115614a9d57600080fd5b602083019150836020828501011115614ab557600080fd5b9250929050565b60008060008060008060808789031215614ad557600080fd5b8635614ae0816146ad565b95506020870135614af08161489a565b945060408701356001600160401b0380821115614b0c57600080fd5b614b188a838b01614a74565b90965094506060890135915080821115614b3157600080fd5b818901915089601f830112614b4557600080fd5b813581811115614b5457600080fd5b8a60208260051b8501011115614b6957600080fd5b6020830194508093505050509295509295509295565b600081518084526020808501945080840160005b83811015614bb557815163ffffffff1687529582019590820190600101614b93565b509495945050505050565b600060208083528351608082850152614bdc60a0850182614b7f565b905081850151601f1980868403016040870152614bf98383614b7f565b92506040870151915080868403016060870152614c168383614b7f565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b82811015614c6d5784878303018452614c5b828751614b7f565b95880195938801939150600101614c41565b509998505050505050505050565b60ff811681146106a757600080fd5b600060208284031215614c9c57600080fd5b8135613f0481614c7b565b600060808284031215614cb957600080fd5b50919050565b600060408284031215614cb957600080fd5b60006001600160401b03821115614cea57614cea6146f8565b5060051b60200190565b600082601f830112614d0557600080fd5b81356020614d1a614d1583614cd1565b614759565b82815260059290921b84018101918181019086841115614d3957600080fd5b8286015b84811015614d5d578035614d508161489a565b8352918301918301614d3d565b509695505050505050565b600082601f830112614d7957600080fd5b81356020614d89614d1583614cd1565b82815260069290921b84018101918181019086841115614da857600080fd5b8286015b84811015614d5d57614dbe8882614789565b835291830191604001614dac565b600082601f830112614ddd57600080fd5b81356020614ded614d1583614cd1565b82815260059290921b84018101918181019086841115614e0c57600080fd5b8286015b84811015614d5d5780356001600160401b03811115614e2f5760008081fd5b614e3d8986838b0101614cf4565b845250918301918301614e10565b60006101808284031215614e5e57600080fd5b614e66614736565b905081356001600160401b0380821115614e7f57600080fd5b614e8b85838601614cf4565b83526020840135915080821115614ea157600080fd5b614ead85838601614d68565b60208401526040840135915080821115614ec657600080fd5b614ed285838601614d68565b6040840152614ee48560608601614809565b6060840152614ef68560e08601614789565b6080840152610120840135915080821115614f1057600080fd5b614f1c85838601614cf4565b60a0840152610140840135915080821115614f3657600080fd5b614f4285838601614cf4565b60c0840152610160840135915080821115614f5c57600080fd5b50614f6984828501614dcc565b60e08301525092915050565b600080600060808486031215614f8a57600080fd5b83356001600160401b0380821115614fa157600080fd5b614fad87838801614ca7565b9450614fbc8760208801614cbf565b93506060860135915080821115614fd257600080fd5b50614fdf86828701614e4b565b9150509250925092565b600080600060608486031215614ffe57600080fd5b8335615009816146ad565b92506020848101356001600160401b0381111561502557600080fd5b8501601f8101871361503657600080fd5b8035615044614d1582614cd1565b81815260059190911b8201830190838101908983111561506357600080fd5b928401925b8284101561508157833582529284019290840190615068565b8096505050505050614982604085016148ac565b6020808252825182820181905260009190848201906040850190845b818110156150cd578351835292840192918401916001016150b1565b50909695505050505050565b60008060008060c085870312156150ef57600080fd5b84356001600160401b038082111561510657600080fd5b61511288838901614ca7565b95506151218860208901614cbf565b94506151308860608901614cbf565b935060a087013591508082111561514657600080fd5b5061515387828801614d68565b91505092959194509250565b6000806000806060858703121561517557600080fd5b8435935060208501356151878161489a565b925060408501356001600160401b038111156151a257600080fd5b6151ae87828801614a74565b95989497509550505050565b6000806000806000608086880312156151d257600080fd5b8535945060208601356001600160401b03808211156151f057600080fd5b6151fc89838a01614a74565b9096509450604088013591506152118261489a565b9092506060870135908082111561522757600080fd5b5061523488828901614e4b565b9150509295509295909350565b600081518084526020808501945080840160005b83811015614bb55781516001600160601b031687529582019590820190600101615255565b60408152600083516040808401526152956080840182615241565b90506020850151603f198483030160608501526152b28282615241565b925050508260208301529392505050565b6000806000606084860312156152d857600080fd5b83356152e3816146ad565b92506020840135915060408401356152fa8161489a565b809150509250925092565b82815260406020820152600061531e604083018461498b565b949350505050565b6000806000806080858703121561533c57600080fd5b8435615347816146ad565b93506020850135615357816146ad565b92506040850135615367816146ad565b91506060850135615377816146ad565b939692955090935050565b60006020828403121561539457600080fd5b8151613f04816146ad565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156153fb57600080fd5b8151613f0481614a49565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261548157634e487b7160e01b600052601260045260246000fd5b500690565b6000602080838503121561549957600080fd5b82516001600160401b038111156154af57600080fd5b8301601f810185136154c057600080fd5b80516154ce614d1582614cd1565b81815260059190911b820183019083810190878311156154ed57600080fd5b928401925b8284101561550b578351825292840192908401906154f2565b979650505050505050565b60006020828403121561552857600080fd5b81516001600160601b0381168114613f0457600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016155675761556761553f565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b0383111561559b57600080fd5b8260051b8085606085013791909101606001949350505050565b600060208083850312156155c857600080fd5b82516001600160401b038111156155de57600080fd5b8301601f810185136155ef57600080fd5b80516155fd614d1582614cd1565b81815260059190911b8201830190838101908783111561561c57600080fd5b928401925b8284101561550b5783516156348161489a565b82529284019290840190615621565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff8416815260406020820152600061568c604083018486615643565b95945050505050565b6000602082840312156156a757600080fd5b81516001600160c01b0381168114613f0457600080fd5b6000602082840312156156d057600080fd5b8151613f048161489a565b600060ff821660ff81036156f1576156f161553f565b60010192915050565b60408152600061570e604083018587615643565b905063ffffffff83166020830152949350505050565b6000808335601e1984360301811261573b57600080fd5b8301803591506001600160401b0382111561575557600080fd5b602001915036819003821315614ab557600080fd5b6020815281356020820152600060208301356157858161489a565b63ffffffff81166040840152506040830135601e198436030181126157a957600080fd5b83016020810190356001600160401b038111156157c557600080fd5b8036038213156157d457600080fd5b608060608501526157e960a085018284615643565b9150506157f8606085016148ac565b63ffffffff81166080850152509392505050565b63ffffffff8181168382160190808211156158295761582961553f565b5092915050565b803561583b8161489a565b63ffffffff168252602090810135910152565b60408101613f078284615830565b6001600160601b03818116838216028082169190828114613a6a57613a6a61553f565b8082028115828204841417613f0757613f0761553f565b608081016158a48285615830565b63ffffffff8351166040830152602083015160608301529392505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b81811015615909578451835293830193918301916001016158ed565b5090979650505050505050565b608081016159248285615830565b823561592f8161489a565b63ffffffff16604083015260209290920135606090910152919050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b838110156159875781518552938201939082019060010161596b565b5092979650505050505050565b6000602080835283518184015263ffffffff8185015116604084015260408401516080606085015280518060a086015260005b818110156159e35782810184015186820160c0015283016159c7565b50600085820160c00152606086015163ffffffff811660808701529250601f01601f19169390930160c001949350505050565b600060208284031215615a2857600080fd5b8151613f0481614c7b565b81810381811115613f0757613f0761553f565b600060208284031215615a5857600080fd5b5051919050565b80820180821115613f0757613f0761553f565b600060208284031215615a8457600080fd5b815167ffffffffffffffff1981168114613f0457600080fd5b6001600160601b038281168282160390808211156158295761582961553f565b600061ffff808316818103615ad457615ad461553f565b600101939250505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220f9169804370da5b04ee262342505bca83f8241d9d4b0816633b1be3512165f1d64736f6c63430008140033"] + #[doc = r" ```"] + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(b"a\x01 `@R4\x80\x15b\0\0\x12W`\0\x80\xfd[P`@Qb\0^K8\x03\x80b\0^K\x839\x81\x01`@\x81\x90Rb\0\05\x91b\0\x01\xf7V[\x81\x80`\x01`\x01`\xa0\x1b\x03\x16`\x80\x81`\x01`\x01`\xa0\x1b\x03\x16\x81RPP\x80`\x01`\x01`\xa0\x1b\x03\x16ch0H5`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15b\0\0\x8fW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90b\0\0\xb5\x91\x90b\0\x02>V[`\x01`\x01`\xa0\x1b\x03\x16`\xa0\x81`\x01`\x01`\xa0\x1b\x03\x16\x81RPP\x80`\x01`\x01`\xa0\x1b\x03\x16c]\xf4YF`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15b\0\x01\rW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90b\0\x013\x91\x90b\0\x02>V[`\x01`\x01`\xa0\x1b\x03\x16`\xc0\x81`\x01`\x01`\xa0\x1b\x03\x16\x81RPP`\xa0Q`\x01`\x01`\xa0\x1b\x03\x16c\xdf\\\xf7#`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15b\0\x01\x8dW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90b\0\x01\xb3\x91\x90b\0\x02>V[`\x01`\x01`\xa0\x1b\x03\x16`\xe0RP`\x97\x80T`\xff\x19\x16`\x01\x17\x90Uc\xff\xff\xff\xff\x16a\x01\0RPb\0\x02eV[`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14b\0\x01\xf4W`\0\x80\xfd[PV[`\0\x80`@\x83\x85\x03\x12\x15b\0\x02\x0bW`\0\x80\xfd[\x82Qb\0\x02\x18\x81b\0\x01\xdeV[` \x84\x01Q\x90\x92Pc\xff\xff\xff\xff\x81\x16\x81\x14b\0\x023W`\0\x80\xfd[\x80\x91PP\x92P\x92\x90PV[`\0` \x82\x84\x03\x12\x15b\0\x02QW`\0\x80\xfd[\x81Qb\0\x02^\x81b\0\x01\xdeV[\x93\x92PPPV[`\x80Q`\xa0Q`\xc0Q`\xe0Qa\x01\0Qa[Tb\0\x02\xf7`\09`\0\x81\x81a\x02}\x01R\x81\x81a\x05\x9c\x01Ra\x19^\x01R`\0\x81\x81a\x05e\x01Ra+\xf2\x01R`\0\x81\x81a\x04\x1e\x01R\x81\x81a\"M\x01Ra-\xd4\x01R`\0\x81\x81a\x04E\x01R\x81\x81a/\xaa\x01Ra1l\x01R`\0\x81\x81a\x04\x92\x01R\x81\x81a\x0e\x0b\x01R\x81\x81a(\xdc\x01R\x81\x81a*U\x01Ra,\x8f\x01Ra[T`\0\xf3\xfe`\x80`@R4\x80\x15a\0\x10W`\0\x80\xfd[P`\x046\x10a\x02\x1cW`\05`\xe0\x1c\x80ckS.\x9e\x11a\x01%W\x80c\x8d\xa5\xcb[\x11a\0\xadW\x80c\xf2\xfd\xe3\x8b\x11a\0|W\x80c\xf2\xfd\xe3\x8b\x14a\x05\x87W\x80c\xf5\xc9\x89\x9d\x14a\x05\x9aW\x80c\xf6<[\xab\x14a\x05\xc0W\x80c\xf8\xc8v^\x14a\x05\xc8W\x80c\xfa\xbc\x1c\xbc\x14a\x05\xdbW`\0\x80\xfd[\x80c\x8d\xa5\xcb[\x14a\x05!W\x80c\xb9\x8d\t\x08\x14a\x052W\x80c\xce\xfd\xc1\xd4\x14a\x05?W\x80c\xdf\\\xf7#\x14a\x05`W`\0\x80\xfd[\x80cqP\x18\xa6\x11a\0\xf4W\x80cqP\x18\xa6\x14a\x04\xd5W\x80cr\xd1\x8e\x8d\x14a\x04\xddW\x80cz\xfa\x1e\xed\x14a\x04\xebW\x80c\x88o\x11\x95\x14a\x04\xfeW\x80c\x8b\0\xce|\x14a\x05\x11W`\0\x80\xfd[\x80ckS.\x9e\x14a\x04gW\x80ck\x92x~\x14a\x04zW\x80cm\x14\xa9\x87\x14a\x04\x8dW\x80cn\xfbF6\x14a\x04\xb4W`\0\x80\xfd[\x80cOs\x9ft\x11a\x01\xa8W\x80c\\\x15Vb\x11a\x01wW\x80c\\\x15Vb\x14a\x03\xceW\x80c\\\x97Z\xbb\x14a\x03\xeeW\x80c]\xec\xc3\xf5\x14a\x03\xf6W\x80c]\xf4YF\x14a\x04\x19W\x80ch0H5\x14a\x04@W`\0\x80\xfd[\x80cOs\x9ft\x14a\x03`W\x80cY\\jg\x14a\x03\x80W\x80cZ\xc8j\xb7\x14a\x03\x88W\x80c[\xae\xc9\xa0\x14a\x03\xbbW`\0\x80\xfd[\x80c$Z{\xfc\x11a\x01\xefW\x80c$Z{\xfc\x14a\x02\xb4W\x80c,\xb2#\xd5\x14a\x02\xdfW\x80c-\x89\xf6\xfc\x14a\x03\rW\x80c5c\xb0\xd1\x14a\x03-W\x80cAl~^\x14a\x03MW`\0\x80\xfd[\x80c\x10\xd6z/\x14a\x02!W\x80c\x13d9\xdd\x14a\x026W\x80c\x17\x1f\x1d[\x14a\x02IW\x80c\x1a\xd41\x89\x14a\x02xW[`\0\x80\xfd[a\x024a\x02/6`\x04aF\xc2V[a\x05\xeeV[\0[a\x024a\x02D6`\x04aF\xdfV[a\x06\xaaV[a\x02\\a\x02W6`\x04aHIV[a\x07\xe9V[`@\x80Q\x92\x15\x15\x83R\x90\x15\x15` \x83\x01R\x01[`@Q\x80\x91\x03\x90\xf3[a\x02\x9f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Qc\xff\xff\xff\xff\x90\x91\x16\x81R` \x01a\x02oV[`\xcdTa\x02\xc7\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01a\x02oV[a\x02\xffa\x02\xed6`\x04aH\xb7V[`\xcb` R`\0\x90\x81R`@\x90 T\x81V[`@Q\x90\x81R` \x01a\x02oV[a\x02\xffa\x03\x1b6`\x04aH\xb7V[`\xca` R`\0\x90\x81R`@\x90 T\x81V[a\x03@a\x03;6`\x04aH\xd4V[a\tsV[`@Qa\x02o\x91\x90aJ/V[a\x024a\x03[6`\x04aJWV[a\x0e\tV[a\x03sa\x03n6`\x04aJ\xbcV[a\x0f~V[`@Qa\x02o\x91\x90aK\xc0V[a\x024a\x16\xa6V[a\x03\xaba\x03\x966`\x04aL\x8aV[`fT`\x01`\xff\x90\x92\x16\x91\x90\x91\x1b\x90\x81\x16\x14\x90V[`@Q\x90\x15\x15\x81R` \x01a\x02oV[a\x024a\x03\xc96`\x04aOuV[a\x17mV[a\x03\xe1a\x03\xdc6`\x04aO\xe9V[a\x1b\xecV[`@Qa\x02o\x91\x90aP\x95V[`fTa\x02\xffV[a\x03\xaba\x04\x046`\x04aH\xb7V[`\xcc` R`\0\x90\x81R`@\x90 T`\xff\x16\x81V[a\x02\xc7\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x02\xc7\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x024a\x04u6`\x04aP\xd9V[a\x1d\xb4V[a\x024a\x04\x886`\x04aQ_V[a#\x86V[a\x02\xc7\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x04\xc7a\x04\xc26`\x04aQ\xbaV[a%'V[`@Qa\x02o\x92\x91\x90aRzV[a\x024a4!V[`\xc9Tc\xff\xff\xff\xff\x16a\x02\x9fV[`\xceTa\x02\xc7\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`eTa\x02\xc7\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`\xc9Ta\x02\x9f\x90c\xff\xff\xff\xff\x16\x81V[`3T`\x01`\x01`\xa0\x1b\x03\x16a\x02\xc7V[`\x97Ta\x03\xab\x90`\xff\x16\x81V[a\x05Ra\x05M6`\x04aR\xc3V[a45V[`@Qa\x02o\x92\x91\x90aS\x05V[a\x02\xc7\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x024a\x05\x956`\x04aF\xc2V[a5\xc7V[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x02\x9fV[a\x02\x9f`d\x81V[a\x024a\x05\xd66`\x04aS&V[a6=V[a\x024a\x05\xe96`\x04aF\xdfV[a7\x8eV[`e`\0\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xa0\x1b\x03\x16`\x01`\x01`\xa0\x1b\x03\x16c\xea\xb6mz`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x06AW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06e\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\x06\x9eW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aS\x9fV[`@Q\x80\x91\x03\x90\xfd[a\x06\xa7\x81a8\xeaV[PV[`eT`@Qc#}\xfbG`\xe1\x1b\x81R3`\x04\x82\x01R`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x90cF\xfb\xf6\x8e\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x06\xf2W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\x16\x91\x90aS\xe9V[a\x072W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aT\x06V[`fT\x81\x81\x16\x14a\x07\xabW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.pause: invalid attempt `D\x82\x01R\x7fto unpause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`f\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01[`@Q\x80\x91\x03\x90\xa2PV[`\0\x80`\0\x7f0dNr\xe11\xa0)\xb8PE\xb6\x81\x81X](3\xe8Hy\xb9p\x91C\xe1\xf5\x93\xf0\0\0\x01\x87\x87`\0\x01Q\x88` \x01Q\x88`\0\x01Q`\0`\x02\x81\x10a\x081Wa\x081aTNV[` \x02\x01Q\x89Q`\x01` \x02\x01Q\x8a` \x01Q`\0`\x02\x81\x10a\x08VWa\x08VaTNV[` \x02\x01Q\x8b` \x01Q`\x01`\x02\x81\x10a\x08rWa\x08raTNV[` \x90\x81\x02\x91\x90\x91\x01Q\x8cQ\x8d\x83\x01Q`@Qa\x08\xcf\x9a\x99\x98\x97\x96\x95\x94\x01\x98\x89R` \x89\x01\x97\x90\x97R`@\x88\x01\x95\x90\x95R``\x87\x01\x93\x90\x93R`\x80\x86\x01\x91\x90\x91R`\xa0\x85\x01R`\xc0\x84\x01R`\xe0\x83\x01Ra\x01\0\x82\x01Ra\x01 \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `\0\x1ca\x08\xf2\x91\x90aTdV[\x90Pa\tea\t\x0ba\t\x04\x88\x84a9\xe1V[\x86\x90a:rV[a\t\x13a;\x07V[a\t[a\tL\x85a\tF`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x90a9\xe1V[a\tU\x8ca;\xc7V[\x90a:rV[\x88b\x01\xd4\xc0a=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xd9\x91\x90aS\x82V[\x90P`\0\x85`\x01`\x01`\xa0\x1b\x03\x16c\x9e\x99#\xc2`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\n\x1bW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n?\x91\x90aS\x82V[\x90P`\0\x86`\x01`\x01`\xa0\x1b\x03\x16c]\xf4YF`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\n\x81W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xa5\x91\x90aS\x82V[\x90P`\0\x86Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\n\xc2Wa\n\xc2aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\n\xf5W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\n\xe0W\x90P[P\x90P`\0[\x87Q\x81\x10\x15a\r\xfdW`\0\x88\x82\x81Q\x81\x10a\x0b\x18Wa\x0b\x18aTNV[\x01` \x01Q`@Qc\x89\x02bE`\xe0\x1b\x81R`\xf8\x91\x90\x91\x1c`\x04\x82\x01\x81\x90Rc\xff\xff\xff\xff\x8a\x16`$\x83\x01R\x91P`\0\x90`\x01`\x01`\xa0\x1b\x03\x87\x16\x90c\x89\x02bE\x90`D\x01`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0byW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x0b\xa1\x91\x90\x81\x01\x90aT\x86V[\x90P\x80Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\x0b\xbcWa\x0b\xbcaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0c\x07W\x81` \x01[`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x80\x83\x01\x82\x90R\x92\x82\x01R\x82R`\0\x19\x90\x92\x01\x91\x01\x81a\x0b\xdaW\x90P[P\x84\x84\x81Q\x81\x10a\x0c\x1aWa\x0c\x1aaTNV[` \x02` \x01\x01\x81\x90RP`\0[\x81Q\x81\x10\x15a\r\xe7W`@Q\x80``\x01`@R\x80\x87`\x01`\x01`\xa0\x1b\x03\x16cG\xb3\x14\xe8\x85\x85\x81Q\x81\x10a\x0c]Wa\x0c]aTNV[` \x02` \x01\x01Q`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x0c\x83\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0c\xa0W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0c\xc4\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x16\x81R` \x01\x83\x83\x81Q\x81\x10a\x0c\xe4Wa\x0c\xe4aTNV[` \x02` \x01\x01Q\x81R` \x01\x89`\x01`\x01`\xa0\x1b\x03\x16c\xfa(\xc6'\x85\x85\x81Q\x81\x10a\r\x12Wa\r\x12aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x84\x90\x1b\x16\x81R`\x04\x81\x01\x91\x90\x91R`\xff\x88\x16`$\x82\x01Rc\xff\xff\xff\xff\x8f\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\rnW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r\x92\x91\x90aU\x16V[`\x01`\x01``\x1b\x03\x16\x81RP\x85\x85\x81Q\x81\x10a\r\xb0Wa\r\xb0aTNV[` \x02` \x01\x01Q\x82\x81Q\x81\x10a\r\xc9Wa\r\xc9aTNV[` \x02` \x01\x01\x81\x90RP\x80\x80a\r\xdf\x90aUUV[\x91PPa\x0c(V[PPP\x80\x80a\r\xf5\x90aUUV[\x91PPa\n\xfbV[P\x97\x96PPPPPPPV[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\x8d\xa5\xcb[`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0egW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0e\x8b\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\x0f7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\\`$\x82\x01R\x7fBLSSignatureChecker.onlyCoordina`D\x82\x01R\x7ftorOwner: caller is not the owne`d\x82\x01R\x7fr of the registryCoordinator\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x06\x95V[`\x97\x80T`\xff\x19\x16\x82\x15\x15\x90\x81\x17\x90\x91U`@Q\x90\x81R\x7f@\xe4\xed\x88\n)\xe0\xf6\xdd\xce0tW\xfbu\xcd\xdfO\xee\xf7\xd3\xec\xb00\x1b\xfd\xf4\x97j\x0e-\xfc\x90` \x01`@Q\x80\x91\x03\x90\xa1PV[a\x0f\xa9`@Q\x80`\x80\x01`@R\x80``\x81R` \x01``\x81R` \x01``\x81R` \x01``\x81RP\x90V[`\0\x87`\x01`\x01`\xa0\x1b\x03\x16ch0H5`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0f\xe9W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\r\x91\x90aS\x82V[\x90Pa\x10:`@Q\x80`\x80\x01`@R\x80``\x81R` \x01``\x81R` \x01``\x81R` \x01``\x81RP\x90V[`@Qca\xc8\xa1/`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x8a\x16\x90c\xc3\x91B^\x90a\x10j\x90\x8b\x90\x89\x90\x89\x90`\x04\x01aUnV[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x10\x87W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x10\xaf\x91\x90\x81\x01\x90aU\xb5V[\x81R`@Qc@\xe0:\x81`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x83\x16\x90c\x81\xc0u\x02\x90a\x10\xe1\x90\x8b\x90\x8b\x90\x8b\x90`\x04\x01aVlV[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x10\xfeW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x11&\x91\x90\x81\x01\x90aU\xb5V[`@\x82\x01R\x85`\x01`\x01`@\x1b\x03\x81\x11\x15a\x11CWa\x11CaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x11vW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x11aW\x90P[P``\x82\x01R`\0[`\xff\x81\x16\x87\x11\x15a\x15\xb7W`\0\x85`\x01`\x01`@\x1b\x03\x81\x11\x15a\x11\xa4Wa\x11\xa4aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x11\xcdW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x83``\x01Q\x83`\xff\x16\x81Q\x81\x10a\x11\xe7Wa\x11\xe7aTNV[` \x02` \x01\x01\x81\x90RP`\0[\x86\x81\x10\x15a\x14\xb7W`\0\x8c`\x01`\x01`\xa0\x1b\x03\x16c\x04\xeccQ\x8a\x8a\x85\x81\x81\x10a\x12 Wa\x12 aTNV[\x90P` \x02\x015\x8e\x88`\0\x01Q\x86\x81Q\x81\x10a\x12>Wa\x12>aTNV[` \x02` \x01\x01Q`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x12{\x93\x92\x91\x90\x92\x83Rc\xff\xff\xff\xff\x91\x82\x16` \x84\x01R\x16`@\x82\x01R``\x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x12\x98W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xbc\x91\x90aV\x95V[\x90P\x80`\x01`\x01`\xc0\x1b\x03\x16`\0\x03a\x13cW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\\`$\x82\x01R\x7fOperatorStateRetriever.getCheckS`D\x82\x01R\x7fignaturesIndices: operator must `d\x82\x01R\x7fbe registered at blocknumber\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x8a\x8a\x85`\xff\x16\x81\x81\x10a\x13xWa\x13xaTNV[`\x01`\x01`\x01`\xc0\x1b\x03\x85\x16\x91\x90\x93\x015`\xf8\x1c\x1c\x82\x16\x90\x91\x03\x90Pa\x14\xa4W\x85`\x01`\x01`\xa0\x1b\x03\x16c\xdd\x98F\xb9\x8a\x8a\x85\x81\x81\x10a\x13\xb9Wa\x13\xb9aTNV[\x90P` \x02\x015\x8d\x8d\x88`\xff\x16\x81\x81\x10a\x13\xd5Wa\x13\xd5aTNV[`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x87\x90\x1b\x16\x81R`\x04\x81\x01\x94\x90\x94R\x91\x90\x91\x015`\xf8\x1c`$\x83\x01RPc\xff\xff\xff\xff\x8f\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x14+W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14O\x91\x90aV\xbeV[\x85``\x01Q\x85`\xff\x16\x81Q\x81\x10a\x14hWa\x14haTNV[` \x02` \x01\x01Q\x84\x81Q\x81\x10a\x14\x81Wa\x14\x81aTNV[c\xff\xff\xff\xff\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x82a\x14\xa0\x81aUUV[\x93PP[P\x80a\x14\xaf\x81aUUV[\x91PPa\x11\xf5V[P`\0\x81`\x01`\x01`@\x1b\x03\x81\x11\x15a\x14\xd2Wa\x14\xd2aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x14\xfbW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x15|W\x84``\x01Q\x84`\xff\x16\x81Q\x81\x10a\x15\"Wa\x15\"aTNV[` \x02` \x01\x01Q\x81\x81Q\x81\x10a\x15;Wa\x15;aTNV[` \x02` \x01\x01Q\x82\x82\x81Q\x81\x10a\x15UWa\x15UaTNV[c\xff\xff\xff\xff\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x80a\x15t\x81aUUV[\x91PPa\x15\x01V[P\x80\x84``\x01Q\x84`\xff\x16\x81Q\x81\x10a\x15\x97Wa\x15\x97aTNV[` \x02` \x01\x01\x81\x90RPPP\x80\x80a\x15\xaf\x90aV\xdbV[\x91PPa\x11\x7fV[P`\0\x89`\x01`\x01`\xa0\x1b\x03\x16c]\xf4YF`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x15\xf8W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16\x1c\x91\x90aS\x82V[`@Qc5IR\xa3`\xe2\x1b\x81R\x90\x91P`\x01`\x01`\xa0\x1b\x03\x82\x16\x90c\xd5%J\x8c\x90a\x16O\x90\x8b\x90\x8b\x90\x8e\x90`\x04\x01aV\xfaV[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x16lW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x16\x94\x91\x90\x81\x01\x90aU\xb5V[` \x83\x01RP\x98\x97PPPPPPPPV[`eT`@Qc#}\xfbG`\xe1\x1b\x81R3`\x04\x82\x01R`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x90cF\xfb\xf6\x8e\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x16\xeeW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\x12\x91\x90aS\xe9V[a\x17.W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aT\x06V[`\0\x19`f\x81\x90U`@Q\x90\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2V[`\xcdT`\x01`\x01`\xa0\x1b\x03\x163\x14a\x17\xc7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1d`$\x82\x01R\x7fAggregator must be the caller\0\0\0`D\x82\x01R`d\x01a\x06\x95V[`\0a\x17\xd9`@\x85\x01` \x86\x01aH\xb7V[\x90P6`\0a\x17\xeb`@\x87\x01\x87aW$V[\x90\x92P\x90P`\0a\x18\x02`\x80\x88\x01``\x89\x01aH\xb7V[\x90P`\xca`\0a\x18\x15` \x89\x01\x89aH\xb7V[c\xff\xff\xff\xff\x16c\xff\xff\xff\xff\x16\x81R` \x01\x90\x81R` \x01`\0 T\x87`@Q` \x01a\x18A\x91\x90aWjV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x14a\x18\xcaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`=`$\x82\x01R\x7fsupplied task does not match the`D\x82\x01R\x7f one recorded in the contract\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`\0`\xcb\x81a\x18\xdc` \x8a\x01\x8aaH\xb7V[c\xff\xff\xff\xff\x16c\xff\xff\xff\xff\x16\x81R` \x01\x90\x81R` \x01`\0 T\x14a\x19YW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7fAggregator has already responded`D\x82\x01Rk to the task`\xa0\x1b`d\x82\x01R`\x84\x01a\x06\x95V[a\x19\x83\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85aX\x0cV[c\xff\xff\xff\xff\x16Cc\xff\xff\xff\xff\x16\x11\x15a\x19\xf4W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7fAggregator has responded to the `D\x82\x01Rltask too late`\x98\x1b`d\x82\x01R`\x84\x01a\x06\x95V[`\0\x86`@Q` \x01a\x1a\x07\x91\x90aXNV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\0\x80a\x1a/\x83\x87\x87\x8a\x8ca%'V[\x91P\x91P`\0[\x85\x81\x10\x15a\x1b.W\x84`\xff\x16\x83` \x01Q\x82\x81Q\x81\x10a\x1aXWa\x1aXaTNV[` \x02` \x01\x01Qa\x1aj\x91\x90aX\\V[`\x01`\x01``\x1b\x03\x16`d\x84`\0\x01Q\x83\x81Q\x81\x10a\x1a\x8bWa\x1a\x8baTNV[` \x02` \x01\x01Q`\x01`\x01``\x1b\x03\x16a\x1a\xa6\x91\x90aX\x7fV[\x10\x15a\x1b\x1cW`@\x80QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`$\x81\x01\x91\x90\x91R\x7fSignatories do not own at least `D\x82\x01R\x7fthreshold percentage of a quorum`d\x82\x01R`\x84\x01a\x06\x95V[\x80a\x1b&\x81aUUV[\x91PPa\x1a6V[P`@\x80Q\x80\x82\x01\x82Rc\xff\xff\xff\xffC\x16\x81R` \x80\x82\x01\x84\x90R\x91Q\x90\x91a\x1b[\x91\x8c\x91\x84\x91\x01aX\x96V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `\xcb`\0\x8c`\0\x01` \x81\x01\x90a\x1b\x88\x91\x90aH\xb7V[c\xff\xff\xff\xff\x16c\xff\xff\xff\xff\x16\x81R` \x01\x90\x81R` \x01`\0 \x81\x90UP\x7f4\x9c\x1e\xe6\x0eN\x89r\xee\x9d\xbad,\x17tT=\\A6\x87\x9b\x7fL\xaa\xf0K\xf8\x1aHz*\x8a\x82`@Qa\x1b\xd7\x92\x91\x90aX\x96V[`@Q\x80\x91\x03\x90\xa1PPPPPPPPPPPV[```\0\x84`\x01`\x01`\xa0\x1b\x03\x16c\xc3\x91B^\x84\x86`@Q\x83c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x1c\x1e\x92\x91\x90aX\xc2V[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x1c;W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x1cc\x91\x90\x81\x01\x90aU\xb5V[\x90P`\0\x84Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\x1c\x80Wa\x1c\x80aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1c\xa9W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x85Q\x81\x10\x15a\x1d\xaaW\x86`\x01`\x01`\xa0\x1b\x03\x16c\x04\xeccQ\x87\x83\x81Q\x81\x10a\x1c\xd9Wa\x1c\xd9aTNV[` \x02` \x01\x01Q\x87\x86\x85\x81Q\x81\x10a\x1c\xf4Wa\x1c\xf4aTNV[` \x02` \x01\x01Q`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x1d1\x93\x92\x91\x90\x92\x83Rc\xff\xff\xff\xff\x91\x82\x16` \x84\x01R\x16`@\x82\x01R``\x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x1dNW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1dr\x91\x90aV\x95V[`\x01`\x01`\xc0\x1b\x03\x16\x82\x82\x81Q\x81\x10a\x1d\x8dWa\x1d\x8daTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R\x80a\x1d\xa2\x81aUUV[\x91PPa\x1c\xafV[P\x95\x94PPPPPV[`\0a\x1d\xc3` \x85\x01\x85aH\xb7V[c\xff\xff\xff\xff\x81\x16`\0\x90\x81R`\xcb` R`@\x90 T\x90\x91P\x855\x90a\x1e5W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7fTask hasn't been responded to ye`D\x82\x01R`\x1d`\xfa\x1b`d\x82\x01R`\x84\x01a\x06\x95V[\x84\x84`@Q` \x01a\x1eH\x92\x91\x90aY\x16V[`@\x80Q`\x1f\x19\x81\x84\x03\x01\x81R\x91\x81R\x81Q` \x92\x83\x01 c\xff\xff\xff\xff\x85\x16`\0\x90\x81R`\xcb\x90\x93R\x91 T\x14a\x1e\xe7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`=`$\x82\x01R\x7fTask response does not match the`D\x82\x01R\x7f one recorded in the contract\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[c\xff\xff\xff\xff\x82\x16`\0\x90\x81R`\xcc` R`@\x90 T`\xff\x16\x15a\x1f\x7fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R\x7fThe response to this task has al`D\x82\x01R\x7fready been challenged successful`d\x82\x01Rb6<\x97`\xe9\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`da\x1f\x8e` \x86\x01\x86aH\xb7V[a\x1f\x98\x91\x90aX\x0cV[c\xff\xff\xff\xff\x16Cc\xff\xff\xff\xff\x16\x11\x15a \x19W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7fThe challenge period for this ta`D\x82\x01R\x7fsk has already expired.\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`\0a %\x82\x80aX\x7fV[\x90P` \x86\x015\x81\x14`\x01\x81\x90\x03a sW`@Q3\x90c\xff\xff\xff\xff\x86\x16\x90\x7f\xfd>&\xbe\xebYg\xfcZW\xa0Di\x14\xea\xbcE\xb4\xaaGLg\xa5\x1bKQ`\xca\xc6\r\xdb\x05\x90`\0\x90\xa3PPPPa#\x80V[`\0\x85Q`\x01`\x01`@\x1b\x03\x81\x11\x15a \x8eWa \x8eaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xb7W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x86Q\x81\x10\x15a!)Wa \xfa\x87\x82\x81Q\x81\x10a \xdbWa \xdbaTNV[` \x02` \x01\x01Q\x80Q`\0\x90\x81R` \x91\x82\x01Q\x90\x91R`@\x90 \x90V[\x82\x82\x81Q\x81\x10a!\x0cWa!\x0caTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R\x80a!!\x81aUUV[\x91PPa \xbdV[P`\0a!<`@\x8b\x01` \x8c\x01aH\xb7V[\x82`@Q` \x01a!N\x92\x91\x90aYLV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x87` \x015\x81\x14a!\xf8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`P`$\x82\x01R\x7fThe pubkeys of non-signing opera`D\x82\x01R\x7ftors supplied by the challenger `d\x82\x01Ro0\xb92\x9077\xba\x101\xb7\xb992\xb1\xba\x17`\x81\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`\0\x87Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\"\x13Wa\"\x13aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\"=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\"\xf3\x91\x90aS\x82V[\x82\x82\x81Q\x81\x10a#\x05Wa#\x05aTNV[`\x01`\x01`\xa0\x1b\x03\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x80a#'\x81aUUV[\x91PPa\"BV[Pc\xff\xff\xff\xff\x87\x16`\0\x81\x81R`\xcc` R`@\x80\x82 \x80T`\xff\x19\x16`\x01\x17\x90UQ3\x92\x91\x7f\xc2\r\x1b\xb0\xf1b6\x800k\x83\xd4\xffK\xb9\x9a+\xeb\x9d\x86\xd9x2\xf3\xca@\xfd\x13\xa2\x9d\xf1\xec\x91\xa3PPPPPPP[PPPPV[`\xceT`\x01`\x01`\xa0\x1b\x03\x163\x14a#\xeaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7fTask generator must be the calle`D\x82\x01R`9`\xf9\x1b`d\x82\x01R`\x84\x01a\x06\x95V[a$!`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0c\xff\xff\xff\xff\x16\x81R` \x01``\x81R` \x01`\0c\xff\xff\xff\xff\x16\x81RP\x90V[\x84\x81Rc\xff\xff\xff\xffC\x81\x16` \x80\x84\x01\x91\x90\x91R\x90\x85\x16``\x83\x01R`@\x80Q`\x1f\x85\x01\x83\x90\x04\x83\x02\x81\x01\x83\x01\x90\x91R\x83\x81R\x90\x84\x90\x84\x90\x81\x90\x84\x01\x83\x82\x80\x82\x847`\0\x92\x01\x91\x90\x91RPPPP`@\x80\x83\x01\x91\x90\x91RQa$\x87\x90\x82\x90` \x01aY\x94V[`@\x80Q`\x1f\x19\x81\x84\x03\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 `\xc9\x80Tc\xff\xff\xff\xff\x90\x81\x16`\0\x90\x81R`\xca\x90\x94R\x93\x90\x92 UT\x16\x90\x7f\x16\x95\xb8\xd0n\xc8\0\xb4a^t\\\xfb[\xd0\x0c\x1f(ua]B\x92\\;Z\xfaT;\xb2LH\x90a$\xea\x90\x84\x90aY\x94V[`@Q\x80\x91\x03\x90\xa2`\xc9Ta%\x06\x90c\xff\xff\xff\xff\x16`\x01aX\x0cV[`\xc9\x80Tc\xff\xff\xff\xff\x19\x16c\xff\xff\xff\xff\x92\x90\x92\x16\x91\x90\x91\x17\x90UPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R``\x80\x82R` \x82\x01R`\0\x84\x81\x03a%\xa0W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`7`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: empty quorum input\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`@\x83\x01QQ\x85\x14\x80\x15a%\xb8WP`\xa0\x83\x01QQ\x85\x14[\x80\x15a%\xc8WP`\xc0\x83\x01QQ\x85\x14[\x80\x15a%\xd8WP`\xe0\x83\x01QQ\x85\x14[a&BW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`A`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: input quorum length mismatc`d\x82\x01R`\r`\xfb\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x82QQ` \x84\x01QQ\x14a&\xbaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R`\0\x80Q` aZ\xff\x839\x81Q\x91R\x90\x82\x01R\x7fres: input nonsigner length mism`d\x82\x01Rc\x0c.\x8cm`\xe3\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[Cc\xff\xff\xff\xff\x16\x84c\xff\xff\xff\xff\x16\x10a')W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`<`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: invalid reference block\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x80\x83\x01\x91\x90\x91R\x82Q\x80\x84\x01\x90\x93R``\x80\x84R\x90\x83\x01R\x90\x86`\x01`\x01`@\x1b\x03\x81\x11\x15a'jWa'jaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a'\x93W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P` \x82\x01R\x86`\x01`\x01`@\x1b\x03\x81\x11\x15a'\xb1Wa'\xb1aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a'\xdaW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R`@\x80Q\x80\x82\x01\x90\x91R``\x80\x82R` \x82\x01R\x85` \x01QQ`\x01`\x01`@\x1b\x03\x81\x11\x15a(\x0eWa(\x0eaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a(7W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x86\x01QQ`\x01`\x01`@\x1b\x03\x81\x11\x15a(WWa(WaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a(\x80W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81` \x01\x81\x90RP`\0a)R\x8a\x8a\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPP`@\x80Qc\x9a\xa1e=`\xe0\x1b\x81R\x90Q`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93Pc\x9a\xa1e=\x92P`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xfa\x15\x80\x15a))W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a)M\x91\x90aZ\x16V[a>zV[\x90P`\0[\x87` \x01QQ\x81\x10\x15a+\xceWa)}\x88` \x01Q\x82\x81Q\x81\x10a \xdbWa \xdbaTNV[\x83` \x01Q\x82\x81Q\x81\x10a)\x93Wa)\x93aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R\x80\x15a*SW` \x83\x01Qa)\xb4`\x01\x83aZ3V[\x81Q\x81\x10a)\xc4Wa)\xc4aTNV[` \x02` \x01\x01Q`\0\x1c\x83` \x01Q\x82\x81Q\x81\x10a)\xe5Wa)\xe5aTNV[` \x02` \x01\x01Q`\0\x1c\x11a*SW`@\x80QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`$\x81\x01\x91\x90\x91R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: nonSignerPubkeys not sorted`d\x82\x01R`\x84\x01a\x06\x95V[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\x04\xeccQ\x84` \x01Q\x83\x81Q\x81\x10a*\x98Wa*\x98aTNV[` \x02` \x01\x01Q\x8b\x8b`\0\x01Q\x85\x81Q\x81\x10a*\xb7Wa*\xb7aTNV[` \x02` \x01\x01Q`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a*\xf4\x93\x92\x91\x90\x92\x83Rc\xff\xff\xff\xff\x91\x82\x16` \x84\x01R\x16`@\x82\x01R``\x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a+\x11W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a+5\x91\x90aV\x95V[`\x01`\x01`\xc0\x1b\x03\x16\x83`\0\x01Q\x82\x81Q\x81\x10a+TWa+TaTNV[` \x02` \x01\x01\x81\x81RPPa+\xbaa\t\x04a+\x8e\x84\x86`\0\x01Q\x85\x81Q\x81\x10a+\x80Wa+\x80aTNV[` \x02` \x01\x01Q\x16a?\rV[\x8a` \x01Q\x84\x81Q\x81\x10a+\xa4Wa+\xa4aTNV[` \x02` \x01\x01Qa?8\x90\x91\x90c\xff\xff\xff\xff\x16V[\x94P\x80a+\xc6\x81aUUV[\x91PPa)WV[PPa+\xd9\x83a@\x1bV[`\x97T\x90\x93P`\xff\x16`\0\x81a+\xf0W`\0a,rV[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xc4H\xfe\xb8`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a,NW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a,r\x91\x90aZFV[\x90P`\0[\x8a\x81\x10\x15a2\xf0W\x82\x15a-\xd2W\x89c\xff\xff\xff\xff\x16\x82\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c$\x9a\x0cB\x8f\x8f\x86\x81\x81\x10a,\xceWa,\xceaTNV[`@Q`\xe0\x85\x90\x1b`\x01`\x01`\xe0\x1b\x03\x19\x16\x81R\x92\x015`\xf8\x1c`\x04\x83\x01RP`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a-\x0eW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a-2\x91\x90aZFV[a-<\x91\x90aZ_V[\x11a-\xd2W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`f`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: StakeRegistry updates must `d\x82\x01R\x7fbe within withdrawalDelayBlocks `\x84\x82\x01Rewindow`\xd0\x1b`\xa4\x82\x01R`\xc4\x01a\x06\x95V[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16ch\xbc\xca\xac\x8d\x8d\x84\x81\x81\x10a.\x13Wa.\x13aTNV[\x90P\x015`\xf8\x1c`\xf8\x1b`\xf8\x1c\x8c\x8c`\xa0\x01Q\x85\x81Q\x81\x10a.7Wa.7aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x86\x90\x1b\x16\x81R`\xff\x90\x93\x16`\x04\x84\x01Rc\xff\xff\xff\xff\x91\x82\x16`$\x84\x01R\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a.\x93W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a.\xb7\x91\x90aZrV[`\x01`\x01`@\x1b\x03\x19\x16a.\xda\x8a`@\x01Q\x83\x81Q\x81\x10a \xdbWa \xdbaTNV[g\xff\xff\xff\xff\xff\xff\xff\xff\x19\x16\x14a/vW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`a`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: quorumApk hash in storage d`d\x82\x01R\x7foes not match provided quorum ap`\x84\x82\x01R`k`\xf8\x1b`\xa4\x82\x01R`\xc4\x01a\x06\x95V[a/\xa6\x89`@\x01Q\x82\x81Q\x81\x10a/\x8fWa/\x8faTNV[` \x02` \x01\x01Q\x87a:r\x90\x91\x90c\xff\xff\xff\xff\x16V[\x95P\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xc8)LV\x8d\x8d\x84\x81\x81\x10a/\xe9Wa/\xe9aTNV[\x90P\x015`\xf8\x1c`\xf8\x1b`\xf8\x1c\x8c\x8c`\xc0\x01Q\x85\x81Q\x81\x10a0\rWa0\raTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x86\x90\x1b\x16\x81R`\xff\x90\x93\x16`\x04\x84\x01Rc\xff\xff\xff\xff\x91\x82\x16`$\x84\x01R\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a0iW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a0\x8d\x91\x90aU\x16V[\x85` \x01Q\x82\x81Q\x81\x10a0\xa3Wa0\xa3aTNV[`\x01`\x01``\x1b\x03\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x82\x01R\x85\x01Q\x80Q\x82\x90\x81\x10a0\xcfWa0\xcfaTNV[` \x02` \x01\x01Q\x85`\0\x01Q\x82\x81Q\x81\x10a0\xedWa0\xedaTNV[` \x02` \x01\x01\x90`\x01`\x01``\x1b\x03\x16\x90\x81`\x01`\x01``\x1b\x03\x16\x81RPP`\0\x80[\x8a` \x01QQ\x81\x10\x15a2\xdbWa1e\x86`\0\x01Q\x82\x81Q\x81\x10a17Wa17aTNV[` \x02` \x01\x01Q\x8f\x8f\x86\x81\x81\x10a1QWa1QaTNV[`\x01\x92\x015`\xf8\x1c\x92\x90\x92\x1c\x81\x16\x14\x91\x90PV[\x15a2\xc9W\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xf2\xbe\x94\xae\x8f\x8f\x86\x81\x81\x10a1\xabWa1\xabaTNV[\x90P\x015`\xf8\x1c`\xf8\x1b`\xf8\x1c\x8e\x89` \x01Q\x85\x81Q\x81\x10a1\xcfWa1\xcfaTNV[` \x02` \x01\x01Q\x8f`\xe0\x01Q\x88\x81Q\x81\x10a1\xedWa1\xedaTNV[` \x02` \x01\x01Q\x87\x81Q\x81\x10a2\x06Wa2\x06aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x87\x90\x1b\x16\x81R`\xff\x90\x94\x16`\x04\x85\x01Rc\xff\xff\xff\xff\x92\x83\x16`$\x85\x01R`D\x84\x01\x91\x90\x91R\x16`d\x82\x01R`\x84\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a2jW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a2\x8e\x91\x90aU\x16V[\x87Q\x80Q\x85\x90\x81\x10a2\xa2Wa2\xa2aTNV[` \x02` \x01\x01\x81\x81Qa2\xb6\x91\x90aZ\x9dV[`\x01`\x01``\x1b\x03\x16\x90RP`\x01\x90\x91\x01\x90[\x80a2\xd3\x81aUUV[\x91PPa1\x11V[PP\x80\x80a2\xe8\x90aUUV[\x91PPa,wV[PPP`\0\x80a3\n\x8c\x86\x8a``\x01Q\x8b`\x80\x01Qa\x07\xe9V[\x91P\x91P\x81a3{W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: pairing precompile call fai`d\x82\x01Rb\x1b\x19Y`\xea\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x80a3\xdcW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`9`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: signature is invalid\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[PP`\0\x87\x82` \x01Q`@Q` \x01a3\xf7\x92\x91\x90aYLV[`@\x80Q\x80\x83\x03`\x1f\x19\x01\x81R\x91\x90R\x80Q` \x90\x91\x01 \x92\x9b\x92\x9aP\x91\x98PPPPPPPPPV[a4)a@\xb6V[a43`\0aA\x10V[V[`@\x80Q`\x01\x80\x82R\x81\x83\x01\x90\x92R`\0\x91``\x91\x83\x91` \x80\x83\x01\x90\x806\x837\x01\x90PP\x90P\x84\x81`\0\x81Q\x81\x10a4pWa4paTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R`@Qca\xc8\xa1/`\xe1\x1b\x81R`\0\x90`\x01`\x01`\xa0\x1b\x03\x88\x16\x90c\xc3\x91B^\x90a4\xac\x90\x88\x90\x86\x90`\x04\x01aX\xc2V[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a4\xc9W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra4\xf1\x91\x90\x81\x01\x90aU\xb5V[`\0\x81Q\x81\x10a5\x03Wa5\x03aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Qc\x04\xeccQ`\xe0\x1b\x81R`\x04\x81\x01\x88\x90Rc\xff\xff\xff\xff\x87\x81\x16`$\x83\x01R\x90\x91\x16`D\x82\x01\x81\x90R\x91P`\0\x90`\x01`\x01`\xa0\x1b\x03\x89\x16\x90c\x04\xeccQ\x90`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a5oW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a5\x93\x91\x90aV\x95V[`\x01`\x01`\xc0\x1b\x03\x16\x90P`\0a5\xa9\x82aAbV[\x90P\x81a5\xb7\x8a\x83\x8aa\tsV[\x95P\x95PPPPP\x93P\x93\x91PPV[a5\xcfa@\xb6V[`\x01`\x01`\xa0\x1b\x03\x81\x16a64W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7fOwnable: new owner is the zero a`D\x82\x01Reddress`\xd0\x1b`d\x82\x01R`\x84\x01a\x06\x95V[a\x06\xa7\x81aA\x10V[`\0Ta\x01\0\x90\x04`\xff\x16\x15\x80\x80\x15a6]WP`\0T`\x01`\xff\x90\x91\x16\x10[\x80a6wWP0;\x15\x80\x15a6wWP`\0T`\xff\x16`\x01\x14[a6\xdaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7fInitializable: contract is alrea`D\x82\x01Rm\x19\x1eH\x1a[\x9a]\x1aX[\x1a^\x99Y`\x92\x1b`d\x82\x01R`\x84\x01a\x06\x95V[`\0\x80T`\xff\x19\x16`\x01\x17\x90U\x80\x15a6\xfdW`\0\x80Ta\xff\0\x19\x16a\x01\0\x17\x90U[a7\x08\x85`\0aB.V[a7\x11\x84aA\x10V[`\xcd\x80T`\x01`\x01`\xa0\x1b\x03\x80\x86\x16`\x01`\x01`\xa0\x1b\x03\x19\x92\x83\x16\x17\x90\x92U`\xce\x80T\x92\x85\x16\x92\x90\x91\x16\x91\x90\x91\x17\x90U\x80\x15a7\x87W`\0\x80Ta\xff\0\x19\x16\x90U`@Q`\x01\x81R\x7f\x7f&\xb8?\xf9n\x1f+jh/\x138R\xf6y\x8a\t\xc4e\xda\x95\x92\x14`\xce\xfb8G@$\x98\x90` \x01`@Q\x80\x91\x03\x90\xa1[PPPPPV[`e`\0\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xa0\x1b\x03\x16`\x01`\x01`\xa0\x1b\x03\x16c\xea\xb6mz`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a7\xe1W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a8\x05\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a85W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aS\x9fV[`fT\x19\x81\x19`fT\x19\x16\x14a8\xb3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.unpause: invalid attemp`D\x82\x01R\x7ft to pause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`f\x81\x90U`@Q\x81\x81R3\x90\x7f5\x82\xd1\x82\x8e&\xbfV\xbd\x80\x15\x02\xbc\x02\x1a\xc0\xbc\x8a\xfbW\xc8&\xe4\x98kEY<\x8f\xad8\x9c\x90` \x01a\x07\xdeV[`\x01`\x01`\xa0\x1b\x03\x81\x16a9xW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`I`$\x82\x01R\x7fPausable._setPauserRegistry: new`D\x82\x01R\x7fPauserRegistry cannot be the zer`d\x82\x01Rho address`\xb8\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`eT`@\x80Q`\x01`\x01`\xa0\x1b\x03\x92\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7fn\x9f\xcdS\x98\x96\xfc\xa6\x0e\x8b\x0f\x01\xddX\x023\xe4\x8ak\x0f}\xf0\x13\xb8\x9b\xa7\xf5e\x86\x9a\xcd\xb6\x91\x01`@Q\x80\x91\x03\x90\xa1`e\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra9\xfdaE\xd3V[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R`\0\x90\x83``\x84`\x07a\x07\xd0Z\x03\xfa\x90P\x80\x80a:,W\xfe[P\x80a:jW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\r`$\x82\x01Rl\x19X\xcb[][\x0bY\x98Z[\x19Y`\x9a\x1b`D\x82\x01R`d\x01a\x06\x95V[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra:\x8eaE\xf1V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R`\0\x90\x83`\x80\x84`\x06a\x07\xd0Z\x03\xfa\x90P\x80\x80a:\xc9W\xfe[P\x80a:jW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\r`$\x82\x01Rl\x19X\xcbXY\x19\x0bY\x98Z[\x19Y`\x9a\x1b`D\x82\x01R`d\x01a\x06\x95V[a;\x0faF\x0fV[P`@\x80Q`\x80\x81\x01\x82R\x7f\x19\x8e\x93\x93\x92\rH:r`\xbf\xb71\xfb]%\xf1\xaaI35\xa9\xe7\x12\x97\xe4\x85\xb7\xae\xf3\x12\xc2\x81\x83\x01\x90\x81R\x7f\x18\0\xde\xef\x12\x1f\x1evBj\0f^\\DygC\"\xd4\xf7^\xda\xddF\xde\xbd\\\xd9\x92\xf6\xed``\x83\x01R\x81R\x81Q\x80\x83\x01\x90\x92R\x7f']\xc4\xa2\x88\xd1\xaf\xb3\xcb\xb1\xac\t\x18u$\xc7\xdb69]\xf7\xbe;\x99\xe6s\xb1:\x07Ze\xec\x82R\x7f\x1d\x9b\xef\xcd\x05\xa52>m\xa4\xd45\xf3\xb6\x17\xcd\xb3\xaf\x83(\\-\xf7\x11\xef9\xc0\x15q\x82\x7f\x9d` \x83\x81\x01\x91\x90\x91R\x81\x01\x91\x90\x91R\x90V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0\x80\x80a;\xf7`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x86aTdV[\x90P[a<\x03\x81aC\x18V[\x90\x93P\x91P`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x82\x83\t\x83\x03a<MW`\0a<\xa1\x82`\x06aX\x7fV[\x90P\x84\x82`\x02\x81\x10a<\xb5Wa<\xb5aTNV[` \x02\x01QQ\x83a<\xc7\x83`\0aZ_V[`\x0c\x81\x10a<\xd7Wa<\xd7aTNV[` \x02\x01R\x84\x82`\x02\x81\x10a<\xeeWa<\xeeaTNV[` \x02\x01Q` \x01Q\x83\x82`\x01a=\x05\x91\x90aZ_V[`\x0c\x81\x10a=\x15Wa=\x15aTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=,Wa=,aTNV[` \x02\x01QQQ\x83a=?\x83`\x02aZ_V[`\x0c\x81\x10a=OWa=OaTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=fWa=faTNV[` \x02\x01QQ`\x01` \x02\x01Q\x83a=\x7f\x83`\x03aZ_V[`\x0c\x81\x10a=\x8fWa=\x8faTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=\xa6Wa=\xa6aTNV[` \x02\x01Q` \x01Q`\0`\x02\x81\x10a=\xc1Wa=\xc1aTNV[` \x02\x01Q\x83a=\xd2\x83`\x04aZ_V[`\x0c\x81\x10a=\xe2Wa=\xe2aTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=\xf9Wa=\xf9aTNV[` \x02\x01Q` \x01Q`\x01`\x02\x81\x10a>\x14Wa>\x14aTNV[` \x02\x01Q\x83a>%\x83`\x05aZ_V[`\x0c\x81\x10a>5Wa>5aTNV[` \x02\x01RP\x80a>E\x81aUUV[\x91PPa<\x8bV[Pa>VaFSV[`\0` \x82a\x01\x80\x85`\x08\x8c\xfa\x91Q\x91\x9c\x91\x15\x15\x9bP\x90\x99PPPPPPPPPPV[`\0\x80a>\x86\x84aC\x9aV[\x90P\x80\x83`\xff\x16`\x01\x90\x1b\x11a?\x04W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`?`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: bitmap exceeds max value\0`d\x82\x01R`\x84\x01a\x06\x95V[\x90P[\x92\x91PPV[`\0\x80[\x82\x15a?\x07Wa?\"`\x01\x84aZ3V[\x90\x92\x16\x91\x80a?0\x81aZ\xbdV[\x91PPa?\x11V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra\x02\0\x82a\xff\xff\x16\x10a?\x94W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x10`$\x82\x01Roscalar-too-large`\x80\x1b`D\x82\x01R`d\x01a\x06\x95V[\x81a\xff\xff\x16`\x01\x03a?\xa7WP\x81a?\x07V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01\x81\x90R\x84\x90`\x01\x90[\x81a\xff\xff\x16\x86a\xff\xff\x16\x10a@\x10W`\x01a\xff\xff\x87\x16`\xff\x83\x16\x1c\x81\x16\x90\x03a?\xf3Wa?\xf0\x84\x84a:rV[\x93P[a?\xfd\x83\x84a:rV[\x92Pb\x01\xff\xfe`\x01\x92\x83\x1b\x16\x91\x01a?\xc3V[P\x91\x95\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q\x15\x80\x15a@@WP` \x82\x01Q\x15[\x15a@^WPP`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x84` \x01Qa@\x91\x91\x90aTdV[a@\xa9\x90`\0\x80Q` aZ\xdf\x839\x81Q\x91RaZ3V[\x90R\x92\x91PPV[\x91\x90PV[`3T`\x01`\x01`\xa0\x1b\x03\x163\x14a43W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7fOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x95V[`3\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x90\x93U`@Q\x91\x16\x91\x90\x82\x90\x7f\x8b\xe0\x07\x9cS\x16Y\x14\x13D\xcd\x1f\xd0\xa4\xf2\x84\x19I\x7f\x97\"\xa3\xda\xaf\xe3\xb4\x18okdW\xe0\x90`\0\x90\xa3PPV[```\0\x80aAp\x84a?\rV[a\xff\xff\x16`\x01`\x01`@\x1b\x03\x81\x11\x15aA\x8bWaA\x8baF\xf8V[`@Q\x90\x80\x82R\x80`\x1f\x01`\x1f\x19\x16` \x01\x82\x01`@R\x80\x15aA\xb5W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x80[\x82Q\x82\x10\x80\x15aA\xcdWPa\x01\0\x81\x10[\x15aB$W`\x01\x81\x1b\x93P\x85\x84\x16\x15aB\x14W\x80`\xf8\x1b\x83\x83\x81Q\x81\x10aA\xf6WaA\xf6aTNV[` \x01\x01\x90`\x01`\x01`\xf8\x1b\x03\x19\x16\x90\x81`\0\x1a\x90SP\x81`\x01\x01\x91P[aB\x1d\x81aUUV[\x90PaA\xbcV[P\x90\x94\x93PPPPV[`eT`\x01`\x01`\xa0\x1b\x03\x16\x15\x80\x15aBOWP`\x01`\x01`\xa0\x1b\x03\x82\x16\x15\x15[aB\xd1W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fPausable._initializePauser: _ini`D\x82\x01R\x7ftializePauser() can only be call`d\x82\x01Rfed once`\xc8\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`f\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2aC\x14\x82a8\xeaV[PPV[`\0\x80\x80`\0\x80Q` aZ\xdf\x839\x81Q\x91R`\x03`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x86`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x88\x89\t\t\x08\x90P`\0aC\x8e\x82\x7f\x0c\x19\x13\x9c\xb8Lh\nn\x14\x11m\xa0`V\x17e\xe0Z\xa4Z\x1cr\xa3O\x08#\x05\xb6\x1f?R`\0\x80Q` aZ\xdf\x839\x81Q\x91RaE*V[\x91\x95\x91\x94P\x90\x92PPPV[`\0a\x01\0\x82Q\x11\x15aD#W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R\x7fBitmapUtils.orderedBytesArrayToB\x90\x82\x01R\x7fitmap: orderedBytesArray is too `d\x82\x01Rclong`\xe0\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x81Q`\0\x03aD4WP`\0\x91\x90PV[`\0\x80\x83`\0\x81Q\x81\x10aDJWaDJaTNV[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x81\x90\x1b\x92P[\x84Q\x81\x10\x15aE!W\x84\x81\x81Q\x81\x10aDxWaDxaTNV[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x1b\x91P\x82\x82\x11aE\rW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: orderedBytesArray is not `d\x82\x01Rf\x1b\xdc\x99\x19\\\x99Y`\xca\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x91\x81\x17\x91aE\x1a\x81aUUV[\x90PaD]V[P\x90\x93\x92PPPV[`\0\x80aE5aFSV[aE=aFqV[` \x80\x82R\x81\x81\x01\x81\x90R`@\x82\x01\x81\x90R``\x82\x01\x88\x90R`\x80\x82\x01\x87\x90R`\xa0\x82\x01\x86\x90R\x82`\xc0\x83`\x05a\x07\xd0Z\x03\xfa\x92P\x82\x80aEzW\xfe[P\x82aE\xc8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1a`$\x82\x01R\x7fBN254.expMod: call failure\0\0\0\0\0\0`D\x82\x01R`d\x01a\x06\x95V[PQ\x95\x94PPPPPV[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`@\x01`@R\x80aF\"aF\x8fV[\x81R` \x01aF/aF\x8fV[\x90R\x90V[`@Q\x80a\x01\x80\x01`@R\x80`\x0c\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80` \x01`@R\x80`\x01\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xc0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`@\x01`@R\x80`\x02\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x06\xa7W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aF\xd4W`\0\x80\xfd[\x815a?\x04\x81aF\xadV[`\0` \x82\x84\x03\x12\x15aF\xf1W`\0\x80\xfd[P5\x91\x90PV[cNH{q`\xe0\x1b`\0R`A`\x04R`$`\0\xfd[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aG0WaG0aF\xf8V[`@R\x90V[`@Qa\x01\0\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aG0WaG0aF\xf8V[`@Q`\x1f\x82\x01`\x1f\x19\x16\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aG\x81WaG\x81aF\xf8V[`@R\x91\x90PV[`\0`@\x82\x84\x03\x12\x15aG\x9bW`\0\x80\xfd[aG\xa3aG\x0eV[\x90P\x815\x81R` \x82\x015` \x82\x01R\x92\x91PPV[`\0\x82`\x1f\x83\x01\x12aG\xcaW`\0\x80\xfd[aG\xd2aG\x0eV[\x80`@\x84\x01\x85\x81\x11\x15aG\xe4W`\0\x80\xfd[\x84[\x81\x81\x10\x15aG\xfeW\x805\x84R` \x93\x84\x01\x93\x01aG\xe6V[P\x90\x95\x94PPPPPV[`\0`\x80\x82\x84\x03\x12\x15aH\x1bW`\0\x80\xfd[aH#aG\x0eV[\x90PaH/\x83\x83aG\xb9V[\x81RaH>\x83`@\x84\x01aG\xb9V[` \x82\x01R\x92\x91PPV[`\0\x80`\0\x80a\x01 \x85\x87\x03\x12\x15aH`W`\0\x80\xfd[\x845\x93PaHq\x86` \x87\x01aG\x89V[\x92PaH\x80\x86``\x87\x01aH\tV[\x91PaH\x8f\x86`\xe0\x87\x01aG\x89V[\x90P\x92\x95\x91\x94P\x92PV[c\xff\xff\xff\xff\x81\x16\x81\x14a\x06\xa7W`\0\x80\xfd[\x805a@\xb1\x81aH\x9aV[`\0` \x82\x84\x03\x12\x15aH\xc9W`\0\x80\xfd[\x815a?\x04\x81aH\x9aV[`\0\x80`\0``\x84\x86\x03\x12\x15aH\xe9W`\0\x80\xfd[\x835aH\xf4\x81aF\xadV[\x92P` \x84\x81\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aI\x11W`\0\x80\xfd[\x81\x87\x01\x91P\x87`\x1f\x83\x01\x12aI%W`\0\x80\xfd[\x815\x81\x81\x11\x15aI7WaI7aF\xf8V[aII`\x1f\x82\x01`\x1f\x19\x16\x85\x01aGYV[\x91P\x80\x82R\x88\x84\x82\x85\x01\x01\x11\x15aI_W`\0\x80\xfd[\x80\x84\x84\x01\x85\x84\x017`\0\x84\x82\x84\x01\x01RP\x80\x94PPPPaI\x82`@\x85\x01aH\xacV[\x90P\x92P\x92P\x92V[`\0\x81Q\x80\x84R` \x80\x85\x01\x80\x81\x96P\x83`\x05\x1b\x81\x01\x91P\x82\x86\x01`\0\x80[\x86\x81\x10\x15aJ!W\x83\x85\x03\x8aR\x82Q\x80Q\x80\x87R\x90\x87\x01\x90\x87\x87\x01\x90\x84[\x81\x81\x10\x15aJ\x0cW\x83Q\x80Q`\x01`\x01`\xa0\x1b\x03\x16\x84R\x8a\x81\x01Q\x8b\x85\x01R`@\x90\x81\x01Q`\x01`\x01``\x1b\x03\x16\x90\x84\x01R\x92\x89\x01\x92``\x90\x92\x01\x91`\x01\x01aI\xc8V[PP\x9a\x87\x01\x9a\x95PP\x91\x85\x01\x91`\x01\x01aI\xaaV[P\x92\x98\x97PPPPPPPPV[` \x81R`\0aJB` \x83\x01\x84aI\x8bV[\x93\x92PPPV[\x80\x15\x15\x81\x14a\x06\xa7W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aJiW`\0\x80\xfd[\x815a?\x04\x81aJIV[`\0\x80\x83`\x1f\x84\x01\x12aJ\x86W`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aJ\x9dW`\0\x80\xfd[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15aJ\xb5W`\0\x80\xfd[\x92P\x92\x90PV[`\0\x80`\0\x80`\0\x80`\x80\x87\x89\x03\x12\x15aJ\xd5W`\0\x80\xfd[\x865aJ\xe0\x81aF\xadV[\x95P` \x87\x015aJ\xf0\x81aH\x9aV[\x94P`@\x87\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aK\x0cW`\0\x80\xfd[aK\x18\x8a\x83\x8b\x01aJtV[\x90\x96P\x94P``\x89\x015\x91P\x80\x82\x11\x15aK1W`\0\x80\xfd[\x81\x89\x01\x91P\x89`\x1f\x83\x01\x12aKEW`\0\x80\xfd[\x815\x81\x81\x11\x15aKTW`\0\x80\xfd[\x8a` \x82`\x05\x1b\x85\x01\x01\x11\x15aKiW`\0\x80\xfd[` \x83\x01\x94P\x80\x93PPPP\x92\x95P\x92\x95P\x92\x95V[`\0\x81Q\x80\x84R` \x80\x85\x01\x94P\x80\x84\x01`\0[\x83\x81\x10\x15aK\xb5W\x81Qc\xff\xff\xff\xff\x16\x87R\x95\x82\x01\x95\x90\x82\x01\x90`\x01\x01aK\x93V[P\x94\x95\x94PPPPPV[`\0` \x80\x83R\x83Q`\x80\x82\x85\x01RaK\xdc`\xa0\x85\x01\x82aK\x7fV[\x90P\x81\x85\x01Q`\x1f\x19\x80\x86\x84\x03\x01`@\x87\x01RaK\xf9\x83\x83aK\x7fV[\x92P`@\x87\x01Q\x91P\x80\x86\x84\x03\x01``\x87\x01RaL\x16\x83\x83aK\x7fV[``\x88\x01Q\x87\x82\x03\x83\x01`\x80\x89\x01R\x80Q\x80\x83R\x91\x94P\x85\x01\x92P\x84\x84\x01\x90`\x05\x81\x90\x1b\x85\x01\x86\x01`\0[\x82\x81\x10\x15aLmW\x84\x87\x83\x03\x01\x84RaL[\x82\x87QaK\x7fV[\x95\x88\x01\x95\x93\x88\x01\x93\x91P`\x01\x01aLAV[P\x99\x98PPPPPPPPPV[`\xff\x81\x16\x81\x14a\x06\xa7W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aL\x9cW`\0\x80\xfd[\x815a?\x04\x81aL{V[`\0`\x80\x82\x84\x03\x12\x15aL\xb9W`\0\x80\xfd[P\x91\x90PV[`\0`@\x82\x84\x03\x12\x15aL\xb9W`\0\x80\xfd[`\0`\x01`\x01`@\x1b\x03\x82\x11\x15aL\xeaWaL\xeaaF\xf8V[P`\x05\x1b` \x01\x90V[`\0\x82`\x1f\x83\x01\x12aM\x05W`\0\x80\xfd[\x815` aM\x1aaM\x15\x83aL\xd1V[aGYV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aM9W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aM]W\x805aMP\x81aH\x9aV[\x83R\x91\x83\x01\x91\x83\x01aM=V[P\x96\x95PPPPPPV[`\0\x82`\x1f\x83\x01\x12aMyW`\0\x80\xfd[\x815` aM\x89aM\x15\x83aL\xd1V[\x82\x81R`\x06\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aM\xa8W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aM]WaM\xbe\x88\x82aG\x89V[\x83R\x91\x83\x01\x91`@\x01aM\xacV[`\0\x82`\x1f\x83\x01\x12aM\xddW`\0\x80\xfd[\x815` aM\xedaM\x15\x83aL\xd1V[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aN\x0cW`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aM]W\x805`\x01`\x01`@\x1b\x03\x81\x11\x15aN/W`\0\x80\x81\xfd[aN=\x89\x86\x83\x8b\x01\x01aL\xf4V[\x84RP\x91\x83\x01\x91\x83\x01aN\x10V[`\0a\x01\x80\x82\x84\x03\x12\x15aN^W`\0\x80\xfd[aNfaG6V[\x90P\x815`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aN\x7fW`\0\x80\xfd[aN\x8b\x85\x83\x86\x01aL\xf4V[\x83R` \x84\x015\x91P\x80\x82\x11\x15aN\xa1W`\0\x80\xfd[aN\xad\x85\x83\x86\x01aMhV[` \x84\x01R`@\x84\x015\x91P\x80\x82\x11\x15aN\xc6W`\0\x80\xfd[aN\xd2\x85\x83\x86\x01aMhV[`@\x84\x01RaN\xe4\x85``\x86\x01aH\tV[``\x84\x01RaN\xf6\x85`\xe0\x86\x01aG\x89V[`\x80\x84\x01Ra\x01 \x84\x015\x91P\x80\x82\x11\x15aO\x10W`\0\x80\xfd[aO\x1c\x85\x83\x86\x01aL\xf4V[`\xa0\x84\x01Ra\x01@\x84\x015\x91P\x80\x82\x11\x15aO6W`\0\x80\xfd[aOB\x85\x83\x86\x01aL\xf4V[`\xc0\x84\x01Ra\x01`\x84\x015\x91P\x80\x82\x11\x15aO\\W`\0\x80\xfd[PaOi\x84\x82\x85\x01aM\xccV[`\xe0\x83\x01RP\x92\x91PPV[`\0\x80`\0`\x80\x84\x86\x03\x12\x15aO\x8aW`\0\x80\xfd[\x835`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aO\xa1W`\0\x80\xfd[aO\xad\x87\x83\x88\x01aL\xa7V[\x94PaO\xbc\x87` \x88\x01aL\xbfV[\x93P``\x86\x015\x91P\x80\x82\x11\x15aO\xd2W`\0\x80\xfd[PaO\xdf\x86\x82\x87\x01aNKV[\x91PP\x92P\x92P\x92V[`\0\x80`\0``\x84\x86\x03\x12\x15aO\xfeW`\0\x80\xfd[\x835aP\t\x81aF\xadV[\x92P` \x84\x81\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aP%W`\0\x80\xfd[\x85\x01`\x1f\x81\x01\x87\x13aP6W`\0\x80\xfd[\x805aPDaM\x15\x82aL\xd1V[\x81\x81R`\x05\x91\x90\x91\x1b\x82\x01\x83\x01\x90\x83\x81\x01\x90\x89\x83\x11\x15aPcW`\0\x80\xfd[\x92\x84\x01\x92[\x82\x84\x10\x15aP\x81W\x835\x82R\x92\x84\x01\x92\x90\x84\x01\x90aPhV[\x80\x96PPPPPPaI\x82`@\x85\x01aH\xacV[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15aP\xcdW\x83Q\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01aP\xb1V[P\x90\x96\x95PPPPPPV[`\0\x80`\0\x80`\xc0\x85\x87\x03\x12\x15aP\xefW`\0\x80\xfd[\x845`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aQ\x06W`\0\x80\xfd[aQ\x12\x88\x83\x89\x01aL\xa7V[\x95PaQ!\x88` \x89\x01aL\xbfV[\x94PaQ0\x88``\x89\x01aL\xbfV[\x93P`\xa0\x87\x015\x91P\x80\x82\x11\x15aQFW`\0\x80\xfd[PaQS\x87\x82\x88\x01aMhV[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`\0\x80``\x85\x87\x03\x12\x15aQuW`\0\x80\xfd[\x845\x93P` \x85\x015aQ\x87\x81aH\x9aV[\x92P`@\x85\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aQ\xa2W`\0\x80\xfd[aQ\xae\x87\x82\x88\x01aJtV[\x95\x98\x94\x97P\x95PPPPV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15aQ\xd2W`\0\x80\xfd[\x855\x94P` \x86\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aQ\xf0W`\0\x80\xfd[aQ\xfc\x89\x83\x8a\x01aJtV[\x90\x96P\x94P`@\x88\x015\x91PaR\x11\x82aH\x9aV[\x90\x92P``\x87\x015\x90\x80\x82\x11\x15aR'W`\0\x80\xfd[PaR4\x88\x82\x89\x01aNKV[\x91PP\x92\x95P\x92\x95\x90\x93PV[`\0\x81Q\x80\x84R` \x80\x85\x01\x94P\x80\x84\x01`\0[\x83\x81\x10\x15aK\xb5W\x81Q`\x01`\x01``\x1b\x03\x16\x87R\x95\x82\x01\x95\x90\x82\x01\x90`\x01\x01aRUV[`@\x81R`\0\x83Q`@\x80\x84\x01RaR\x95`\x80\x84\x01\x82aRAV[\x90P` \x85\x01Q`?\x19\x84\x83\x03\x01``\x85\x01RaR\xb2\x82\x82aRAV[\x92PPP\x82` \x83\x01R\x93\x92PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15aR\xd8W`\0\x80\xfd[\x835aR\xe3\x81aF\xadV[\x92P` \x84\x015\x91P`@\x84\x015aR\xfa\x81aH\x9aV[\x80\x91PP\x92P\x92P\x92V[\x82\x81R`@` \x82\x01R`\0aS\x1e`@\x83\x01\x84aI\x8bV[\x94\x93PPPPV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15aS=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06e\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\x06\x9eW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aS\x9fV[`@Q\x80\x91\x03\x90\xfd[a\x06\xa7\x81a8\xeaV[PV[`eT`@Qc#}\xfbG`\xe1\x1b\x81R3`\x04\x82\x01R`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x90cF\xfb\xf6\x8e\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x06\xf2W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\x16\x91\x90aS\xe9V[a\x072W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aT\x06V[`fT\x81\x81\x16\x14a\x07\xabW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.pause: invalid attempt `D\x82\x01R\x7fto unpause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`f\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01[`@Q\x80\x91\x03\x90\xa2PV[`\0\x80`\0\x7f0dNr\xe11\xa0)\xb8PE\xb6\x81\x81X](3\xe8Hy\xb9p\x91C\xe1\xf5\x93\xf0\0\0\x01\x87\x87`\0\x01Q\x88` \x01Q\x88`\0\x01Q`\0`\x02\x81\x10a\x081Wa\x081aTNV[` \x02\x01Q\x89Q`\x01` \x02\x01Q\x8a` \x01Q`\0`\x02\x81\x10a\x08VWa\x08VaTNV[` \x02\x01Q\x8b` \x01Q`\x01`\x02\x81\x10a\x08rWa\x08raTNV[` \x90\x81\x02\x91\x90\x91\x01Q\x8cQ\x8d\x83\x01Q`@Qa\x08\xcf\x9a\x99\x98\x97\x96\x95\x94\x01\x98\x89R` \x89\x01\x97\x90\x97R`@\x88\x01\x95\x90\x95R``\x87\x01\x93\x90\x93R`\x80\x86\x01\x91\x90\x91R`\xa0\x85\x01R`\xc0\x84\x01R`\xe0\x83\x01Ra\x01\0\x82\x01Ra\x01 \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `\0\x1ca\x08\xf2\x91\x90aTdV[\x90Pa\tea\t\x0ba\t\x04\x88\x84a9\xe1V[\x86\x90a:rV[a\t\x13a;\x07V[a\t[a\tL\x85a\tF`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x90a9\xe1V[a\tU\x8ca;\xc7V[\x90a:rV[\x88b\x01\xd4\xc0a=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xd9\x91\x90aS\x82V[\x90P`\0\x85`\x01`\x01`\xa0\x1b\x03\x16c\x9e\x99#\xc2`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\n\x1bW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n?\x91\x90aS\x82V[\x90P`\0\x86`\x01`\x01`\xa0\x1b\x03\x16c]\xf4YF`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\n\x81W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xa5\x91\x90aS\x82V[\x90P`\0\x86Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\n\xc2Wa\n\xc2aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\n\xf5W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\n\xe0W\x90P[P\x90P`\0[\x87Q\x81\x10\x15a\r\xfdW`\0\x88\x82\x81Q\x81\x10a\x0b\x18Wa\x0b\x18aTNV[\x01` \x01Q`@Qc\x89\x02bE`\xe0\x1b\x81R`\xf8\x91\x90\x91\x1c`\x04\x82\x01\x81\x90Rc\xff\xff\xff\xff\x8a\x16`$\x83\x01R\x91P`\0\x90`\x01`\x01`\xa0\x1b\x03\x87\x16\x90c\x89\x02bE\x90`D\x01`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0byW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x0b\xa1\x91\x90\x81\x01\x90aT\x86V[\x90P\x80Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\x0b\xbcWa\x0b\xbcaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0c\x07W\x81` \x01[`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x80\x83\x01\x82\x90R\x92\x82\x01R\x82R`\0\x19\x90\x92\x01\x91\x01\x81a\x0b\xdaW\x90P[P\x84\x84\x81Q\x81\x10a\x0c\x1aWa\x0c\x1aaTNV[` \x02` \x01\x01\x81\x90RP`\0[\x81Q\x81\x10\x15a\r\xe7W`@Q\x80``\x01`@R\x80\x87`\x01`\x01`\xa0\x1b\x03\x16cG\xb3\x14\xe8\x85\x85\x81Q\x81\x10a\x0c]Wa\x0c]aTNV[` \x02` \x01\x01Q`@Q\x82c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x0c\x83\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0c\xa0W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0c\xc4\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x16\x81R` \x01\x83\x83\x81Q\x81\x10a\x0c\xe4Wa\x0c\xe4aTNV[` \x02` \x01\x01Q\x81R` \x01\x89`\x01`\x01`\xa0\x1b\x03\x16c\xfa(\xc6'\x85\x85\x81Q\x81\x10a\r\x12Wa\r\x12aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x84\x90\x1b\x16\x81R`\x04\x81\x01\x91\x90\x91R`\xff\x88\x16`$\x82\x01Rc\xff\xff\xff\xff\x8f\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\rnW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r\x92\x91\x90aU\x16V[`\x01`\x01``\x1b\x03\x16\x81RP\x85\x85\x81Q\x81\x10a\r\xb0Wa\r\xb0aTNV[` \x02` \x01\x01Q\x82\x81Q\x81\x10a\r\xc9Wa\r\xc9aTNV[` \x02` \x01\x01\x81\x90RP\x80\x80a\r\xdf\x90aUUV[\x91PPa\x0c(V[PPP\x80\x80a\r\xf5\x90aUUV[\x91PPa\n\xfbV[P\x97\x96PPPPPPPV[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\x8d\xa5\xcb[`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0egW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0e\x8b\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\x0f7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\\`$\x82\x01R\x7fBLSSignatureChecker.onlyCoordina`D\x82\x01R\x7ftorOwner: caller is not the owne`d\x82\x01R\x7fr of the registryCoordinator\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x06\x95V[`\x97\x80T`\xff\x19\x16\x82\x15\x15\x90\x81\x17\x90\x91U`@Q\x90\x81R\x7f@\xe4\xed\x88\n)\xe0\xf6\xdd\xce0tW\xfbu\xcd\xdfO\xee\xf7\xd3\xec\xb00\x1b\xfd\xf4\x97j\x0e-\xfc\x90` \x01`@Q\x80\x91\x03\x90\xa1PV[a\x0f\xa9`@Q\x80`\x80\x01`@R\x80``\x81R` \x01``\x81R` \x01``\x81R` \x01``\x81RP\x90V[`\0\x87`\x01`\x01`\xa0\x1b\x03\x16ch0H5`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0f\xe9W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\r\x91\x90aS\x82V[\x90Pa\x10:`@Q\x80`\x80\x01`@R\x80``\x81R` \x01``\x81R` \x01``\x81R` \x01``\x81RP\x90V[`@Qca\xc8\xa1/`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x8a\x16\x90c\xc3\x91B^\x90a\x10j\x90\x8b\x90\x89\x90\x89\x90`\x04\x01aUnV[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x10\x87W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x10\xaf\x91\x90\x81\x01\x90aU\xb5V[\x81R`@Qc@\xe0:\x81`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x83\x16\x90c\x81\xc0u\x02\x90a\x10\xe1\x90\x8b\x90\x8b\x90\x8b\x90`\x04\x01aVlV[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x10\xfeW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x11&\x91\x90\x81\x01\x90aU\xb5V[`@\x82\x01R\x85`\x01`\x01`@\x1b\x03\x81\x11\x15a\x11CWa\x11CaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x11vW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x11aW\x90P[P``\x82\x01R`\0[`\xff\x81\x16\x87\x11\x15a\x15\xb7W`\0\x85`\x01`\x01`@\x1b\x03\x81\x11\x15a\x11\xa4Wa\x11\xa4aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x11\xcdW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x83``\x01Q\x83`\xff\x16\x81Q\x81\x10a\x11\xe7Wa\x11\xe7aTNV[` \x02` \x01\x01\x81\x90RP`\0[\x86\x81\x10\x15a\x14\xb7W`\0\x8c`\x01`\x01`\xa0\x1b\x03\x16c\x04\xeccQ\x8a\x8a\x85\x81\x81\x10a\x12 Wa\x12 aTNV[\x90P` \x02\x015\x8e\x88`\0\x01Q\x86\x81Q\x81\x10a\x12>Wa\x12>aTNV[` \x02` \x01\x01Q`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x12{\x93\x92\x91\x90\x92\x83Rc\xff\xff\xff\xff\x91\x82\x16` \x84\x01R\x16`@\x82\x01R``\x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x12\x98W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xbc\x91\x90aV\x95V[\x90P\x80`\x01`\x01`\xc0\x1b\x03\x16`\0\x03a\x13cW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\\`$\x82\x01R\x7fOperatorStateRetriever.getCheckS`D\x82\x01R\x7fignaturesIndices: operator must `d\x82\x01R\x7fbe registered at blocknumber\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x8a\x8a\x85`\xff\x16\x81\x81\x10a\x13xWa\x13xaTNV[`\x01`\x01`\x01`\xc0\x1b\x03\x85\x16\x91\x90\x93\x015`\xf8\x1c\x1c\x82\x16\x90\x91\x03\x90Pa\x14\xa4W\x85`\x01`\x01`\xa0\x1b\x03\x16c\xdd\x98F\xb9\x8a\x8a\x85\x81\x81\x10a\x13\xb9Wa\x13\xb9aTNV[\x90P` \x02\x015\x8d\x8d\x88`\xff\x16\x81\x81\x10a\x13\xd5Wa\x13\xd5aTNV[`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x87\x90\x1b\x16\x81R`\x04\x81\x01\x94\x90\x94R\x91\x90\x91\x015`\xf8\x1c`$\x83\x01RPc\xff\xff\xff\xff\x8f\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x14+W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14O\x91\x90aV\xbeV[\x85``\x01Q\x85`\xff\x16\x81Q\x81\x10a\x14hWa\x14haTNV[` \x02` \x01\x01Q\x84\x81Q\x81\x10a\x14\x81Wa\x14\x81aTNV[c\xff\xff\xff\xff\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x82a\x14\xa0\x81aUUV[\x93PP[P\x80a\x14\xaf\x81aUUV[\x91PPa\x11\xf5V[P`\0\x81`\x01`\x01`@\x1b\x03\x81\x11\x15a\x14\xd2Wa\x14\xd2aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x14\xfbW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x15|W\x84``\x01Q\x84`\xff\x16\x81Q\x81\x10a\x15\"Wa\x15\"aTNV[` \x02` \x01\x01Q\x81\x81Q\x81\x10a\x15;Wa\x15;aTNV[` \x02` \x01\x01Q\x82\x82\x81Q\x81\x10a\x15UWa\x15UaTNV[c\xff\xff\xff\xff\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x80a\x15t\x81aUUV[\x91PPa\x15\x01V[P\x80\x84``\x01Q\x84`\xff\x16\x81Q\x81\x10a\x15\x97Wa\x15\x97aTNV[` \x02` \x01\x01\x81\x90RPPP\x80\x80a\x15\xaf\x90aV\xdbV[\x91PPa\x11\x7fV[P`\0\x89`\x01`\x01`\xa0\x1b\x03\x16c]\xf4YF`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x15\xf8W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16\x1c\x91\x90aS\x82V[`@Qc5IR\xa3`\xe2\x1b\x81R\x90\x91P`\x01`\x01`\xa0\x1b\x03\x82\x16\x90c\xd5%J\x8c\x90a\x16O\x90\x8b\x90\x8b\x90\x8e\x90`\x04\x01aV\xfaV[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x16lW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x16\x94\x91\x90\x81\x01\x90aU\xb5V[` \x83\x01RP\x98\x97PPPPPPPPV[`eT`@Qc#}\xfbG`\xe1\x1b\x81R3`\x04\x82\x01R`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x90cF\xfb\xf6\x8e\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x16\xeeW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\x12\x91\x90aS\xe9V[a\x17.W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aT\x06V[`\0\x19`f\x81\x90U`@Q\x90\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2V[`\xcdT`\x01`\x01`\xa0\x1b\x03\x163\x14a\x17\xc7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1d`$\x82\x01R\x7fAggregator must be the caller\0\0\0`D\x82\x01R`d\x01a\x06\x95V[`\0a\x17\xd9`@\x85\x01` \x86\x01aH\xb7V[\x90P6`\0a\x17\xeb`@\x87\x01\x87aW$V[\x90\x92P\x90P`\0a\x18\x02`\x80\x88\x01``\x89\x01aH\xb7V[\x90P`\xca`\0a\x18\x15` \x89\x01\x89aH\xb7V[c\xff\xff\xff\xff\x16c\xff\xff\xff\xff\x16\x81R` \x01\x90\x81R` \x01`\0 T\x87`@Q` \x01a\x18A\x91\x90aWjV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x14a\x18\xcaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`=`$\x82\x01R\x7fsupplied task does not match the`D\x82\x01R\x7f one recorded in the contract\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`\0`\xcb\x81a\x18\xdc` \x8a\x01\x8aaH\xb7V[c\xff\xff\xff\xff\x16c\xff\xff\xff\xff\x16\x81R` \x01\x90\x81R` \x01`\0 T\x14a\x19YW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7fAggregator has already responded`D\x82\x01Rk to the task`\xa0\x1b`d\x82\x01R`\x84\x01a\x06\x95V[a\x19\x83\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85aX\x0cV[c\xff\xff\xff\xff\x16Cc\xff\xff\xff\xff\x16\x11\x15a\x19\xf4W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7fAggregator has responded to the `D\x82\x01Rltask too late`\x98\x1b`d\x82\x01R`\x84\x01a\x06\x95V[`\0\x86`@Q` \x01a\x1a\x07\x91\x90aXNV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\0\x80a\x1a/\x83\x87\x87\x8a\x8ca%'V[\x91P\x91P`\0[\x85\x81\x10\x15a\x1b.W\x84`\xff\x16\x83` \x01Q\x82\x81Q\x81\x10a\x1aXWa\x1aXaTNV[` \x02` \x01\x01Qa\x1aj\x91\x90aX\\V[`\x01`\x01``\x1b\x03\x16`d\x84`\0\x01Q\x83\x81Q\x81\x10a\x1a\x8bWa\x1a\x8baTNV[` \x02` \x01\x01Q`\x01`\x01``\x1b\x03\x16a\x1a\xa6\x91\x90aX\x7fV[\x10\x15a\x1b\x1cW`@\x80QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`$\x81\x01\x91\x90\x91R\x7fSignatories do not own at least `D\x82\x01R\x7fthreshold percentage of a quorum`d\x82\x01R`\x84\x01a\x06\x95V[\x80a\x1b&\x81aUUV[\x91PPa\x1a6V[P`@\x80Q\x80\x82\x01\x82Rc\xff\xff\xff\xffC\x16\x81R` \x80\x82\x01\x84\x90R\x91Q\x90\x91a\x1b[\x91\x8c\x91\x84\x91\x01aX\x96V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `\xcb`\0\x8c`\0\x01` \x81\x01\x90a\x1b\x88\x91\x90aH\xb7V[c\xff\xff\xff\xff\x16c\xff\xff\xff\xff\x16\x81R` \x01\x90\x81R` \x01`\0 \x81\x90UP\x7f4\x9c\x1e\xe6\x0eN\x89r\xee\x9d\xbad,\x17tT=\\A6\x87\x9b\x7fL\xaa\xf0K\xf8\x1aHz*\x8a\x82`@Qa\x1b\xd7\x92\x91\x90aX\x96V[`@Q\x80\x91\x03\x90\xa1PPPPPPPPPPPV[```\0\x84`\x01`\x01`\xa0\x1b\x03\x16c\xc3\x91B^\x84\x86`@Q\x83c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x1c\x1e\x92\x91\x90aX\xc2V[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x1c;W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra\x1cc\x91\x90\x81\x01\x90aU\xb5V[\x90P`\0\x84Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\x1c\x80Wa\x1c\x80aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1c\xa9W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x85Q\x81\x10\x15a\x1d\xaaW\x86`\x01`\x01`\xa0\x1b\x03\x16c\x04\xeccQ\x87\x83\x81Q\x81\x10a\x1c\xd9Wa\x1c\xd9aTNV[` \x02` \x01\x01Q\x87\x86\x85\x81Q\x81\x10a\x1c\xf4Wa\x1c\xf4aTNV[` \x02` \x01\x01Q`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a\x1d1\x93\x92\x91\x90\x92\x83Rc\xff\xff\xff\xff\x91\x82\x16` \x84\x01R\x16`@\x82\x01R``\x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x1dNW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1dr\x91\x90aV\x95V[`\x01`\x01`\xc0\x1b\x03\x16\x82\x82\x81Q\x81\x10a\x1d\x8dWa\x1d\x8daTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R\x80a\x1d\xa2\x81aUUV[\x91PPa\x1c\xafV[P\x95\x94PPPPPV[`\0a\x1d\xc3` \x85\x01\x85aH\xb7V[c\xff\xff\xff\xff\x81\x16`\0\x90\x81R`\xcb` R`@\x90 T\x90\x91P\x855\x90a\x1e5W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7fTask hasn't been responded to ye`D\x82\x01R`\x1d`\xfa\x1b`d\x82\x01R`\x84\x01a\x06\x95V[\x84\x84`@Q` \x01a\x1eH\x92\x91\x90aY\x16V[`@\x80Q`\x1f\x19\x81\x84\x03\x01\x81R\x91\x81R\x81Q` \x92\x83\x01 c\xff\xff\xff\xff\x85\x16`\0\x90\x81R`\xcb\x90\x93R\x91 T\x14a\x1e\xe7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`=`$\x82\x01R\x7fTask response does not match the`D\x82\x01R\x7f one recorded in the contract\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[c\xff\xff\xff\xff\x82\x16`\0\x90\x81R`\xcc` R`@\x90 T`\xff\x16\x15a\x1f\x7fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R\x7fThe response to this task has al`D\x82\x01R\x7fready been challenged successful`d\x82\x01Rb6<\x97`\xe9\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`da\x1f\x8e` \x86\x01\x86aH\xb7V[a\x1f\x98\x91\x90aX\x0cV[c\xff\xff\xff\xff\x16Cc\xff\xff\xff\xff\x16\x11\x15a \x19W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7fThe challenge period for this ta`D\x82\x01R\x7fsk has already expired.\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`\0a %\x82\x80aX\x7fV[\x90P` \x86\x015\x81\x14`\x01\x81\x90\x03a sW`@Q3\x90c\xff\xff\xff\xff\x86\x16\x90\x7f\xfd>&\xbe\xebYg\xfcZW\xa0Di\x14\xea\xbcE\xb4\xaaGLg\xa5\x1bKQ`\xca\xc6\r\xdb\x05\x90`\0\x90\xa3PPPPa#\x80V[`\0\x85Q`\x01`\x01`@\x1b\x03\x81\x11\x15a \x8eWa \x8eaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xb7W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x86Q\x81\x10\x15a!)Wa \xfa\x87\x82\x81Q\x81\x10a \xdbWa \xdbaTNV[` \x02` \x01\x01Q\x80Q`\0\x90\x81R` \x91\x82\x01Q\x90\x91R`@\x90 \x90V[\x82\x82\x81Q\x81\x10a!\x0cWa!\x0caTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R\x80a!!\x81aUUV[\x91PPa \xbdV[P`\0a!<`@\x8b\x01` \x8c\x01aH\xb7V[\x82`@Q` \x01a!N\x92\x91\x90aYLV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x87` \x015\x81\x14a!\xf8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`P`$\x82\x01R\x7fThe pubkeys of non-signing opera`D\x82\x01R\x7ftors supplied by the challenger `d\x82\x01Ro0\xb92\x9077\xba\x101\xb7\xb992\xb1\xba\x17`\x81\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`\0\x87Q`\x01`\x01`@\x1b\x03\x81\x11\x15a\"\x13Wa\"\x13aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\"=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\"\xf3\x91\x90aS\x82V[\x82\x82\x81Q\x81\x10a#\x05Wa#\x05aTNV[`\x01`\x01`\xa0\x1b\x03\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x80a#'\x81aUUV[\x91PPa\"BV[Pc\xff\xff\xff\xff\x87\x16`\0\x81\x81R`\xcc` R`@\x80\x82 \x80T`\xff\x19\x16`\x01\x17\x90UQ3\x92\x91\x7f\xc2\r\x1b\xb0\xf1b6\x800k\x83\xd4\xffK\xb9\x9a+\xeb\x9d\x86\xd9x2\xf3\xca@\xfd\x13\xa2\x9d\xf1\xec\x91\xa3PPPPPPP[PPPPV[`\xceT`\x01`\x01`\xa0\x1b\x03\x163\x14a#\xeaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7fTask generator must be the calle`D\x82\x01R`9`\xf9\x1b`d\x82\x01R`\x84\x01a\x06\x95V[a$!`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0c\xff\xff\xff\xff\x16\x81R` \x01``\x81R` \x01`\0c\xff\xff\xff\xff\x16\x81RP\x90V[\x84\x81Rc\xff\xff\xff\xffC\x81\x16` \x80\x84\x01\x91\x90\x91R\x90\x85\x16``\x83\x01R`@\x80Q`\x1f\x85\x01\x83\x90\x04\x83\x02\x81\x01\x83\x01\x90\x91R\x83\x81R\x90\x84\x90\x84\x90\x81\x90\x84\x01\x83\x82\x80\x82\x847`\0\x92\x01\x91\x90\x91RPPPP`@\x80\x83\x01\x91\x90\x91RQa$\x87\x90\x82\x90` \x01aY\x94V[`@\x80Q`\x1f\x19\x81\x84\x03\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 `\xc9\x80Tc\xff\xff\xff\xff\x90\x81\x16`\0\x90\x81R`\xca\x90\x94R\x93\x90\x92 UT\x16\x90\x7f\x16\x95\xb8\xd0n\xc8\0\xb4a^t\\\xfb[\xd0\x0c\x1f(ua]B\x92\\;Z\xfaT;\xb2LH\x90a$\xea\x90\x84\x90aY\x94V[`@Q\x80\x91\x03\x90\xa2`\xc9Ta%\x06\x90c\xff\xff\xff\xff\x16`\x01aX\x0cV[`\xc9\x80Tc\xff\xff\xff\xff\x19\x16c\xff\xff\xff\xff\x92\x90\x92\x16\x91\x90\x91\x17\x90UPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R``\x80\x82R` \x82\x01R`\0\x84\x81\x03a%\xa0W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`7`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: empty quorum input\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`@\x83\x01QQ\x85\x14\x80\x15a%\xb8WP`\xa0\x83\x01QQ\x85\x14[\x80\x15a%\xc8WP`\xc0\x83\x01QQ\x85\x14[\x80\x15a%\xd8WP`\xe0\x83\x01QQ\x85\x14[a&BW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`A`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: input quorum length mismatc`d\x82\x01R`\r`\xfb\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x82QQ` \x84\x01QQ\x14a&\xbaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R`\0\x80Q` aZ\xff\x839\x81Q\x91R\x90\x82\x01R\x7fres: input nonsigner length mism`d\x82\x01Rc\x0c.\x8cm`\xe3\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[Cc\xff\xff\xff\xff\x16\x84c\xff\xff\xff\xff\x16\x10a')W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`<`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: invalid reference block\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x80\x83\x01\x91\x90\x91R\x82Q\x80\x84\x01\x90\x93R``\x80\x84R\x90\x83\x01R\x90\x86`\x01`\x01`@\x1b\x03\x81\x11\x15a'jWa'jaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a'\x93W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P` \x82\x01R\x86`\x01`\x01`@\x1b\x03\x81\x11\x15a'\xb1Wa'\xb1aF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a'\xdaW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R`@\x80Q\x80\x82\x01\x90\x91R``\x80\x82R` \x82\x01R\x85` \x01QQ`\x01`\x01`@\x1b\x03\x81\x11\x15a(\x0eWa(\x0eaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a(7W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x86\x01QQ`\x01`\x01`@\x1b\x03\x81\x11\x15a(WWa(WaF\xf8V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a(\x80W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81` \x01\x81\x90RP`\0a)R\x8a\x8a\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPP`@\x80Qc\x9a\xa1e=`\xe0\x1b\x81R\x90Q`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93Pc\x9a\xa1e=\x92P`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xfa\x15\x80\x15a))W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a)M\x91\x90aZ\x16V[a>zV[\x90P`\0[\x87` \x01QQ\x81\x10\x15a+\xceWa)}\x88` \x01Q\x82\x81Q\x81\x10a \xdbWa \xdbaTNV[\x83` \x01Q\x82\x81Q\x81\x10a)\x93Wa)\x93aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R\x80\x15a*SW` \x83\x01Qa)\xb4`\x01\x83aZ3V[\x81Q\x81\x10a)\xc4Wa)\xc4aTNV[` \x02` \x01\x01Q`\0\x1c\x83` \x01Q\x82\x81Q\x81\x10a)\xe5Wa)\xe5aTNV[` \x02` \x01\x01Q`\0\x1c\x11a*SW`@\x80QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`$\x81\x01\x91\x90\x91R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: nonSignerPubkeys not sorted`d\x82\x01R`\x84\x01a\x06\x95V[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\x04\xeccQ\x84` \x01Q\x83\x81Q\x81\x10a*\x98Wa*\x98aTNV[` \x02` \x01\x01Q\x8b\x8b`\0\x01Q\x85\x81Q\x81\x10a*\xb7Wa*\xb7aTNV[` \x02` \x01\x01Q`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a*\xf4\x93\x92\x91\x90\x92\x83Rc\xff\xff\xff\xff\x91\x82\x16` \x84\x01R\x16`@\x82\x01R``\x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a+\x11W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a+5\x91\x90aV\x95V[`\x01`\x01`\xc0\x1b\x03\x16\x83`\0\x01Q\x82\x81Q\x81\x10a+TWa+TaTNV[` \x02` \x01\x01\x81\x81RPPa+\xbaa\t\x04a+\x8e\x84\x86`\0\x01Q\x85\x81Q\x81\x10a+\x80Wa+\x80aTNV[` \x02` \x01\x01Q\x16a?\rV[\x8a` \x01Q\x84\x81Q\x81\x10a+\xa4Wa+\xa4aTNV[` \x02` \x01\x01Qa?8\x90\x91\x90c\xff\xff\xff\xff\x16V[\x94P\x80a+\xc6\x81aUUV[\x91PPa)WV[PPa+\xd9\x83a@\x1bV[`\x97T\x90\x93P`\xff\x16`\0\x81a+\xf0W`\0a,rV[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xc4H\xfe\xb8`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a,NW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a,r\x91\x90aZFV[\x90P`\0[\x8a\x81\x10\x15a2\xf0W\x82\x15a-\xd2W\x89c\xff\xff\xff\xff\x16\x82\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c$\x9a\x0cB\x8f\x8f\x86\x81\x81\x10a,\xceWa,\xceaTNV[`@Q`\xe0\x85\x90\x1b`\x01`\x01`\xe0\x1b\x03\x19\x16\x81R\x92\x015`\xf8\x1c`\x04\x83\x01RP`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a-\x0eW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a-2\x91\x90aZFV[a-<\x91\x90aZ_V[\x11a-\xd2W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`f`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: StakeRegistry updates must `d\x82\x01R\x7fbe within withdrawalDelayBlocks `\x84\x82\x01Rewindow`\xd0\x1b`\xa4\x82\x01R`\xc4\x01a\x06\x95V[\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16ch\xbc\xca\xac\x8d\x8d\x84\x81\x81\x10a.\x13Wa.\x13aTNV[\x90P\x015`\xf8\x1c`\xf8\x1b`\xf8\x1c\x8c\x8c`\xa0\x01Q\x85\x81Q\x81\x10a.7Wa.7aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x86\x90\x1b\x16\x81R`\xff\x90\x93\x16`\x04\x84\x01Rc\xff\xff\xff\xff\x91\x82\x16`$\x84\x01R\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a.\x93W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a.\xb7\x91\x90aZrV[`\x01`\x01`@\x1b\x03\x19\x16a.\xda\x8a`@\x01Q\x83\x81Q\x81\x10a \xdbWa \xdbaTNV[g\xff\xff\xff\xff\xff\xff\xff\xff\x19\x16\x14a/vW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`a`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: quorumApk hash in storage d`d\x82\x01R\x7foes not match provided quorum ap`\x84\x82\x01R`k`\xf8\x1b`\xa4\x82\x01R`\xc4\x01a\x06\x95V[a/\xa6\x89`@\x01Q\x82\x81Q\x81\x10a/\x8fWa/\x8faTNV[` \x02` \x01\x01Q\x87a:r\x90\x91\x90c\xff\xff\xff\xff\x16V[\x95P\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xc8)LV\x8d\x8d\x84\x81\x81\x10a/\xe9Wa/\xe9aTNV[\x90P\x015`\xf8\x1c`\xf8\x1b`\xf8\x1c\x8c\x8c`\xc0\x01Q\x85\x81Q\x81\x10a0\rWa0\raTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x86\x90\x1b\x16\x81R`\xff\x90\x93\x16`\x04\x84\x01Rc\xff\xff\xff\xff\x91\x82\x16`$\x84\x01R\x16`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a0iW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a0\x8d\x91\x90aU\x16V[\x85` \x01Q\x82\x81Q\x81\x10a0\xa3Wa0\xa3aTNV[`\x01`\x01``\x1b\x03\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x82\x01R\x85\x01Q\x80Q\x82\x90\x81\x10a0\xcfWa0\xcfaTNV[` \x02` \x01\x01Q\x85`\0\x01Q\x82\x81Q\x81\x10a0\xedWa0\xedaTNV[` \x02` \x01\x01\x90`\x01`\x01``\x1b\x03\x16\x90\x81`\x01`\x01``\x1b\x03\x16\x81RPP`\0\x80[\x8a` \x01QQ\x81\x10\x15a2\xdbWa1e\x86`\0\x01Q\x82\x81Q\x81\x10a17Wa17aTNV[` \x02` \x01\x01Q\x8f\x8f\x86\x81\x81\x10a1QWa1QaTNV[`\x01\x92\x015`\xf8\x1c\x92\x90\x92\x1c\x81\x16\x14\x91\x90PV[\x15a2\xc9W\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xf2\xbe\x94\xae\x8f\x8f\x86\x81\x81\x10a1\xabWa1\xabaTNV[\x90P\x015`\xf8\x1c`\xf8\x1b`\xf8\x1c\x8e\x89` \x01Q\x85\x81Q\x81\x10a1\xcfWa1\xcfaTNV[` \x02` \x01\x01Q\x8f`\xe0\x01Q\x88\x81Q\x81\x10a1\xedWa1\xedaTNV[` \x02` \x01\x01Q\x87\x81Q\x81\x10a2\x06Wa2\x06aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Q`\x01`\x01`\xe0\x1b\x03\x19`\xe0\x87\x90\x1b\x16\x81R`\xff\x90\x94\x16`\x04\x85\x01Rc\xff\xff\xff\xff\x92\x83\x16`$\x85\x01R`D\x84\x01\x91\x90\x91R\x16`d\x82\x01R`\x84\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a2jW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a2\x8e\x91\x90aU\x16V[\x87Q\x80Q\x85\x90\x81\x10a2\xa2Wa2\xa2aTNV[` \x02` \x01\x01\x81\x81Qa2\xb6\x91\x90aZ\x9dV[`\x01`\x01``\x1b\x03\x16\x90RP`\x01\x90\x91\x01\x90[\x80a2\xd3\x81aUUV[\x91PPa1\x11V[PP\x80\x80a2\xe8\x90aUUV[\x91PPa,wV[PPP`\0\x80a3\n\x8c\x86\x8a``\x01Q\x8b`\x80\x01Qa\x07\xe9V[\x91P\x91P\x81a3{W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: pairing precompile call fai`d\x82\x01Rb\x1b\x19Y`\xea\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x80a3\xdcW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`9`$\x82\x01R`\0\x80Q` aZ\xff\x839\x81Q\x91R`D\x82\x01R\x7fres: signature is invalid\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[PP`\0\x87\x82` \x01Q`@Q` \x01a3\xf7\x92\x91\x90aYLV[`@\x80Q\x80\x83\x03`\x1f\x19\x01\x81R\x91\x90R\x80Q` \x90\x91\x01 \x92\x9b\x92\x9aP\x91\x98PPPPPPPPPV[a4)a@\xb6V[a43`\0aA\x10V[V[`@\x80Q`\x01\x80\x82R\x81\x83\x01\x90\x92R`\0\x91``\x91\x83\x91` \x80\x83\x01\x90\x806\x837\x01\x90PP\x90P\x84\x81`\0\x81Q\x81\x10a4pWa4paTNV[` \x90\x81\x02\x91\x90\x91\x01\x01R`@Qca\xc8\xa1/`\xe1\x1b\x81R`\0\x90`\x01`\x01`\xa0\x1b\x03\x88\x16\x90c\xc3\x91B^\x90a4\xac\x90\x88\x90\x86\x90`\x04\x01aX\xc2V[`\0`@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a4\xc9W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra4\xf1\x91\x90\x81\x01\x90aU\xb5V[`\0\x81Q\x81\x10a5\x03Wa5\x03aTNV[` \x90\x81\x02\x91\x90\x91\x01\x01Q`@Qc\x04\xeccQ`\xe0\x1b\x81R`\x04\x81\x01\x88\x90Rc\xff\xff\xff\xff\x87\x81\x16`$\x83\x01R\x90\x91\x16`D\x82\x01\x81\x90R\x91P`\0\x90`\x01`\x01`\xa0\x1b\x03\x89\x16\x90c\x04\xeccQ\x90`d\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a5oW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a5\x93\x91\x90aV\x95V[`\x01`\x01`\xc0\x1b\x03\x16\x90P`\0a5\xa9\x82aAbV[\x90P\x81a5\xb7\x8a\x83\x8aa\tsV[\x95P\x95PPPPP\x93P\x93\x91PPV[a5\xcfa@\xb6V[`\x01`\x01`\xa0\x1b\x03\x81\x16a64W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7fOwnable: new owner is the zero a`D\x82\x01Reddress`\xd0\x1b`d\x82\x01R`\x84\x01a\x06\x95V[a\x06\xa7\x81aA\x10V[`\0Ta\x01\0\x90\x04`\xff\x16\x15\x80\x80\x15a6]WP`\0T`\x01`\xff\x90\x91\x16\x10[\x80a6wWP0;\x15\x80\x15a6wWP`\0T`\xff\x16`\x01\x14[a6\xdaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7fInitializable: contract is alrea`D\x82\x01Rm\x19\x1eH\x1a[\x9a]\x1aX[\x1a^\x99Y`\x92\x1b`d\x82\x01R`\x84\x01a\x06\x95V[`\0\x80T`\xff\x19\x16`\x01\x17\x90U\x80\x15a6\xfdW`\0\x80Ta\xff\0\x19\x16a\x01\0\x17\x90U[a7\x08\x85`\0aB.V[a7\x11\x84aA\x10V[`\xcd\x80T`\x01`\x01`\xa0\x1b\x03\x80\x86\x16`\x01`\x01`\xa0\x1b\x03\x19\x92\x83\x16\x17\x90\x92U`\xce\x80T\x92\x85\x16\x92\x90\x91\x16\x91\x90\x91\x17\x90U\x80\x15a7\x87W`\0\x80Ta\xff\0\x19\x16\x90U`@Q`\x01\x81R\x7f\x7f&\xb8?\xf9n\x1f+jh/\x138R\xf6y\x8a\t\xc4e\xda\x95\x92\x14`\xce\xfb8G@$\x98\x90` \x01`@Q\x80\x91\x03\x90\xa1[PPPPPV[`e`\0\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xa0\x1b\x03\x16`\x01`\x01`\xa0\x1b\x03\x16c\xea\xb6mz`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a7\xe1W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a8\x05\x91\x90aS\x82V[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a85W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x06\x95\x90aS\x9fV[`fT\x19\x81\x19`fT\x19\x16\x14a8\xb3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.unpause: invalid attemp`D\x82\x01R\x7ft to pause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06\x95V[`f\x81\x90U`@Q\x81\x81R3\x90\x7f5\x82\xd1\x82\x8e&\xbfV\xbd\x80\x15\x02\xbc\x02\x1a\xc0\xbc\x8a\xfbW\xc8&\xe4\x98kEY<\x8f\xad8\x9c\x90` \x01a\x07\xdeV[`\x01`\x01`\xa0\x1b\x03\x81\x16a9xW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`I`$\x82\x01R\x7fPausable._setPauserRegistry: new`D\x82\x01R\x7fPauserRegistry cannot be the zer`d\x82\x01Rho address`\xb8\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`eT`@\x80Q`\x01`\x01`\xa0\x1b\x03\x92\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7fn\x9f\xcdS\x98\x96\xfc\xa6\x0e\x8b\x0f\x01\xddX\x023\xe4\x8ak\x0f}\xf0\x13\xb8\x9b\xa7\xf5e\x86\x9a\xcd\xb6\x91\x01`@Q\x80\x91\x03\x90\xa1`e\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra9\xfdaE\xd3V[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R`\0\x90\x83``\x84`\x07a\x07\xd0Z\x03\xfa\x90P\x80\x80a:,W\xfe[P\x80a:jW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\r`$\x82\x01Rl\x19X\xcb[][\x0bY\x98Z[\x19Y`\x9a\x1b`D\x82\x01R`d\x01a\x06\x95V[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra:\x8eaE\xf1V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R`\0\x90\x83`\x80\x84`\x06a\x07\xd0Z\x03\xfa\x90P\x80\x80a:\xc9W\xfe[P\x80a:jW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\r`$\x82\x01Rl\x19X\xcbXY\x19\x0bY\x98Z[\x19Y`\x9a\x1b`D\x82\x01R`d\x01a\x06\x95V[a;\x0faF\x0fV[P`@\x80Q`\x80\x81\x01\x82R\x7f\x19\x8e\x93\x93\x92\rH:r`\xbf\xb71\xfb]%\xf1\xaaI35\xa9\xe7\x12\x97\xe4\x85\xb7\xae\xf3\x12\xc2\x81\x83\x01\x90\x81R\x7f\x18\0\xde\xef\x12\x1f\x1evBj\0f^\\DygC\"\xd4\xf7^\xda\xddF\xde\xbd\\\xd9\x92\xf6\xed``\x83\x01R\x81R\x81Q\x80\x83\x01\x90\x92R\x7f']\xc4\xa2\x88\xd1\xaf\xb3\xcb\xb1\xac\t\x18u$\xc7\xdb69]\xf7\xbe;\x99\xe6s\xb1:\x07Ze\xec\x82R\x7f\x1d\x9b\xef\xcd\x05\xa52>m\xa4\xd45\xf3\xb6\x17\xcd\xb3\xaf\x83(\\-\xf7\x11\xef9\xc0\x15q\x82\x7f\x9d` \x83\x81\x01\x91\x90\x91R\x81\x01\x91\x90\x91R\x90V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0\x80\x80a;\xf7`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x86aTdV[\x90P[a<\x03\x81aC\x18V[\x90\x93P\x91P`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x82\x83\t\x83\x03a<MW`\0a<\xa1\x82`\x06aX\x7fV[\x90P\x84\x82`\x02\x81\x10a<\xb5Wa<\xb5aTNV[` \x02\x01QQ\x83a<\xc7\x83`\0aZ_V[`\x0c\x81\x10a<\xd7Wa<\xd7aTNV[` \x02\x01R\x84\x82`\x02\x81\x10a<\xeeWa<\xeeaTNV[` \x02\x01Q` \x01Q\x83\x82`\x01a=\x05\x91\x90aZ_V[`\x0c\x81\x10a=\x15Wa=\x15aTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=,Wa=,aTNV[` \x02\x01QQQ\x83a=?\x83`\x02aZ_V[`\x0c\x81\x10a=OWa=OaTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=fWa=faTNV[` \x02\x01QQ`\x01` \x02\x01Q\x83a=\x7f\x83`\x03aZ_V[`\x0c\x81\x10a=\x8fWa=\x8faTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=\xa6Wa=\xa6aTNV[` \x02\x01Q` \x01Q`\0`\x02\x81\x10a=\xc1Wa=\xc1aTNV[` \x02\x01Q\x83a=\xd2\x83`\x04aZ_V[`\x0c\x81\x10a=\xe2Wa=\xe2aTNV[` \x02\x01R\x83\x82`\x02\x81\x10a=\xf9Wa=\xf9aTNV[` \x02\x01Q` \x01Q`\x01`\x02\x81\x10a>\x14Wa>\x14aTNV[` \x02\x01Q\x83a>%\x83`\x05aZ_V[`\x0c\x81\x10a>5Wa>5aTNV[` \x02\x01RP\x80a>E\x81aUUV[\x91PPa<\x8bV[Pa>VaFSV[`\0` \x82a\x01\x80\x85`\x08\x8c\xfa\x91Q\x91\x9c\x91\x15\x15\x9bP\x90\x99PPPPPPPPPPV[`\0\x80a>\x86\x84aC\x9aV[\x90P\x80\x83`\xff\x16`\x01\x90\x1b\x11a?\x04W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`?`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: bitmap exceeds max value\0`d\x82\x01R`\x84\x01a\x06\x95V[\x90P[\x92\x91PPV[`\0\x80[\x82\x15a?\x07Wa?\"`\x01\x84aZ3V[\x90\x92\x16\x91\x80a?0\x81aZ\xbdV[\x91PPa?\x11V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra\x02\0\x82a\xff\xff\x16\x10a?\x94W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x10`$\x82\x01Roscalar-too-large`\x80\x1b`D\x82\x01R`d\x01a\x06\x95V[\x81a\xff\xff\x16`\x01\x03a?\xa7WP\x81a?\x07V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01\x81\x90R\x84\x90`\x01\x90[\x81a\xff\xff\x16\x86a\xff\xff\x16\x10a@\x10W`\x01a\xff\xff\x87\x16`\xff\x83\x16\x1c\x81\x16\x90\x03a?\xf3Wa?\xf0\x84\x84a:rV[\x93P[a?\xfd\x83\x84a:rV[\x92Pb\x01\xff\xfe`\x01\x92\x83\x1b\x16\x91\x01a?\xc3V[P\x91\x95\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q\x15\x80\x15a@@WP` \x82\x01Q\x15[\x15a@^WPP`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x84` \x01Qa@\x91\x91\x90aTdV[a@\xa9\x90`\0\x80Q` aZ\xdf\x839\x81Q\x91RaZ3V[\x90R\x92\x91PPV[\x91\x90PV[`3T`\x01`\x01`\xa0\x1b\x03\x163\x14a43W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7fOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x95V[`3\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x90\x93U`@Q\x91\x16\x91\x90\x82\x90\x7f\x8b\xe0\x07\x9cS\x16Y\x14\x13D\xcd\x1f\xd0\xa4\xf2\x84\x19I\x7f\x97\"\xa3\xda\xaf\xe3\xb4\x18okdW\xe0\x90`\0\x90\xa3PPV[```\0\x80aAp\x84a?\rV[a\xff\xff\x16`\x01`\x01`@\x1b\x03\x81\x11\x15aA\x8bWaA\x8baF\xf8V[`@Q\x90\x80\x82R\x80`\x1f\x01`\x1f\x19\x16` \x01\x82\x01`@R\x80\x15aA\xb5W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x80[\x82Q\x82\x10\x80\x15aA\xcdWPa\x01\0\x81\x10[\x15aB$W`\x01\x81\x1b\x93P\x85\x84\x16\x15aB\x14W\x80`\xf8\x1b\x83\x83\x81Q\x81\x10aA\xf6WaA\xf6aTNV[` \x01\x01\x90`\x01`\x01`\xf8\x1b\x03\x19\x16\x90\x81`\0\x1a\x90SP\x81`\x01\x01\x91P[aB\x1d\x81aUUV[\x90PaA\xbcV[P\x90\x94\x93PPPPV[`eT`\x01`\x01`\xa0\x1b\x03\x16\x15\x80\x15aBOWP`\x01`\x01`\xa0\x1b\x03\x82\x16\x15\x15[aB\xd1W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fPausable._initializePauser: _ini`D\x82\x01R\x7ftializePauser() can only be call`d\x82\x01Rfed once`\xc8\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[`f\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2aC\x14\x82a8\xeaV[PPV[`\0\x80\x80`\0\x80Q` aZ\xdf\x839\x81Q\x91R`\x03`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x86`\0\x80Q` aZ\xdf\x839\x81Q\x91R\x88\x89\t\t\x08\x90P`\0aC\x8e\x82\x7f\x0c\x19\x13\x9c\xb8Lh\nn\x14\x11m\xa0`V\x17e\xe0Z\xa4Z\x1cr\xa3O\x08#\x05\xb6\x1f?R`\0\x80Q` aZ\xdf\x839\x81Q\x91RaE*V[\x91\x95\x91\x94P\x90\x92PPPV[`\0a\x01\0\x82Q\x11\x15aD#W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R\x7fBitmapUtils.orderedBytesArrayToB\x90\x82\x01R\x7fitmap: orderedBytesArray is too `d\x82\x01Rclong`\xe0\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x81Q`\0\x03aD4WP`\0\x91\x90PV[`\0\x80\x83`\0\x81Q\x81\x10aDJWaDJaTNV[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x81\x90\x1b\x92P[\x84Q\x81\x10\x15aE!W\x84\x81\x81Q\x81\x10aDxWaDxaTNV[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x1b\x91P\x82\x82\x11aE\rW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: orderedBytesArray is not `d\x82\x01Rf\x1b\xdc\x99\x19\\\x99Y`\xca\x1b`\x84\x82\x01R`\xa4\x01a\x06\x95V[\x91\x81\x17\x91aE\x1a\x81aUUV[\x90PaD]V[P\x90\x93\x92PPPV[`\0\x80aE5aFSV[aE=aFqV[` \x80\x82R\x81\x81\x01\x81\x90R`@\x82\x01\x81\x90R``\x82\x01\x88\x90R`\x80\x82\x01\x87\x90R`\xa0\x82\x01\x86\x90R\x82`\xc0\x83`\x05a\x07\xd0Z\x03\xfa\x92P\x82\x80aEzW\xfe[P\x82aE\xc8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1a`$\x82\x01R\x7fBN254.expMod: call failure\0\0\0\0\0\0`D\x82\x01R`d\x01a\x06\x95V[PQ\x95\x94PPPPPV[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`@\x01`@R\x80aF\"aF\x8fV[\x81R` \x01aF/aF\x8fV[\x90R\x90V[`@Q\x80a\x01\x80\x01`@R\x80`\x0c\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80` \x01`@R\x80`\x01\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xc0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`@\x01`@R\x80`\x02\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x06\xa7W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aF\xd4W`\0\x80\xfd[\x815a?\x04\x81aF\xadV[`\0` \x82\x84\x03\x12\x15aF\xf1W`\0\x80\xfd[P5\x91\x90PV[cNH{q`\xe0\x1b`\0R`A`\x04R`$`\0\xfd[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aG0WaG0aF\xf8V[`@R\x90V[`@Qa\x01\0\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aG0WaG0aF\xf8V[`@Q`\x1f\x82\x01`\x1f\x19\x16\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aG\x81WaG\x81aF\xf8V[`@R\x91\x90PV[`\0`@\x82\x84\x03\x12\x15aG\x9bW`\0\x80\xfd[aG\xa3aG\x0eV[\x90P\x815\x81R` \x82\x015` \x82\x01R\x92\x91PPV[`\0\x82`\x1f\x83\x01\x12aG\xcaW`\0\x80\xfd[aG\xd2aG\x0eV[\x80`@\x84\x01\x85\x81\x11\x15aG\xe4W`\0\x80\xfd[\x84[\x81\x81\x10\x15aG\xfeW\x805\x84R` \x93\x84\x01\x93\x01aG\xe6V[P\x90\x95\x94PPPPPV[`\0`\x80\x82\x84\x03\x12\x15aH\x1bW`\0\x80\xfd[aH#aG\x0eV[\x90PaH/\x83\x83aG\xb9V[\x81RaH>\x83`@\x84\x01aG\xb9V[` \x82\x01R\x92\x91PPV[`\0\x80`\0\x80a\x01 \x85\x87\x03\x12\x15aH`W`\0\x80\xfd[\x845\x93PaHq\x86` \x87\x01aG\x89V[\x92PaH\x80\x86``\x87\x01aH\tV[\x91PaH\x8f\x86`\xe0\x87\x01aG\x89V[\x90P\x92\x95\x91\x94P\x92PV[c\xff\xff\xff\xff\x81\x16\x81\x14a\x06\xa7W`\0\x80\xfd[\x805a@\xb1\x81aH\x9aV[`\0` \x82\x84\x03\x12\x15aH\xc9W`\0\x80\xfd[\x815a?\x04\x81aH\x9aV[`\0\x80`\0``\x84\x86\x03\x12\x15aH\xe9W`\0\x80\xfd[\x835aH\xf4\x81aF\xadV[\x92P` \x84\x81\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aI\x11W`\0\x80\xfd[\x81\x87\x01\x91P\x87`\x1f\x83\x01\x12aI%W`\0\x80\xfd[\x815\x81\x81\x11\x15aI7WaI7aF\xf8V[aII`\x1f\x82\x01`\x1f\x19\x16\x85\x01aGYV[\x91P\x80\x82R\x88\x84\x82\x85\x01\x01\x11\x15aI_W`\0\x80\xfd[\x80\x84\x84\x01\x85\x84\x017`\0\x84\x82\x84\x01\x01RP\x80\x94PPPPaI\x82`@\x85\x01aH\xacV[\x90P\x92P\x92P\x92V[`\0\x81Q\x80\x84R` \x80\x85\x01\x80\x81\x96P\x83`\x05\x1b\x81\x01\x91P\x82\x86\x01`\0\x80[\x86\x81\x10\x15aJ!W\x83\x85\x03\x8aR\x82Q\x80Q\x80\x87R\x90\x87\x01\x90\x87\x87\x01\x90\x84[\x81\x81\x10\x15aJ\x0cW\x83Q\x80Q`\x01`\x01`\xa0\x1b\x03\x16\x84R\x8a\x81\x01Q\x8b\x85\x01R`@\x90\x81\x01Q`\x01`\x01``\x1b\x03\x16\x90\x84\x01R\x92\x89\x01\x92``\x90\x92\x01\x91`\x01\x01aI\xc8V[PP\x9a\x87\x01\x9a\x95PP\x91\x85\x01\x91`\x01\x01aI\xaaV[P\x92\x98\x97PPPPPPPPV[` \x81R`\0aJB` \x83\x01\x84aI\x8bV[\x93\x92PPPV[\x80\x15\x15\x81\x14a\x06\xa7W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aJiW`\0\x80\xfd[\x815a?\x04\x81aJIV[`\0\x80\x83`\x1f\x84\x01\x12aJ\x86W`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aJ\x9dW`\0\x80\xfd[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15aJ\xb5W`\0\x80\xfd[\x92P\x92\x90PV[`\0\x80`\0\x80`\0\x80`\x80\x87\x89\x03\x12\x15aJ\xd5W`\0\x80\xfd[\x865aJ\xe0\x81aF\xadV[\x95P` \x87\x015aJ\xf0\x81aH\x9aV[\x94P`@\x87\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aK\x0cW`\0\x80\xfd[aK\x18\x8a\x83\x8b\x01aJtV[\x90\x96P\x94P``\x89\x015\x91P\x80\x82\x11\x15aK1W`\0\x80\xfd[\x81\x89\x01\x91P\x89`\x1f\x83\x01\x12aKEW`\0\x80\xfd[\x815\x81\x81\x11\x15aKTW`\0\x80\xfd[\x8a` \x82`\x05\x1b\x85\x01\x01\x11\x15aKiW`\0\x80\xfd[` \x83\x01\x94P\x80\x93PPPP\x92\x95P\x92\x95P\x92\x95V[`\0\x81Q\x80\x84R` \x80\x85\x01\x94P\x80\x84\x01`\0[\x83\x81\x10\x15aK\xb5W\x81Qc\xff\xff\xff\xff\x16\x87R\x95\x82\x01\x95\x90\x82\x01\x90`\x01\x01aK\x93V[P\x94\x95\x94PPPPPV[`\0` \x80\x83R\x83Q`\x80\x82\x85\x01RaK\xdc`\xa0\x85\x01\x82aK\x7fV[\x90P\x81\x85\x01Q`\x1f\x19\x80\x86\x84\x03\x01`@\x87\x01RaK\xf9\x83\x83aK\x7fV[\x92P`@\x87\x01Q\x91P\x80\x86\x84\x03\x01``\x87\x01RaL\x16\x83\x83aK\x7fV[``\x88\x01Q\x87\x82\x03\x83\x01`\x80\x89\x01R\x80Q\x80\x83R\x91\x94P\x85\x01\x92P\x84\x84\x01\x90`\x05\x81\x90\x1b\x85\x01\x86\x01`\0[\x82\x81\x10\x15aLmW\x84\x87\x83\x03\x01\x84RaL[\x82\x87QaK\x7fV[\x95\x88\x01\x95\x93\x88\x01\x93\x91P`\x01\x01aLAV[P\x99\x98PPPPPPPPPV[`\xff\x81\x16\x81\x14a\x06\xa7W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aL\x9cW`\0\x80\xfd[\x815a?\x04\x81aL{V[`\0`\x80\x82\x84\x03\x12\x15aL\xb9W`\0\x80\xfd[P\x91\x90PV[`\0`@\x82\x84\x03\x12\x15aL\xb9W`\0\x80\xfd[`\0`\x01`\x01`@\x1b\x03\x82\x11\x15aL\xeaWaL\xeaaF\xf8V[P`\x05\x1b` \x01\x90V[`\0\x82`\x1f\x83\x01\x12aM\x05W`\0\x80\xfd[\x815` aM\x1aaM\x15\x83aL\xd1V[aGYV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aM9W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aM]W\x805aMP\x81aH\x9aV[\x83R\x91\x83\x01\x91\x83\x01aM=V[P\x96\x95PPPPPPV[`\0\x82`\x1f\x83\x01\x12aMyW`\0\x80\xfd[\x815` aM\x89aM\x15\x83aL\xd1V[\x82\x81R`\x06\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aM\xa8W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aM]WaM\xbe\x88\x82aG\x89V[\x83R\x91\x83\x01\x91`@\x01aM\xacV[`\0\x82`\x1f\x83\x01\x12aM\xddW`\0\x80\xfd[\x815` aM\xedaM\x15\x83aL\xd1V[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aN\x0cW`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aM]W\x805`\x01`\x01`@\x1b\x03\x81\x11\x15aN/W`\0\x80\x81\xfd[aN=\x89\x86\x83\x8b\x01\x01aL\xf4V[\x84RP\x91\x83\x01\x91\x83\x01aN\x10V[`\0a\x01\x80\x82\x84\x03\x12\x15aN^W`\0\x80\xfd[aNfaG6V[\x90P\x815`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aN\x7fW`\0\x80\xfd[aN\x8b\x85\x83\x86\x01aL\xf4V[\x83R` \x84\x015\x91P\x80\x82\x11\x15aN\xa1W`\0\x80\xfd[aN\xad\x85\x83\x86\x01aMhV[` \x84\x01R`@\x84\x015\x91P\x80\x82\x11\x15aN\xc6W`\0\x80\xfd[aN\xd2\x85\x83\x86\x01aMhV[`@\x84\x01RaN\xe4\x85``\x86\x01aH\tV[``\x84\x01RaN\xf6\x85`\xe0\x86\x01aG\x89V[`\x80\x84\x01Ra\x01 \x84\x015\x91P\x80\x82\x11\x15aO\x10W`\0\x80\xfd[aO\x1c\x85\x83\x86\x01aL\xf4V[`\xa0\x84\x01Ra\x01@\x84\x015\x91P\x80\x82\x11\x15aO6W`\0\x80\xfd[aOB\x85\x83\x86\x01aL\xf4V[`\xc0\x84\x01Ra\x01`\x84\x015\x91P\x80\x82\x11\x15aO\\W`\0\x80\xfd[PaOi\x84\x82\x85\x01aM\xccV[`\xe0\x83\x01RP\x92\x91PPV[`\0\x80`\0`\x80\x84\x86\x03\x12\x15aO\x8aW`\0\x80\xfd[\x835`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aO\xa1W`\0\x80\xfd[aO\xad\x87\x83\x88\x01aL\xa7V[\x94PaO\xbc\x87` \x88\x01aL\xbfV[\x93P``\x86\x015\x91P\x80\x82\x11\x15aO\xd2W`\0\x80\xfd[PaO\xdf\x86\x82\x87\x01aNKV[\x91PP\x92P\x92P\x92V[`\0\x80`\0``\x84\x86\x03\x12\x15aO\xfeW`\0\x80\xfd[\x835aP\t\x81aF\xadV[\x92P` \x84\x81\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aP%W`\0\x80\xfd[\x85\x01`\x1f\x81\x01\x87\x13aP6W`\0\x80\xfd[\x805aPDaM\x15\x82aL\xd1V[\x81\x81R`\x05\x91\x90\x91\x1b\x82\x01\x83\x01\x90\x83\x81\x01\x90\x89\x83\x11\x15aPcW`\0\x80\xfd[\x92\x84\x01\x92[\x82\x84\x10\x15aP\x81W\x835\x82R\x92\x84\x01\x92\x90\x84\x01\x90aPhV[\x80\x96PPPPPPaI\x82`@\x85\x01aH\xacV[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15aP\xcdW\x83Q\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01aP\xb1V[P\x90\x96\x95PPPPPPV[`\0\x80`\0\x80`\xc0\x85\x87\x03\x12\x15aP\xefW`\0\x80\xfd[\x845`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aQ\x06W`\0\x80\xfd[aQ\x12\x88\x83\x89\x01aL\xa7V[\x95PaQ!\x88` \x89\x01aL\xbfV[\x94PaQ0\x88``\x89\x01aL\xbfV[\x93P`\xa0\x87\x015\x91P\x80\x82\x11\x15aQFW`\0\x80\xfd[PaQS\x87\x82\x88\x01aMhV[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`\0\x80``\x85\x87\x03\x12\x15aQuW`\0\x80\xfd[\x845\x93P` \x85\x015aQ\x87\x81aH\x9aV[\x92P`@\x85\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aQ\xa2W`\0\x80\xfd[aQ\xae\x87\x82\x88\x01aJtV[\x95\x98\x94\x97P\x95PPPPV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15aQ\xd2W`\0\x80\xfd[\x855\x94P` \x86\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aQ\xf0W`\0\x80\xfd[aQ\xfc\x89\x83\x8a\x01aJtV[\x90\x96P\x94P`@\x88\x015\x91PaR\x11\x82aH\x9aV[\x90\x92P``\x87\x015\x90\x80\x82\x11\x15aR'W`\0\x80\xfd[PaR4\x88\x82\x89\x01aNKV[\x91PP\x92\x95P\x92\x95\x90\x93PV[`\0\x81Q\x80\x84R` \x80\x85\x01\x94P\x80\x84\x01`\0[\x83\x81\x10\x15aK\xb5W\x81Q`\x01`\x01``\x1b\x03\x16\x87R\x95\x82\x01\x95\x90\x82\x01\x90`\x01\x01aRUV[`@\x81R`\0\x83Q`@\x80\x84\x01RaR\x95`\x80\x84\x01\x82aRAV[\x90P` \x85\x01Q`?\x19\x84\x83\x03\x01``\x85\x01RaR\xb2\x82\x82aRAV[\x92PPP\x82` \x83\x01R\x93\x92PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15aR\xd8W`\0\x80\xfd[\x835aR\xe3\x81aF\xadV[\x92P` \x84\x015\x91P`@\x84\x015aR\xfa\x81aH\x9aV[\x80\x91PP\x92P\x92P\x92V[\x82\x81R`@` \x82\x01R`\0aS\x1e`@\x83\x01\x84aI\x8bV[\x94\x93PPPPV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15aS, + pub quorumApkIndices: ::alloy_sol_types::private::Vec, + pub totalStakeIndices: ::alloy_sol_types::private::Vec, + pub nonSignerStakeIndices: + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Vec>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + ::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + >, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Vec, + ::alloy_sol_types::private::Vec, + ::alloy_sol_types::private::Vec, + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Vec>, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: CheckSignaturesIndices) -> Self { + ( + value.nonSignerQuorumBitmapIndices, + value.quorumApkIndices, + value.totalStakeIndices, + value.nonSignerStakeIndices, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for CheckSignaturesIndices { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + nonSignerQuorumBitmapIndices: tuple.0, + quorumApkIndices: tuple.1, + totalStakeIndices: tuple.2, + nonSignerStakeIndices: tuple.3, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for CheckSignaturesIndices { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for CheckSignaturesIndices { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + (<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::tokenize(&self.nonSignerQuorumBitmapIndices), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::tokenize(&self.quorumApkIndices), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::tokenize(&self.totalStakeIndices), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>> as alloy_sol_types::SolType>::tokenize(&self.nonSignerStakeIndices),) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for CheckSignaturesIndices { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for CheckSignaturesIndices { + const NAME: &'static str = "CheckSignaturesIndices"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("CheckSignaturesIndices(uint32[] nonSignerQuorumBitmapIndices,uint32[] quorumApkIndices,uint32[] totalStakeIndices,uint32[][] nonSignerStakeIndices)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::eip712_data_word(&self.nonSignerQuorumBitmapIndices).0, <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::eip712_data_word(&self.quorumApkIndices).0, <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::eip712_data_word(&self.totalStakeIndices).0, <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>> as alloy_sol_types::SolType>::eip712_data_word(&self.nonSignerStakeIndices).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for CheckSignaturesIndices { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nonSignerQuorumBitmapIndices) + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.quorumApkIndices) + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.totalStakeIndices) + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nonSignerStakeIndices) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.nonSignerQuorumBitmapIndices, out); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.quorumApkIndices, out); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.totalStakeIndices, out); + <::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + > as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.nonSignerStakeIndices, + out, + ); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct G1Point { uint256 X; uint256 Y; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct G1Point { + pub X: ::alloy_sol_types::private::U256, + pub Y: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::U256, + ::alloy_sol_types::private::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: G1Point) -> Self { + (value.X, value.Y) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for G1Point { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + X: tuple.0, + Y: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for G1Point { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for G1Point { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.X, + ), + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.Y, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for G1Point { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for G1Point { + const NAME: &'static str = "G1Point"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("G1Point(uint256 X,uint256 Y)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::eip712_data_word(&self.X).0, <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::eip712_data_word(&self.Y).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for G1Point { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.X) + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.Y) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.X, out); + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.Y, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct G2Point { uint256[2] X; uint256[2] Y; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct G2Point { + pub X: [::alloy_sol_types::private::U256; 2usize], + pub Y: [::alloy_sol_types::private::U256; 2usize], + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::FixedArray<::alloy_sol_types::sol_data::Uint<256>, 2usize>, + ::alloy_sol_types::sol_data::FixedArray<::alloy_sol_types::sol_data::Uint<256>, 2usize>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + [::alloy_sol_types::private::U256; 2usize], + [::alloy_sol_types::private::U256; 2usize], + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: G2Point) -> Self { + (value.X, value.Y) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for G2Point { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + X: tuple.0, + Y: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for G2Point { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for G2Point { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::tokenize(&self.X), + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::tokenize(&self.Y), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for G2Point { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for G2Point { + const NAME: &'static str = "G2Point"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("G2Point(uint256[2] X,uint256[2] Y)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [ + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::eip712_data_word(&self.X) + .0, + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::eip712_data_word(&self.Y) + .0, + ] + .concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for G2Point { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::topic_preimage_length( + &rust.X + ) + + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::topic_preimage_length( + &rust.Y + ) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.X, out + ); + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.Y, out + ); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct NonSignerStakesAndSignature { uint32[] nonSignerQuorumBitmapIndices; G1Point[] nonSignerPubkeys; G1Point[] quorumApks; G2Point apkG2; G1Point sigma; uint32[] quorumApkIndices; uint32[] totalStakeIndices; uint32[][] nonSignerStakeIndices; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct NonSignerStakesAndSignature { + pub nonSignerQuorumBitmapIndices: ::alloy_sol_types::private::Vec, + pub nonSignerPubkeys: + ::alloy_sol_types::private::Vec<::RustType>, + pub quorumApks: + ::alloy_sol_types::private::Vec<::RustType>, + pub apkG2: ::RustType, + pub sigma: ::RustType, + pub quorumApkIndices: ::alloy_sol_types::private::Vec, + pub totalStakeIndices: ::alloy_sol_types::private::Vec, + pub nonSignerStakeIndices: + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Vec>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + ::alloy_sol_types::sol_data::Array, + ::alloy_sol_types::sol_data::Array, + G2Point, + G1Point, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + ::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + >, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Vec, + ::alloy_sol_types::private::Vec<::RustType>, + ::alloy_sol_types::private::Vec<::RustType>, + ::RustType, + ::RustType, + ::alloy_sol_types::private::Vec, + ::alloy_sol_types::private::Vec, + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Vec>, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NonSignerStakesAndSignature) -> Self { + ( + value.nonSignerQuorumBitmapIndices, + value.nonSignerPubkeys, + value.quorumApks, + value.apkG2, + value.sigma, + value.quorumApkIndices, + value.totalStakeIndices, + value.nonSignerStakeIndices, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NonSignerStakesAndSignature { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + nonSignerQuorumBitmapIndices: tuple.0, + nonSignerPubkeys: tuple.1, + quorumApks: tuple.2, + apkG2: tuple.3, + sigma: tuple.4, + quorumApkIndices: tuple.5, + totalStakeIndices: tuple.6, + nonSignerStakeIndices: tuple.7, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for NonSignerStakesAndSignature { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for NonSignerStakesAndSignature { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + (<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::tokenize(&self.nonSignerQuorumBitmapIndices), <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::tokenize(&self.nonSignerPubkeys), <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::tokenize(&self.quorumApks), ::tokenize(&self.apkG2), ::tokenize(&self.sigma), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::tokenize(&self.quorumApkIndices), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::tokenize(&self.totalStakeIndices), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>> as alloy_sol_types::SolType>::tokenize(&self.nonSignerStakeIndices),) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for NonSignerStakesAndSignature { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for NonSignerStakesAndSignature { + const NAME: &'static str = "NonSignerStakesAndSignature"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("NonSignerStakesAndSignature(uint32[] nonSignerQuorumBitmapIndices,G1Point[] nonSignerPubkeys,G1Point[] quorumApks,G2Point apkG2,G1Point sigma,uint32[] quorumApkIndices,uint32[] totalStakeIndices,uint32[][] nonSignerStakeIndices)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + let mut components = alloy_sol_types::private::Vec::with_capacity(4); + components.push(::eip712_root_type()); + components.extend(::eip712_components()); + components.push(::eip712_root_type()); + components.extend(::eip712_components()); + components.push(::eip712_root_type()); + components.extend(::eip712_components()); + components.push(::eip712_root_type()); + components.extend(::eip712_components()); + components + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::eip712_data_word(&self.nonSignerQuorumBitmapIndices).0, <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::eip712_data_word(&self.nonSignerPubkeys).0, <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::eip712_data_word(&self.quorumApks).0, ::eip712_data_word(&self.apkG2).0, ::eip712_data_word(&self.sigma).0, <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::eip712_data_word(&self.quorumApkIndices).0, <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::SolType>::eip712_data_word(&self.totalStakeIndices).0, <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>> as alloy_sol_types::SolType>::eip712_data_word(&self.nonSignerStakeIndices).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for NonSignerStakesAndSignature { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nonSignerQuorumBitmapIndices) + <::alloy_sol_types::sol_data::Array as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nonSignerPubkeys) + <::alloy_sol_types::sol_data::Array as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.quorumApks) + ::topic_preimage_length(&rust.apkG2) + ::topic_preimage_length(&rust.sigma) + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.quorumApkIndices) + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.totalStakeIndices) + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nonSignerStakeIndices) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.nonSignerQuorumBitmapIndices, out); + <::alloy_sol_types::sol_data::Array as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.nonSignerPubkeys, out); + <::alloy_sol_types::sol_data::Array as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.quorumApks, out); + ::encode_topic_preimage(&rust.apkG2, out); + ::encode_topic_preimage(&rust.sigma, out); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.quorumApkIndices, out); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.totalStakeIndices, out); + <::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>, + > as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.nonSignerStakeIndices, + out, + ); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct Operator { address operator; bytes32 operatorId; uint96 stake; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct Operator { + pub operator: ::alloy_sol_types::private::Address, + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + pub stake: <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<96>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::FixedBytes<32>, + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: Operator) -> Self { + (value.operator, value.operatorId, value.stake) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for Operator { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operator: tuple.0, + operatorId: tuple.1, + stake: tuple.2, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for Operator { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for Operator { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + (<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self.operator), <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId), <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::SolType>::tokenize(&self.stake),) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for Operator { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for Operator { + const NAME: &'static str = "Operator"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "Operator(address operator,bytes32 operatorId,uint96 stake)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::eip712_data_word(&self.operator).0, <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::eip712_data_word(&self.operatorId).0, <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::SolType>::eip712_data_word(&self.stake).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for Operator { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.operator) + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.operatorId) + <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.stake) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.operator, out); + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.operatorId, out); + <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.stake, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct QuorumStakeTotals { uint96[] signedStakeForQuorum; uint96[] totalStakeForQuorum; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct QuorumStakeTotals { + pub signedStakeForQuorum: ::alloy_sol_types::private::Vec< + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + >, + pub totalStakeForQuorum: ::alloy_sol_types::private::Vec< + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + >, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Vec< + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + >, + ::alloy_sol_types::private::Vec< + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + >, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: QuorumStakeTotals) -> Self { + (value.signedStakeForQuorum, value.totalStakeForQuorum) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for QuorumStakeTotals { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + signedStakeForQuorum: tuple.0, + totalStakeForQuorum: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for QuorumStakeTotals { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for QuorumStakeTotals { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + (<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::SolType>::tokenize(&self.signedStakeForQuorum), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::SolType>::tokenize(&self.totalStakeForQuorum),) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for QuorumStakeTotals { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for QuorumStakeTotals { + const NAME: &'static str = "QuorumStakeTotals"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "QuorumStakeTotals(uint96[] signedStakeForQuorum,uint96[] totalStakeForQuorum)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::SolType>::eip712_data_word(&self.signedStakeForQuorum).0, <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::SolType>::eip712_data_word(&self.totalStakeForQuorum).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for QuorumStakeTotals { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.signedStakeForQuorum) + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.totalStakeForQuorum) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.signedStakeForQuorum, out); + <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.totalStakeForQuorum, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct Task { uint256 numberToBeSquared; uint32 taskCreatedBlock; bytes quorumNumbers; uint32 quorumThresholdPercentage; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct Task { + pub numberToBeSquared: ::alloy_sol_types::private::U256, + pub taskCreatedBlock: u32, + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + pub quorumThresholdPercentage: u32, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::Uint<32>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::U256, + u32, + ::alloy_sol_types::private::Bytes, + u32, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: Task) -> Self { + ( + value.numberToBeSquared, + value.taskCreatedBlock, + value.quorumNumbers, + value.quorumThresholdPercentage, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for Task { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + numberToBeSquared: tuple.0, + taskCreatedBlock: tuple.1, + quorumNumbers: tuple.2, + quorumThresholdPercentage: tuple.3, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for Task { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for Task { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.numberToBeSquared, + ), + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.taskCreatedBlock, + ), + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize( + &self.quorumNumbers, + ), + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.quorumThresholdPercentage, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for Task { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for Task { + const NAME: &'static str = "Task"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("Task(uint256 numberToBeSquared,uint32 taskCreatedBlock,bytes quorumNumbers,uint32 quorumThresholdPercentage)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::eip712_data_word(&self.numberToBeSquared).0, <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::eip712_data_word(&self.taskCreatedBlock).0, <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::eip712_data_word(&self.quorumNumbers).0, <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::eip712_data_word(&self.quorumThresholdPercentage).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for Task { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.numberToBeSquared) + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.taskCreatedBlock) + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.quorumNumbers) + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.quorumThresholdPercentage) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.numberToBeSquared, out); + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.taskCreatedBlock, out); + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.quorumNumbers, out); + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.quorumThresholdPercentage, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct TaskResponse { uint32 referenceTaskIndex; uint256 numberSquared; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct TaskResponse { + pub referenceTaskIndex: u32, + pub numberSquared: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32, ::alloy_sol_types::private::U256); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: TaskResponse) -> Self { + (value.referenceTaskIndex, value.numberSquared) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for TaskResponse { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + referenceTaskIndex: tuple.0, + numberSquared: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for TaskResponse { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for TaskResponse { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.referenceTaskIndex, + ), + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.numberSquared, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for TaskResponse { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for TaskResponse { + const NAME: &'static str = "TaskResponse"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "TaskResponse(uint32 referenceTaskIndex,uint256 numberSquared)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::eip712_data_word(&self.referenceTaskIndex).0, <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::eip712_data_word(&self.numberSquared).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for TaskResponse { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.referenceTaskIndex) + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.numberSquared) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.referenceTaskIndex, out); + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.numberSquared, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "```solidity\nstruct TaskResponseMetadata { uint32 taskResponsedBlock; bytes32 hashOfNonSigners; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct TaskResponseMetadata { + pub taskResponsedBlock: u32, + pub hashOfNonSigners: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32, ::alloy_sol_types::private::FixedBytes<32>); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: TaskResponseMetadata) -> Self { + (value.taskResponsedBlock, value.hashOfNonSigners) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for TaskResponseMetadata { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + taskResponsedBlock: tuple.0, + hashOfNonSigners: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for TaskResponseMetadata { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for TaskResponseMetadata { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + (<::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize(&self.taskResponsedBlock), <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.hashOfNonSigners),) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for TaskResponseMetadata { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for TaskResponseMetadata { + const NAME: &'static str = "TaskResponseMetadata"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "TaskResponseMetadata(uint32 taskResponsedBlock,bytes32 hashOfNonSigners)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::eip712_data_word(&self.taskResponsedBlock).0, <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::eip712_data_word(&self.hashOfNonSigners).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for TaskResponseMetadata { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.taskResponsedBlock) + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.hashOfNonSigners) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.taskResponsedBlock, out); + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.hashOfNonSigners, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `Initialized(uint8)` and selector `0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498`.\n```solidity\nevent Initialized(uint8 version);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u8, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint8)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 127u8, 38u8, 184u8, 63u8, 249u8, 110u8, 31u8, 43u8, 106u8, 104u8, 47u8, 19u8, + 56u8, 82u8, 246u8, 121u8, 138u8, 9u8, 196u8, 101u8, 218u8, 149u8, 146u8, 20u8, + 96u8, 206u8, 251u8, 56u8, 71u8, 64u8, 36u8, 152u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self.version, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `NewTaskCreated(uint32,(uint256,uint32,bytes,uint32))` and selector `0x1695b8d06ec800b4615e745cfb5bd00c1f2875615d42925c3b5afa543bb24c48`.\n```solidity\nevent NewTaskCreated(uint32 indexed taskIndex, Task task);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct NewTaskCreated { + #[allow(missing_docs)] + pub taskIndex: u32, + #[allow(missing_docs)] + pub task: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for NewTaskCreated { + type DataTuple<'a> = (Task,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ); + const SIGNATURE: &'static str = "NewTaskCreated(uint32,(uint256,uint32,bytes,uint32))"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 22u8, 149u8, 184u8, 208u8, 110u8, 200u8, 0u8, 180u8, 97u8, 94u8, 116u8, 92u8, + 251u8, 91u8, 208u8, 12u8, 31u8, 40u8, 117u8, 97u8, 93u8, 66u8, 146u8, 92u8, + 59u8, 90u8, 250u8, 84u8, 59u8, 178u8, 76u8, 72u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + taskIndex: topics.1, + task: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + (::tokenize(&self.task),) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.taskIndex.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic(&self.taskIndex); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for NewTaskCreated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&NewTaskCreated> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &NewTaskCreated) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`.\n```solidity\nevent OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, 31u8, + 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, 218u8, + 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.previousOwner); + out[2usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.newOwner); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `Paused(address,uint256)` and selector `0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d`.\n```solidity\nevent Paused(address indexed account, uint256 newPausedStatus);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct Paused { + #[allow(missing_docs)] + pub account: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Paused { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Paused(address,uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 171u8, 64u8, 163u8, 116u8, 188u8, 81u8, 222u8, 55u8, 34u8, 0u8, 168u8, 188u8, + 152u8, 26u8, 248u8, 201u8, 236u8, 220u8, 8u8, 223u8, 218u8, 239u8, 11u8, 182u8, + 224u8, 159u8, 136u8, 243u8, 198u8, 22u8, 239u8, 61u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + account: topics.1, + newPausedStatus: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.account.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.account); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Paused { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Paused> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Paused) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `PauserRegistrySet(address,address)` and selector `0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6`.\n```solidity\nevent PauserRegistrySet(address pauserRegistry, address newPauserRegistry);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct PauserRegistrySet { + #[allow(missing_docs)] + pub pauserRegistry: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newPauserRegistry: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for PauserRegistrySet { + type DataTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "PauserRegistrySet(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 110u8, 159u8, 205u8, 83u8, 152u8, 150u8, 252u8, 166u8, 14u8, 139u8, 15u8, 1u8, + 221u8, 88u8, 2u8, 51u8, 228u8, 138u8, 107u8, 15u8, 125u8, 240u8, 19u8, 184u8, + 155u8, 167u8, 245u8, 101u8, 134u8, 154u8, 205u8, 182u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + pauserRegistry: data.0, + newPauserRegistry: data.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.pauserRegistry, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newPauserRegistry, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for PauserRegistrySet { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&PauserRegistrySet> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &PauserRegistrySet) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `StaleStakesForbiddenUpdate(bool)` and selector `0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc`.\n```solidity\nevent StaleStakesForbiddenUpdate(bool value);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct StaleStakesForbiddenUpdate { + #[allow(missing_docs)] + pub value: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for StaleStakesForbiddenUpdate { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "StaleStakesForbiddenUpdate(bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 64u8, 228u8, 237u8, 136u8, 10u8, 41u8, 224u8, 246u8, 221u8, 206u8, 48u8, 116u8, + 87u8, 251u8, 117u8, 205u8, 223u8, 79u8, 238u8, 247u8, 211u8, 236u8, 176u8, + 48u8, 27u8, 253u8, 244u8, 151u8, 106u8, 14u8, 45u8, 252u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { value: data.0 } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize( + &self.value, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for StaleStakesForbiddenUpdate { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&StaleStakesForbiddenUpdate> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &StaleStakesForbiddenUpdate) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `TaskChallengedSuccessfully(uint32,address)` and selector `0xc20d1bb0f1623680306b83d4ff4bb99a2beb9d86d97832f3ca40fd13a29df1ec`.\n```solidity\nevent TaskChallengedSuccessfully(uint32 indexed taskIndex, address indexed challenger);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct TaskChallengedSuccessfully { + #[allow(missing_docs)] + pub taskIndex: u32, + #[allow(missing_docs)] + pub challenger: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TaskChallengedSuccessfully { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "TaskChallengedSuccessfully(uint32,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 194u8, 13u8, 27u8, 176u8, 241u8, 98u8, 54u8, 128u8, 48u8, 107u8, 131u8, 212u8, + 255u8, 75u8, 185u8, 154u8, 43u8, 235u8, 157u8, 134u8, 217u8, 120u8, 50u8, + 243u8, 202u8, 64u8, 253u8, 19u8, 162u8, 157u8, 241u8, 236u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + taskIndex: topics.1, + challenger: topics.2, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.taskIndex.clone(), + self.challenger.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic(&self.taskIndex); + out[2usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.challenger); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TaskChallengedSuccessfully { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TaskChallengedSuccessfully> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TaskChallengedSuccessfully) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `TaskChallengedUnsuccessfully(uint32,address)` and selector `0xfd3e26beeb5967fc5a57a0446914eabc45b4aa474c67a51b4b5160cac60ddb05`.\n```solidity\nevent TaskChallengedUnsuccessfully(uint32 indexed taskIndex, address indexed challenger);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct TaskChallengedUnsuccessfully { + #[allow(missing_docs)] + pub taskIndex: u32, + #[allow(missing_docs)] + pub challenger: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TaskChallengedUnsuccessfully { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "TaskChallengedUnsuccessfully(uint32,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 253u8, 62u8, 38u8, 190u8, 235u8, 89u8, 103u8, 252u8, 90u8, 87u8, 160u8, 68u8, + 105u8, 20u8, 234u8, 188u8, 69u8, 180u8, 170u8, 71u8, 76u8, 103u8, 165u8, 27u8, + 75u8, 81u8, 96u8, 202u8, 198u8, 13u8, 219u8, 5u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + taskIndex: topics.1, + challenger: topics.2, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.taskIndex.clone(), + self.challenger.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic(&self.taskIndex); + out[2usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.challenger); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TaskChallengedUnsuccessfully { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TaskChallengedUnsuccessfully> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TaskChallengedUnsuccessfully) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `TaskCompleted(uint32)` and selector `0x9a144f228a931b9d0d1696fbcdaf310b24b5d2d21e799db623fc986a0f547430`.\n```solidity\nevent TaskCompleted(uint32 indexed taskIndex);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct TaskCompleted { + #[allow(missing_docs)] + pub taskIndex: u32, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TaskCompleted { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ); + const SIGNATURE: &'static str = "TaskCompleted(uint32)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 154u8, 20u8, 79u8, 34u8, 138u8, 147u8, 27u8, 157u8, 13u8, 22u8, 150u8, 251u8, + 205u8, 175u8, 49u8, 11u8, 36u8, 181u8, 210u8, 210u8, 30u8, 121u8, 157u8, 182u8, + 35u8, 252u8, 152u8, 106u8, 15u8, 84u8, 116u8, 48u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + taskIndex: topics.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.taskIndex.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic(&self.taskIndex); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TaskCompleted { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TaskCompleted> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TaskCompleted) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `TaskResponded((uint32,uint256),(uint32,bytes32))` and selector `0x349c1ee60e4e8972ee9dba642c1774543d5c4136879b7f4caaf04bf81a487a2a`.\n```solidity\nevent TaskResponded(TaskResponse taskResponse, TaskResponseMetadata taskResponseMetadata);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct TaskResponded { + #[allow(missing_docs)] + pub taskResponse: ::RustType, + #[allow(missing_docs)] + pub taskResponseMetadata: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TaskResponded { + type DataTuple<'a> = (TaskResponse, TaskResponseMetadata); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "TaskResponded((uint32,uint256),(uint32,bytes32))"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 52u8, 156u8, 30u8, 230u8, 14u8, 78u8, 137u8, 114u8, 238u8, 157u8, 186u8, 100u8, + 44u8, 23u8, 116u8, 84u8, 61u8, 92u8, 65u8, 54u8, 135u8, 155u8, 127u8, 76u8, + 170u8, 240u8, 75u8, 248u8, 26u8, 72u8, 122u8, 42u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + taskResponse: data.0, + taskResponseMetadata: data.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize(&self.taskResponse), + ::tokenize( + &self.taskResponseMetadata, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TaskResponded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TaskResponded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TaskResponded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Event with signature `Unpaused(address,uint256)` and selector `0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c`.\n```solidity\nevent Unpaused(address indexed account, uint256 newPausedStatus);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct Unpaused { + #[allow(missing_docs)] + pub account: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Unpaused { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Unpaused(address,uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 53u8, 130u8, 209u8, 130u8, 142u8, 38u8, 191u8, 86u8, 189u8, 128u8, 21u8, 2u8, + 188u8, 2u8, 26u8, 192u8, 188u8, 138u8, 251u8, 87u8, 200u8, 38u8, 228u8, 152u8, + 107u8, 69u8, 89u8, 60u8, 143u8, 173u8, 56u8, 156u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + account: topics.1, + newPausedStatus: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.account.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.account); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Unpaused { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Unpaused> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Unpaused) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Constructor`.\n```solidity\nconstructor(address _registryCoordinator, uint32 _taskResponseWindowBlock);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct constructorCall { + pub _registryCoordinator: ::alloy_sol_types::private::Address, + pub _taskResponseWindowBlock: u32, + } + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Uint<32>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address, u32); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value._registryCoordinator, value._taskResponseWindowBlock) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _registryCoordinator: tuple.0, + _taskResponseWindowBlock: tuple.1, + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Uint<32>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._registryCoordinator, + ), + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self._taskResponseWindowBlock, + ), + ) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `TASK_CHALLENGE_WINDOW_BLOCK()` and selector `0xf63c5bab`.\n```solidity\nfunction TASK_CHALLENGE_WINDOW_BLOCK() external view returns (uint32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct TASK_CHALLENGE_WINDOW_BLOCKCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`TASK_CHALLENGE_WINDOW_BLOCK()`](TASK_CHALLENGE_WINDOW_BLOCKCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct TASK_CHALLENGE_WINDOW_BLOCKReturn { + pub _0: u32, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: TASK_CHALLENGE_WINDOW_BLOCKCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for TASK_CHALLENGE_WINDOW_BLOCKCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: TASK_CHALLENGE_WINDOW_BLOCKReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for TASK_CHALLENGE_WINDOW_BLOCKReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for TASK_CHALLENGE_WINDOW_BLOCKCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = TASK_CHALLENGE_WINDOW_BLOCKReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TASK_CHALLENGE_WINDOW_BLOCK()"; + const SELECTOR: [u8; 4] = [246u8, 60u8, 91u8, 171u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `TASK_RESPONSE_WINDOW_BLOCK()` and selector `0x1ad43189`.\n```solidity\nfunction TASK_RESPONSE_WINDOW_BLOCK() external view returns (uint32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct TASK_RESPONSE_WINDOW_BLOCKCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`TASK_RESPONSE_WINDOW_BLOCK()`](TASK_RESPONSE_WINDOW_BLOCKCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct TASK_RESPONSE_WINDOW_BLOCKReturn { + pub _0: u32, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: TASK_RESPONSE_WINDOW_BLOCKCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for TASK_RESPONSE_WINDOW_BLOCKCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: TASK_RESPONSE_WINDOW_BLOCKReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for TASK_RESPONSE_WINDOW_BLOCKReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for TASK_RESPONSE_WINDOW_BLOCKCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = TASK_RESPONSE_WINDOW_BLOCKReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TASK_RESPONSE_WINDOW_BLOCK()"; + const SELECTOR: [u8; 4] = [26u8, 212u8, 49u8, 137u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `aggregator()` and selector `0x245a7bfc`.\n```solidity\nfunction aggregator() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct aggregatorCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`aggregator()`](aggregatorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct aggregatorReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: aggregatorCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for aggregatorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: aggregatorReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for aggregatorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for aggregatorCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = aggregatorReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "aggregator()"; + const SELECTOR: [u8; 4] = [36u8, 90u8, 123u8, 252u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `allTaskHashes(uint32)` and selector `0x2d89f6fc`.\n```solidity\nfunction allTaskHashes(uint32) external view returns (bytes32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct allTaskHashesCall { + pub _0: u32, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`allTaskHashes(uint32)`](allTaskHashesCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct allTaskHashesReturn { + pub _0: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: allTaskHashesCall) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for allTaskHashesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: allTaskHashesReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for allTaskHashesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for allTaskHashesCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = allTaskHashesReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "allTaskHashes(uint32)"; + const SELECTOR: [u8; 4] = [45u8, 137u8, 246u8, 252u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self._0, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `allTaskResponses(uint32)` and selector `0x2cb223d5`.\n```solidity\nfunction allTaskResponses(uint32) external view returns (bytes32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct allTaskResponsesCall { + pub _0: u32, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`allTaskResponses(uint32)`](allTaskResponsesCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct allTaskResponsesReturn { + pub _0: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: allTaskResponsesCall) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for allTaskResponsesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: allTaskResponsesReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for allTaskResponsesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for allTaskResponsesCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = allTaskResponsesReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "allTaskResponses(uint32)"; + const SELECTOR: [u8; 4] = [44u8, 178u8, 35u8, 213u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self._0, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `blsApkRegistry()` and selector `0x5df45946`.\n```solidity\nfunction blsApkRegistry() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct blsApkRegistryCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`blsApkRegistry()`](blsApkRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct blsApkRegistryReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: blsApkRegistryCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for blsApkRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: blsApkRegistryReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for blsApkRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for blsApkRegistryCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = blsApkRegistryReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "blsApkRegistry()"; + const SELECTOR: [u8; 4] = [93u8, 244u8, 89u8, 70u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `checkSignatures(bytes32,bytes,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))` and selector `0x6efb4636`.\n```solidity\nfunction checkSignatures(bytes32 msgHash, bytes memory quorumNumbers, uint32 referenceBlockNumber, NonSignerStakesAndSignature memory params) external view returns (QuorumStakeTotals memory, bytes32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct checkSignaturesCall { + pub msgHash: ::alloy_sol_types::private::FixedBytes<32>, + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + pub referenceBlockNumber: u32, + pub params: ::RustType, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`checkSignatures(bytes32,bytes,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))`](checkSignaturesCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct checkSignaturesReturn { + pub _0: ::RustType, + pub _1: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::Uint<32>, + NonSignerStakesAndSignature, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::FixedBytes<32>, + ::alloy_sol_types::private::Bytes, + u32, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: checkSignaturesCall) -> Self { + ( + value.msgHash, + value.quorumNumbers, + value.referenceBlockNumber, + value.params, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for checkSignaturesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + msgHash: tuple.0, + quorumNumbers: tuple.1, + referenceBlockNumber: tuple.2, + params: tuple.3, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + QuorumStakeTotals, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::RustType, + ::alloy_sol_types::private::FixedBytes<32>, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: checkSignaturesReturn) -> Self { + (value._0, value._1) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for checkSignaturesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _0: tuple.0, + _1: tuple.1, + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for checkSignaturesCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::Uint<32>, + NonSignerStakesAndSignature, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = checkSignaturesReturn; + type ReturnTuple<'a> = ( + QuorumStakeTotals, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "checkSignatures(bytes32,bytes,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))"; + const SELECTOR: [u8; 4] = [110u8, 251u8, 70u8, 54u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.msgHash), <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(&self.quorumNumbers), <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize(&self.referenceBlockNumber), ::tokenize(&self.params),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `createNewTask(uint256,uint32,bytes)` and selector `0x6b92787e`.\n```solidity\nfunction createNewTask(uint256 numberToBeSquared, uint32 quorumThresholdPercentage, bytes memory quorumNumbers) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct createNewTaskCall { + pub numberToBeSquared: ::alloy_sol_types::private::U256, + pub quorumThresholdPercentage: u32, + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`createNewTask(uint256,uint32,bytes)`](createNewTaskCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct createNewTaskReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::U256, + u32, + ::alloy_sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: createNewTaskCall) -> Self { + ( + value.numberToBeSquared, + value.quorumThresholdPercentage, + value.quorumNumbers, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for createNewTaskCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + numberToBeSquared: tuple.0, + quorumThresholdPercentage: tuple.1, + quorumNumbers: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: createNewTaskReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for createNewTaskReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for createNewTaskCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = createNewTaskReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "createNewTask(uint256,uint32,bytes)"; + const SELECTOR: [u8; 4] = [107u8, 146u8, 120u8, 126u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.numberToBeSquared, + ), + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.quorumThresholdPercentage, + ), + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize( + &self.quorumNumbers, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `delegation()` and selector `0xdf5cf723`.\n```solidity\nfunction delegation() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct delegationCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`delegation()`](delegationCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct delegationReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: delegationCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for delegationCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: delegationReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for delegationReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for delegationCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = delegationReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "delegation()"; + const SELECTOR: [u8; 4] = [223u8, 92u8, 247u8, 35u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `generator()` and selector `0x7afa1eed`.\n```solidity\nfunction generator() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct generatorCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`generator()`](generatorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct generatorReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: generatorCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for generatorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: generatorReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for generatorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for generatorCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = generatorReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "generator()"; + const SELECTOR: [u8; 4] = [122u8, 250u8, 30u8, 237u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `getCheckSignaturesIndices(address,uint32,bytes,bytes32[])` and selector `0x4f739f74`.\n```solidity\nfunction getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes memory quorumNumbers, bytes32[] memory nonSignerOperatorIds) external view returns (CheckSignaturesIndices memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getCheckSignaturesIndicesCall { + pub registryCoordinator: ::alloy_sol_types::private::Address, + pub referenceBlockNumber: u32, + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + pub nonSignerOperatorIds: + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::FixedBytes<32>>, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`getCheckSignaturesIndices(address,uint32,bytes,bytes32[])`](getCheckSignaturesIndicesCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getCheckSignaturesIndicesReturn { + pub _0: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + u32, + ::alloy_sol_types::private::Bytes, + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::FixedBytes<32>>, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCheckSignaturesIndicesCall) -> Self { + ( + value.registryCoordinator, + value.referenceBlockNumber, + value.quorumNumbers, + value.nonSignerOperatorIds, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCheckSignaturesIndicesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + registryCoordinator: tuple.0, + referenceBlockNumber: tuple.1, + quorumNumbers: tuple.2, + nonSignerOperatorIds: tuple.3, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (CheckSignaturesIndices,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = + (::RustType,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCheckSignaturesIndicesReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCheckSignaturesIndicesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getCheckSignaturesIndicesCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getCheckSignaturesIndicesReturn; + type ReturnTuple<'a> = (CheckSignaturesIndices,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = + "getCheckSignaturesIndices(address,uint32,bytes,bytes32[])"; + const SELECTOR: [u8; 4] = [79u8, 115u8, 159u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self.registryCoordinator), <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize(&self.referenceBlockNumber), <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(&self.quorumNumbers), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>> as alloy_sol_types::SolType>::tokenize(&self.nonSignerOperatorIds),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `getOperatorState(address,bytes,uint32)` and selector `0x3563b0d1`.\n```solidity\nfunction getOperatorState(address registryCoordinator, bytes memory quorumNumbers, uint32 blockNumber) external view returns (Operator[][] memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorState_0Call { + pub registryCoordinator: ::alloy_sol_types::private::Address, + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + pub blockNumber: u32, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`getOperatorState(address,bytes,uint32)`](getOperatorState_0Call) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorState_0Return { + pub _0: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec<::RustType>, + >, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::Uint<32>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Bytes, + u32, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorState_0Call) -> Self { + ( + value.registryCoordinator, + value.quorumNumbers, + value.blockNumber, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorState_0Call { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + registryCoordinator: tuple.0, + quorumNumbers: tuple.1, + blockNumber: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec< + ::RustType, + >, + >, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorState_0Return) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorState_0Return { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getOperatorState_0Call { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::Uint<32>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getOperatorState_0Return; + type ReturnTuple<'a> = ( + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array>, + ); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getOperatorState(address,bytes,uint32)"; + const SELECTOR: [u8; 4] = [53u8, 99u8, 176u8, 209u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.registryCoordinator, + ), + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize( + &self.quorumNumbers, + ), + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.blockNumber, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `getOperatorState(address,bytes32,uint32)` and selector `0xcefdc1d4`.\n```solidity\nfunction getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) external view returns (uint256, Operator[][] memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorState_1Call { + pub registryCoordinator: ::alloy_sol_types::private::Address, + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + pub blockNumber: u32, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`getOperatorState(address,bytes32,uint32)`](getOperatorState_1Call) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorState_1Return { + pub _0: ::alloy_sol_types::private::U256, + pub _1: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec<::RustType>, + >, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::FixedBytes<32>, + u32, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorState_1Call) -> Self { + ( + value.registryCoordinator, + value.operatorId, + value.blockNumber, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorState_1Call { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + registryCoordinator: tuple.0, + operatorId: tuple.1, + blockNumber: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::U256, + ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec< + ::RustType, + >, + >, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorState_1Return) -> Self { + (value._0, value._1) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorState_1Return { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _0: tuple.0, + _1: tuple.1, + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getOperatorState_1Call { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getOperatorState_1Return; + type ReturnTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array>, + ); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getOperatorState(address,bytes32,uint32)"; + const SELECTOR: [u8; 4] = [206u8, 253u8, 193u8, 212u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self.registryCoordinator), <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId), <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize(&self.blockNumber),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `getQuorumBitmapsAtBlockNumber(address,bytes32[],uint32)` and selector `0x5c155662`.\n```solidity\nfunction getQuorumBitmapsAtBlockNumber(address registryCoordinator, bytes32[] memory operatorIds, uint32 blockNumber) external view returns (uint256[] memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapsAtBlockNumberCall { + pub registryCoordinator: ::alloy_sol_types::private::Address, + pub operatorIds: + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::FixedBytes<32>>, + pub blockNumber: u32, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`getQuorumBitmapsAtBlockNumber(address,bytes32[],uint32)`](getQuorumBitmapsAtBlockNumberCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapsAtBlockNumberReturn { + pub _0: ::alloy_sol_types::private::Vec<::alloy_sol_types::private::U256>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>>, + ::alloy_sol_types::sol_data::Uint<32>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::FixedBytes<32>>, + u32, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapsAtBlockNumberCall) -> Self { + ( + value.registryCoordinator, + value.operatorIds, + value.blockNumber, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapsAtBlockNumberCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + registryCoordinator: tuple.0, + operatorIds: tuple.1, + blockNumber: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = + (::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<256>>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = + (::alloy_sol_types::private::Vec<::alloy_sol_types::private::U256>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapsAtBlockNumberReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapsAtBlockNumberReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getQuorumBitmapsAtBlockNumberCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>>, + ::alloy_sol_types::sol_data::Uint<32>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getQuorumBitmapsAtBlockNumberReturn; + type ReturnTuple<'a> = + (::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<256>>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = + "getQuorumBitmapsAtBlockNumber(address,bytes32[],uint32)"; + const SELECTOR: [u8; 4] = [92u8, 21u8, 86u8, 98u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self.registryCoordinator), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>> as alloy_sol_types::SolType>::tokenize(&self.operatorIds), <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize(&self.blockNumber),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `getTaskResponseWindowBlock()` and selector `0xf5c9899d`.\n```solidity\nfunction getTaskResponseWindowBlock() external view returns (uint32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getTaskResponseWindowBlockCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`getTaskResponseWindowBlock()`](getTaskResponseWindowBlockCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getTaskResponseWindowBlockReturn { + pub _0: u32, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getTaskResponseWindowBlockCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getTaskResponseWindowBlockCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getTaskResponseWindowBlockReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getTaskResponseWindowBlockReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getTaskResponseWindowBlockCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getTaskResponseWindowBlockReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getTaskResponseWindowBlock()"; + const SELECTOR: [u8; 4] = [245u8, 201u8, 137u8, 157u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `initialize(address,address,address,address)` and selector `0xf8c8765e`.\n```solidity\nfunction initialize(address _pauserRegistry, address initialOwner, address _aggregator, address _generator) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct initializeCall { + pub _pauserRegistry: ::alloy_sol_types::private::Address, + pub initialOwner: ::alloy_sol_types::private::Address, + pub _aggregator: ::alloy_sol_types::private::Address, + pub _generator: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`initialize(address,address,address,address)`](initializeCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + ( + value._pauserRegistry, + value.initialOwner, + value._aggregator, + value._generator, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _pauserRegistry: tuple.0, + initialOwner: tuple.1, + _aggregator: tuple.2, + _generator: tuple.3, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize(address,address,address,address)"; + const SELECTOR: [u8; 4] = [248u8, 200u8, 118u8, 94u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._pauserRegistry, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.initialOwner, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._aggregator, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._generator, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `latestTaskNum()` and selector `0x8b00ce7c`.\n```solidity\nfunction latestTaskNum() external view returns (uint32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct latestTaskNumCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`latestTaskNum()`](latestTaskNumCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct latestTaskNumReturn { + pub _0: u32, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: latestTaskNumCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for latestTaskNumCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: latestTaskNumReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for latestTaskNumReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for latestTaskNumCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = latestTaskNumReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "latestTaskNum()"; + const SELECTOR: [u8; 4] = [139u8, 0u8, 206u8, 124u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `owner()` and selector `0x8da5cb5b`.\n```solidity\nfunction owner() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ownerCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`owner()`](ownerCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ownerReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = ownerReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `pause(uint256)` and selector `0x136439dd`.\n```solidity\nfunction pause(uint256 newPausedStatus) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseCall { + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`pause(uint256)`](pauseCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseCall) -> Self { + (value.newPausedStatus,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newPausedStatus: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for pauseCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = pauseReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "pause(uint256)"; + const SELECTOR: [u8; 4] = [19u8, 100u8, 57u8, 221u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `pauseAll()` and selector `0x595c6a67`.\n```solidity\nfunction pauseAll() external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseAllCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`pauseAll()`](pauseAllCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseAllReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseAllCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseAllCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseAllReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseAllReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for pauseAllCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = pauseAllReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "pauseAll()"; + const SELECTOR: [u8; 4] = [89u8, 92u8, 106u8, 103u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `paused(uint8)` and selector `0x5ac86ab7`.\n```solidity\nfunction paused(uint8 index) external view returns (bool);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_0Call { + pub index: u8, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`paused(uint8)`](paused_0Call) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_0Return { + pub _0: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u8,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_0Call) -> Self { + (value.index,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_0Call { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { index: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_0Return) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_0Return { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for paused_0Call { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = paused_0Return; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "paused(uint8)"; + const SELECTOR: [u8; 4] = [90u8, 200u8, 106u8, 183u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self.index, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `paused()` and selector `0x5c975abb`.\n```solidity\nfunction paused() external view returns (uint256);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_1Call {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`paused()`](paused_1Call) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_1Return { + pub _0: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_1Call) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_1Call { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_1Return) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_1Return { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for paused_1Call { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = paused_1Return; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "paused()"; + const SELECTOR: [u8; 4] = [92u8, 151u8, 90u8, 187u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `pauserRegistry()` and selector `0x886f1195`.\n```solidity\nfunction pauserRegistry() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauserRegistryCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`pauserRegistry()`](pauserRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauserRegistryReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauserRegistryCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauserRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauserRegistryReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauserRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for pauserRegistryCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = pauserRegistryReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "pauserRegistry()"; + const SELECTOR: [u8; 4] = [136u8, 111u8, 17u8, 149u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `raiseAndResolveChallenge((uint256,uint32,bytes,uint32),(uint32,uint256),(uint32,bytes32),(uint256,uint256)[])` and selector `0x6b532e9e`.\n```solidity\nfunction raiseAndResolveChallenge(Task memory task, TaskResponse memory taskResponse, TaskResponseMetadata memory taskResponseMetadata, G1Point[] memory pubkeysOfNonSigningOperators) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct raiseAndResolveChallengeCall { + pub task: ::RustType, + pub taskResponse: ::RustType, + pub taskResponseMetadata: ::RustType, + pub pubkeysOfNonSigningOperators: + ::alloy_sol_types::private::Vec<::RustType>, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`raiseAndResolveChallenge((uint256,uint32,bytes,uint32),(uint32,uint256),(uint32,bytes32),(uint256,uint256)[])`](raiseAndResolveChallengeCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct raiseAndResolveChallengeReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + Task, + TaskResponse, + TaskResponseMetadata, + ::alloy_sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::RustType, + ::RustType, + ::RustType, + ::alloy_sol_types::private::Vec<::RustType>, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: raiseAndResolveChallengeCall) -> Self { + ( + value.task, + value.taskResponse, + value.taskResponseMetadata, + value.pubkeysOfNonSigningOperators, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for raiseAndResolveChallengeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + task: tuple.0, + taskResponse: tuple.1, + taskResponseMetadata: tuple.2, + pubkeysOfNonSigningOperators: tuple.3, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: raiseAndResolveChallengeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for raiseAndResolveChallengeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for raiseAndResolveChallengeCall { + type Parameters<'a> = ( + Task, + TaskResponse, + TaskResponseMetadata, + ::alloy_sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = raiseAndResolveChallengeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "raiseAndResolveChallenge((uint256,uint32,bytes,uint32),(uint32,uint256),(uint32,bytes32),(uint256,uint256)[])"; + const SELECTOR: [u8; 4] = [107u8, 83u8, 46u8, 158u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (::tokenize(&self.task), ::tokenize(&self.taskResponse), ::tokenize(&self.taskResponseMetadata), <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::tokenize(&self.pubkeysOfNonSigningOperators),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `registryCoordinator()` and selector `0x6d14a987`.\n```solidity\nfunction registryCoordinator() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registryCoordinatorCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`registryCoordinator()`](registryCoordinatorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registryCoordinatorReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registryCoordinatorCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registryCoordinatorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registryCoordinatorReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registryCoordinatorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for registryCoordinatorCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = registryCoordinatorReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "registryCoordinator()"; + const SELECTOR: [u8; 4] = [109u8, 20u8, 169u8, 135u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `renounceOwnership()` and selector `0x715018a6`.\n```solidity\nfunction renounceOwnership() external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct renounceOwnershipCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `respondToTask((uint256,uint32,bytes,uint32),(uint32,uint256),(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))` and selector `0x5baec9a0`.\n```solidity\nfunction respondToTask(Task memory task, TaskResponse memory taskResponse, NonSignerStakesAndSignature memory nonSignerStakesAndSignature) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct respondToTaskCall { + pub task: ::RustType, + pub taskResponse: ::RustType, + pub nonSignerStakesAndSignature: + ::RustType, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`respondToTask((uint256,uint32,bytes,uint32),(uint32,uint256),(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))`](respondToTaskCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct respondToTaskReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (Task, TaskResponse, NonSignerStakesAndSignature); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::RustType, + ::RustType, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: respondToTaskCall) -> Self { + ( + value.task, + value.taskResponse, + value.nonSignerStakesAndSignature, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for respondToTaskCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + task: tuple.0, + taskResponse: tuple.1, + nonSignerStakesAndSignature: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: respondToTaskReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for respondToTaskReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for respondToTaskCall { + type Parameters<'a> = (Task, TaskResponse, NonSignerStakesAndSignature); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = respondToTaskReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "respondToTask((uint256,uint32,bytes,uint32),(uint32,uint256),(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))"; + const SELECTOR: [u8; 4] = [91u8, 174u8, 201u8, 160u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize(&self.task), + ::tokenize(&self.taskResponse), + ::tokenize( + &self.nonSignerStakesAndSignature, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `setPauserRegistry(address)` and selector `0x10d67a2f`.\n```solidity\nfunction setPauserRegistry(address newPauserRegistry) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setPauserRegistryCall { + pub newPauserRegistry: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`setPauserRegistry(address)`](setPauserRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setPauserRegistryReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setPauserRegistryCall) -> Self { + (value.newPauserRegistry,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setPauserRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newPauserRegistry: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setPauserRegistryReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setPauserRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setPauserRegistryCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setPauserRegistryReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setPauserRegistry(address)"; + const SELECTOR: [u8; 4] = [16u8, 214u8, 122u8, 47u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newPauserRegistry, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `setStaleStakesForbidden(bool)` and selector `0x416c7e5e`.\n```solidity\nfunction setStaleStakesForbidden(bool value) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setStaleStakesForbiddenCall { + pub value: bool, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`setStaleStakesForbidden(bool)`](setStaleStakesForbiddenCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setStaleStakesForbiddenReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setStaleStakesForbiddenCall) -> Self { + (value.value,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setStaleStakesForbiddenCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { value: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setStaleStakesForbiddenReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setStaleStakesForbiddenReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setStaleStakesForbiddenCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Bool,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setStaleStakesForbiddenReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setStaleStakesForbidden(bool)"; + const SELECTOR: [u8; 4] = [65u8, 108u8, 126u8, 94u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize( + &self.value, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `stakeRegistry()` and selector `0x68304835`.\n```solidity\nfunction stakeRegistry() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct stakeRegistryCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`stakeRegistry()`](stakeRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct stakeRegistryReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: stakeRegistryCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for stakeRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: stakeRegistryReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for stakeRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for stakeRegistryCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = stakeRegistryReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "stakeRegistry()"; + const SELECTOR: [u8; 4] = [104u8, 48u8, 72u8, 53u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `staleStakesForbidden()` and selector `0xb98d0908`.\n```solidity\nfunction staleStakesForbidden() external view returns (bool);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct staleStakesForbiddenCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`staleStakesForbidden()`](staleStakesForbiddenCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct staleStakesForbiddenReturn { + pub _0: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: staleStakesForbiddenCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for staleStakesForbiddenCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: staleStakesForbiddenReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for staleStakesForbiddenReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for staleStakesForbiddenCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = staleStakesForbiddenReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "staleStakesForbidden()"; + const SELECTOR: [u8; 4] = [185u8, 141u8, 9u8, 8u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `taskNumber()` and selector `0x72d18e8d`.\n```solidity\nfunction taskNumber() external view returns (uint32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct taskNumberCall {} + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`taskNumber()`](taskNumberCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct taskNumberReturn { + pub _0: u32, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: taskNumberCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for taskNumberCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: taskNumberReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for taskNumberReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for taskNumberCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = taskNumberReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "taskNumber()"; + const SELECTOR: [u8; 4] = [114u8, 209u8, 142u8, 141u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `taskSuccesfullyChallenged(uint32)` and selector `0x5decc3f5`.\n```solidity\nfunction taskSuccesfullyChallenged(uint32) external view returns (bool);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct taskSuccesfullyChallengedCall { + pub _0: u32, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`taskSuccesfullyChallenged(uint32)`](taskSuccesfullyChallengedCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct taskSuccesfullyChallengedReturn { + pub _0: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: taskSuccesfullyChallengedCall) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for taskSuccesfullyChallengedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: taskSuccesfullyChallengedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for taskSuccesfullyChallengedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for taskSuccesfullyChallengedCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<32>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = taskSuccesfullyChallengedReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "taskSuccesfullyChallenged(uint32)"; + const SELECTOR: [u8; 4] = [93u8, 236u8, 195u8, 245u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self._0, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `transferOwnership(address)` and selector `0xf2fde38b`.\n```solidity\nfunction transferOwnership(address newOwner) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct transferOwnershipCall { + pub newOwner: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))` and selector `0x171f1d5b`.\n```solidity\nfunction trySignatureAndApkVerification(bytes32 msgHash, G1Point memory apk, G2Point memory apkG2, G1Point memory sigma) external view returns (bool pairingSuccessful, bool siganatureIsValid);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct trySignatureAndApkVerificationCall { + pub msgHash: ::alloy_sol_types::private::FixedBytes<32>, + pub apk: ::RustType, + pub apkG2: ::RustType, + pub sigma: ::RustType, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))`](trySignatureAndApkVerificationCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct trySignatureAndApkVerificationReturn { + pub pairingSuccessful: bool, + pub siganatureIsValid: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + G1Point, + G2Point, + G1Point, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::FixedBytes<32>, + ::RustType, + ::RustType, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: trySignatureAndApkVerificationCall) -> Self { + (value.msgHash, value.apk, value.apkG2, value.sigma) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for trySignatureAndApkVerificationCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + msgHash: tuple.0, + apk: tuple.1, + apkG2: tuple.2, + sigma: tuple.3, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Bool, + ::alloy_sol_types::sol_data::Bool, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool, bool); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: trySignatureAndApkVerificationReturn) -> Self { + (value.pairingSuccessful, value.siganatureIsValid) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for trySignatureAndApkVerificationReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + pairingSuccessful: tuple.0, + siganatureIsValid: tuple.1, + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for trySignatureAndApkVerificationCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + G1Point, + G2Point, + G1Point, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = trySignatureAndApkVerificationReturn; + type ReturnTuple<'a> = ( + ::alloy_sol_types::sol_data::Bool, + ::alloy_sol_types::sol_data::Bool, + ); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))"; + const SELECTOR: [u8; 4] = [23u8, 31u8, 29u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.msgHash), ::tokenize(&self.apk), ::tokenize(&self.apkG2), ::tokenize(&self.sigma),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Function with signature `unpause(uint256)` and selector `0xfabc1cbc`.\n```solidity\nfunction unpause(uint256 newPausedStatus) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct unpauseCall { + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container type for the return parameters of the [`unpause(uint256)`](unpauseCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct unpauseReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: unpauseCall) -> Self { + (value.newPausedStatus,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for unpauseCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newPausedStatus: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: unpauseReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for unpauseReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for unpauseCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = unpauseReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "unpause(uint256)"; + const SELECTOR: [u8; 4] = [250u8, 188u8, 28u8, 188u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container for all the [`IncredibleSquaringTaskManager`](self) function calls."] + pub enum IncredibleSquaringTaskManagerCalls { + TASK_CHALLENGE_WINDOW_BLOCK(TASK_CHALLENGE_WINDOW_BLOCKCall), + TASK_RESPONSE_WINDOW_BLOCK(TASK_RESPONSE_WINDOW_BLOCKCall), + aggregator(aggregatorCall), + allTaskHashes(allTaskHashesCall), + allTaskResponses(allTaskResponsesCall), + blsApkRegistry(blsApkRegistryCall), + checkSignatures(checkSignaturesCall), + createNewTask(createNewTaskCall), + delegation(delegationCall), + generator(generatorCall), + getCheckSignaturesIndices(getCheckSignaturesIndicesCall), + getOperatorState_0(getOperatorState_0Call), + getOperatorState_1(getOperatorState_1Call), + getQuorumBitmapsAtBlockNumber(getQuorumBitmapsAtBlockNumberCall), + getTaskResponseWindowBlock(getTaskResponseWindowBlockCall), + initialize(initializeCall), + latestTaskNum(latestTaskNumCall), + owner(ownerCall), + pause(pauseCall), + pauseAll(pauseAllCall), + paused_0(paused_0Call), + paused_1(paused_1Call), + pauserRegistry(pauserRegistryCall), + raiseAndResolveChallenge(raiseAndResolveChallengeCall), + registryCoordinator(registryCoordinatorCall), + renounceOwnership(renounceOwnershipCall), + respondToTask(respondToTaskCall), + setPauserRegistry(setPauserRegistryCall), + setStaleStakesForbidden(setStaleStakesForbiddenCall), + stakeRegistry(stakeRegistryCall), + staleStakesForbidden(staleStakesForbiddenCall), + taskNumber(taskNumberCall), + taskSuccesfullyChallenged(taskSuccesfullyChallengedCall), + transferOwnership(transferOwnershipCall), + trySignatureAndApkVerification(trySignatureAndApkVerificationCall), + unpause(unpauseCall), + } + #[automatically_derived] + impl IncredibleSquaringTaskManagerCalls { + #[doc = r" All the selectors of this enum."] + #[doc = r""] + #[doc = r" Note that the selectors might not be in the same order as the variants."] + #[doc = r" No guarantees are made about the order of the selectors."] + #[doc = r""] + #[doc = r" Prefer using `SolInterface` methods instead."] + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [16u8, 214u8, 122u8, 47u8], + [19u8, 100u8, 57u8, 221u8], + [23u8, 31u8, 29u8, 91u8], + [26u8, 212u8, 49u8, 137u8], + [36u8, 90u8, 123u8, 252u8], + [44u8, 178u8, 35u8, 213u8], + [45u8, 137u8, 246u8, 252u8], + [53u8, 99u8, 176u8, 209u8], + [65u8, 108u8, 126u8, 94u8], + [79u8, 115u8, 159u8, 116u8], + [89u8, 92u8, 106u8, 103u8], + [90u8, 200u8, 106u8, 183u8], + [91u8, 174u8, 201u8, 160u8], + [92u8, 21u8, 86u8, 98u8], + [92u8, 151u8, 90u8, 187u8], + [93u8, 236u8, 195u8, 245u8], + [93u8, 244u8, 89u8, 70u8], + [104u8, 48u8, 72u8, 53u8], + [107u8, 83u8, 46u8, 158u8], + [107u8, 146u8, 120u8, 126u8], + [109u8, 20u8, 169u8, 135u8], + [110u8, 251u8, 70u8, 54u8], + [113u8, 80u8, 24u8, 166u8], + [114u8, 209u8, 142u8, 141u8], + [122u8, 250u8, 30u8, 237u8], + [136u8, 111u8, 17u8, 149u8], + [139u8, 0u8, 206u8, 124u8], + [141u8, 165u8, 203u8, 91u8], + [185u8, 141u8, 9u8, 8u8], + [206u8, 253u8, 193u8, 212u8], + [223u8, 92u8, 247u8, 35u8], + [242u8, 253u8, 227u8, 139u8], + [245u8, 201u8, 137u8, 157u8], + [246u8, 60u8, 91u8, 171u8], + [248u8, 200u8, 118u8, 94u8], + [250u8, 188u8, 28u8, 188u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for IncredibleSquaringTaskManagerCalls { + const NAME: &'static str = "IncredibleSquaringTaskManagerCalls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 36usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::TASK_CHALLENGE_WINDOW_BLOCK(_) => { + ::SELECTOR + } + Self::TASK_RESPONSE_WINDOW_BLOCK(_) => { + ::SELECTOR + } + Self::aggregator(_) => ::SELECTOR, + Self::allTaskHashes(_) => ::SELECTOR, + Self::allTaskResponses(_) => { + ::SELECTOR + } + Self::blsApkRegistry(_) => { + ::SELECTOR + } + Self::checkSignatures(_) => { + ::SELECTOR + } + Self::createNewTask(_) => ::SELECTOR, + Self::delegation(_) => ::SELECTOR, + Self::generator(_) => ::SELECTOR, + Self::getCheckSignaturesIndices(_) => { + ::SELECTOR + } + Self::getOperatorState_0(_) => { + ::SELECTOR + } + Self::getOperatorState_1(_) => { + ::SELECTOR + } + Self::getQuorumBitmapsAtBlockNumber(_) => { + ::SELECTOR + } + Self::getTaskResponseWindowBlock(_) => { + ::SELECTOR + } + Self::initialize(_) => ::SELECTOR, + Self::latestTaskNum(_) => ::SELECTOR, + Self::owner(_) => ::SELECTOR, + Self::pause(_) => ::SELECTOR, + Self::pauseAll(_) => ::SELECTOR, + Self::paused_0(_) => ::SELECTOR, + Self::paused_1(_) => ::SELECTOR, + Self::pauserRegistry(_) => { + ::SELECTOR + } + Self::raiseAndResolveChallenge(_) => { + ::SELECTOR + } + Self::registryCoordinator(_) => { + ::SELECTOR + } + Self::renounceOwnership(_) => { + ::SELECTOR + } + Self::respondToTask(_) => ::SELECTOR, + Self::setPauserRegistry(_) => { + ::SELECTOR + } + Self::setStaleStakesForbidden(_) => { + ::SELECTOR + } + Self::stakeRegistry(_) => ::SELECTOR, + Self::staleStakesForbidden(_) => { + ::SELECTOR + } + Self::taskNumber(_) => ::SELECTOR, + Self::taskSuccesfullyChallenged(_) => { + ::SELECTOR + } + Self::transferOwnership(_) => { + ::SELECTOR + } + Self::trySignatureAndApkVerification(_) => { + ::SELECTOR + } + Self::unpause(_) => ::SELECTOR, + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(unsafe_code, non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + bool, + ) -> alloy_sol_types::Result< + IncredibleSquaringTaskManagerCalls, + >] = &[ + { + fn setPauserRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::setPauserRegistry) + } + setPauserRegistry + }, + { + fn pause( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::pause) + } + pause + }, + { + fn trySignatureAndApkVerification( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate).map(IncredibleSquaringTaskManagerCalls::trySignatureAndApkVerification) + } + trySignatureAndApkVerification + }, + { + fn TASK_RESPONSE_WINDOW_BLOCK( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate).map(IncredibleSquaringTaskManagerCalls::TASK_RESPONSE_WINDOW_BLOCK) + } + TASK_RESPONSE_WINDOW_BLOCK + }, + { + fn aggregator( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::aggregator) + } + aggregator + }, + { + fn allTaskResponses( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::allTaskResponses) + } + allTaskResponses + }, + { + fn allTaskHashes( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::allTaskHashes) + } + allTaskHashes + }, + { + fn getOperatorState_0( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::getOperatorState_0) + } + getOperatorState_0 + }, + { + fn setStaleStakesForbidden( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::setStaleStakesForbidden) + } + setStaleStakesForbidden + }, + { + fn getCheckSignaturesIndices( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::getCheckSignaturesIndices) + } + getCheckSignaturesIndices + }, + { + fn pauseAll( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::pauseAll) + } + pauseAll + }, + { + fn paused_0( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::paused_0) + } + paused_0 + }, + { + fn respondToTask( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::respondToTask) + } + respondToTask + }, + { + fn getQuorumBitmapsAtBlockNumber( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate).map(IncredibleSquaringTaskManagerCalls::getQuorumBitmapsAtBlockNumber) + } + getQuorumBitmapsAtBlockNumber + }, + { + fn paused_1( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::paused_1) + } + paused_1 + }, + { + fn taskSuccesfullyChallenged( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::taskSuccesfullyChallenged) + } + taskSuccesfullyChallenged + }, + { + fn blsApkRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::blsApkRegistry) + } + blsApkRegistry + }, + { + fn stakeRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::stakeRegistry) + } + stakeRegistry + }, + { + fn raiseAndResolveChallenge( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::raiseAndResolveChallenge) + } + raiseAndResolveChallenge + }, + { + fn createNewTask( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::createNewTask) + } + createNewTask + }, + { + fn registryCoordinator( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::registryCoordinator) + } + registryCoordinator + }, + { + fn checkSignatures( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::checkSignatures) + } + checkSignatures + }, + { + fn renounceOwnership( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::renounceOwnership) + } + renounceOwnership + }, + { + fn taskNumber( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::taskNumber) + } + taskNumber + }, + { + fn generator( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::generator) + } + generator + }, + { + fn pauserRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::pauserRegistry) + } + pauserRegistry + }, + { + fn latestTaskNum( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::latestTaskNum) + } + latestTaskNum + }, + { + fn owner( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::owner) + } + owner + }, + { + fn staleStakesForbidden( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::staleStakesForbidden) + } + staleStakesForbidden + }, + { + fn getOperatorState_1( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::getOperatorState_1) + } + getOperatorState_1 + }, + { + fn delegation( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::delegation) + } + delegation + }, + { + fn transferOwnership( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw( + data, validate, + ) + .map(IncredibleSquaringTaskManagerCalls::transferOwnership) + } + transferOwnership + }, + { + fn getTaskResponseWindowBlock( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate).map(IncredibleSquaringTaskManagerCalls::getTaskResponseWindowBlock) + } + getTaskResponseWindowBlock + }, + { + fn TASK_CHALLENGE_WINDOW_BLOCK( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate).map(IncredibleSquaringTaskManagerCalls::TASK_CHALLENGE_WINDOW_BLOCK) + } + TASK_CHALLENGE_WINDOW_BLOCK + }, + { + fn initialize( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::initialize) + } + initialize + }, + { + fn unpause( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result + { + ::abi_decode_raw(data, validate) + .map(IncredibleSquaringTaskManagerCalls::unpause) + } + unpause + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err(alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + )); + }; + (unsafe { DECODE_SHIMS.get_unchecked(idx) })(data, validate) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::TASK_CHALLENGE_WINDOW_BLOCK(inner) => ::abi_encoded_size(inner), + Self::TASK_RESPONSE_WINDOW_BLOCK(inner) => ::abi_encoded_size(inner), + Self::aggregator(inner) => ::abi_encoded_size(inner), + Self::allTaskHashes(inner) => ::abi_encoded_size(inner), + Self::allTaskResponses(inner) => ::abi_encoded_size(inner), + Self::blsApkRegistry(inner) => ::abi_encoded_size(inner), + Self::checkSignatures(inner) => ::abi_encoded_size(inner), + Self::createNewTask(inner) => ::abi_encoded_size(inner), + Self::delegation(inner) => ::abi_encoded_size(inner), + Self::generator(inner) => ::abi_encoded_size(inner), + Self::getCheckSignaturesIndices(inner) => ::abi_encoded_size(inner), + Self::getOperatorState_0(inner) => ::abi_encoded_size(inner), + Self::getOperatorState_1(inner) => ::abi_encoded_size(inner), + Self::getQuorumBitmapsAtBlockNumber(inner) => ::abi_encoded_size(inner), + Self::getTaskResponseWindowBlock(inner) => ::abi_encoded_size(inner), + Self::initialize(inner) => ::abi_encoded_size(inner), + Self::latestTaskNum(inner) => ::abi_encoded_size(inner), + Self::owner(inner) => ::abi_encoded_size(inner), + Self::pause(inner) => ::abi_encoded_size(inner), + Self::pauseAll(inner) => ::abi_encoded_size(inner), + Self::paused_0(inner) => ::abi_encoded_size(inner), + Self::paused_1(inner) => ::abi_encoded_size(inner), + Self::pauserRegistry(inner) => ::abi_encoded_size(inner), + Self::raiseAndResolveChallenge(inner) => ::abi_encoded_size(inner), + Self::registryCoordinator(inner) => ::abi_encoded_size(inner), + Self::renounceOwnership(inner) => ::abi_encoded_size(inner), + Self::respondToTask(inner) => ::abi_encoded_size(inner), + Self::setPauserRegistry(inner) => ::abi_encoded_size(inner), + Self::setStaleStakesForbidden(inner) => ::abi_encoded_size(inner), + Self::stakeRegistry(inner) => ::abi_encoded_size(inner), + Self::staleStakesForbidden(inner) => ::abi_encoded_size(inner), + Self::taskNumber(inner) => ::abi_encoded_size(inner), + Self::taskSuccesfullyChallenged(inner) => ::abi_encoded_size(inner), + Self::transferOwnership(inner) => ::abi_encoded_size(inner), + Self::trySignatureAndApkVerification(inner) => ::abi_encoded_size(inner), + Self::unpause(inner) => ::abi_encoded_size(inner), + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::TASK_CHALLENGE_WINDOW_BLOCK(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::TASK_RESPONSE_WINDOW_BLOCK(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::aggregator(inner) => { + ::abi_encode_raw(inner, out) + } + Self::allTaskHashes(inner) => { + ::abi_encode_raw(inner, out) + } + Self::allTaskResponses(inner) => { + ::abi_encode_raw(inner, out) + } + Self::blsApkRegistry(inner) => { + ::abi_encode_raw(inner, out) + } + Self::checkSignatures(inner) => { + ::abi_encode_raw(inner, out) + } + Self::createNewTask(inner) => { + ::abi_encode_raw(inner, out) + } + Self::delegation(inner) => { + ::abi_encode_raw(inner, out) + } + Self::generator(inner) => { + ::abi_encode_raw(inner, out) + } + Self::getCheckSignaturesIndices(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::getOperatorState_0(inner) => { + ::abi_encode_raw(inner, out) + } + Self::getOperatorState_1(inner) => { + ::abi_encode_raw(inner, out) + } + Self::getQuorumBitmapsAtBlockNumber(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::getTaskResponseWindowBlock(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::initialize(inner) => { + ::abi_encode_raw(inner, out) + } + Self::latestTaskNum(inner) => { + ::abi_encode_raw(inner, out) + } + Self::owner(inner) => { + ::abi_encode_raw(inner, out) + } + Self::pause(inner) => { + ::abi_encode_raw(inner, out) + } + Self::pauseAll(inner) => { + ::abi_encode_raw(inner, out) + } + Self::paused_0(inner) => { + ::abi_encode_raw(inner, out) + } + Self::paused_1(inner) => { + ::abi_encode_raw(inner, out) + } + Self::pauserRegistry(inner) => { + ::abi_encode_raw(inner, out) + } + Self::raiseAndResolveChallenge(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::registryCoordinator(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encode_raw(inner, out) + } + Self::respondToTask(inner) => { + ::abi_encode_raw(inner, out) + } + Self::setPauserRegistry(inner) => { + ::abi_encode_raw(inner, out) + } + Self::setStaleStakesForbidden(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::stakeRegistry(inner) => { + ::abi_encode_raw(inner, out) + } + Self::staleStakesForbidden(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::taskNumber(inner) => { + ::abi_encode_raw(inner, out) + } + Self::taskSuccesfullyChallenged(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::transferOwnership(inner) => { + ::abi_encode_raw(inner, out) + } + Self::trySignatureAndApkVerification(inner) => { + ::abi_encode_raw( + inner, out, + ) + } + Self::unpause(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + #[allow(missing_docs)] + #[derive(Debug, Serialize, Deserialize)] + #[doc = "Container for all the [`IncredibleSquaringTaskManager`](self) events."] + pub enum IncredibleSquaringTaskManagerEvents { + Initialized(Initialized), + NewTaskCreated(NewTaskCreated), + OwnershipTransferred(OwnershipTransferred), + Paused(Paused), + PauserRegistrySet(PauserRegistrySet), + StaleStakesForbiddenUpdate(StaleStakesForbiddenUpdate), + TaskChallengedSuccessfully(TaskChallengedSuccessfully), + TaskChallengedUnsuccessfully(TaskChallengedUnsuccessfully), + TaskCompleted(TaskCompleted), + TaskResponded(TaskResponded), + Unpaused(Unpaused), + } + #[automatically_derived] + impl IncredibleSquaringTaskManagerEvents { + #[doc = r" All the selectors of this enum."] + #[doc = r""] + #[doc = r" Note that the selectors might not be in the same order as the variants."] + #[doc = r" No guarantees are made about the order of the selectors."] + #[doc = r""] + #[doc = r" Prefer using `SolInterface` methods instead."] + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 22u8, 149u8, 184u8, 208u8, 110u8, 200u8, 0u8, 180u8, 97u8, 94u8, 116u8, 92u8, + 251u8, 91u8, 208u8, 12u8, 31u8, 40u8, 117u8, 97u8, 93u8, 66u8, 146u8, 92u8, 59u8, + 90u8, 250u8, 84u8, 59u8, 178u8, 76u8, 72u8, + ], + [ + 52u8, 156u8, 30u8, 230u8, 14u8, 78u8, 137u8, 114u8, 238u8, 157u8, 186u8, 100u8, + 44u8, 23u8, 116u8, 84u8, 61u8, 92u8, 65u8, 54u8, 135u8, 155u8, 127u8, 76u8, 170u8, + 240u8, 75u8, 248u8, 26u8, 72u8, 122u8, 42u8, + ], + [ + 53u8, 130u8, 209u8, 130u8, 142u8, 38u8, 191u8, 86u8, 189u8, 128u8, 21u8, 2u8, + 188u8, 2u8, 26u8, 192u8, 188u8, 138u8, 251u8, 87u8, 200u8, 38u8, 228u8, 152u8, + 107u8, 69u8, 89u8, 60u8, 143u8, 173u8, 56u8, 156u8, + ], + [ + 64u8, 228u8, 237u8, 136u8, 10u8, 41u8, 224u8, 246u8, 221u8, 206u8, 48u8, 116u8, + 87u8, 251u8, 117u8, 205u8, 223u8, 79u8, 238u8, 247u8, 211u8, 236u8, 176u8, 48u8, + 27u8, 253u8, 244u8, 151u8, 106u8, 14u8, 45u8, 252u8, + ], + [ + 110u8, 159u8, 205u8, 83u8, 152u8, 150u8, 252u8, 166u8, 14u8, 139u8, 15u8, 1u8, + 221u8, 88u8, 2u8, 51u8, 228u8, 138u8, 107u8, 15u8, 125u8, 240u8, 19u8, 184u8, + 155u8, 167u8, 245u8, 101u8, 134u8, 154u8, 205u8, 182u8, + ], + [ + 127u8, 38u8, 184u8, 63u8, 249u8, 110u8, 31u8, 43u8, 106u8, 104u8, 47u8, 19u8, 56u8, + 82u8, 246u8, 121u8, 138u8, 9u8, 196u8, 101u8, 218u8, 149u8, 146u8, 20u8, 96u8, + 206u8, 251u8, 56u8, 71u8, 64u8, 36u8, 152u8, + ], + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, 31u8, 208u8, + 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, 218u8, 175u8, 227u8, + 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 154u8, 20u8, 79u8, 34u8, 138u8, 147u8, 27u8, 157u8, 13u8, 22u8, 150u8, 251u8, + 205u8, 175u8, 49u8, 11u8, 36u8, 181u8, 210u8, 210u8, 30u8, 121u8, 157u8, 182u8, + 35u8, 252u8, 152u8, 106u8, 15u8, 84u8, 116u8, 48u8, + ], + [ + 171u8, 64u8, 163u8, 116u8, 188u8, 81u8, 222u8, 55u8, 34u8, 0u8, 168u8, 188u8, + 152u8, 26u8, 248u8, 201u8, 236u8, 220u8, 8u8, 223u8, 218u8, 239u8, 11u8, 182u8, + 224u8, 159u8, 136u8, 243u8, 198u8, 22u8, 239u8, 61u8, + ], + [ + 194u8, 13u8, 27u8, 176u8, 241u8, 98u8, 54u8, 128u8, 48u8, 107u8, 131u8, 212u8, + 255u8, 75u8, 185u8, 154u8, 43u8, 235u8, 157u8, 134u8, 217u8, 120u8, 50u8, 243u8, + 202u8, 64u8, 253u8, 19u8, 162u8, 157u8, 241u8, 236u8, + ], + [ + 253u8, 62u8, 38u8, 190u8, 235u8, 89u8, 103u8, 252u8, 90u8, 87u8, 160u8, 68u8, + 105u8, 20u8, 234u8, 188u8, 69u8, 180u8, 170u8, 71u8, 76u8, 103u8, 165u8, 27u8, + 75u8, 81u8, 96u8, 202u8, 198u8, 13u8, 219u8, 5u8, + ], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for IncredibleSquaringTaskManagerEvents { + const NAME: &'static str = "IncredibleSquaringTaskManagerEvents"; + const COUNT: usize = 11usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::Initialized) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::NewTaskCreated) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::OwnershipTransferred) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data, validate) + .map(Self::Paused) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::PauserRegistrySet) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::StaleStakesForbiddenUpdate) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::TaskChallengedSuccessfully) + } + Some( + ::SIGNATURE_HASH, + ) => ::decode_raw_log( + topics, data, validate, + ) + .map(Self::TaskChallengedUnsuccessfully), + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::TaskCompleted) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::TaskResponded) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data, validate) + .map(Self::Unpaused) + } + _ => alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }), + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for IncredibleSquaringTaskManagerEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::NewTaskCreated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Paused(inner) => alloy_sol_types::private::IntoLogData::to_log_data(inner), + Self::PauserRegistrySet(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::StaleStakesForbiddenUpdate(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TaskChallengedSuccessfully(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TaskChallengedUnsuccessfully(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TaskCompleted(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TaskResponded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Unpaused(inner) => alloy_sol_types::private::IntoLogData::to_log_data(inner), + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::NewTaskCreated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Paused(inner) => alloy_sol_types::private::IntoLogData::into_log_data(inner), + Self::PauserRegistrySet(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::StaleStakesForbiddenUpdate(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TaskChallengedSuccessfully(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TaskChallengedUnsuccessfully(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TaskCompleted(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TaskResponded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Unpaused(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use ::alloy_contract; + #[doc = "Creates a new wrapper around an on-chain [`IncredibleSquaringTaskManager`](self) contract instance.\n\nSee the [wrapper's documentation](`IncredibleSquaringTaskManagerInstance`) for more details."] + #[inline] + pub const fn new< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> IncredibleSquaringTaskManagerInstance { + IncredibleSquaringTaskManagerInstance::::new(address, provider) + } + #[doc = "Deploys this contract using the given `provider` and constructor arguments, if any.\n\nReturns a new instance of the contract, if the deployment was successful.\n\nFor more fine-grained control over the deployment process, use [`deploy_builder`] instead."] + #[inline] + pub fn deploy< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + _registryCoordinator: ::alloy_sol_types::private::Address, + _taskResponseWindowBlock: u32, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + IncredibleSquaringTaskManagerInstance::::deploy( + provider, + _registryCoordinator, + _taskResponseWindowBlock, + ) + } + #[doc = "Creates a `RawCallBuilder` for deploying this contract using the given `provider`\nand constructor arguments, if any.\n\nThis is a simple wrapper around creating a `RawCallBuilder` with the data set to\nthe bytecode concatenated with the constructor's ABI-encoded arguments."] + #[inline] + pub fn deploy_builder< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + _registryCoordinator: ::alloy_sol_types::private::Address, + _taskResponseWindowBlock: u32, + ) -> alloy_contract::RawCallBuilder { + IncredibleSquaringTaskManagerInstance::::deploy_builder( + provider, + _registryCoordinator, + _taskResponseWindowBlock, + ) + } + #[doc = "A [`IncredibleSquaringTaskManager`](self) instance.\n\nContains type-safe methods for interacting with an on-chain instance of the\n[`IncredibleSquaringTaskManager`](self) contract located at a given `address`, using a given\nprovider `P`.\n\nIf the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)\ndocumentation on how to provide it), the `deploy` and `deploy_builder` methods can\nbe used to deploy a new instance of the contract.\n\nSee the [module-level documentation](self) for all the available methods."] + #[derive(Clone)] + pub struct IncredibleSquaringTaskManagerInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network_transport: ::core::marker::PhantomData<(N, T)>, + } + #[automatically_derived] + impl ::core::fmt::Debug for IncredibleSquaringTaskManagerInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("IncredibleSquaringTaskManagerInstance") + .field(&self.address) + .finish() + } + } + #[doc = r" Instantiation and getters/setters."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IncredibleSquaringTaskManagerInstance + { + #[doc = "Creates a new wrapper around an on-chain [`IncredibleSquaringTaskManager`](self) contract instance.\n\nSee the [wrapper's documentation](`IncredibleSquaringTaskManagerInstance`) for more details."] + #[inline] + pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self { + Self { + address, + provider, + _network_transport: ::core::marker::PhantomData, + } + } + #[doc = "Deploys this contract using the given `provider` and constructor arguments, if any.\n\nReturns a new instance of the contract, if the deployment was successful.\n\nFor more fine-grained control over the deployment process, use [`deploy_builder`] instead."] + #[inline] + pub async fn deploy( + provider: P, + _registryCoordinator: ::alloy_sol_types::private::Address, + _taskResponseWindowBlock: u32, + ) -> alloy_contract::Result> { + let call_builder = + Self::deploy_builder(provider, _registryCoordinator, _taskResponseWindowBlock); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + #[doc = "Creates a `RawCallBuilder` for deploying this contract using the given `provider`\nand constructor arguments, if any.\n\nThis is a simple wrapper around creating a `RawCallBuilder` with the data set to\nthe bytecode concatenated with the constructor's ABI-encoded arguments."] + #[inline] + pub fn deploy_builder( + provider: P, + _registryCoordinator: ::alloy_sol_types::private::Address, + _taskResponseWindowBlock: u32, + ) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + [ + &BYTECODE[..], + &alloy_sol_types::SolConstructor::abi_encode(&constructorCall { + _registryCoordinator, + _taskResponseWindowBlock, + })[..], + ] + .concat() + .into(), + ) + } + #[doc = r" Returns a reference to the address."] + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + #[doc = r" Sets the address."] + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + #[doc = r" Sets the address and returns `self`."] + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + #[doc = r" Returns a reference to the provider."] + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl IncredibleSquaringTaskManagerInstance { + #[doc = r" Clones the provider and returns a new instance with the cloned provider."] + #[inline] + pub fn with_cloned_provider(self) -> IncredibleSquaringTaskManagerInstance { + IncredibleSquaringTaskManagerInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network_transport: ::core::marker::PhantomData, + } + } + } + #[doc = r" Function calls."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IncredibleSquaringTaskManagerInstance + { + #[doc = r" Creates a new call builder using this contract instance's provider and address."] + #[doc = r""] + #[doc = r" Note that the call can be any function call, not just those defined in this"] + #[doc = r" contract. Prefer using the other methods for building type-safe contract calls."] + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + #[doc = "Creates a new call builder for the [`TASK_CHALLENGE_WINDOW_BLOCK`] function."] + pub fn TASK_CHALLENGE_WINDOW_BLOCK( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&TASK_CHALLENGE_WINDOW_BLOCKCall {}) + } + #[doc = "Creates a new call builder for the [`TASK_RESPONSE_WINDOW_BLOCK`] function."] + pub fn TASK_RESPONSE_WINDOW_BLOCK( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&TASK_RESPONSE_WINDOW_BLOCKCall {}) + } + #[doc = "Creates a new call builder for the [`aggregator`] function."] + pub fn aggregator(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&aggregatorCall {}) + } + #[doc = "Creates a new call builder for the [`allTaskHashes`] function."] + pub fn allTaskHashes( + &self, + _0: u32, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&allTaskHashesCall { _0 }) + } + #[doc = "Creates a new call builder for the [`allTaskResponses`] function."] + pub fn allTaskResponses( + &self, + _0: u32, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&allTaskResponsesCall { _0 }) + } + #[doc = "Creates a new call builder for the [`blsApkRegistry`] function."] + pub fn blsApkRegistry( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&blsApkRegistryCall {}) + } + #[doc = "Creates a new call builder for the [`checkSignatures`] function."] + pub fn checkSignatures( + &self, + msgHash: ::alloy_sol_types::private::FixedBytes<32>, + quorumNumbers: ::alloy_sol_types::private::Bytes, + referenceBlockNumber: u32, + params: ::RustType, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&checkSignaturesCall { + msgHash, + quorumNumbers, + referenceBlockNumber, + params, + }) + } + #[doc = "Creates a new call builder for the [`createNewTask`] function."] + pub fn createNewTask( + &self, + numberToBeSquared: ::alloy_sol_types::private::U256, + quorumThresholdPercentage: u32, + quorumNumbers: ::alloy_sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&createNewTaskCall { + numberToBeSquared, + quorumThresholdPercentage, + quorumNumbers, + }) + } + #[doc = "Creates a new call builder for the [`delegation`] function."] + pub fn delegation(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&delegationCall {}) + } + #[doc = "Creates a new call builder for the [`generator`] function."] + pub fn generator(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&generatorCall {}) + } + #[doc = "Creates a new call builder for the [`getCheckSignaturesIndices`] function."] + pub fn getCheckSignaturesIndices( + &self, + registryCoordinator: ::alloy_sol_types::private::Address, + referenceBlockNumber: u32, + quorumNumbers: ::alloy_sol_types::private::Bytes, + nonSignerOperatorIds: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::FixedBytes<32>, + >, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getCheckSignaturesIndicesCall { + registryCoordinator, + referenceBlockNumber, + quorumNumbers, + nonSignerOperatorIds, + }) + } + #[doc = "Creates a new call builder for the [`getOperatorState_0`] function."] + pub fn getOperatorState_0( + &self, + registryCoordinator: ::alloy_sol_types::private::Address, + quorumNumbers: ::alloy_sol_types::private::Bytes, + blockNumber: u32, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getOperatorState_0Call { + registryCoordinator, + quorumNumbers, + blockNumber, + }) + } + #[doc = "Creates a new call builder for the [`getOperatorState_1`] function."] + pub fn getOperatorState_1( + &self, + registryCoordinator: ::alloy_sol_types::private::Address, + operatorId: ::alloy_sol_types::private::FixedBytes<32>, + blockNumber: u32, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getOperatorState_1Call { + registryCoordinator, + operatorId, + blockNumber, + }) + } + #[doc = "Creates a new call builder for the [`getQuorumBitmapsAtBlockNumber`] function."] + pub fn getQuorumBitmapsAtBlockNumber( + &self, + registryCoordinator: ::alloy_sol_types::private::Address, + operatorIds: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::FixedBytes<32>, + >, + blockNumber: u32, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getQuorumBitmapsAtBlockNumberCall { + registryCoordinator, + operatorIds, + blockNumber, + }) + } + #[doc = "Creates a new call builder for the [`getTaskResponseWindowBlock`] function."] + pub fn getTaskResponseWindowBlock( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getTaskResponseWindowBlockCall {}) + } + #[doc = "Creates a new call builder for the [`initialize`] function."] + pub fn initialize( + &self, + _pauserRegistry: ::alloy_sol_types::private::Address, + initialOwner: ::alloy_sol_types::private::Address, + _aggregator: ::alloy_sol_types::private::Address, + _generator: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&initializeCall { + _pauserRegistry, + initialOwner, + _aggregator, + _generator, + }) + } + #[doc = "Creates a new call builder for the [`latestTaskNum`] function."] + pub fn latestTaskNum(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&latestTaskNumCall {}) + } + #[doc = "Creates a new call builder for the [`owner`] function."] + pub fn owner(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&ownerCall {}) + } + #[doc = "Creates a new call builder for the [`pause`] function."] + pub fn pause( + &self, + newPausedStatus: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&pauseCall { newPausedStatus }) + } + #[doc = "Creates a new call builder for the [`pauseAll`] function."] + pub fn pauseAll(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&pauseAllCall {}) + } + #[doc = "Creates a new call builder for the [`paused_0`] function."] + pub fn paused_0( + &self, + index: u8, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&paused_0Call { index }) + } + #[doc = "Creates a new call builder for the [`paused_1`] function."] + pub fn paused_1(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&paused_1Call {}) + } + #[doc = "Creates a new call builder for the [`pauserRegistry`] function."] + pub fn pauserRegistry( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&pauserRegistryCall {}) + } + #[doc = "Creates a new call builder for the [`raiseAndResolveChallenge`] function."] + pub fn raiseAndResolveChallenge( + &self, + task: ::RustType, + taskResponse: ::RustType, + taskResponseMetadata: ::RustType, + pubkeysOfNonSigningOperators: ::alloy_sol_types::private::Vec< + ::RustType, + >, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&raiseAndResolveChallengeCall { + task, + taskResponse, + taskResponseMetadata, + pubkeysOfNonSigningOperators, + }) + } + #[doc = "Creates a new call builder for the [`registryCoordinator`] function."] + pub fn registryCoordinator( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(®istryCoordinatorCall {}) + } + #[doc = "Creates a new call builder for the [`renounceOwnership`] function."] + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&renounceOwnershipCall {}) + } + #[doc = "Creates a new call builder for the [`respondToTask`] function."] + pub fn respondToTask( + &self, + task: ::RustType, + taskResponse: ::RustType, + nonSignerStakesAndSignature: ::RustType, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&respondToTaskCall { + task, + taskResponse, + nonSignerStakesAndSignature, + }) + } + #[doc = "Creates a new call builder for the [`setPauserRegistry`] function."] + pub fn setPauserRegistry( + &self, + newPauserRegistry: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&setPauserRegistryCall { newPauserRegistry }) + } + #[doc = "Creates a new call builder for the [`setStaleStakesForbidden`] function."] + pub fn setStaleStakesForbidden( + &self, + value: bool, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&setStaleStakesForbiddenCall { value }) + } + #[doc = "Creates a new call builder for the [`stakeRegistry`] function."] + pub fn stakeRegistry(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&stakeRegistryCall {}) + } + #[doc = "Creates a new call builder for the [`staleStakesForbidden`] function."] + pub fn staleStakesForbidden( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&staleStakesForbiddenCall {}) + } + #[doc = "Creates a new call builder for the [`taskNumber`] function."] + pub fn taskNumber(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&taskNumberCall {}) + } + #[doc = "Creates a new call builder for the [`taskSuccesfullyChallenged`] function."] + pub fn taskSuccesfullyChallenged( + &self, + _0: u32, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&taskSuccesfullyChallengedCall { _0 }) + } + #[doc = "Creates a new call builder for the [`transferOwnership`] function."] + pub fn transferOwnership( + &self, + newOwner: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&transferOwnershipCall { newOwner }) + } + #[doc = "Creates a new call builder for the [`trySignatureAndApkVerification`] function."] + pub fn trySignatureAndApkVerification( + &self, + msgHash: ::alloy_sol_types::private::FixedBytes<32>, + apk: ::RustType, + apkG2: ::RustType, + sigma: ::RustType, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&trySignatureAndApkVerificationCall { + msgHash, + apk, + apkG2, + sigma, + }) + } + #[doc = "Creates a new call builder for the [`unpause`] function."] + pub fn unpause( + &self, + newPausedStatus: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&unpauseCall { newPausedStatus }) + } + } + #[doc = r" Event filters."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IncredibleSquaringTaskManagerInstance + { + #[doc = r" Creates a new event filter using this contract instance's provider and address."] + #[doc = r""] + #[doc = r" Note that the type can be any event, not just those defined in this contract."] + #[doc = r" Prefer using the other methods for building type-safe event filters."] + pub fn event_filter( + &self, + ) -> alloy_contract::Event { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + #[doc = "Creates a new event filter for the [`Initialized`] event."] + pub fn Initialized_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`NewTaskCreated`] event."] + pub fn NewTaskCreated_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`OwnershipTransferred`] event."] + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`Paused`] event."] + pub fn Paused_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`PauserRegistrySet`] event."] + pub fn PauserRegistrySet_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`StaleStakesForbiddenUpdate`] event."] + pub fn StaleStakesForbiddenUpdate_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`TaskChallengedSuccessfully`] event."] + pub fn TaskChallengedSuccessfully_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`TaskChallengedUnsuccessfully`] event."] + pub fn TaskChallengedUnsuccessfully_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`TaskCompleted`] event."] + pub fn TaskCompleted_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`TaskResponded`] event."] + pub fn TaskResponded_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`Unpaused`] event."] + pub fn Unpaused_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + } +} diff --git a/blueprint-test-utils/src/binding/ipauserregistry.rs b/blueprint-test-utils/src/binding/ipauserregistry.rs new file mode 100644 index 00000000..f60e2e48 --- /dev/null +++ b/blueprint-test-utils/src/binding/ipauserregistry.rs @@ -0,0 +1,776 @@ +#![allow(clippy::all)] + +#[doc = "\n\nGenerated by the following Solidity interface...\n```solidity\ninterface PauserRegistry {\n event PauserStatusChanged(address pauser, bool canPause);\n event UnpauserChanged(address previousUnpauser, address newUnpauser);\n\n function isPauser(address pauser) external view returns (bool);\n function unpauser() external view returns (address);\n}\n```\n\n...which was generated by the following JSON ABI:\n```json\n[\n {\n \"type\": \"function\",\n \"name\": \"isPauser\",\n \"inputs\": [\n {\n \"name\": \"pauser\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpauser\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"PauserStatusChanged\",\n \"inputs\": [\n {\n \"name\": \"pauser\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"canPause\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"UnpauserChanged\",\n \"inputs\": [\n {\n \"name\": \"previousUnpauser\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newUnpauser\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n }\n]\n```"] +#[allow(missing_docs)] +#[allow(non_camel_case_types, non_snake_case, clippy::style)] +pub mod PauserRegistry { + use super::*; + use ::alloy_sol_types; + #[doc = r" The creation / init bytecode of the contract."] + #[doc = r""] + #[doc = r" ```text"] + #[doc = "0x"] + #[doc = r" ```"] + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(b""); + #[doc = r" The runtime bytecode of the contract, as deployed on the network."] + #[doc = r""] + #[doc = r" ```text"] + #[doc = "0x"] + #[doc = r" ```"] + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(b""); + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Event with signature `PauserStatusChanged(address,bool)` and selector `0x65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152`.\n```solidity\nevent PauserStatusChanged(address pauser, bool canPause);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct PauserStatusChanged { + #[allow(missing_docs)] + pub pauser: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub canPause: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for PauserStatusChanged { + type DataTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Bool, + ); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "PauserStatusChanged(address,bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 101u8, 211u8, 161u8, 253u8, 76u8, 19u8, 240u8, 92u8, 186u8, 22u8, 79u8, 128u8, + 208u8, 60u8, 233u8, 15u8, 180u8, 181u8, 226u8, 25u8, 70u8, 191u8, 195u8, 171u8, + 125u8, 189u8, 67u8, 76u8, 45u8, 11u8, 145u8, 82u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + pauser: data.0, + canPause: data.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.pauser, + ), + <::alloy_sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize( + &self.canPause, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for PauserStatusChanged { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&PauserStatusChanged> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &PauserStatusChanged) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Event with signature `UnpauserChanged(address,address)` and selector `0x06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892`.\n```solidity\nevent UnpauserChanged(address previousUnpauser, address newUnpauser);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct UnpauserChanged { + #[allow(missing_docs)] + pub previousUnpauser: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newUnpauser: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for UnpauserChanged { + type DataTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "UnpauserChanged(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 6u8, 180u8, 22u8, 122u8, 37u8, 40u8, 136u8, 122u8, 30u8, 151u8, 163u8, 102u8, + 238u8, 254u8, 133u8, 73u8, 191u8, 191u8, 30u8, 163u8, 230u8, 172u8, 129u8, + 203u8, 37u8, 100u8, 169u8, 52u8, 210u8, 14u8, 136u8, 146u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousUnpauser: data.0, + newUnpauser: data.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.previousUnpauser, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newUnpauser, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for UnpauserChanged { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&UnpauserChanged> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &UnpauserChanged) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Function with signature `isPauser(address)` and selector `0x46fbf68e`.\n```solidity\nfunction isPauser(address pauser) external view returns (bool);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct isPauserCall { + pub pauser: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`isPauser(address)`](isPauserCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct isPauserReturn { + pub _0: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isPauserCall) -> Self { + (value.pauser,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isPauserCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { pauser: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isPauserReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isPauserReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isPauserCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = isPauserReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isPauser(address)"; + const SELECTOR: [u8; 4] = [70u8, 251u8, 246u8, 142u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.pauser, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Function with signature `unpauser()` and selector `0xeab66d7a`.\n```solidity\nfunction unpauser() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct unpauserCall {} + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`unpauser()`](unpauserCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct unpauserReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: unpauserCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for unpauserCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: unpauserReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for unpauserReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for unpauserCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = unpauserReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "unpauser()"; + const SELECTOR: [u8; 4] = [234u8, 182u8, 109u8, 122u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Container for all the [`PauserRegistry`](self) function calls."] + pub enum PauserRegistryCalls { + isPauser(isPauserCall), + unpauser(unpauserCall), + } + #[automatically_derived] + impl PauserRegistryCalls { + #[doc = r" All the selectors of this enum."] + #[doc = r""] + #[doc = r" Note that the selectors might not be in the same order as the variants."] + #[doc = r" No guarantees are made about the order of the selectors."] + #[doc = r""] + #[doc = r" Prefer using `SolInterface` methods instead."] + pub const SELECTORS: &'static [[u8; 4usize]] = + &[[70u8, 251u8, 246u8, 142u8], [234u8, 182u8, 109u8, 122u8]]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for PauserRegistryCalls { + const NAME: &'static str = "PauserRegistryCalls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 2usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::isPauser(_) => ::SELECTOR, + Self::unpauser(_) => ::SELECTOR, + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(unsafe_code, non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + bool, + ) + -> alloy_sol_types::Result] = &[ + { + fn isPauser( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(PauserRegistryCalls::isPauser) + } + isPauser + }, + { + fn unpauser( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(PauserRegistryCalls::unpauser) + } + unpauser + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err(alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + )); + }; + (unsafe { DECODE_SHIMS.get_unchecked(idx) })(data, validate) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::isPauser(inner) => { + ::abi_encoded_size(inner) + } + Self::unpauser(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::isPauser(inner) => { + ::abi_encode_raw(inner, out) + } + Self::unpauser(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + #[allow(missing_docs)] + #[derive(Debug)] + #[doc = "Container for all the [`PauserRegistry`](self) events."] + pub enum PauserRegistryEvents { + PauserStatusChanged(PauserStatusChanged), + UnpauserChanged(UnpauserChanged), + } + #[automatically_derived] + impl PauserRegistryEvents { + #[doc = r" All the selectors of this enum."] + #[doc = r""] + #[doc = r" Note that the selectors might not be in the same order as the variants."] + #[doc = r" No guarantees are made about the order of the selectors."] + #[doc = r""] + #[doc = r" Prefer using `SolInterface` methods instead."] + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 6u8, 180u8, 22u8, 122u8, 37u8, 40u8, 136u8, 122u8, 30u8, 151u8, 163u8, 102u8, + 238u8, 254u8, 133u8, 73u8, 191u8, 191u8, 30u8, 163u8, 230u8, 172u8, 129u8, 203u8, + 37u8, 100u8, 169u8, 52u8, 210u8, 14u8, 136u8, 146u8, + ], + [ + 101u8, 211u8, 161u8, 253u8, 76u8, 19u8, 240u8, 92u8, 186u8, 22u8, 79u8, 128u8, + 208u8, 60u8, 233u8, 15u8, 180u8, 181u8, 226u8, 25u8, 70u8, 191u8, 195u8, 171u8, + 125u8, 189u8, 67u8, 76u8, 45u8, 11u8, 145u8, 82u8, + ], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for PauserRegistryEvents { + const NAME: &'static str = "PauserRegistryEvents"; + const COUNT: usize = 2usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::PauserStatusChanged) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::UnpauserChanged) + } + _ => alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }), + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for PauserRegistryEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::PauserStatusChanged(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::UnpauserChanged(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::PauserStatusChanged(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::UnpauserChanged(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use ::alloy_contract; + #[doc = "Creates a new wrapper around an on-chain [`PauserRegistry`](self) contract instance.\n\nSee the [wrapper's documentation](`PauserRegistryInstance`) for more details."] + #[inline] + pub const fn new< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> PauserRegistryInstance { + PauserRegistryInstance::::new(address, provider) + } + #[doc = "Deploys this contract using the given `provider` and constructor arguments, if any.\n\nReturns a new instance of the contract, if the deployment was successful.\n\nFor more fine-grained control over the deployment process, use [`deploy_builder`] instead."] + #[inline] + pub fn deploy< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + ) -> impl ::core::future::Future>> + { + PauserRegistryInstance::::deploy(provider) + } + #[doc = "Creates a `RawCallBuilder` for deploying this contract using the given `provider`\nand constructor arguments, if any.\n\nThis is a simple wrapper around creating a `RawCallBuilder` with the data set to\nthe bytecode concatenated with the constructor's ABI-encoded arguments."] + #[inline] + pub fn deploy_builder< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + ) -> alloy_contract::RawCallBuilder { + PauserRegistryInstance::::deploy_builder(provider) + } + #[doc = "A [`PauserRegistry`](self) instance.\n\nContains type-safe methods for interacting with an on-chain instance of the\n[`PauserRegistry`](self) contract located at a given `address`, using a given\nprovider `P`.\n\nIf the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)\ndocumentation on how to provide it), the `deploy` and `deploy_builder` methods can\nbe used to deploy a new instance of the contract.\n\nSee the [module-level documentation](self) for all the available methods."] + #[derive(Clone)] + pub struct PauserRegistryInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network_transport: ::core::marker::PhantomData<(N, T)>, + } + #[automatically_derived] + impl ::core::fmt::Debug for PauserRegistryInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("PauserRegistryInstance") + .field(&self.address) + .finish() + } + } + #[doc = r" Instantiation and getters/setters."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > PauserRegistryInstance + { + #[doc = "Creates a new wrapper around an on-chain [`PauserRegistry`](self) contract instance.\n\nSee the [wrapper's documentation](`PauserRegistryInstance`) for more details."] + #[inline] + pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self { + Self { + address, + provider, + _network_transport: ::core::marker::PhantomData, + } + } + #[doc = "Deploys this contract using the given `provider` and constructor arguments, if any.\n\nReturns a new instance of the contract, if the deployment was successful.\n\nFor more fine-grained control over the deployment process, use [`deploy_builder`] instead."] + #[inline] + pub async fn deploy( + provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + #[doc = "Creates a `RawCallBuilder` for deploying this contract using the given `provider`\nand constructor arguments, if any.\n\nThis is a simple wrapper around creating a `RawCallBuilder` with the data set to\nthe bytecode concatenated with the constructor's ABI-encoded arguments."] + #[inline] + pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + #[doc = r" Returns a reference to the address."] + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + #[doc = r" Sets the address."] + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + #[doc = r" Sets the address and returns `self`."] + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + #[doc = r" Returns a reference to the provider."] + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl PauserRegistryInstance { + #[doc = r" Clones the provider and returns a new instance with the cloned provider."] + #[inline] + pub fn with_cloned_provider(self) -> PauserRegistryInstance { + PauserRegistryInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network_transport: ::core::marker::PhantomData, + } + } + } + #[doc = r" Function calls."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > PauserRegistryInstance + { + #[doc = r" Creates a new call builder using this contract instance's provider and address."] + #[doc = r""] + #[doc = r" Note that the call can be any function call, not just those defined in this"] + #[doc = r" contract. Prefer using the other methods for building type-safe contract calls."] + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + #[doc = "Creates a new call builder for the [`isPauser`] function."] + pub fn isPauser( + &self, + pauser: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&isPauserCall { pauser }) + } + #[doc = "Creates a new call builder for the [`unpauser`] function."] + pub fn unpauser(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&unpauserCall {}) + } + } + #[doc = r" Event filters."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > PauserRegistryInstance + { + #[doc = r" Creates a new event filter using this contract instance's provider and address."] + #[doc = r""] + #[doc = r" Note that the type can be any event, not just those defined in this contract."] + #[doc = r" Prefer using the other methods for building type-safe event filters."] + pub fn event_filter( + &self, + ) -> alloy_contract::Event { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + #[doc = "Creates a new event filter for the [`PauserStatusChanged`] event."] + pub fn PauserStatusChanged_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`UnpauserChanged`] event."] + pub fn UnpauserChanged_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + } +} diff --git a/blueprint-test-utils/src/binding/mod.rs b/blueprint-test-utils/src/binding/mod.rs new file mode 100644 index 00000000..57555f22 --- /dev/null +++ b/blueprint-test-utils/src/binding/mod.rs @@ -0,0 +1,3 @@ +pub mod incrediblesquaringtaskmanager; +pub mod ipauserregistry; +pub mod registrycoordinator; diff --git a/blueprint-test-utils/src/binding/registrycoordinator.rs b/blueprint-test-utils/src/binding/registrycoordinator.rs new file mode 100644 index 00000000..0785d1b9 --- /dev/null +++ b/blueprint-test-utils/src/binding/registrycoordinator.rs @@ -0,0 +1,9952 @@ +#![allow(clippy::all)] + +#[doc = "\n\nGenerated by the following Solidity interface...\n```solidity\ninterface RegistryCoordinator {\n type OperatorStatus is uint8;\n struct G1Point {\n uint256 X;\n uint256 Y;\n }\n struct G2Point {\n uint256[2] X;\n uint256[2] Y;\n }\n struct OperatorInfo {\n bytes32 operatorId;\n OperatorStatus status;\n }\n struct OperatorKickParam {\n uint8 quorumNumber;\n address operator;\n }\n struct OperatorSetParam {\n uint32 maxOperatorCount;\n uint16 kickBIPsOfOperatorStake;\n uint16 kickBIPsOfTotalStake;\n }\n struct PubkeyRegistrationParams {\n G1Point pubkeyRegistrationSignature;\n G1Point pubkeyG1;\n G2Point pubkeyG2;\n }\n struct QuorumBitmapUpdate {\n uint32 updateBlockNumber;\n uint32 nextUpdateBlockNumber;\n uint192 quorumBitmap;\n }\n struct SignatureWithSaltAndExpiry {\n bytes signature;\n bytes32 salt;\n uint256 expiry;\n }\n struct StrategyParams {\n address strategy;\n uint96 multiplier;\n }\n\n event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover);\n event EjectorUpdated(address prevEjector, address newEjector);\n event Initialized(uint8 version);\n event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId);\n event OperatorRegistered(address indexed operator, bytes32 indexed operatorId);\n event OperatorSetParamsUpdated(uint8 indexed quorumNumber, OperatorSetParam operatorSetParams);\n event OperatorSocketUpdate(bytes32 indexed operatorId, string socket);\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n event Paused(address indexed account, uint256 newPausedStatus);\n event PauserRegistrySet(address pauserRegistry, address newPauserRegistry);\n event QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber);\n event Unpaused(address indexed account, uint256 newPausedStatus);\n\n constructor(address _serviceManager, address _stakeRegistry, address _blsApkRegistry, address _indexRegistry);\n\n function OPERATOR_CHURN_APPROVAL_TYPEHASH() external view returns (bytes32);\n function PUBKEY_REGISTRATION_TYPEHASH() external view returns (bytes32);\n function blsApkRegistry() external view returns (address);\n function calculateOperatorChurnApprovalDigestHash(address registeringOperator, bytes32 registeringOperatorId, OperatorKickParam[] memory operatorKickParams, bytes32 salt, uint256 expiry) external view returns (bytes32);\n function churnApprover() external view returns (address);\n function createQuorum(OperatorSetParam memory operatorSetParams, uint96 minimumStake, StrategyParams[] memory strategyParams) external;\n function deregisterOperator(bytes memory quorumNumbers) external;\n function ejectOperator(address operator, bytes memory quorumNumbers) external;\n function ejector() external view returns (address);\n function getCurrentQuorumBitmap(bytes32 operatorId) external view returns (uint192);\n function getOperator(address operator) external view returns (OperatorInfo memory);\n function getOperatorFromId(bytes32 operatorId) external view returns (address);\n function getOperatorId(address operator) external view returns (bytes32);\n function getOperatorSetParams(uint8 quorumNumber) external view returns (OperatorSetParam memory);\n function getOperatorStatus(address operator) external view returns (OperatorStatus);\n function getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) external view returns (uint192);\n function getQuorumBitmapHistoryLength(bytes32 operatorId) external view returns (uint256);\n function getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] memory operatorIds) external view returns (uint32[] memory);\n function getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) external view returns (QuorumBitmapUpdate memory);\n function indexRegistry() external view returns (address);\n function initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, OperatorSetParam[] memory _operatorSetParams, uint96[] memory _minimumStakes, StrategyParams[][] memory _strategyParams) external;\n function isChurnApproverSaltUsed(bytes32) external view returns (bool);\n function numRegistries() external view returns (uint256);\n function owner() external view returns (address);\n function pause(uint256 newPausedStatus) external;\n function pauseAll() external;\n function paused(uint8 index) external view returns (bool);\n function paused() external view returns (uint256);\n function pauserRegistry() external view returns (address);\n function pubkeyRegistrationMessageHash(address operator) external view returns (G1Point memory);\n function quorumCount() external view returns (uint8);\n function quorumUpdateBlockNumber(uint8) external view returns (uint256);\n function registerOperator(bytes memory quorumNumbers, string memory socket, PubkeyRegistrationParams memory params, SignatureWithSaltAndExpiry memory operatorSignature) external;\n function registerOperatorWithChurn(bytes memory quorumNumbers, string memory socket, PubkeyRegistrationParams memory params, OperatorKickParam[] memory operatorKickParams, SignatureWithSaltAndExpiry memory churnApproverSignature, SignatureWithSaltAndExpiry memory operatorSignature) external;\n function registries(uint256) external view returns (address);\n function renounceOwnership() external;\n function serviceManager() external view returns (address);\n function setChurnApprover(address _churnApprover) external;\n function setEjector(address _ejector) external;\n function setOperatorSetParams(uint8 quorumNumber, OperatorSetParam memory operatorSetParams) external;\n function setPauserRegistry(address newPauserRegistry) external;\n function stakeRegistry() external view returns (address);\n function transferOwnership(address newOwner) external;\n function unpause(uint256 newPausedStatus) external;\n function updateOperators(address[] memory operators) external;\n function updateOperatorsForQuorum(address[][] memory operatorsPerQuorum, bytes memory quorumNumbers) external;\n function updateSocket(string memory socket) external;\n}\n```\n\n...which was generated by the following JSON ABI:\n```json\n[\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_serviceManager\",\n \"type\": \"address\",\n \"internalType\": \"contract IServiceManager\"\n },\n {\n \"name\": \"_stakeRegistry\",\n \"type\": \"address\",\n \"internalType\": \"contract IStakeRegistry\"\n },\n {\n \"name\": \"_blsApkRegistry\",\n \"type\": \"address\",\n \"internalType\": \"contract IBLSApkRegistry\"\n },\n {\n \"name\": \"_indexRegistry\",\n \"type\": \"address\",\n \"internalType\": \"contract IIndexRegistry\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"OPERATOR_CHURN_APPROVAL_TYPEHASH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"PUBKEY_REGISTRATION_TYPEHASH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"blsApkRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IBLSApkRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"calculateOperatorChurnApprovalDigestHash\",\n \"inputs\": [\n {\n \"name\": \"registeringOperator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"registeringOperatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"operatorKickParams\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IRegistryCoordinator.OperatorKickParam[]\",\n \"components\": [\n {\n \"name\": \"quorumNumber\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"churnApprover\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createQuorum\",\n \"inputs\": [\n {\n \"name\": \"operatorSetParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IRegistryCoordinator.OperatorSetParam\",\n \"components\": [\n {\n \"name\": \"maxOperatorCount\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"kickBIPsOfOperatorStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"kickBIPsOfTotalStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ]\n },\n {\n \"name\": \"minimumStake\",\n \"type\": \"uint96\",\n \"internalType\": \"uint96\"\n },\n {\n \"name\": \"strategyParams\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IStakeRegistry.StrategyParams[]\",\n \"components\": [\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"internalType\": \"contract IStrategy\"\n },\n {\n \"name\": \"multiplier\",\n \"type\": \"uint96\",\n \"internalType\": \"uint96\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deregisterOperator\",\n \"inputs\": [\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ejectOperator\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ejector\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getCurrentQuorumBitmap\",\n \"inputs\": [\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint192\",\n \"internalType\": \"uint192\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOperator\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IRegistryCoordinator.OperatorInfo\",\n \"components\": [\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"status\",\n \"type\": \"uint8\",\n \"internalType\": \"enum IRegistryCoordinator.OperatorStatus\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOperatorFromId\",\n \"inputs\": [\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOperatorId\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOperatorSetParams\",\n \"inputs\": [\n {\n \"name\": \"quorumNumber\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IRegistryCoordinator.OperatorSetParam\",\n \"components\": [\n {\n \"name\": \"maxOperatorCount\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"kickBIPsOfOperatorStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"kickBIPsOfTotalStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getOperatorStatus\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"enum IRegistryCoordinator.OperatorStatus\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getQuorumBitmapAtBlockNumberByIndex\",\n \"inputs\": [\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"blockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"index\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint192\",\n \"internalType\": \"uint192\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getQuorumBitmapHistoryLength\",\n \"inputs\": [\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getQuorumBitmapIndicesAtBlockNumber\",\n \"inputs\": [\n {\n \"name\": \"blockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"operatorIds\",\n \"type\": \"bytes32[]\",\n \"internalType\": \"bytes32[]\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint32[]\",\n \"internalType\": \"uint32[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getQuorumBitmapUpdateByIndex\",\n \"inputs\": [\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"index\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IRegistryCoordinator.QuorumBitmapUpdate\",\n \"components\": [\n {\n \"name\": \"updateBlockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"nextUpdateBlockNumber\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"quorumBitmap\",\n \"type\": \"uint192\",\n \"internalType\": \"uint192\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"indexRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IIndexRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"initialize\",\n \"inputs\": [\n {\n \"name\": \"_initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_churnApprover\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_ejector\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_pauserRegistry\",\n \"type\": \"address\",\n \"internalType\": \"contract IPauserRegistry\"\n },\n {\n \"name\": \"_initialPausedStatus\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"_operatorSetParams\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IRegistryCoordinator.OperatorSetParam[]\",\n \"components\": [\n {\n \"name\": \"maxOperatorCount\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"kickBIPsOfOperatorStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"kickBIPsOfTotalStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ]\n },\n {\n \"name\": \"_minimumStakes\",\n \"type\": \"uint96[]\",\n \"internalType\": \"uint96[]\"\n },\n {\n \"name\": \"_strategyParams\",\n \"type\": \"tuple[][]\",\n \"internalType\": \"struct IStakeRegistry.StrategyParams[][]\",\n \"components\": [\n {\n \"name\": \"strategy\",\n \"type\": \"address\",\n \"internalType\": \"contract IStrategy\"\n },\n {\n \"name\": \"multiplier\",\n \"type\": \"uint96\",\n \"internalType\": \"uint96\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isChurnApproverSaltUsed\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"numRegistries\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pauseAll\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [\n {\n \"name\": \"index\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pauserRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IPauserRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pubkeyRegistrationMessageHash\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quorumCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"quorumUpdateBlockNumber\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"registerOperator\",\n \"inputs\": [\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"socket\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IBLSApkRegistry.PubkeyRegistrationParams\",\n \"components\": [\n {\n \"name\": \"pubkeyRegistrationSignature\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"pubkeyG1\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"pubkeyG2\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G2Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n }\n ]\n }\n ]\n },\n {\n \"name\": \"operatorSignature\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\n \"components\": [\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"registerOperatorWithChurn\",\n \"inputs\": [\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"socket\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IBLSApkRegistry.PubkeyRegistrationParams\",\n \"components\": [\n {\n \"name\": \"pubkeyRegistrationSignature\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"pubkeyG1\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G1Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"pubkeyG2\",\n \"type\": \"tuple\",\n \"internalType\": \"struct BN254.G2Point\",\n \"components\": [\n {\n \"name\": \"X\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n },\n {\n \"name\": \"Y\",\n \"type\": \"uint256[2]\",\n \"internalType\": \"uint256[2]\"\n }\n ]\n }\n ]\n },\n {\n \"name\": \"operatorKickParams\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct IRegistryCoordinator.OperatorKickParam[]\",\n \"components\": [\n {\n \"name\": \"quorumNumber\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"name\": \"churnApproverSignature\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\n \"components\": [\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"operatorSignature\",\n \"type\": \"tuple\",\n \"internalType\": \"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\n \"components\": [\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"expiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"registries\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"serviceManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IServiceManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setChurnApprover\",\n \"inputs\": [\n {\n \"name\": \"_churnApprover\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setEjector\",\n \"inputs\": [\n {\n \"name\": \"_ejector\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOperatorSetParams\",\n \"inputs\": [\n {\n \"name\": \"quorumNumber\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"operatorSetParams\",\n \"type\": \"tuple\",\n \"internalType\": \"struct IRegistryCoordinator.OperatorSetParam\",\n \"components\": [\n {\n \"name\": \"maxOperatorCount\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"kickBIPsOfOperatorStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"kickBIPsOfTotalStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPauserRegistry\",\n \"inputs\": [\n {\n \"name\": \"newPauserRegistry\",\n \"type\": \"address\",\n \"internalType\": \"contract IPauserRegistry\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"stakeRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IStakeRegistry\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateOperators\",\n \"inputs\": [\n {\n \"name\": \"operators\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateOperatorsForQuorum\",\n \"inputs\": [\n {\n \"name\": \"operatorsPerQuorum\",\n \"type\": \"address[][]\",\n \"internalType\": \"address[][]\"\n },\n {\n \"name\": \"quorumNumbers\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateSocket\",\n \"inputs\": [\n {\n \"name\": \"socket\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"ChurnApproverUpdated\",\n \"inputs\": [\n {\n \"name\": \"prevChurnApprover\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newChurnApprover\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EjectorUpdated\",\n \"inputs\": [\n {\n \"name\": \"prevEjector\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newEjector\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Initialized\",\n \"inputs\": [\n {\n \"name\": \"version\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorDeregistered\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorRegistered\",\n \"inputs\": [\n {\n \"name\": \"operator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorSetParamsUpdated\",\n \"inputs\": [\n {\n \"name\": \"quorumNumber\",\n \"type\": \"uint8\",\n \"indexed\": true,\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"operatorSetParams\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct IRegistryCoordinator.OperatorSetParam\",\n \"components\": [\n {\n \"name\": \"maxOperatorCount\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"kickBIPsOfOperatorStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"kickBIPsOfTotalStake\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorSocketUpdate\",\n \"inputs\": [\n {\n \"name\": \"operatorId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"socket\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PauserRegistrySet\",\n \"inputs\": [\n {\n \"name\": \"pauserRegistry\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"contract IPauserRegistry\"\n },\n {\n \"name\": \"newPauserRegistry\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"contract IPauserRegistry\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"QuorumBlockNumberUpdated\",\n \"inputs\": [\n {\n \"name\": \"quorumNumber\",\n \"type\": \"uint8\",\n \"indexed\": true,\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"blocknumber\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newPausedStatus\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }\n]\n```"] +#[allow(missing_docs, clippy::too_many_arguments)] +#[allow(non_camel_case_types, non_snake_case, clippy::style)] +pub mod RegistryCoordinator { + use super::*; + use ::alloy_sol_types; + #[doc = r" The creation / init bytecode of the contract."] + #[doc = r""] + #[doc = r" ```text"] + #[doc = "0x6101c06040523480156200001257600080fd5b506040516200614b3803806200614b833981016040819052620000359162000254565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f720000000000000000000060208083019182528351808501909452600684526576302e302e3160d01b908401528151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a05287938793879387939192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620001358184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b039384166101405291831661018052821661016052166101a0526200016f62000179565b50505050620002bc565b600054610100900460ff1615620001e65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000239576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200025157600080fd5b50565b600080600080608085870312156200026b57600080fd5b845162000278816200023b565b60208601519094506200028b816200023b565b60408601519093506200029e816200023b565b6060860151909250620002b1816200023b565b939692955090935050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615d87620003c460003960008181610637015281816111110152818161201601528181612d490152818161355a0152613b3101526000818161057c01528181611fa10152818161244b01528181612cc9015281816134b1015281816137060152613ab001526000818161054201528181610ead01528181611fdf01528181612c4b01528181612e3101528181612eab015281816134310152613bad01526000818161048601528181612ba1015261337901526000613db401526000613e0301526000613dde01526000613d3701526000613d6101526000613d8b0152615d876000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c80635df45946116101675780639feab859116100ce578063d75b4c8811610087578063d75b4c88146106f5578063dd8283f314610708578063e65797ad1461071b578063f2fde38b146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b80639feab85914610659578063a50857bf14610680578063c391425e14610693578063ca0de882146106b3578063ca4f2d97146106da578063d72d8dd6146106ed57600080fd5b8063871ef04911610120578063871ef049146105cc578063886f1195146105df5780638da5cb5b146105f85780639aa1653d146106005780639b5d177b1461061f5780639e9923c21461063257600080fd5b80635df459461461053d5780636347c9001461056457806368304835146105775780636e3b17db1461059e578063715018a6146105b157806384ca5213146105b957600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104c85780635865c60c146104db578063595c6a67146104fb5780635ac86ab7146105035780635b0b829f146105225780635c975abb1461053557600080fd5b806328f61b3114610435578063296bb0641461044857806329d1e0c31461045b5780632cdd1e861461046e5780633998fdd3146104815780633c2a7f4c146104a857600080fd5b806310d67a2f1161025d57806310d67a2f1461034a57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c421461041557600080fd5b8062cf2ab51461029957806303fd3492146102ae57806304ec6351146102e1578063054310e61461030c5780630cf4b76714610337575b600080fd5b6102ac6102a73660046148ab565b610820565b005b6102ce6102bc3660046148ec565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102f46102ef366004614917565b610935565b6040516001600160c01b0390911681526020016102d8565b609d5461031f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d8565b6102ac610345366004614a36565b610b2b565b6102ac610358366004614aab565b610c13565b6102ce61036b366004614aab565b6001600160a01b031660009081526099602052604090205490565b6102ac6103943660046148ec565b610cc6565b6103bc6103a73660046148ec565b609a6020526000908152604090205460ff1681565b60405190151581526020016102d8565b6103df6103da366004614ac8565b610e03565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102d8565b6102ce610423366004614afb565b609b6020526000908152604090205481565b609e5461031f906001600160a01b031681565b61031f6104563660046148ec565b610e94565b6102ac610469366004614aab565b610f20565b6102ac61047c366004614aab565b610f31565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6104bb6104b6366004614aab565b610f42565b6040516102d89190614b16565b6102ac6104d6366004614b6e565b610fc1565b6104ee6104e9366004614aab565b6114d1565b6040516102d89190614c11565b6102ac611545565b6103bc610511366004614afb565b6001805460ff9092161b9081161490565b6102ac610530366004614c96565b611611565b6001546102ce565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b61031f6105723660046148ec565b6116a8565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ac6105ac366004614cca565b6116d2565b6102ac611792565b6102ce6105c7366004614d81565b6117a6565b6102f46105da3660046148ec565b6117f0565b60005461031f906201000090046001600160a01b031681565b61031f6117fb565b60965461060d9060ff1681565b60405160ff90911681526020016102d8565b6102ac61062d366004614f1a565b611814565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ce7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102ac61068e366004615013565b611b4b565b6106a66106a13660046150bb565b611cce565b6040516102d89190615160565b6102ce7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b6102ac6106e83660046151aa565b611d87565b609c546102ce565b6102ac610703366004615290565b611ded565b6102ac610716366004615443565b611e00565b61078a610729366004614afb565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff9081169183019190915292820151909216908201526060016102d8565b6102ac6107cc366004614aab565b612104565b6102ac6107df3660046148ec565b61217a565b6108136107f2366004614aab565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102d89190615517565b6001546002906004908116036108515760405162461bcd60e51b815260040161084890615525565b60405180910390fd5b60005b8281101561092f5760008484838181106108705761087061555c565b90506020020160208101906108859190614aab565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156108d0576108d0614bd9565b60028111156108e1576108e1614bd9565b905250805190915060006108f4826122d6565b9050600061090a826001600160c01b0316612341565b905061091785858361240d565b5050505050808061092790615588565b915050610854565b50505050565b60008381526098602052604081208054829190849081106109585761095861555c565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610a525760405162461bcd60e51b815260206004820152606560248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c401610848565b602081015163ffffffff161580610a785750806020015163ffffffff168463ffffffff16105b610b1f5760405162461bcd60e51b815260206004820152606660248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c401610848565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610b5457610b54614bd9565b14610bc75760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f742072656769737465726564000000006064820152608401610848565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c089084906155e7565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906155fa565b6001600160a01b0316336001600160a01b031614610cba5760405162461bcd60e51b815260040161084890615617565b610cc3816124fa565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190615661565b610d535760405162461bcd60e51b815260040161084890615683565b60015481811614610dcc5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610848565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c08565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e4057610e4061555c565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015610efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e91906155fa565b610f286125ff565b610cc38161265e565b610f396125ff565b610cc3816126c7565b6040805180820190915260008082526020820152610e8e610fbc7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610fa19291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120612730565b61277e565b600154600290600490811603610fe95760405162461bcd60e51b815260040161084890615525565b600061103184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff16915061280d9050565b90508483146110a25760405162461bcd60e51b81526020600482015260436024820152600080516020615cf283398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610848565b60005b838110156114c85760008585838181106110c1576110c161555c565b919091013560f81c915036905060008989858181106110e2576110e261555c565b90506020028101906110f491906156cb565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f341092290602401602060405180830381865afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111849190615714565b63ffffffff1681146112205760405162461bcd60e51b81526020600482015260656024820152600080516020615cf283398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c401610848565b6000805b828110156114675760008484838181106112405761124061555c565b90506020020160208101906112559190614aab565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156112a0576112a0614bd9565b60028111156112b1576112b1614bd9565b905250805190915060006112c4826122d6565b905060016001600160c01b03821660ff8b161c8116146113485760405162461bcd60e51b815260206004820152604460248201819052600080516020615cf2833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a401610848565b856001600160a01b0316846001600160a01b0316116113f35760405162461bcd60e51b81526020600482015260676024820152600080516020615cf283398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c401610848565b5061145183838f8f8d908e600161140a9190615731565b9261141793929190615744565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061240d92505050565b50909250611460905081615588565b9050611224565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a250505050806114c190615588565b90506110a5565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff16600281111561152b5761152b614bd9565b600281111561153c5761153c614bd9565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b69190615661565b6115d25760405162461bcd60e51b815260040161084890615683565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6116196125ff565b609654829060ff908116908216106116995760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d45786973747360448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610848565b6116a3838361289e565b505050565b609c81815481106116b857600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146117525760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f720000000000006064820152608401610848565b6116a38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294b92505050565b61179a6125ff565b6117a46000612dbd565b565b60006117e67f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a8787878787604051602001610fa19695949392919061576e565b9695505050505050565b6000610e8e826122d6565b600061180f6064546001600160a01b031690565b905090565b600180546000919081160361183b5760405162461bcd60e51b815260040161084890615525565b8389146118be5760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610848565b60006118ca3388612e0f565b905061192a33828888808060200260200160405190810160405280939291908181526020016000905b8282101561191f57611910604083028601368190038101906157f3565b815260200190600101906118f3565b505050505087612f44565b600061197133838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506130d1915050565b905060005b8b811015611b3c576000609760008f8f858181106119965761199661555c565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110611a0357611a0361555c565b602002602001015163ffffffff161115611b2957611aa48e8e84818110611a2c57611a2c61555c565b9050013560f81c60f81b60f81c84604001518481518110611a4f57611a4f61555c565b60200260200101513386602001518681518110611a6e57611a6e61555c565b60200260200101518d8d88818110611a8857611a8861555c565b905060400201803603810190611a9e91906157f3565b866135e8565b611b29898984818110611ab957611ab961555c565b9050604002016020016020810190611ad19190614aab565b8f8f8590866001611ae29190615731565b92611aef93929190615744565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294b92505050565b5080611b3481615588565b915050611976565b50505050505050505050505050565b6001805460009190811603611b725760405162461bcd60e51b815260040161084890615525565b6000611b7e3385612e0f565b90506000611bc733838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506130d1915050565b51905060005b88811015611cc25760008a8a83818110611be957611be961555c565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110611c1f57611c1f61555c565b602002602001015163ffffffff161115611caf5760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a401610848565b5080611cba81615588565b915050611bcd565b50505050505050505050565b6060600082516001600160401b03811115611ceb57611ceb61494f565b604051908082528060200260200182016040528015611d14578160200160208202803683370190505b50905060005b8351811015611d7f57611d4685858381518110611d3957611d3961555c565b60200260200101516138bc565b828281518110611d5857611d5861555c565b63ffffffff9092166020928302919091019091015280611d7781615588565b915050611d1a565b509392505050565b60018054600290811603611dad5760405162461bcd60e51b815260040161084890615525565b6116a33384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294b92505050565b611df56125ff565b6116a38383836139f8565b600054610100900460ff1615808015611e205750600054600160ff909116105b80611e3a5750303b158015611e3a575060005460ff166001145b611e9d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610848565b6000805460ff191660011790558015611ec0576000805461ff0019166101001790555b82518451148015611ed2575081518351145b611f3c5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610848565b611f4589612dbd565b611f4f8686613c0f565b611f588861265e565b611f61876126c7565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000000000000000000000000000000000000000000000841690831617905585549384019095559190920180547f000000000000000000000000000000000000000000000000000000000000000090921691909316179091555b84518110156120b2576120a085828151811061205f5761205f61555c565b60200260200101518583815181106120795761207961555c565b60200260200101518584815181106120935761209361555c565b60200260200101516139f8565b806120aa81615588565b915050612041565b5080156120f9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61210c6125ff565b6001600160a01b0381166121715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610848565b610cc381612dbd565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f191906155fa565b6001600160a01b0316336001600160a01b0316146122215760405162461bcd60e51b815260040161084890615617565b60015419811960015419161461229f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610848565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c08565b6000818152609860205260408120548082036122f55750600092915050565b600083815260986020526040902061230e60018361580f565b8154811061231e5761231e61555c565b600091825260209091200154600160401b90046001600160c01b03169392505050565b606060008061234f84613cff565b61ffff166001600160401b0381111561236a5761236a61494f565b6040519080825280601f01601f191660200182016040528015612394576020820181803683370190505b5090506000805b8251821080156123ac575061010081105b15612403576001811b9350858416156123f3578060f81b8383815181106123d5576123d561555c565b60200101906001600160f81b031916908160001a9053508160010191505b6123fc81615588565b905061239b565b5090949350505050565b60018260200151600281111561242557612425614bd9565b1461242f57505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366acfefe9061248490889086908890600401615822565b6020604051808303816000875af11580156124a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c79190615852565b90506001600160c01b038116156124f3576124f3856124ee836001600160c01b0316612341565b61294b565b5050505050565b6001600160a01b0381166125885760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610848565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336126086117fb565b6001600160a01b0316146117a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610848565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8e61273d613d2a565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806127ae600080516020615d3283398151915286615891565b90505b6127ba81613e51565b9093509150600080516020615d3283398151915282830983036127f3576040805180820190915290815260208101919091529392505050565b600080516020615d328339815191526001820890506127b1565b60008061281984613ed3565b9050808360ff166001901b116128975760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610848565b9392505050565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff16600281111561297f5761297f614bd9565b146129fe5760405162461bcd60e51b815260206004820152604360248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a401610848565b609654600090612a1290859060ff1661280d565b90506000612a1f836122d6565b90506001600160c01b038216612a9d5760405162461bcd60e51b815260206004820152603b60248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206269746d61702063616e6e6f74206265203000000000006064820152608401610848565b612ab46001600160c01b0383811690831681161490565b612b4c5760405162461bcd60e51b815260206004820152605960248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527f72656420666f72207370656369666965642071756f72756d7300000000000000608482015260a401610848565b6001600160c01b0382811619821616612b658482614063565b6001600160c01b038116612c345760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401600060405180830381600087803b158015612be557600080fd5b505af1158015612bf9573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f4e24fe590612c82908a908a906004016158a5565b600060405180830381600087803b158015612c9c57600080fd5b505af1158015612cb0573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612d029087908a906004016158c9565b600060405180830381600087803b158015612d1c57600080fd5b505af1158015612d30573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612d829087908a906004016158c9565b600060405180830381600087803b158015612d9c57600080fd5b505af1158015612db0573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906313542a4e90602401602060405180830381865afa158015612e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9e91906158e2565b90506000819003610e8e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bf79ce588484612ee387610f42565b6040518463ffffffff1660e01b8152600401612f01939291906158fb565b6020604051808303816000875af1158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289791906158e2565b6020808201516000908152609a909152604090205460ff1615612fea5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a401610848565b428160400151101561307f5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a401610848565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161092f926001600160a01b03909216916130ca91889188918891906117a6565b8351614224565b6130f560405180606001604052806060815260200160608152602001606081525090565b600061313d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff16915061280d9050565b9050600061314a886122d6565b90506001600160c01b0382166131c85760405162461bcd60e51b815260206004820152603960248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206269746d61702063616e6e6f742062652030000000000000006064820152608401610848565b8082166001600160c01b03161561327e5760405162461bcd60e51b815260206004820152606860248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c401610848565b6001600160c01b03818116908316176132978982614063565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516132c791906155e7565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561330157613301614bd9565b1461341a576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561335c5761335c614bd9565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169150639926ee7d906133b1908d90899060040161596b565b600060405180830381600087803b1580156133cb57600080fd5b505af11580156133df573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633fb279529061346a908d908c908c906004016159df565b600060405180830381600087803b15801561348457600080fd5b505af1158015613498573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250632550477791506134ee908d908d908d908d90600401615a04565b6000604051808303816000875af115801561350d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135359190810190615a90565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062bff04d90613592908c908c908c90600401615af3565b6000604051808303816000875af11580156135b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135d99190810190615b0d565b84525050509695505050505050565b6020808301516001600160a01b03808216600081815260999094526040909320549192908716036136675760405162461bcd60e51b81526020600482015260356024820152600080516020615d1283398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b6064820152608401610848565b8760ff16846000015160ff16146136e45760405162461bcd60e51b81526020600482015260476024820152600080516020615d1283398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a401610848565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635401ed2790604401602060405180830381865afa158015613755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137799190615ba6565b905061378581856143de565b6001600160601b0316866001600160601b0316116138185760405162461bcd60e51b81526020600482015260566024820152600080516020615d1283398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a401610848565b6138228885614402565b6001600160601b0316816001600160601b0316106120f95760405162461bcd60e51b815260206004820152605c6024820152600080516020615d1283398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a401610848565b600081815260986020526040812054815b8181101561394e5760016138e1828461580f565b6138eb919061580f565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff168154811061391e5761391e61555c565b60009182526020909120015463ffffffff161161393c575050610e8e565b8061394681615588565b9150506138cd565b5060405162461bcd60e51b815260206004820152606c60248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c401610848565b60965460ff1660c08110613a6c5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b6064820152608401610848565b613a77816001615bc3565b6096805460ff191660ff9290921691909117905580613a96818661289e565b60405160016296b58960e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ff694a7790613ae990849088908890600401615bdc565b600060405180830381600087803b158015613b0357600080fd5b505af1158015613b17573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613b7f57600080fd5b505af1158015613b93573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613bfb57600080fd5b505af11580156120f9573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015613c3657506001600160a01b03821615155b613cb85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610848565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613cfb826124fa565b5050565b6000805b8215610e8e57613d1460018461580f565b9092169180613d2281615c55565b915050613d03565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613d8357507f000000000000000000000000000000000000000000000000000000000000000046145b15613dad57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615d328339815191526003600080516020615d3283398151915286600080516020615d32833981519152888909090890506000613ec7827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615d3283398151915261441c565b91959194509092505050565b600061010082511115613f5c5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610848565b8151600003613f6d57506000919050565b60008083600081518110613f8357613f8361555c565b0160200151600160f89190911c81901b92505b845181101561405a57848181518110613fb157613fb161555c565b0160200151600160f89190911c1b91508282116140465760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610848565b9181179161405381615588565b9050613f96565b50909392505050565b6000828152609860205260408120549081900361410b576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b600083815260986020526040812061412460018461580f565b815481106141345761413461555c565b6000918252602090912001805490915063ffffffff4381169116036141765780546001600160401b0316600160401b6001600160c01b0385160217815561092f565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561433e57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061426490869086906004016158c9565b602060405180830381865afa158015614281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142a59190615c76565b6001600160e01b031916146116a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610848565b826001600160a01b031661435283836144c5565b6001600160a01b0316146116a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610848565b6020810151600090612710906143f89061ffff1685615ca0565b6128979190615ccb565b6040810151600090612710906143f89061ffff1685615ca0565b60008061442761482b565b61442f614849565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061446c57fe5b50826144ba5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610848565b505195945050505050565b60008060006144d485856144e1565b91509150611d7f8161454f565b60008082516041036145175760208301516040840151606085015160001a61450b87828585614705565b94509450505050614548565b825160400361454057602083015160408401516145358683836147f2565b935093505050614548565b506000905060025b9250929050565b600081600481111561456357614563614bd9565b0361456b5750565b600181600481111561457f5761457f614bd9565b036145cc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610848565b60028160048111156145e0576145e0614bd9565b0361462d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610848565b600381600481111561464157614641614bd9565b036146995760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610848565b60048160048111156146ad576146ad614bd9565b03610cc35760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610848565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561473c57506000905060036147e9565b8460ff16601b1415801561475457508460ff16601c14155b1561476557506000905060046147e9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156147b9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147e2576000600192509250506147e9565b9150600090505b94509492505050565b6000806001600160ff1b0383168161480f60ff86901c601b615731565b905061481d87828885614705565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f84011261487957600080fd5b5081356001600160401b0381111561489057600080fd5b6020830191508360208260051b850101111561454857600080fd5b600080602083850312156148be57600080fd5b82356001600160401b038111156148d457600080fd5b6148e085828601614867565b90969095509350505050565b6000602082840312156148fe57600080fd5b5035919050565b63ffffffff81168114610cc357600080fd5b60008060006060848603121561492c57600080fd5b83359250602084013561493e81614905565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156149875761498761494f565b60405290565b604080519081016001600160401b03811182821017156149875761498761494f565b604051601f8201601f191681016001600160401b03811182821017156149d7576149d761494f565b604052919050565b60006001600160401b038311156149f8576149f861494f565b614a0b601f8401601f19166020016149af565b9050828152838383011115614a1f57600080fd5b828260208301376000602084830101529392505050565b600060208284031215614a4857600080fd5b81356001600160401b03811115614a5e57600080fd5b8201601f81018413614a6f57600080fd5b614a7e848235602084016149df565b949350505050565b6001600160a01b0381168114610cc357600080fd5b8035614aa681614a86565b919050565b600060208284031215614abd57600080fd5b813561289781614a86565b60008060408385031215614adb57600080fd5b50508035926020909101359150565b803560ff81168114614aa657600080fd5b600060208284031215614b0d57600080fd5b61289782614aea565b815181526020808301519082015260408101610e8e565b60008083601f840112614b3f57600080fd5b5081356001600160401b03811115614b5657600080fd5b60208301915083602082850101111561454857600080fd5b60008060008060408587031215614b8457600080fd5b84356001600160401b0380821115614b9b57600080fd5b614ba788838901614867565b90965094506020870135915080821115614bc057600080fd5b50614bcd87828801614b2d565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614c0d57634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614c2c90840182614bef565b5092915050565b803561ffff81168114614aa657600080fd5b600060608284031215614c5757600080fd5b614c5f614965565b90508135614c6c81614905565b8152614c7a60208301614c33565b6020820152614c8b60408301614c33565b604082015292915050565b60008060808385031215614ca957600080fd5b614cb283614aea565b9150614cc18460208501614c45565b90509250929050565b600080600060408486031215614cdf57600080fd5b8335614cea81614a86565b925060208401356001600160401b03811115614d0557600080fd5b614d1186828701614b2d565b9497909650939450505050565b60006001600160401b03821115614d3757614d3761494f565b5060051b60200190565b600060408284031215614d5357600080fd5b614d5b61498d565b9050614d6682614aea565b81526020820135614d7681614a86565b602082015292915050565b600080600080600060a08688031215614d9957600080fd5b8535614da481614a86565b945060208681013594506040808801356001600160401b03811115614dc857600080fd5b8801601f81018a13614dd957600080fd5b8035614dec614de782614d1e565b6149af565b81815260069190911b8201840190848101908c831115614e0b57600080fd5b928501925b82841015614e3157614e228d85614d41565b82529284019290850190614e10565b999c989b5098996060810135995060800135979650505050505050565b60006101008284031215614e6157600080fd5b50919050565b60008083601f840112614e7957600080fd5b5081356001600160401b03811115614e9057600080fd5b6020830191508360208260061b850101111561454857600080fd5b600060608284031215614ebd57600080fd5b614ec5614965565b905081356001600160401b03811115614edd57600080fd5b8201601f81018413614eee57600080fd5b614efd848235602084016149df565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f3957600080fd5b89356001600160401b0380821115614f5057600080fd5b614f5c8d838e01614b2d565b909b50995060208c0135915080821115614f7557600080fd5b614f818d838e01614b2d565b9099509750879150614f968d60408e01614e4e565b96506101408c0135915080821115614fad57600080fd5b614fb98d838e01614e67565b90965094506101608c0135915080821115614fd357600080fd5b614fdf8d838e01614eab565b93506101808c0135915080821115614ff657600080fd5b506150038c828d01614eab565b9150509295985092959850929598565b600080600080600080610160878903121561502d57600080fd5b86356001600160401b038082111561504457600080fd5b6150508a838b01614b2d565b9098509650602089013591508082111561506957600080fd5b6150758a838b01614b2d565b909650945084915061508a8a60408b01614e4e565b93506101408901359150808211156150a157600080fd5b506150ae89828a01614eab565b9150509295509295509295565b600080604083850312156150ce57600080fd5b82356150d981614905565b91506020838101356001600160401b038111156150f557600080fd5b8401601f8101861361510657600080fd5b8035615114614de782614d1e565b81815260059190911b8201830190838101908883111561513357600080fd5b928401925b8284101561515157833582529284019290840190615138565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561519e57835163ffffffff168352928401929184019160010161517c565b50909695505050505050565b600080602083850312156151bd57600080fd5b82356001600160401b038111156151d357600080fd5b6148e085828601614b2d565b6001600160601b0381168114610cc357600080fd5b600082601f83011261520557600080fd5b81356020615215614de783614d1e565b82815260069290921b8401810191818101908684111561523457600080fd5b8286015b8481101561528557604081890312156152515760008081fd5b61525961498d565b813561526481614a86565b815281850135615273816151df565b81860152835291830191604001615238565b509695505050505050565b600080600060a084860312156152a557600080fd5b6152af8585614c45565b925060608401356152bf816151df565b915060808401356001600160401b038111156152da57600080fd5b6152e6868287016151f4565b9150509250925092565b600082601f83011261530157600080fd5b81356020615311614de783614d1e565b8281526060928302850182019282820191908785111561533057600080fd5b8387015b85811015615353576153468982614c45565b8452928401928101615334565b5090979650505050505050565b600082601f83011261537157600080fd5b81356020615381614de783614d1e565b82815260059290921b840181019181810190868411156153a057600080fd5b8286015b848110156152855780356153b7816151df565b83529183019183016153a4565b600082601f8301126153d557600080fd5b813560206153e5614de783614d1e565b82815260059290921b8401810191818101908684111561540457600080fd5b8286015b848110156152855780356001600160401b038111156154275760008081fd5b6154358986838b01016151f4565b845250918301918301615408565b600080600080600080600080610100898b03121561546057600080fd5b61546989614a9b565b975061547760208a01614a9b565b965061548560408a01614a9b565b955061549360608a01614a9b565b94506080890135935060a08901356001600160401b03808211156154b657600080fd5b6154c28c838d016152f0565b945060c08b01359150808211156154d857600080fd5b6154e48c838d01615360565b935060e08b01359150808211156154fa57600080fd5b506155078b828c016153c4565b9150509295985092959890939650565b60208101610e8e8284614bef565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161559a5761559a615572565b5060010190565b6000815180845260005b818110156155c7576020818501810151868301820152016155ab565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061289760208301846155a1565b60006020828403121561560c57600080fd5b815161289781614a86565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561567357600080fd5b8151801515811461289757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e198436030181126156e257600080fd5b8301803591506001600160401b038211156156fc57600080fd5b6020019150600581901b360382131561454857600080fd5b60006020828403121561572657600080fd5b815161289781614905565b80820180821115610e8e57610e8e615572565b6000808585111561575457600080fd5b8386111561576157600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a16828601526040898187015260c0606087015283895180865260e088019150848b01955060005b818110156157d3578651805160ff16845286015185168684015295850195918301916001016157a9565b505060808701989098525050505060a09091019190915250949350505050565b60006040828403121561580557600080fd5b6128978383614d41565b81810381811115610e8e57610e8e615572565b60018060a01b038416815282602082015260606040820152600061584960608301846155a1565b95945050505050565b60006020828403121561586457600080fd5b81516001600160c01b038116811461289757600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826158a0576158a061587b565b500690565b6001600160a01b0383168152604060208201819052600090614a7e908301846155a1565b828152604060208201526000614a7e60408301846155a1565b6000602082840312156158f457600080fd5b5051919050565b6001600160a01b03841681526101608101615923602083018580358252602090810135910152565b61593d606083016040860180358252602090810135910152565b60406080850160a0840137604060c0850160e084013782516101208301526020830151610140830152614a7e565b60018060a01b038316815260406020820152600082516060604084015261599560a08401826155a1565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061584990830184866159b6565b60018060a01b03851681528360208201526060604082015260006117e66060830184866159b6565b600082601f830112615a3d57600080fd5b81516020615a4d614de783614d1e565b82815260059290921b84018101918181019086841115615a6c57600080fd5b8286015b84811015615285578051615a83816151df565b8352918301918301615a70565b60008060408385031215615aa357600080fd5b82516001600160401b0380821115615aba57600080fd5b615ac686838701615a2c565b93506020850151915080821115615adc57600080fd5b50615ae985828601615a2c565b9150509250929050565b8381526040602082015260006158496040830184866159b6565b60006020808385031215615b2057600080fd5b82516001600160401b03811115615b3657600080fd5b8301601f81018513615b4757600080fd5b8051615b55614de782614d1e565b81815260059190911b82018301908381019087831115615b7457600080fd5b928401925b82841015615b9b578351615b8c81614905565b82529284019290840190615b79565b979650505050505050565b600060208284031215615bb857600080fd5b8151612897816151df565b60ff8181168382160190811115610e8e57610e8e615572565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615c4557865180516001600160a01b031684528601518516868401529585019591830191600101615c15565b50909a9950505050505050505050565b600061ffff808316818103615c6c57615c6c615572565b6001019392505050565b600060208284031215615c8857600080fd5b81516001600160e01b03198116811461289757600080fd5b6001600160601b03818116838216028082169190828114615cc357615cc3615572565b505092915050565b60006001600160601b0380841680615ce557615ce561587b565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c696461746543687530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d8b4dfde053d85837f1454ad329a51343c75d718d88d9362a8d22cce02463b664736f6c63430008140033"] + #[doc = r" ```"] + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(b"a\x01\xc0`@R4\x80\x15b\0\0\x12W`\0\x80\xfd[P`@Qb\0aK8\x03\x80b\0aK\x839\x81\x01`@\x81\x90Rb\0\05\x91b\0\x02TV[`@\x80Q\x80\x82\x01\x82R`\x16\x81R\x7fAVSRegistryCoordinator\0\0\0\0\0\0\0\0\0\0` \x80\x83\x01\x91\x82R\x83Q\x80\x85\x01\x90\x94R`\x06\x84Rev0.0.1`\xd0\x1b\x90\x84\x01R\x81Q\x90 `\xe0\x81\x90R\x7fk\xda~?8^H\x84\x10H9\x04D\xcc\xed\\\xc7\x95\xaf\x87u\x8a\xf6v\"\xe5\xf4\xf0\x88,J\x99a\x01\0\x81\x90RF`\xa0R\x87\x93\x87\x93\x87\x93\x87\x93\x91\x92\x91\x7f\x8bs\xc3\xc6\x9b\xb8\xfe=Q.\xccL\xf7Y\xccy#\x9f{\x17\x9b\x0f\xfa\xca\xa9\xa7]R+9@\x0fb\0\x015\x81\x84\x84`@\x80Q` \x81\x01\x85\x90R\x90\x81\x01\x83\x90R``\x81\x01\x82\x90RF`\x80\x82\x01R0`\xa0\x82\x01R`\0\x90`\xc0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x93\x92PPPV[`\x80R0`\xc0Ra\x01 RPPPP`\x01`\x01`\xa0\x1b\x03\x93\x84\x16a\x01@R\x91\x83\x16a\x01\x80R\x82\x16a\x01`R\x16a\x01\xa0Rb\0\x01ob\0\x01yV[PPPPb\0\x02\xbcV[`\0Ta\x01\0\x90\x04`\xff\x16\x15b\0\x01\xe6W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7fInitializable: contract is initi`D\x82\x01Rfalizing`\xc8\x1b`d\x82\x01R`\x84\x01`@Q\x80\x91\x03\x90\xfd[`\0T`\xff\x90\x81\x16\x10\x15b\0\x029W`\0\x80T`\xff\x19\x16`\xff\x90\x81\x17\x90\x91U`@Q\x90\x81R\x7f\x7f&\xb8?\xf9n\x1f+jh/\x138R\xf6y\x8a\t\xc4e\xda\x95\x92\x14`\xce\xfb8G@$\x98\x90` \x01`@Q\x80\x91\x03\x90\xa1[V[`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14b\0\x02QW`\0\x80\xfd[PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15b\0\x02kW`\0\x80\xfd[\x84Qb\0\x02x\x81b\0\x02;V[` \x86\x01Q\x90\x94Pb\0\x02\x8b\x81b\0\x02;V[`@\x86\x01Q\x90\x93Pb\0\x02\x9e\x81b\0\x02;V[``\x86\x01Q\x90\x92Pb\0\x02\xb1\x81b\0\x02;V[\x93\x96\x92\x95P\x90\x93PPV[`\x80Q`\xa0Q`\xc0Q`\xe0Qa\x01\0Qa\x01 Qa\x01@Qa\x01`Qa\x01\x80Qa\x01\xa0Qa]\x87b\0\x03\xc4`\09`\0\x81\x81a\x067\x01R\x81\x81a\x11\x11\x01R\x81\x81a \x16\x01R\x81\x81a-I\x01R\x81\x81a5Z\x01Ra;1\x01R`\0\x81\x81a\x05|\x01R\x81\x81a\x1f\xa1\x01R\x81\x81a$K\x01R\x81\x81a,\xc9\x01R\x81\x81a4\xb1\x01R\x81\x81a7\x06\x01Ra:\xb0\x01R`\0\x81\x81a\x05B\x01R\x81\x81a\x0e\xad\x01R\x81\x81a\x1f\xdf\x01R\x81\x81a,K\x01R\x81\x81a.1\x01R\x81\x81a.\xab\x01R\x81\x81a41\x01Ra;\xad\x01R`\0\x81\x81a\x04\x86\x01R\x81\x81a+\xa1\x01Ra3y\x01R`\0a=\xb4\x01R`\0a>\x03\x01R`\0a=\xde\x01R`\0a=7\x01R`\0a=a\x01R`\0a=\x8b\x01Ra]\x87`\0\xf3\xfe`\x80`@R4\x80\x15a\0\x10W`\0\x80\xfd[P`\x046\x10a\x02\x94W`\05`\xe0\x1c\x80c]\xf4YF\x11a\x01gW\x80c\x9f\xea\xb8Y\x11a\0\xceW\x80c\xd7[L\x88\x11a\0\x87W\x80c\xd7[L\x88\x14a\x06\xf5W\x80c\xdd\x82\x83\xf3\x14a\x07\x08W\x80c\xe6W\x97\xad\x14a\x07\x1bW\x80c\xf2\xfd\xe3\x8b\x14a\x07\xbeW\x80c\xfa\xbc\x1c\xbc\x14a\x07\xd1W\x80c\xfd9\x10Z\x14a\x07\xe4W`\0\x80\xfd[\x80c\x9f\xea\xb8Y\x14a\x06YW\x80c\xa5\x08W\xbf\x14a\x06\x80W\x80c\xc3\x91B^\x14a\x06\x93W\x80c\xca\r\xe8\x82\x14a\x06\xb3W\x80c\xcaO-\x97\x14a\x06\xdaW\x80c\xd7-\x8d\xd6\x14a\x06\xedW`\0\x80\xfd[\x80c\x87\x1e\xf0I\x11a\x01 W\x80c\x87\x1e\xf0I\x14a\x05\xccW\x80c\x88o\x11\x95\x14a\x05\xdfW\x80c\x8d\xa5\xcb[\x14a\x05\xf8W\x80c\x9a\xa1e=\x14a\x06\0W\x80c\x9b]\x17{\x14a\x06\x1fW\x80c\x9e\x99#\xc2\x14a\x062W`\0\x80\xfd[\x80c]\xf4YF\x14a\x05=W\x80ccG\xc9\0\x14a\x05dW\x80ch0H5\x14a\x05wW\x80cn;\x17\xdb\x14a\x05\x9eW\x80cqP\x18\xa6\x14a\x05\xb1W\x80c\x84\xcaR\x13\x14a\x05\xb9W`\0\x80\xfd[\x80c(\xf6\x1b1\x11a\x02\x0bW\x80cQ@\xa5H\x11a\x01\xc4W\x80cQ@\xa5H\x14a\x04\xc8W\x80cXe\xc6\x0c\x14a\x04\xdbW\x80cY\\jg\x14a\x04\xfbW\x80cZ\xc8j\xb7\x14a\x05\x03W\x80c[\x0b\x82\x9f\x14a\x05\"W\x80c\\\x97Z\xbb\x14a\x055W`\0\x80\xfd[\x80c(\xf6\x1b1\x14a\x045W\x80c)k\xb0d\x14a\x04HW\x80c)\xd1\xe0\xc3\x14a\x04[W\x80c,\xdd\x1e\x86\x14a\x04nW\x80c9\x98\xfd\xd3\x14a\x04\x81W\x80c<*\x7fL\x14a\x04\xa8W`\0\x80\xfd[\x80c\x10\xd6z/\x11a\x02]W\x80c\x10\xd6z/\x14a\x03JW\x80c\x13T*N\x14a\x03]W\x80c\x13d9\xdd\x14a\x03\x86W\x80c\x14x\x85\x1f\x14a\x03\x99W\x80c\x1e\xb8\x12\xda\x14a\x03\xccW\x80c$\x9a\x0cB\x14a\x04\x15W`\0\x80\xfd[\x80b\xcf*\xb5\x14a\x02\x99W\x80c\x03\xfd4\x92\x14a\x02\xaeW\x80c\x04\xeccQ\x14a\x02\xe1W\x80c\x05C\x10\xe6\x14a\x03\x0cW\x80c\x0c\xf4\xb7g\x14a\x037W[`\0\x80\xfd[a\x02\xaca\x02\xa76`\x04aH\xabV[a\x08 V[\0[a\x02\xcea\x02\xbc6`\x04aH\xecV[`\0\x90\x81R`\x98` R`@\x90 T\x90V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xf3[a\x02\xf4a\x02\xef6`\x04aI\x17V[a\t5V[`@Q`\x01`\x01`\xc0\x1b\x03\x90\x91\x16\x81R` \x01a\x02\xd8V[`\x9dTa\x03\x1f\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01a\x02\xd8V[a\x02\xaca\x03E6`\x04aJ6V[a\x0b+V[a\x02\xaca\x03X6`\x04aJ\xabV[a\x0c\x13V[a\x02\xcea\x03k6`\x04aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x16`\0\x90\x81R`\x99` R`@\x90 T\x90V[a\x02\xaca\x03\x946`\x04aH\xecV[a\x0c\xc6V[a\x03\xbca\x03\xa76`\x04aH\xecV[`\x9a` R`\0\x90\x81R`@\x90 T`\xff\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x02\xd8V[a\x03\xdfa\x03\xda6`\x04aJ\xc8V[a\x0e\x03V[`@\x80Q\x82Qc\xff\xff\xff\xff\x90\x81\x16\x82R` \x80\x85\x01Q\x90\x91\x16\x90\x82\x01R\x91\x81\x01Q`\x01`\x01`\xc0\x1b\x03\x16\x90\x82\x01R``\x01a\x02\xd8V[a\x02\xcea\x04#6`\x04aJ\xfbV[`\x9b` R`\0\x90\x81R`@\x90 T\x81V[`\x9eTa\x03\x1f\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[a\x03\x1fa\x04V6`\x04aH\xecV[a\x0e\x94V[a\x02\xaca\x04i6`\x04aJ\xabV[a\x0f V[a\x02\xaca\x04|6`\x04aJ\xabV[a\x0f1V[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x04\xbba\x04\xb66`\x04aJ\xabV[a\x0fBV[`@Qa\x02\xd8\x91\x90aK\x16V[a\x02\xaca\x04\xd66`\x04aKnV[a\x0f\xc1V[a\x04\xeea\x04\xe96`\x04aJ\xabV[a\x14\xd1V[`@Qa\x02\xd8\x91\x90aL\x11V[a\x02\xaca\x15EV[a\x03\xbca\x05\x116`\x04aJ\xfbV[`\x01\x80T`\xff\x90\x92\x16\x1b\x90\x81\x16\x14\x90V[a\x02\xaca\x0506`\x04aL\x96V[a\x16\x11V[`\x01Ta\x02\xceV[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x03\x1fa\x05r6`\x04aH\xecV[a\x16\xa8V[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x02\xaca\x05\xac6`\x04aL\xcaV[a\x16\xd2V[a\x02\xaca\x17\x92V[a\x02\xcea\x05\xc76`\x04aM\x81V[a\x17\xa6V[a\x02\xf4a\x05\xda6`\x04aH\xecV[a\x17\xf0V[`\0Ta\x03\x1f\x90b\x01\0\0\x90\x04`\x01`\x01`\xa0\x1b\x03\x16\x81V[a\x03\x1fa\x17\xfbV[`\x96Ta\x06\r\x90`\xff\x16\x81V[`@Q`\xff\x90\x91\x16\x81R` \x01a\x02\xd8V[a\x02\xaca\x06-6`\x04aO\x1aV[a\x18\x14V[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x02\xce\x7f+\xd8!$\x05\x7f\t\x13\xbc;w,\xe7\xb8>\x80W\xc1\xad\x1f5\x10\xfc\x83w\x8b\xe2\x0f\x10\xec]\xe6\x81V[a\x02\xaca\x06\x8e6`\x04aP\x13V[a\x1bKV[a\x06\xa6a\x06\xa16`\x04aP\xbbV[a\x1c\xceV[`@Qa\x02\xd8\x91\x90aQ`V[a\x02\xce\x7fM@N2v\xe7\xac!c\xd8\xeeGj\xfajA\xd1\xf6\x8f\xb7\x1f-\x8beF\xb2NU\xce\x01\xb7*\x81V[a\x02\xaca\x06\xe86`\x04aQ\xaaV[a\x1d\x87V[`\x9cTa\x02\xceV[a\x02\xaca\x07\x036`\x04aR\x90V[a\x1d\xedV[a\x02\xaca\x07\x166`\x04aTCV[a\x1e\0V[a\x07\x8aa\x07)6`\x04aJ\xfbV[`@\x80Q``\x80\x82\x01\x83R`\0\x80\x83R` \x80\x84\x01\x82\x90R\x92\x84\x01\x81\x90R`\xff\x94\x90\x94\x16\x84R`\x97\x82R\x92\x82\x90 \x82Q\x93\x84\x01\x83RTc\xff\xff\xff\xff\x81\x16\x84Ra\xff\xff`\x01` \x1b\x82\x04\x81\x16\x92\x85\x01\x92\x90\x92R`\x01`0\x1b\x90\x04\x16\x90\x82\x01R\x90V[`@\x80Q\x82Qc\xff\xff\xff\xff\x16\x81R` \x80\x84\x01Qa\xff\xff\x90\x81\x16\x91\x83\x01\x91\x90\x91R\x92\x82\x01Q\x90\x92\x16\x90\x82\x01R``\x01a\x02\xd8V[a\x02\xaca\x07\xcc6`\x04aJ\xabV[a!\x04V[a\x02\xaca\x07\xdf6`\x04aH\xecV[a!zV[a\x08\x13a\x07\xf26`\x04aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x16`\0\x90\x81R`\x99` R`@\x90 `\x01\x01T`\xff\x16\x90V[`@Qa\x02\xd8\x91\x90aU\x17V[`\x01T`\x02\x90`\x04\x90\x81\x16\x03a\x08QW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aU%V[`@Q\x80\x91\x03\x90\xfd[`\0[\x82\x81\x10\x15a\t/W`\0\x84\x84\x83\x81\x81\x10a\x08pWa\x08paU\\V[\x90P` \x02\x01` \x81\x01\x90a\x08\x85\x91\x90aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x81\x16`\0\x90\x81R`\x99` \x90\x81R`@\x80\x83 \x81Q\x80\x83\x01\x90\x92R\x80T\x82R`\x01\x81\x01T\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\xff\x16`\x02\x81\x11\x15a\x08\xd0Wa\x08\xd0aK\xd9V[`\x02\x81\x11\x15a\x08\xe1Wa\x08\xe1aK\xd9V[\x90RP\x80Q\x90\x91P`\0a\x08\xf4\x82a\"\xd6V[\x90P`\0a\t\n\x82`\x01`\x01`\xc0\x1b\x03\x16a#AV[\x90Pa\t\x17\x85\x85\x83a$\rV[PPPPP\x80\x80a\t'\x90aU\x88V[\x91PPa\x08TV[PPPPV[`\0\x83\x81R`\x98` R`@\x81 \x80T\x82\x91\x90\x84\x90\x81\x10a\tXWa\tXaU\\V[`\0\x91\x82R` \x91\x82\x90 `@\x80Q``\x81\x01\x82R\x92\x90\x91\x01Tc\xff\xff\xff\xff\x80\x82\x16\x80\x85R`\x01` \x1b\x83\x04\x82\x16\x95\x85\x01\x95\x90\x95R`\x01`@\x1b\x90\x91\x04`\x01`\x01`\xc0\x1b\x03\x16\x91\x83\x01\x91\x90\x91R\x90\x92P\x85\x16\x10\x15a\nRW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`e`$\x82\x01R\x7fRegistryCoordinator.getQuorumBit`D\x82\x01R\x7fmapAtBlockNumberByIndex: quorumB`d\x82\x01R\x7fitmapUpdate is from after blockN`\x84\x82\x01Rd:\xb6\xb12\xb9`\xd9\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[` \x81\x01Qc\xff\xff\xff\xff\x16\x15\x80a\nxWP\x80` \x01Qc\xff\xff\xff\xff\x16\x84c\xff\xff\xff\xff\x16\x10[a\x0b\x1fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`f`$\x82\x01R\x7fRegistryCoordinator.getQuorumBit`D\x82\x01R\x7fmapAtBlockNumberByIndex: quorumB`d\x82\x01R\x7fitmapUpdate is from before block`\x84\x82\x01Re':\xb6\xb12\xb9`\xd1\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[`@\x01Q\x94\x93PPPPV[`\x013`\0\x90\x81R`\x99` R`@\x90 `\x01\x01T`\xff\x16`\x02\x81\x11\x15a\x0bTWa\x0bTaK\xd9V[\x14a\x0b\xc7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`<`$\x82\x01R\x7fRegistryCoordinator.updateSocket`D\x82\x01R\x7f: operator is not registered\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[3`\0\x90\x81R`\x99` R`@\x90\x81\x90 T\x90Q\x7f\xec)c\xab!\xc1\xe5\x0e\x1eX*\xa5B\xaf.K\xf7\xbf8\xe6\xe1@<'\xb4.\x1c]nb\x1e\xaa\x90a\x0c\x08\x90\x84\x90aU\xe7V[`@Q\x80\x91\x03\x90\xa2PV[`\0`\x02\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xa0\x1b\x03\x16`\x01`\x01`\xa0\x1b\x03\x16c\xea\xb6mz`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0cfW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0c\x8a\x91\x90aU\xfaV[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\x0c\xbaW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x17V[a\x0c\xc3\x81a$\xfaV[PV[`\0T`@Qc#}\xfbG`\xe1\x1b\x81R3`\x04\x82\x01Rb\x01\0\0\x90\x91\x04`\x01`\x01`\xa0\x1b\x03\x16\x90cF\xfb\xf6\x8e\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\r\x13W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r7\x91\x90aVaV[a\rSW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x83V[`\x01T\x81\x81\x16\x14a\r\xccW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.pause: invalid attempt `D\x82\x01R\x7fto unpause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[`\x01\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01a\x0c\x08V[`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x82\x01\x81\x90R\x91\x81\x01\x91\x90\x91R`\0\x83\x81R`\x98` R`@\x90 \x80T\x83\x90\x81\x10a\x0e@Wa\x0e@aU\\V[`\0\x91\x82R` \x91\x82\x90 `@\x80Q``\x81\x01\x82R\x91\x90\x92\x01Tc\xff\xff\xff\xff\x80\x82\x16\x83R`\x01` \x1b\x82\x04\x16\x93\x82\x01\x93\x90\x93R`\x01`\x01`\xc0\x1b\x03`\x01`@\x1b\x90\x93\x04\x92\x90\x92\x16\x90\x82\x01R\x90P[\x92\x91PPV[`@Qc\x08\xf6b\x9d`\xe3\x1b\x81R`\x04\x81\x01\x82\x90R`\0\x90\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x90cG\xb3\x14\xe8\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0e\xfcW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0e\x8e\x91\x90aU\xfaV[a\x0f(a%\xffV[a\x0c\xc3\x81a&^V[a\x0f9a%\xffV[a\x0c\xc3\x81a&\xc7V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra\x0e\x8ea\x0f\xbc\x7f+\xd8!$\x05\x7f\t\x13\xbc;w,\xe7\xb8>\x80W\xc1\xad\x1f5\x10\xfc\x83w\x8b\xe2\x0f\x10\xec]\xe6\x84`@Q` \x01a\x0f\xa1\x92\x91\x90\x91\x82R`\x01`\x01`\xa0\x1b\x03\x16` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a'0V[a'~V[`\x01T`\x02\x90`\x04\x90\x81\x16\x03a\x0f\xe9W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aU%V[`\0a\x101\x84\x84\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPP`\x96T`\xff\x16\x91Pa(\r\x90PV[\x90P\x84\x83\x14a\x10\xa2W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R`\0\x80Q` a\\\xf2\x839\x81Q\x91R`D\x82\x01R\x7forsForQuorum: input length misma`d\x82\x01Rb\x0e\x8cm`\xeb\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\0[\x83\x81\x10\x15a\x14\xc8W`\0\x85\x85\x83\x81\x81\x10a\x10\xc1Wa\x10\xc1aU\\V[\x91\x90\x91\x015`\xf8\x1c\x91P6\x90P`\0\x89\x89\x85\x81\x81\x10a\x10\xe2Wa\x10\xe2aU\\V[\x90P` \x02\x81\x01\x90a\x10\xf4\x91\x90aV\xcbV[`@Qcy\xa0\x84\x91`\xe1\x1b\x81R`\xff\x86\x16`\x04\x82\x01R\x91\x93P\x91P\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x90c\xf3A\t\"\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x11`W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\x84\x91\x90aW\x14V[c\xff\xff\xff\xff\x16\x81\x14a\x12 W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`e`$\x82\x01R`\0\x80Q` a\\\xf2\x839\x81Q\x91R`D\x82\x01R\x7forsForQuorum: number of updated `d\x82\x01R\x7foperators does not match quorum `\x84\x82\x01Rd\x1d\x1b\xdd\x18[`\xda\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[`\0\x80[\x82\x81\x10\x15a\x14gW`\0\x84\x84\x83\x81\x81\x10a\x12@Wa\x12@aU\\V[\x90P` \x02\x01` \x81\x01\x90a\x12U\x91\x90aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x81\x16`\0\x90\x81R`\x99` \x90\x81R`@\x80\x83 \x81Q\x80\x83\x01\x90\x92R\x80T\x82R`\x01\x81\x01T\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\xff\x16`\x02\x81\x11\x15a\x12\xa0Wa\x12\xa0aK\xd9V[`\x02\x81\x11\x15a\x12\xb1Wa\x12\xb1aK\xd9V[\x90RP\x80Q\x90\x91P`\0a\x12\xc4\x82a\"\xd6V[\x90P`\x01`\x01`\x01`\xc0\x1b\x03\x82\x16`\xff\x8b\x16\x1c\x81\x16\x14a\x13HW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R`\0\x80Q` a\\\xf2\x839\x81Q\x91R\x90\x82\x01R\x7forsForQuorum: operator not in qu`d\x82\x01Rcorum`\xe0\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x85`\x01`\x01`\xa0\x1b\x03\x16\x84`\x01`\x01`\xa0\x1b\x03\x16\x11a\x13\xf3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`g`$\x82\x01R`\0\x80Q` a\\\xf2\x839\x81Q\x91R`D\x82\x01R\x7forsForQuorum: operators array mu`d\x82\x01R\x7fst be sorted in ascending addres`\x84\x82\x01Rf9\x907\xb922\xb9`\xc9\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[Pa\x14Q\x83\x83\x8f\x8f\x8d\x90\x8e`\x01a\x14\n\x91\x90aW1V[\x92a\x14\x17\x93\x92\x91\x90aWDV[\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa$\r\x92PPPV[P\x90\x92Pa\x14`\x90P\x81aU\x88V[\x90Pa\x12$V[P`\xff\x84\x16`\0\x81\x81R`\x9b` \x90\x81R`@\x91\x82\x90 C\x90\x81\x90U\x91Q\x91\x82R\x7fF\x07}U3\x07c\xf1bi\xfdu\xe5v\x16c\xf4\x19-'\x91t|\x01\x89\xb1j\xd3\x1d\xb0}\xb4\x91\x01`@Q\x80\x91\x03\x90\xa2PPPP\x80a\x14\xc1\x90aU\x88V[\x90Pa\x10\xa5V[PPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\x01`\x01`\xa0\x1b\x03\x82\x16`\0\x90\x81R`\x99` \x90\x81R`@\x91\x82\x90 \x82Q\x80\x84\x01\x90\x93R\x80T\x83R`\x01\x81\x01T\x90\x91\x83\x01\x90`\xff\x16`\x02\x81\x11\x15a\x15+Wa\x15+aK\xd9V[`\x02\x81\x11\x15a\x15=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x15\xb6\x91\x90aVaV[a\x15\xd2W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x83V[`\0\x19`\x01\x81\x90U`@Q\x90\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2V[a\x16\x19a%\xffV[`\x96T\x82\x90`\xff\x90\x81\x16\x90\x82\x16\x10a\x16\x99W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7fRegistryCoordinator.quorumExists`D\x82\x01R\x7f: quorum does not exist\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[a\x16\xa3\x83\x83a(\x9eV[PPPV[`\x9c\x81\x81T\x81\x10a\x16\xb8W`\0\x80\xfd[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\xa0\x1b\x03\x16\x90P\x81V[`\x9eT`\x01`\x01`\xa0\x1b\x03\x163\x14a\x17RW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7fRegistryCoordinator.onlyEjector:`D\x82\x01R\x7f caller is not the ejector\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[a\x16\xa3\x83\x83\x83\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa)K\x92PPPV[a\x17\x9aa%\xffV[a\x17\xa4`\0a-\xbdV[V[`\0a\x17\xe6\x7fM@N2v\xe7\xac!c\xd8\xeeGj\xfajA\xd1\xf6\x8f\xb7\x1f-\x8beF\xb2NU\xce\x01\xb7*\x87\x87\x87\x87\x87`@Q` \x01a\x0f\xa1\x96\x95\x94\x93\x92\x91\x90aWnV[\x96\x95PPPPPPV[`\0a\x0e\x8e\x82a\"\xd6V[`\0a\x18\x0f`dT`\x01`\x01`\xa0\x1b\x03\x16\x90V[\x90P\x90V[`\x01\x80T`\0\x91\x90\x81\x16\x03a\x18;W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aU%V[\x83\x89\x14a\x18\xbeW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R\x7fRegistryCoordinator.registerOper\x90\x82\x01R\x7fatorWithChurn: input length mism`d\x82\x01Rc\x0c.\x8cm`\xe3\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\0a\x18\xca3\x88a.\x0fV[\x90Pa\x19*3\x82\x88\x88\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x19\x1fWa\x19\x10`@\x83\x02\x86\x016\x81\x90\x03\x81\x01\x90aW\xf3V[\x81R` \x01\x90`\x01\x01\x90a\x18\xf3V[PPPPP\x87a/DV[`\0a\x19q3\x83\x8e\x8e\x8e\x8e\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x8c\x92Pa0\xd1\x91PPV[\x90P`\0[\x8b\x81\x10\x15a\x1b=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!\xf1\x91\x90aU\xfaV[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\"!W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x17V[`\x01T\x19\x81\x19`\x01T\x19\x16\x14a\"\x9fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.unpause: invalid attemp`D\x82\x01R\x7ft to pause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[`\x01\x81\x90U`@Q\x81\x81R3\x90\x7f5\x82\xd1\x82\x8e&\xbfV\xbd\x80\x15\x02\xbc\x02\x1a\xc0\xbc\x8a\xfbW\xc8&\xe4\x98kEY<\x8f\xad8\x9c\x90` \x01a\x0c\x08V[`\0\x81\x81R`\x98` R`@\x81 T\x80\x82\x03a\"\xf5WP`\0\x92\x91PPV[`\0\x83\x81R`\x98` R`@\x90 a#\x0e`\x01\x83aX\x0fV[\x81T\x81\x10a#\x1eWa#\x1eaU\\V[`\0\x91\x82R` \x90\x91 \x01T`\x01`@\x1b\x90\x04`\x01`\x01`\xc0\x1b\x03\x16\x93\x92PPPV[```\0\x80a#O\x84a<\xffV[a\xff\xff\x16`\x01`\x01`@\x1b\x03\x81\x11\x15a#jWa#jaIOV[`@Q\x90\x80\x82R\x80`\x1f\x01`\x1f\x19\x16` \x01\x82\x01`@R\x80\x15a#\x94W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x80[\x82Q\x82\x10\x80\x15a#\xacWPa\x01\0\x81\x10[\x15a$\x03W`\x01\x81\x1b\x93P\x85\x84\x16\x15a#\xf3W\x80`\xf8\x1b\x83\x83\x81Q\x81\x10a#\xd5Wa#\xd5aU\\V[` \x01\x01\x90`\x01`\x01`\xf8\x1b\x03\x19\x16\x90\x81`\0\x1a\x90SP\x81`\x01\x01\x91P[a#\xfc\x81aU\x88V[\x90Pa#\x9bV[P\x90\x94\x93PPPPV[`\x01\x82` \x01Q`\x02\x81\x11\x15a$%Wa$%aK\xd9V[\x14a$/WPPPV[\x81Q`@Qc3V\x7f\x7f`\xe1\x1b\x81R`\0\x90`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90cf\xac\xfe\xfe\x90a$\x84\x90\x88\x90\x86\x90\x88\x90`\x04\x01aX\"V[` `@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a$\xa3W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a$\xc7\x91\x90aXRV[\x90P`\x01`\x01`\xc0\x1b\x03\x81\x16\x15a$\xf3Wa$\xf3\x85a$\xee\x83`\x01`\x01`\xc0\x1b\x03\x16a#AV[a)KV[PPPPPV[`\x01`\x01`\xa0\x1b\x03\x81\x16a%\x88W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`I`$\x82\x01R\x7fPausable._setPauserRegistry: new`D\x82\x01R\x7fPauserRegistry cannot be the zer`d\x82\x01Rho address`\xb8\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\0T`@\x80Q`\x01`\x01`\xa0\x1b\x03b\x01\0\0\x90\x93\x04\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7fn\x9f\xcdS\x98\x96\xfc\xa6\x0e\x8b\x0f\x01\xddX\x023\xe4\x8ak\x0f}\xf0\x13\xb8\x9b\xa7\xf5e\x86\x9a\xcd\xb6\x91\x01`@Q\x80\x91\x03\x90\xa1`\0\x80T`\x01`\x01`\xa0\x1b\x03\x90\x92\x16b\x01\0\0\x02b\x01\0\0`\x01`\xb0\x1b\x03\x19\x90\x92\x16\x91\x90\x91\x17\x90UV[3a&\x08a\x17\xfbV[`\x01`\x01`\xa0\x1b\x03\x16\x14a\x17\xa4W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7fOwnable: caller is not the owner`D\x82\x01R`d\x01a\x08HV[`\x9dT`@\x80Q`\x01`\x01`\xa0\x1b\x03\x92\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7f1TW\xd8\xa8\xfe`\xf0J\xf1|\x16\xe2\xf5\xa5\xe1\xdba+1d\x8eX\x03\x03`u\x9e\xf8\xf3R\x8c\x91\x01`@Q\x80\x91\x03\x90\xa1`\x9d\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\x9eT`@\x80Q`\x01`\x01`\xa0\x1b\x03\x92\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7f\x8f0\xab\t\xf4:l\x15}\x7f\xce~\n\x13\xc0\x03\x04,\x1c\x95\xe8\xa7.z\x14j!\xc0\xca\xa2M\xc9\x91\x01`@Q\x80\x91\x03\x90\xa1`\x9e\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\0a\x0e\x8ea'=a=*V[\x83`@Qa\x19\x01`\xf0\x1b` \x82\x01R`\"\x81\x01\x83\x90R`B\x81\x01\x82\x90R`\0\x90`b\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0\x80\x80a'\xae`\0\x80Q` a]2\x839\x81Q\x91R\x86aX\x91V[\x90P[a'\xba\x81a>QV[\x90\x93P\x91P`\0\x80Q` a]2\x839\x81Q\x91R\x82\x83\t\x83\x03a'\xf3W`@\x80Q\x80\x82\x01\x90\x91R\x90\x81R` \x81\x01\x91\x90\x91R\x93\x92PPPV[`\0\x80Q` a]2\x839\x81Q\x91R`\x01\x82\x08\x90Pa'\xb1V[`\0\x80a(\x19\x84a>\xd3V[\x90P\x80\x83`\xff\x16`\x01\x90\x1b\x11a(\x97W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`?`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: bitmap exceeds max value\0`d\x82\x01R`\x84\x01a\x08HV[\x93\x92PPPV[`\xff\x82\x16`\0\x81\x81R`\x97` \x90\x81R`@\x91\x82\x90 \x84Q\x81T\x86\x84\x01\x80Q\x88\x87\x01\x80Qc\xff\xff\xff\xff\x90\x95\x16e\xff\xff\xff\xff\xff\xff\x19\x90\x94\x16\x84\x17`\x01` \x1ba\xff\xff\x93\x84\x16\x02\x17g\xff\xff\0\0\0\0\0\0\x19\x16`\x01`0\x1b\x95\x83\x16\x95\x90\x95\x02\x94\x90\x94\x17\x90\x94U\x85Q\x91\x82RQ\x83\x16\x93\x81\x01\x93\x90\x93RQ\x16\x91\x81\x01\x91\x90\x91R\x7f>\xe6\xfe\x8dTa\x02D\xc3\xe9\xd3\xc0f\xaeJ\xee\x99x\x84\xaa(\xf1\x06\x16\xae\x82\x19%@\x13\x18\xac\x90``\x01`@Q\x80\x91\x03\x90\xa2PPV[`\x01`\x01`\xa0\x1b\x03\x82\x16`\0\x90\x81R`\x99` R`@\x90 \x80T`\x01\x80\x83\x01T`\xff\x16`\x02\x81\x11\x15a)\x7fWa)\x7faK\xd9V[\x14a)\xfeW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R\x7fRegistryCoordinator._deregisterO`D\x82\x01R\x7fperator: operator is not registe`d\x82\x01Rb\x1c\x99Y`\xea\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\x96T`\0\x90a*\x12\x90\x85\x90`\xff\x16a(\rV[\x90P`\0a*\x1f\x83a\"\xd6V[\x90P`\x01`\x01`\xc0\x1b\x03\x82\x16a*\x9dW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`;`$\x82\x01R\x7fRegistryCoordinator._deregisterO`D\x82\x01R\x7fperator: bitmap cannot be 0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[a*\xb4`\x01`\x01`\xc0\x1b\x03\x83\x81\x16\x90\x83\x16\x81\x16\x14\x90V[a+LW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`Y`$\x82\x01R\x7fRegistryCoordinator._deregisterO`D\x82\x01R\x7fperator: operator is not registe`d\x82\x01R\x7fred for specified quorums\0\0\0\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x08HV[`\x01`\x01`\xc0\x1b\x03\x82\x81\x16\x19\x82\x16\x16a+e\x84\x82a@cV[`\x01`\x01`\xc0\x1b\x03\x81\x16a,4W`\x01\x85\x01\x80T`\xff\x19\x16`\x02\x17\x90U`@QcQ\xb2zm`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x88\x81\x16`\x04\x83\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c\xa3d\xf4\xda\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a+\xe5W`\0\x80\xfd[PZ\xf1\x15\x80\x15a+\xf9W=`\0\x80>=`\0\xfd[PP`@Q\x86\x92P`\x01`\x01`\xa0\x1b\x03\x8a\x16\x91P\x7f9o\xdc\xb1\x80\xcb\x0f\xea&\x92\x81\x13\xfb\x0f\xd1\xc3T\x98c\xf9\xcdV>j\x18O\x1dW\x81\x16\xc8\xe4\x90`\0\x90\xa3[`@Qc\xf4\xe2O\xe5`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c\xf4\xe2O\xe5\x90a,\x82\x90\x8a\x90\x8a\x90`\x04\x01aX\xa5V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a,\x9cW`\0\x80\xfd[PZ\xf1\x15\x80\x15a,\xb0W=`\0\x80>=`\0\xfd[PP`@Qc\xbd)\xb8\xcd`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92Pc\xbd)\xb8\xcd\x91Pa-\x02\x90\x87\x90\x8a\x90`\x04\x01aX\xc9V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a-\x1cW`\0\x80\xfd[PZ\xf1\x15\x80\x15a-0W=`\0\x80>=`\0\xfd[PP`@Qc\xbd)\xb8\xcd`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92Pc\xbd)\xb8\xcd\x91Pa-\x82\x90\x87\x90\x8a\x90`\x04\x01aX\xc9V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a-\x9cW`\0\x80\xfd[PZ\xf1\x15\x80\x15a-\xb0W=`\0\x80>=`\0\xfd[PPPPPPPPPPPV[`d\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x90\x93U`@Q\x91\x16\x91\x90\x82\x90\x7f\x8b\xe0\x07\x9cS\x16Y\x14\x13D\xcd\x1f\xd0\xa4\xf2\x84\x19I\x7f\x97\"\xa3\xda\xaf\xe3\xb4\x18okdW\xe0\x90`\0\x90\xa3PPV[`@Qc\t\xaa\x15'`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x04\x83\x01R`\0\x91\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90\x91\x16\x90c\x13T*N\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a.zW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a.\x9e\x91\x90aX\xe2V[\x90P`\0\x81\x90\x03a\x0e\x8eW\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xbfy\xceX\x84\x84a.\xe3\x87a\x0fBV[`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a/\x01\x93\x92\x91\x90aX\xfbV[` `@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a/ W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(\x97\x91\x90aX\xe2V[` \x80\x82\x01Q`\0\x90\x81R`\x9a\x90\x91R`@\x90 T`\xff\x16\x15a/\xeaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`R`$\x82\x01R\x7fRegistryCoordinator._verifyChurn`D\x82\x01R\x7fApproverSignature: churnApprover`d\x82\x01Rq\x08\x1c\xd8[\x1d\x08\x18[\x1c\x99XY\x1eH\x1d\\\xd9Y`r\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[B\x81`@\x01Q\x10\x15a0\x7fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`R`$\x82\x01R\x7fRegistryCoordinator._verifyChurn`D\x82\x01R\x7fApproverSignature: churnApprover`d\x82\x01Rq\x08\x1c\xdaY\xdb\x98]\x1d\\\x99H\x19^\x1c\x1a\\\x99Y`r\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[` \x80\x82\x01\x80Q`\0\x90\x81R`\x9a\x90\x92R`@\x91\x82\x90 \x80T`\xff\x19\x16`\x01\x17\x90U`\x9dT\x90Q\x91\x83\x01Qa\t/\x92`\x01`\x01`\xa0\x1b\x03\x90\x92\x16\x91a0\xca\x91\x88\x91\x88\x91\x88\x91\x90a\x17\xa6V[\x83QaB$V[a0\xf5`@Q\x80``\x01`@R\x80``\x81R` \x01``\x81R` \x01``\x81RP\x90V[`\0a1=\x86\x86\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPP`\x96T`\xff\x16\x91Pa(\r\x90PV[\x90P`\0a1J\x88a\"\xd6V[\x90P`\x01`\x01`\xc0\x1b\x03\x82\x16a1\xc8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`9`$\x82\x01R\x7fRegistryCoordinator._registerOpe`D\x82\x01R\x7frator: bitmap cannot be 0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[\x80\x82\x16`\x01`\x01`\xc0\x1b\x03\x16\x15a2~W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`h`$\x82\x01R\x7fRegistryCoordinator._registerOpe`D\x82\x01R\x7frator: operator already register`d\x82\x01R\x7fed for some quorums being regist`\x84\x82\x01Rg2\xb92\xb2\x1037\xb9`\xc1\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[`\x01`\x01`\xc0\x1b\x03\x81\x81\x16\x90\x83\x16\x17a2\x97\x89\x82a@cV[\x88\x7f\xec)c\xab!\xc1\xe5\x0e\x1eX*\xa5B\xaf.K\xf7\xbf8\xe6\xe1@<'\xb4.\x1c]nb\x1e\xaa\x87`@Qa2\xc7\x91\x90aU\xe7V[`@Q\x80\x91\x03\x90\xa2`\x01`\x01`\x01`\xa0\x1b\x03\x8b\x16`\0\x90\x81R`\x99` R`@\x90 `\x01\x01T`\xff\x16`\x02\x81\x11\x15a3\x01Wa3\x01aK\xd9V[\x14a4\x1aW`@\x80Q\x80\x82\x01\x82R\x8a\x81R`\x01` \x80\x83\x01\x82\x81R`\x01`\x01`\xa0\x1b\x03\x8f\x16`\0\x90\x81R`\x99\x90\x92R\x93\x90 \x82Q\x81U\x92Q\x83\x82\x01\x80T\x93\x94\x93\x91\x92\x90\x91`\xff\x19\x16\x90\x83`\x02\x81\x11\x15a3\\Wa3\\aK\xd9V[\x02\x17\x90UPP`@Qc\x99&\xee}`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91Pc\x99&\xee}\x90a3\xb1\x90\x8d\x90\x89\x90`\x04\x01aYkV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a3\xcbW`\0\x80\xfd[PZ\xf1\x15\x80\x15a3\xdfW=`\0\x80>=`\0\xfd[PP`@Q\x8b\x92P`\x01`\x01`\xa0\x1b\x03\x8d\x16\x91P\x7f\xe8\xe6\x8c\xef\x1c:v\x1e\xd7\xbe~\x84c\xa3u\xf2\x7f{\xc35\xe5\x18$\"<\xac\xcecn\xc5\xc3\xfe\x90`\0\x90\xa3[`@Qc\x1f\xd9<\xa9`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c?\xb2yR\x90a4j\x90\x8d\x90\x8c\x90\x8c\x90`\x04\x01aY\xdfV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a4\x84W`\0\x80\xfd[PZ\xf1\x15\x80\x15a4\x98W=`\0\x80>=`\0\xfd[PP`@Qc%PGw`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92Pc%PGw\x91Pa4\xee\x90\x8d\x90\x8d\x90\x8d\x90\x8d\x90`\x04\x01aZ\x04V[`\0`@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a5\rW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra55\x91\x90\x81\x01\x90aZ\x90V[`@\x80\x87\x01\x91\x90\x91R` \x86\x01\x91\x90\x91RQb\xbf\xf0M`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90b\xbf\xf0M\x90a5\x92\x90\x8c\x90\x8c\x90\x8c\x90`\x04\x01aZ\xf3V[`\0`@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a5\xb1W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra5\xd9\x91\x90\x81\x01\x90a[\rV[\x84RPPP\x96\x95PPPPPPV[` \x80\x83\x01Q`\x01`\x01`\xa0\x1b\x03\x80\x82\x16`\0\x81\x81R`\x99\x90\x94R`@\x90\x93 T\x91\x92\x90\x87\x16\x03a6gW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`5`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01Rt97\x1d\x101\xb0\xb777\xba\x101\xb4:\xb97\x109\xb2\xb63`Y\x1b`d\x82\x01R`\x84\x01a\x08HV[\x87`\xff\x16\x84`\0\x01Q`\xff\x16\x14a6\xe4W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01R\x7frn: quorumNumber not the same as`d\x82\x01Rf\x08\x1c\xdaY\xdb\x99Y`\xca\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`@QcT\x01\xed'`\xe0\x1b\x81R`\x04\x81\x01\x82\x90R`\xff\x89\x16`$\x82\x01R`\0\x90\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x90cT\x01\xed'\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a7UW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a7y\x91\x90a[\xa6V[\x90Pa7\x85\x81\x85aC\xdeV[`\x01`\x01``\x1b\x03\x16\x86`\x01`\x01``\x1b\x03\x16\x11a8\x18W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`V`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01R\x7frn: incoming operator has insuff`d\x82\x01Ru4\xb1\xb4\xb2\xb7:\x109\xba0\xb5\xb2\x9037\xb9\x101\xb4:\xb97`Q\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[a8\"\x88\x85aD\x02V[`\x01`\x01``\x1b\x03\x16\x81`\x01`\x01``\x1b\x03\x16\x10a \xf9W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\\`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01R\x7frn: cannot kick operator with mo`d\x82\x01R\x7fre than kickBIPsOfTotalStake\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x08HV[`\0\x81\x81R`\x98` R`@\x81 T\x81[\x81\x81\x10\x15a9NW`\x01a8\xe1\x82\x84aX\x0fV[a8\xeb\x91\x90aX\x0fV[\x92P\x84c\xff\xff\xff\xff\x16`\x98`\0\x86\x81R` \x01\x90\x81R` \x01`\0 \x84c\xff\xff\xff\xff\x16\x81T\x81\x10a9\x1eWa9\x1eaU\\V[`\0\x91\x82R` \x90\x91 \x01Tc\xff\xff\xff\xff\x16\x11a9=`\0\xfd[PP`@Qc\x13l\xa0\xf9`\xe1\x1b\x81R`\xff\x84\x16`\x04\x82\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x92Pc&\xd9A\xf2\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a;\x7fW`\0\x80\xfd[PZ\xf1\x15\x80\x15a;\x93W=`\0\x80>=`\0\xfd[PP`@Qc\x13l\xa0\xf9`\xe1\x1b\x81R`\xff\x84\x16`\x04\x82\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x92Pc&\xd9A\xf2\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a;\xfbW`\0\x80\xfd[PZ\xf1\x15\x80\x15a \xf9W=`\0\x80>=`\0\xfd[`\0Tb\x01\0\0\x90\x04`\x01`\x01`\xa0\x1b\x03\x16\x15\x80\x15a<6WP`\x01`\x01`\xa0\x1b\x03\x82\x16\x15\x15[a<\xb8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fPausable._initializePauser: _ini`D\x82\x01R\x7ftializePauser() can only be call`d\x82\x01Rfed once`\xc8\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\x01\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2a<\xfb\x82a$\xfaV[PPV[`\0\x80[\x82\x15a\x0e\x8eWa=\x14`\x01\x84aX\x0fV[\x90\x92\x16\x91\x80a=\"\x81a\\UV[\x91PPa=\x03V[`\00`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14\x80\x15a=\x83WP\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0F\x14[\x15a=\xadWP\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90V[P`@\x80Q\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x80\x83\x01\x91\x90\x91R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x84\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``\x83\x01RF`\x80\x83\x01R0`\xa0\x80\x84\x01\x91\x90\x91R\x83Q\x80\x84\x03\x90\x91\x01\x81R`\xc0\x90\x92\x01\x90\x92R\x80Q\x91\x01 \x90V[`\0\x80\x80`\0\x80Q` a]2\x839\x81Q\x91R`\x03`\0\x80Q` a]2\x839\x81Q\x91R\x86`\0\x80Q` a]2\x839\x81Q\x91R\x88\x89\t\t\x08\x90P`\0a>\xc7\x82\x7f\x0c\x19\x13\x9c\xb8Lh\nn\x14\x11m\xa0`V\x17e\xe0Z\xa4Z\x1cr\xa3O\x08#\x05\xb6\x1f?R`\0\x80Q` a]2\x839\x81Q\x91RaD\x1cV[\x91\x95\x91\x94P\x90\x92PPPV[`\0a\x01\0\x82Q\x11\x15a?\\W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R\x7fBitmapUtils.orderedBytesArrayToB\x90\x82\x01R\x7fitmap: orderedBytesArray is too `d\x82\x01Rclong`\xe0\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x81Q`\0\x03a?mWP`\0\x91\x90PV[`\0\x80\x83`\0\x81Q\x81\x10a?\x83Wa?\x83aU\\V[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x81\x90\x1b\x92P[\x84Q\x81\x10\x15a@ZW\x84\x81\x81Q\x81\x10a?\xb1Wa?\xb1aU\\V[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x1b\x91P\x82\x82\x11a@FW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: orderedBytesArray is not `d\x82\x01Rf\x1b\xdc\x99\x19\\\x99Y`\xca\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x91\x81\x17\x91a@S\x81aU\x88V[\x90Pa?\x96V[P\x90\x93\x92PPPV[`\0\x82\x81R`\x98` R`@\x81 T\x90\x81\x90\x03aA\x0bW`\0\x83\x81R`\x98` \x90\x81R`@\x80\x83 \x81Q``\x81\x01\x83Rc\xff\xff\xff\xffC\x81\x16\x82R\x81\x85\x01\x86\x81R`\x01`\x01`\xc0\x1b\x03\x80\x8a\x16\x95\x84\x01\x95\x86R\x84T`\x01\x81\x01\x86U\x94\x88R\x95\x90\x96 \x91Q\x91\x90\x92\x01\x80T\x95Q\x93Q\x90\x94\x16`\x01`@\x1b\x02`\x01`\x01`@\x1b\x03\x93\x83\x16`\x01` \x1b\x02g\xff\xff\xff\xff\xff\xff\xff\xff\x19\x90\x96\x16\x91\x90\x92\x16\x17\x93\x90\x93\x17\x16\x91\x90\x91\x17\x90UPPPV[`\0\x83\x81R`\x98` R`@\x81 aA$`\x01\x84aX\x0fV[\x81T\x81\x10aA4WaA4aU\\V[`\0\x91\x82R` \x90\x91 \x01\x80T\x90\x91Pc\xff\xff\xff\xffC\x81\x16\x91\x16\x03aAvW\x80T`\x01`\x01`@\x1b\x03\x16`\x01`@\x1b`\x01`\x01`\xc0\x1b\x03\x85\x16\x02\x17\x81Ua\t/V[\x80Tc\xff\xff\xff\xffC\x81\x16`\x01` \x1b\x81\x81\x02g\xff\xff\xff\xff\0\0\0\0\x19\x90\x94\x16\x93\x90\x93\x17\x84U`\0\x87\x81R`\x98` \x90\x81R`@\x80\x83 \x81Q``\x81\x01\x83R\x94\x85R\x84\x83\x01\x84\x81R`\x01`\x01`\xc0\x1b\x03\x80\x8c\x16\x93\x87\x01\x93\x84R\x82T`\x01\x81\x01\x84U\x92\x86R\x93\x90\x94 \x94Q\x94\x01\x80T\x93Q\x91Q\x90\x92\x16`\x01`@\x1b\x02`\x01`\x01`@\x1b\x03\x91\x86\x16\x90\x96\x02g\xff\xff\xff\xff\xff\xff\xff\xff\x19\x90\x93\x16\x93\x90\x94\x16\x92\x90\x92\x17\x17\x91\x90\x91\x16\x91\x90\x91\x17\x90UPPPPV[`\x01`\x01`\xa0\x1b\x03\x83\x16;\x15aC>W`@Qc\x0b\x13]?`\xe1\x1b\x80\x82R\x90`\x01`\x01`\xa0\x1b\x03\x85\x16\x90c\x16&\xba~\x90aBd\x90\x86\x90\x86\x90`\x04\x01aX\xc9V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15aB\x81W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90aB\xa5\x91\x90a\\vV[`\x01`\x01`\xe0\x1b\x03\x19\x16\x14a\x16\xa3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`S`$\x82\x01R\x7fEIP1271SignatureUtils.checkSigna`D\x82\x01R\x7fture_EIP1271: ERC1271 signature `d\x82\x01Rr\x1d\x99\\\x9aY\x9aX\xd8]\x1a[\xdb\x88\x19\x98Z[\x19Y`j\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x82`\x01`\x01`\xa0\x1b\x03\x16aCR\x83\x83aD\xc5V[`\x01`\x01`\xa0\x1b\x03\x16\x14a\x16\xa3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fEIP1271SignatureUtils.checkSigna`D\x82\x01R\x7fture_EIP1271: signature not from`d\x82\x01Rf\x109\xb4\xb3\xb72\xb9`\xc9\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[` \x81\x01Q`\0\x90a'\x10\x90aC\xf8\x90a\xff\xff\x16\x85a\\\xa0V[a(\x97\x91\x90a\\\xcbV[`@\x81\x01Q`\0\x90a'\x10\x90aC\xf8\x90a\xff\xff\x16\x85a\\\xa0V[`\0\x80aD'aH+V[aD/aHIV[` \x80\x82R\x81\x81\x01\x81\x90R`@\x82\x01\x81\x90R``\x82\x01\x88\x90R`\x80\x82\x01\x87\x90R`\xa0\x82\x01\x86\x90R\x82`\xc0\x83`\x05a\x07\xd0Z\x03\xfa\x92P\x82\x80aDlW\xfe[P\x82aD\xbaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1a`$\x82\x01R\x7fBN254.expMod: call failure\0\0\0\0\0\0`D\x82\x01R`d\x01a\x08HV[PQ\x95\x94PPPPPV[`\0\x80`\0aD\xd4\x85\x85aD\xe1V[\x91P\x91Pa\x1d\x7f\x81aEOV[`\0\x80\x82Q`A\x03aE\x17W` \x83\x01Q`@\x84\x01Q``\x85\x01Q`\0\x1aaE\x0b\x87\x82\x85\x85aG\x05V[\x94P\x94PPPPaEHV[\x82Q`@\x03aE@W` \x83\x01Q`@\x84\x01QaE5\x86\x83\x83aG\xf2V[\x93P\x93PPPaEHV[P`\0\x90P`\x02[\x92P\x92\x90PV[`\0\x81`\x04\x81\x11\x15aEcWaEcaK\xd9V[\x03aEkWPV[`\x01\x81`\x04\x81\x11\x15aE\x7fWaE\x7faK\xd9V[\x03aE\xccW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7fECDSA: invalid signature\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x08HV[`\x02\x81`\x04\x81\x11\x15aE\xe0WaE\xe0aK\xd9V[\x03aF-W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1f`$\x82\x01R\x7fECDSA: invalid signature length\0`D\x82\x01R`d\x01a\x08HV[`\x03\x81`\x04\x81\x11\x15aFAWaFAaK\xd9V[\x03aF\x99W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7fECDSA: invalid signature 's' val`D\x82\x01Raue`\xf0\x1b`d\x82\x01R`\x84\x01a\x08HV[`\x04\x81`\x04\x81\x11\x15aF\xadWaF\xadaK\xd9V[\x03a\x0c\xc3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7fECDSA: invalid signature 'v' val`D\x82\x01Raue`\xf0\x1b`d\x82\x01R`\x84\x01a\x08HV[`\0\x80\x7f\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff]WnsW\xa4P\x1d\xdf\xe9/Fh\x1b \xa0\x83\x11\x15aG=`\0\xfd[PP`@Q`\x1f\x19\x01Q\x91PP`\x01`\x01`\xa0\x1b\x03\x81\x16aG\xe2W`\0`\x01\x92P\x92PPaG\xe9V[\x91P`\0\x90P[\x94P\x94\x92PPPV[`\0\x80`\x01`\x01`\xff\x1b\x03\x83\x16\x81aH\x0f`\xff\x86\x90\x1c`\x1baW1V[\x90PaH\x1d\x87\x82\x88\x85aG\x05V[\x93P\x93PPP\x93P\x93\x91PPV[`@Q\x80` \x01`@R\x80`\x01\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xc0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`\0\x80\x83`\x1f\x84\x01\x12aHyW`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aH\x90W`\0\x80\xfd[` \x83\x01\x91P\x83` \x82`\x05\x1b\x85\x01\x01\x11\x15aEHW`\0\x80\xfd[`\0\x80` \x83\x85\x03\x12\x15aH\xbeW`\0\x80\xfd[\x825`\x01`\x01`@\x1b\x03\x81\x11\x15aH\xd4W`\0\x80\xfd[aH\xe0\x85\x82\x86\x01aHgV[\x90\x96\x90\x95P\x93PPPPV[`\0` \x82\x84\x03\x12\x15aH\xfeW`\0\x80\xfd[P5\x91\x90PV[c\xff\xff\xff\xff\x81\x16\x81\x14a\x0c\xc3W`\0\x80\xfd[`\0\x80`\0``\x84\x86\x03\x12\x15aI,W`\0\x80\xfd[\x835\x92P` \x84\x015aI>\x81aI\x05V[\x92\x95\x92\x94PPP`@\x91\x90\x91\x015\x90V[cNH{q`\xe0\x1b`\0R`A`\x04R`$`\0\xfd[`@Q``\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aI\x87WaI\x87aIOV[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aI\x87WaI\x87aIOV[`@Q`\x1f\x82\x01`\x1f\x19\x16\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aI\xd7WaI\xd7aIOV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1b\x03\x83\x11\x15aI\xf8WaI\xf8aIOV[aJ\x0b`\x1f\x84\x01`\x1f\x19\x16` \x01aI\xafV[\x90P\x82\x81R\x83\x83\x83\x01\x11\x15aJ\x1fW`\0\x80\xfd[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15aJHW`\0\x80\xfd[\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aJ^W`\0\x80\xfd[\x82\x01`\x1f\x81\x01\x84\x13aJoW`\0\x80\xfd[aJ~\x84\x825` \x84\x01aI\xdfV[\x94\x93PPPPV[`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x0c\xc3W`\0\x80\xfd[\x805aJ\xa6\x81aJ\x86V[\x91\x90PV[`\0` \x82\x84\x03\x12\x15aJ\xbdW`\0\x80\xfd[\x815a(\x97\x81aJ\x86V[`\0\x80`@\x83\x85\x03\x12\x15aJ\xdbW`\0\x80\xfd[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\xff\x81\x16\x81\x14aJ\xa6W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aK\rW`\0\x80\xfd[a(\x97\x82aJ\xeaV[\x81Q\x81R` \x80\x83\x01Q\x90\x82\x01R`@\x81\x01a\x0e\x8eV[`\0\x80\x83`\x1f\x84\x01\x12aK?W`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aKVW`\0\x80\xfd[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15aEHW`\0\x80\xfd[`\0\x80`\0\x80`@\x85\x87\x03\x12\x15aK\x84W`\0\x80\xfd[\x845`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aK\x9bW`\0\x80\xfd[aK\xa7\x88\x83\x89\x01aHgV[\x90\x96P\x94P` \x87\x015\x91P\x80\x82\x11\x15aK\xc0W`\0\x80\xfd[PaK\xcd\x87\x82\x88\x01aK-V[\x95\x98\x94\x97P\x95PPPPV[cNH{q`\xe0\x1b`\0R`!`\x04R`$`\0\xfd[`\x03\x81\x10aL\rWcNH{q`\xe0\x1b`\0R`!`\x04R`$`\0\xfd[\x90RV[\x81Q\x81R` \x80\x83\x01Q`@\x83\x01\x91aL,\x90\x84\x01\x82aK\xefV[P\x92\x91PPV[\x805a\xff\xff\x81\x16\x81\x14aJ\xa6W`\0\x80\xfd[`\0``\x82\x84\x03\x12\x15aLWW`\0\x80\xfd[aL_aIeV[\x90P\x815aLl\x81aI\x05V[\x81RaLz` \x83\x01aL3V[` \x82\x01RaL\x8b`@\x83\x01aL3V[`@\x82\x01R\x92\x91PPV[`\0\x80`\x80\x83\x85\x03\x12\x15aL\xa9W`\0\x80\xfd[aL\xb2\x83aJ\xeaV[\x91PaL\xc1\x84` \x85\x01aLEV[\x90P\x92P\x92\x90PV[`\0\x80`\0`@\x84\x86\x03\x12\x15aL\xdfW`\0\x80\xfd[\x835aL\xea\x81aJ\x86V[\x92P` \x84\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aM\x05W`\0\x80\xfd[aM\x11\x86\x82\x87\x01aK-V[\x94\x97\x90\x96P\x93\x94PPPPV[`\0`\x01`\x01`@\x1b\x03\x82\x11\x15aM7WaM7aIOV[P`\x05\x1b` \x01\x90V[`\0`@\x82\x84\x03\x12\x15aMSW`\0\x80\xfd[aM[aI\x8dV[\x90PaMf\x82aJ\xeaV[\x81R` \x82\x015aMv\x81aJ\x86V[` \x82\x01R\x92\x91PPV[`\0\x80`\0\x80`\0`\xa0\x86\x88\x03\x12\x15aM\x99W`\0\x80\xfd[\x855aM\xa4\x81aJ\x86V[\x94P` \x86\x81\x015\x94P`@\x80\x88\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aM\xc8W`\0\x80\xfd[\x88\x01`\x1f\x81\x01\x8a\x13aM\xd9W`\0\x80\xfd[\x805aM\xecaM\xe7\x82aM\x1eV[aI\xafV[\x81\x81R`\x06\x91\x90\x91\x1b\x82\x01\x84\x01\x90\x84\x81\x01\x90\x8c\x83\x11\x15aN\x0bW`\0\x80\xfd[\x92\x85\x01\x92[\x82\x84\x10\x15aN1WaN\"\x8d\x85aMAV[\x82R\x92\x84\x01\x92\x90\x85\x01\x90aN\x10V[\x99\x9c\x98\x9bP\x98\x99``\x81\x015\x99P`\x80\x015\x97\x96PPPPPPPV[`\0a\x01\0\x82\x84\x03\x12\x15aNaW`\0\x80\xfd[P\x91\x90PV[`\0\x80\x83`\x1f\x84\x01\x12aNyW`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aN\x90W`\0\x80\xfd[` \x83\x01\x91P\x83` \x82`\x06\x1b\x85\x01\x01\x11\x15aEHW`\0\x80\xfd[`\0``\x82\x84\x03\x12\x15aN\xbdW`\0\x80\xfd[aN\xc5aIeV[\x90P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aN\xddW`\0\x80\xfd[\x82\x01`\x1f\x81\x01\x84\x13aN\xeeW`\0\x80\xfd[aN\xfd\x84\x825` \x84\x01aI\xdfV[\x82RP` \x82\x015` \x82\x01R`@\x82\x015`@\x82\x01R\x92\x91PPV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01\xa0\x8a\x8c\x03\x12\x15aO9W`\0\x80\xfd[\x895`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aOPW`\0\x80\xfd[aO\\\x8d\x83\x8e\x01aK-V[\x90\x9bP\x99P` \x8c\x015\x91P\x80\x82\x11\x15aOuW`\0\x80\xfd[aO\x81\x8d\x83\x8e\x01aK-V[\x90\x99P\x97P\x87\x91PaO\x96\x8d`@\x8e\x01aNNV[\x96Pa\x01@\x8c\x015\x91P\x80\x82\x11\x15aO\xadW`\0\x80\xfd[aO\xb9\x8d\x83\x8e\x01aNgV[\x90\x96P\x94Pa\x01`\x8c\x015\x91P\x80\x82\x11\x15aO\xd3W`\0\x80\xfd[aO\xdf\x8d\x83\x8e\x01aN\xabV[\x93Pa\x01\x80\x8c\x015\x91P\x80\x82\x11\x15aO\xf6W`\0\x80\xfd[PaP\x03\x8c\x82\x8d\x01aN\xabV[\x91PP\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80a\x01`\x87\x89\x03\x12\x15aP-W`\0\x80\xfd[\x865`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aPDW`\0\x80\xfd[aPP\x8a\x83\x8b\x01aK-V[\x90\x98P\x96P` \x89\x015\x91P\x80\x82\x11\x15aPiW`\0\x80\xfd[aPu\x8a\x83\x8b\x01aK-V[\x90\x96P\x94P\x84\x91PaP\x8a\x8a`@\x8b\x01aNNV[\x93Pa\x01@\x89\x015\x91P\x80\x82\x11\x15aP\xa1W`\0\x80\xfd[PaP\xae\x89\x82\x8a\x01aN\xabV[\x91PP\x92\x95P\x92\x95P\x92\x95V[`\0\x80`@\x83\x85\x03\x12\x15aP\xceW`\0\x80\xfd[\x825aP\xd9\x81aI\x05V[\x91P` \x83\x81\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aP\xf5W`\0\x80\xfd[\x84\x01`\x1f\x81\x01\x86\x13aQ\x06W`\0\x80\xfd[\x805aQ\x14aM\xe7\x82aM\x1eV[\x81\x81R`\x05\x91\x90\x91\x1b\x82\x01\x83\x01\x90\x83\x81\x01\x90\x88\x83\x11\x15aQ3W`\0\x80\xfd[\x92\x84\x01\x92[\x82\x84\x10\x15aQQW\x835\x82R\x92\x84\x01\x92\x90\x84\x01\x90aQ8V[\x80\x95PPPPPP\x92P\x92\x90PV[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15aQ\x9eW\x83Qc\xff\xff\xff\xff\x16\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01aQ|V[P\x90\x96\x95PPPPPPV[`\0\x80` \x83\x85\x03\x12\x15aQ\xbdW`\0\x80\xfd[\x825`\x01`\x01`@\x1b\x03\x81\x11\x15aQ\xd3W`\0\x80\xfd[aH\xe0\x85\x82\x86\x01aK-V[`\x01`\x01``\x1b\x03\x81\x16\x81\x14a\x0c\xc3W`\0\x80\xfd[`\0\x82`\x1f\x83\x01\x12aR\x05W`\0\x80\xfd[\x815` aR\x15aM\xe7\x83aM\x1eV[\x82\x81R`\x06\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aR4W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W`@\x81\x89\x03\x12\x15aRQW`\0\x80\x81\xfd[aRYaI\x8dV[\x815aRd\x81aJ\x86V[\x81R\x81\x85\x015aRs\x81aQ\xdfV[\x81\x86\x01R\x83R\x91\x83\x01\x91`@\x01aR8V[P\x96\x95PPPPPPV[`\0\x80`\0`\xa0\x84\x86\x03\x12\x15aR\xa5W`\0\x80\xfd[aR\xaf\x85\x85aLEV[\x92P``\x84\x015aR\xbf\x81aQ\xdfV[\x91P`\x80\x84\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aR\xdaW`\0\x80\xfd[aR\xe6\x86\x82\x87\x01aQ\xf4V[\x91PP\x92P\x92P\x92V[`\0\x82`\x1f\x83\x01\x12aS\x01W`\0\x80\xfd[\x815` aS\x11aM\xe7\x83aM\x1eV[\x82\x81R``\x92\x83\x02\x85\x01\x82\x01\x92\x82\x82\x01\x91\x90\x87\x85\x11\x15aS0W`\0\x80\xfd[\x83\x87\x01[\x85\x81\x10\x15aSSWaSF\x89\x82aLEV[\x84R\x92\x84\x01\x92\x81\x01aS4V[P\x90\x97\x96PPPPPPPV[`\0\x82`\x1f\x83\x01\x12aSqW`\0\x80\xfd[\x815` aS\x81aM\xe7\x83aM\x1eV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aS\xa0W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W\x805aS\xb7\x81aQ\xdfV[\x83R\x91\x83\x01\x91\x83\x01aS\xa4V[`\0\x82`\x1f\x83\x01\x12aS\xd5W`\0\x80\xfd[\x815` aS\xe5aM\xe7\x83aM\x1eV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aT\x04W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W\x805`\x01`\x01`@\x1b\x03\x81\x11\x15aT'W`\0\x80\x81\xfd[aT5\x89\x86\x83\x8b\x01\x01aQ\xf4V[\x84RP\x91\x83\x01\x91\x83\x01aT\x08V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8b\x03\x12\x15aT`W`\0\x80\xfd[aTi\x89aJ\x9bV[\x97PaTw` \x8a\x01aJ\x9bV[\x96PaT\x85`@\x8a\x01aJ\x9bV[\x95PaT\x93``\x8a\x01aJ\x9bV[\x94P`\x80\x89\x015\x93P`\xa0\x89\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aT\xb6W`\0\x80\xfd[aT\xc2\x8c\x83\x8d\x01aR\xf0V[\x94P`\xc0\x8b\x015\x91P\x80\x82\x11\x15aT\xd8W`\0\x80\xfd[aT\xe4\x8c\x83\x8d\x01aS`V[\x93P`\xe0\x8b\x015\x91P\x80\x82\x11\x15aT\xfaW`\0\x80\xfd[PaU\x07\x8b\x82\x8c\x01aS\xc4V[\x91PP\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[` \x81\x01a\x0e\x8e\x82\x84aK\xefV[` \x80\x82R`\x19\x90\x82\x01R\x7fPausable: index is paused\0\0\0\0\0\0\0`@\x82\x01R``\x01\x90V[cNH{q`\xe0\x1b`\0R`2`\x04R`$`\0\xfd[cNH{q`\xe0\x1b`\0R`\x11`\x04R`$`\0\xfd[`\0`\x01\x82\x01aU\x9aWaU\x9aaUrV[P`\x01\x01\x90V[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15aU\xc7W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01aU\xabV[P`\0` \x82\x86\x01\x01R` `\x1f\x19`\x1f\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R`\0a(\x97` \x83\x01\x84aU\xa1V[`\0` \x82\x84\x03\x12\x15aV\x0cW`\0\x80\xfd[\x81Qa(\x97\x81aJ\x86V[` \x80\x82R`*\x90\x82\x01R\x7fmsg.sender is not permissioned a`@\x82\x01Ri9\x90:\xb780\xba\xb9\xb2\xb9`\xb1\x1b``\x82\x01R`\x80\x01\x90V[`\0` \x82\x84\x03\x12\x15aVsW`\0\x80\xfd[\x81Q\x80\x15\x15\x81\x14a(\x97W`\0\x80\xfd[` \x80\x82R`(\x90\x82\x01R\x7fmsg.sender is not permissioned a`@\x82\x01Rg9\x9080\xba\xb9\xb2\xb9`\xc1\x1b``\x82\x01R`\x80\x01\x90V[`\0\x80\x835`\x1e\x19\x846\x03\x01\x81\x12aV\xe2W`\0\x80\xfd[\x83\x01\x805\x91P`\x01`\x01`@\x1b\x03\x82\x11\x15aV\xfcW`\0\x80\xfd[` \x01\x91P`\x05\x81\x90\x1b6\x03\x82\x13\x15aEHW`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aW&W`\0\x80\xfd[\x81Qa(\x97\x81aI\x05V[\x80\x82\x01\x80\x82\x11\x15a\x0e\x8eWa\x0e\x8eaUrV[`\0\x80\x85\x85\x11\x15aWTW`\0\x80\xfd[\x83\x86\x11\x15aWaW`\0\x80\xfd[PP\x82\x01\x93\x91\x90\x92\x03\x91PV[`\0`\xc0\x82\x01\x88\x83R` `\x01\x80`\xa0\x1b\x03\x80\x8a\x16\x82\x86\x01R`@\x89\x81\x87\x01R`\xc0``\x87\x01R\x83\x89Q\x80\x86R`\xe0\x88\x01\x91P\x84\x8b\x01\x95P`\0[\x81\x81\x10\x15aW\xd3W\x86Q\x80Q`\xff\x16\x84R\x86\x01Q\x85\x16\x86\x84\x01R\x95\x85\x01\x95\x91\x83\x01\x91`\x01\x01aW\xa9V[PP`\x80\x87\x01\x98\x90\x98RPPPP`\xa0\x90\x91\x01\x91\x90\x91RP\x94\x93PPPPV[`\0`@\x82\x84\x03\x12\x15aX\x05W`\0\x80\xfd[a(\x97\x83\x83aMAV[\x81\x81\x03\x81\x81\x11\x15a\x0e\x8eWa\x0e\x8eaUrV[`\x01\x80`\xa0\x1b\x03\x84\x16\x81R\x82` \x82\x01R```@\x82\x01R`\0aXI``\x83\x01\x84aU\xa1V[\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15aXdW`\0\x80\xfd[\x81Q`\x01`\x01`\xc0\x1b\x03\x81\x16\x81\x14a(\x97W`\0\x80\xfd[cNH{q`\xe0\x1b`\0R`\x12`\x04R`$`\0\xfd[`\0\x82aX\xa0WaX\xa0aX{V[P\x06\x90V[`\x01`\x01`\xa0\x1b\x03\x83\x16\x81R`@` \x82\x01\x81\x90R`\0\x90aJ~\x90\x83\x01\x84aU\xa1V[\x82\x81R`@` \x82\x01R`\0aJ~`@\x83\x01\x84aU\xa1V[`\0` \x82\x84\x03\x12\x15aX\xf4W`\0\x80\xfd[PQ\x91\x90PV[`\x01`\x01`\xa0\x1b\x03\x84\x16\x81Ra\x01`\x81\x01aY#` \x83\x01\x85\x805\x82R` \x90\x81\x015\x91\x01RV[aY=``\x83\x01`@\x86\x01\x805\x82R` \x90\x81\x015\x91\x01RV[`@`\x80\x85\x01`\xa0\x84\x017`@`\xc0\x85\x01`\xe0\x84\x017\x82Qa\x01 \x83\x01R` \x83\x01Qa\x01@\x83\x01RaJ~V[`\x01\x80`\xa0\x1b\x03\x83\x16\x81R`@` \x82\x01R`\0\x82Q```@\x84\x01RaY\x95`\xa0\x84\x01\x82aU\xa1V[\x90P` \x84\x01Q``\x84\x01R`@\x84\x01Q`\x80\x84\x01R\x80\x91PP\x93\x92PPPV[\x81\x83R\x81\x81` \x85\x017P`\0\x82\x82\x01` \x90\x81\x01\x91\x90\x91R`\x1f\x90\x91\x01`\x1f\x19\x16\x90\x91\x01\x01\x90V[`\x01`\x01`\xa0\x1b\x03\x84\x16\x81R`@` \x82\x01\x81\x90R`\0\x90aXI\x90\x83\x01\x84\x86aY\xb6V[`\x01\x80`\xa0\x1b\x03\x85\x16\x81R\x83` \x82\x01R```@\x82\x01R`\0a\x17\xe6``\x83\x01\x84\x86aY\xb6V[`\0\x82`\x1f\x83\x01\x12aZ=W`\0\x80\xfd[\x81Q` aZMaM\xe7\x83aM\x1eV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aZlW`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W\x80QaZ\x83\x81aQ\xdfV[\x83R\x91\x83\x01\x91\x83\x01aZpV[`\0\x80`@\x83\x85\x03\x12\x15aZ\xa3W`\0\x80\xfd[\x82Q`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aZ\xbaW`\0\x80\xfd[aZ\xc6\x86\x83\x87\x01aZ,V[\x93P` \x85\x01Q\x91P\x80\x82\x11\x15aZ\xdcW`\0\x80\xfd[PaZ\xe9\x85\x82\x86\x01aZ,V[\x91PP\x92P\x92\x90PV[\x83\x81R`@` \x82\x01R`\0aXI`@\x83\x01\x84\x86aY\xb6V[`\0` \x80\x83\x85\x03\x12\x15a[ W`\0\x80\xfd[\x82Q`\x01`\x01`@\x1b\x03\x81\x11\x15a[6W`\0\x80\xfd[\x83\x01`\x1f\x81\x01\x85\x13a[GW`\0\x80\xfd[\x80Qa[UaM\xe7\x82aM\x1eV[\x81\x81R`\x05\x91\x90\x91\x1b\x82\x01\x83\x01\x90\x83\x81\x01\x90\x87\x83\x11\x15a[tW`\0\x80\xfd[\x92\x84\x01\x92[\x82\x84\x10\x15a[\x9bW\x83Qa[\x8c\x81aI\x05V[\x82R\x92\x84\x01\x92\x90\x84\x01\x90a[yV[\x97\x96PPPPPPPV[`\0` \x82\x84\x03\x12\x15a[\xb8W`\0\x80\xfd[\x81Qa(\x97\x81aQ\xdfV[`\xff\x81\x81\x16\x83\x82\x16\x01\x90\x81\x11\x15a\x0e\x8eWa\x0e\x8eaUrV[`\0``\x82\x01`\xff\x86\x16\x83R` `\x01`\x01``\x1b\x03\x80\x87\x16\x82\x86\x01R`@``\x81\x87\x01R\x83\x87Q\x80\x86R`\x80\x88\x01\x91P\x84\x89\x01\x95P`\0[\x81\x81\x10\x15a\\EW\x86Q\x80Q`\x01`\x01`\xa0\x1b\x03\x16\x84R\x86\x01Q\x85\x16\x86\x84\x01R\x95\x85\x01\x95\x91\x83\x01\x91`\x01\x01a\\\x15V[P\x90\x9a\x99PPPPPPPPPPV[`\0a\xff\xff\x80\x83\x16\x81\x81\x03a\\lWa\\laUrV[`\x01\x01\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\\\x88W`\0\x80\xfd[\x81Q`\x01`\x01`\xe0\x1b\x03\x19\x81\x16\x81\x14a(\x97W`\0\x80\xfd[`\x01`\x01``\x1b\x03\x81\x81\x16\x83\x82\x16\x02\x80\x82\x16\x91\x90\x82\x81\x14a\\\xc3Wa\\\xc3aUrV[PP\x92\x91PPV[`\0`\x01`\x01``\x1b\x03\x80\x84\x16\x80a\\\xe5Wa\\\xe5aX{V[\x92\x16\x91\x90\x91\x04\x92\x91PPV\xfeRegistryCoordinator.updateOperatRegistryCoordinator._validateChu0dNr\xe11\xa0)\xb8PE\xb6\x81\x81X]\x97\x81j\x91hq\xca\x8d< \x8c\x16\xd8|\xfdG\xa2dipfsX\"\x12 \x8d\x8bM\xfd\xe0S\xd8X7\xf1EJ\xd3)\xa5\x13C\xc7]q\x8d\x88\xd96*\x8d\"\xcc\xe0$c\xb6dsolcC\0\x08\x14\03"); + #[doc = r" The runtime bytecode of the contract, as deployed on the network."] + #[doc = r""] + #[doc = r" ```text"] + #[doc = "0x608060405234801561001057600080fd5b50600436106102945760003560e01c80635df45946116101675780639feab859116100ce578063d75b4c8811610087578063d75b4c88146106f5578063dd8283f314610708578063e65797ad1461071b578063f2fde38b146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b80639feab85914610659578063a50857bf14610680578063c391425e14610693578063ca0de882146106b3578063ca4f2d97146106da578063d72d8dd6146106ed57600080fd5b8063871ef04911610120578063871ef049146105cc578063886f1195146105df5780638da5cb5b146105f85780639aa1653d146106005780639b5d177b1461061f5780639e9923c21461063257600080fd5b80635df459461461053d5780636347c9001461056457806368304835146105775780636e3b17db1461059e578063715018a6146105b157806384ca5213146105b957600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104c85780635865c60c146104db578063595c6a67146104fb5780635ac86ab7146105035780635b0b829f146105225780635c975abb1461053557600080fd5b806328f61b3114610435578063296bb0641461044857806329d1e0c31461045b5780632cdd1e861461046e5780633998fdd3146104815780633c2a7f4c146104a857600080fd5b806310d67a2f1161025d57806310d67a2f1461034a57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c421461041557600080fd5b8062cf2ab51461029957806303fd3492146102ae57806304ec6351146102e1578063054310e61461030c5780630cf4b76714610337575b600080fd5b6102ac6102a73660046148ab565b610820565b005b6102ce6102bc3660046148ec565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102f46102ef366004614917565b610935565b6040516001600160c01b0390911681526020016102d8565b609d5461031f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d8565b6102ac610345366004614a36565b610b2b565b6102ac610358366004614aab565b610c13565b6102ce61036b366004614aab565b6001600160a01b031660009081526099602052604090205490565b6102ac6103943660046148ec565b610cc6565b6103bc6103a73660046148ec565b609a6020526000908152604090205460ff1681565b60405190151581526020016102d8565b6103df6103da366004614ac8565b610e03565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102d8565b6102ce610423366004614afb565b609b6020526000908152604090205481565b609e5461031f906001600160a01b031681565b61031f6104563660046148ec565b610e94565b6102ac610469366004614aab565b610f20565b6102ac61047c366004614aab565b610f31565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6104bb6104b6366004614aab565b610f42565b6040516102d89190614b16565b6102ac6104d6366004614b6e565b610fc1565b6104ee6104e9366004614aab565b6114d1565b6040516102d89190614c11565b6102ac611545565b6103bc610511366004614afb565b6001805460ff9092161b9081161490565b6102ac610530366004614c96565b611611565b6001546102ce565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b61031f6105723660046148ec565b6116a8565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ac6105ac366004614cca565b6116d2565b6102ac611792565b6102ce6105c7366004614d81565b6117a6565b6102f46105da3660046148ec565b6117f0565b60005461031f906201000090046001600160a01b031681565b61031f6117fb565b60965461060d9060ff1681565b60405160ff90911681526020016102d8565b6102ac61062d366004614f1a565b611814565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ce7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102ac61068e366004615013565b611b4b565b6106a66106a13660046150bb565b611cce565b6040516102d89190615160565b6102ce7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b6102ac6106e83660046151aa565b611d87565b609c546102ce565b6102ac610703366004615290565b611ded565b6102ac610716366004615443565b611e00565b61078a610729366004614afb565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff9081169183019190915292820151909216908201526060016102d8565b6102ac6107cc366004614aab565b612104565b6102ac6107df3660046148ec565b61217a565b6108136107f2366004614aab565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102d89190615517565b6001546002906004908116036108515760405162461bcd60e51b815260040161084890615525565b60405180910390fd5b60005b8281101561092f5760008484838181106108705761087061555c565b90506020020160208101906108859190614aab565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156108d0576108d0614bd9565b60028111156108e1576108e1614bd9565b905250805190915060006108f4826122d6565b9050600061090a826001600160c01b0316612341565b905061091785858361240d565b5050505050808061092790615588565b915050610854565b50505050565b60008381526098602052604081208054829190849081106109585761095861555c565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610a525760405162461bcd60e51b815260206004820152606560248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c401610848565b602081015163ffffffff161580610a785750806020015163ffffffff168463ffffffff16105b610b1f5760405162461bcd60e51b815260206004820152606660248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c401610848565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610b5457610b54614bd9565b14610bc75760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f742072656769737465726564000000006064820152608401610848565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c089084906155e7565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906155fa565b6001600160a01b0316336001600160a01b031614610cba5760405162461bcd60e51b815260040161084890615617565b610cc3816124fa565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190615661565b610d535760405162461bcd60e51b815260040161084890615683565b60015481811614610dcc5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610848565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c08565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e4057610e4061555c565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015610efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e91906155fa565b610f286125ff565b610cc38161265e565b610f396125ff565b610cc3816126c7565b6040805180820190915260008082526020820152610e8e610fbc7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610fa19291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120612730565b61277e565b600154600290600490811603610fe95760405162461bcd60e51b815260040161084890615525565b600061103184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff16915061280d9050565b90508483146110a25760405162461bcd60e51b81526020600482015260436024820152600080516020615cf283398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610848565b60005b838110156114c85760008585838181106110c1576110c161555c565b919091013560f81c915036905060008989858181106110e2576110e261555c565b90506020028101906110f491906156cb565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f341092290602401602060405180830381865afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111849190615714565b63ffffffff1681146112205760405162461bcd60e51b81526020600482015260656024820152600080516020615cf283398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c401610848565b6000805b828110156114675760008484838181106112405761124061555c565b90506020020160208101906112559190614aab565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156112a0576112a0614bd9565b60028111156112b1576112b1614bd9565b905250805190915060006112c4826122d6565b905060016001600160c01b03821660ff8b161c8116146113485760405162461bcd60e51b815260206004820152604460248201819052600080516020615cf2833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a401610848565b856001600160a01b0316846001600160a01b0316116113f35760405162461bcd60e51b81526020600482015260676024820152600080516020615cf283398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c401610848565b5061145183838f8f8d908e600161140a9190615731565b9261141793929190615744565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061240d92505050565b50909250611460905081615588565b9050611224565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a250505050806114c190615588565b90506110a5565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff16600281111561152b5761152b614bd9565b600281111561153c5761153c614bd9565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b69190615661565b6115d25760405162461bcd60e51b815260040161084890615683565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6116196125ff565b609654829060ff908116908216106116995760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d45786973747360448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610848565b6116a3838361289e565b505050565b609c81815481106116b857600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146117525760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f720000000000006064820152608401610848565b6116a38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294b92505050565b61179a6125ff565b6117a46000612dbd565b565b60006117e67f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a8787878787604051602001610fa19695949392919061576e565b9695505050505050565b6000610e8e826122d6565b600061180f6064546001600160a01b031690565b905090565b600180546000919081160361183b5760405162461bcd60e51b815260040161084890615525565b8389146118be5760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610848565b60006118ca3388612e0f565b905061192a33828888808060200260200160405190810160405280939291908181526020016000905b8282101561191f57611910604083028601368190038101906157f3565b815260200190600101906118f3565b505050505087612f44565b600061197133838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506130d1915050565b905060005b8b811015611b3c576000609760008f8f858181106119965761199661555c565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110611a0357611a0361555c565b602002602001015163ffffffff161115611b2957611aa48e8e84818110611a2c57611a2c61555c565b9050013560f81c60f81b60f81c84604001518481518110611a4f57611a4f61555c565b60200260200101513386602001518681518110611a6e57611a6e61555c565b60200260200101518d8d88818110611a8857611a8861555c565b905060400201803603810190611a9e91906157f3565b866135e8565b611b29898984818110611ab957611ab961555c565b9050604002016020016020810190611ad19190614aab565b8f8f8590866001611ae29190615731565b92611aef93929190615744565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294b92505050565b5080611b3481615588565b915050611976565b50505050505050505050505050565b6001805460009190811603611b725760405162461bcd60e51b815260040161084890615525565b6000611b7e3385612e0f565b90506000611bc733838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506130d1915050565b51905060005b88811015611cc25760008a8a83818110611be957611be961555c565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110611c1f57611c1f61555c565b602002602001015163ffffffff161115611caf5760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a401610848565b5080611cba81615588565b915050611bcd565b50505050505050505050565b6060600082516001600160401b03811115611ceb57611ceb61494f565b604051908082528060200260200182016040528015611d14578160200160208202803683370190505b50905060005b8351811015611d7f57611d4685858381518110611d3957611d3961555c565b60200260200101516138bc565b828281518110611d5857611d5861555c565b63ffffffff9092166020928302919091019091015280611d7781615588565b915050611d1a565b509392505050565b60018054600290811603611dad5760405162461bcd60e51b815260040161084890615525565b6116a33384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061294b92505050565b611df56125ff565b6116a38383836139f8565b600054610100900460ff1615808015611e205750600054600160ff909116105b80611e3a5750303b158015611e3a575060005460ff166001145b611e9d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610848565b6000805460ff191660011790558015611ec0576000805461ff0019166101001790555b82518451148015611ed2575081518351145b611f3c5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610848565b611f4589612dbd565b611f4f8686613c0f565b611f588861265e565b611f61876126c7565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000000000000000000000000000000000000000000000841690831617905585549384019095559190920180547f000000000000000000000000000000000000000000000000000000000000000090921691909316179091555b84518110156120b2576120a085828151811061205f5761205f61555c565b60200260200101518583815181106120795761207961555c565b60200260200101518584815181106120935761209361555c565b60200260200101516139f8565b806120aa81615588565b915050612041565b5080156120f9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61210c6125ff565b6001600160a01b0381166121715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610848565b610cc381612dbd565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f191906155fa565b6001600160a01b0316336001600160a01b0316146122215760405162461bcd60e51b815260040161084890615617565b60015419811960015419161461229f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610848565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c08565b6000818152609860205260408120548082036122f55750600092915050565b600083815260986020526040902061230e60018361580f565b8154811061231e5761231e61555c565b600091825260209091200154600160401b90046001600160c01b03169392505050565b606060008061234f84613cff565b61ffff166001600160401b0381111561236a5761236a61494f565b6040519080825280601f01601f191660200182016040528015612394576020820181803683370190505b5090506000805b8251821080156123ac575061010081105b15612403576001811b9350858416156123f3578060f81b8383815181106123d5576123d561555c565b60200101906001600160f81b031916908160001a9053508160010191505b6123fc81615588565b905061239b565b5090949350505050565b60018260200151600281111561242557612425614bd9565b1461242f57505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366acfefe9061248490889086908890600401615822565b6020604051808303816000875af11580156124a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c79190615852565b90506001600160c01b038116156124f3576124f3856124ee836001600160c01b0316612341565b61294b565b5050505050565b6001600160a01b0381166125885760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610848565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336126086117fb565b6001600160a01b0316146117a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610848565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8e61273d613d2a565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6040805180820190915260008082526020820152600080806127ae600080516020615d3283398151915286615891565b90505b6127ba81613e51565b9093509150600080516020615d3283398151915282830983036127f3576040805180820190915290815260208101919091529392505050565b600080516020615d328339815191526001820890506127b1565b60008061281984613ed3565b9050808360ff166001901b116128975760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610848565b9392505050565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff16600281111561297f5761297f614bd9565b146129fe5760405162461bcd60e51b815260206004820152604360248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a401610848565b609654600090612a1290859060ff1661280d565b90506000612a1f836122d6565b90506001600160c01b038216612a9d5760405162461bcd60e51b815260206004820152603b60248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206269746d61702063616e6e6f74206265203000000000006064820152608401610848565b612ab46001600160c01b0383811690831681161490565b612b4c5760405162461bcd60e51b815260206004820152605960248201527f5265676973747279436f6f7264696e61746f722e5f646572656769737465724f60448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527f72656420666f72207370656369666965642071756f72756d7300000000000000608482015260a401610848565b6001600160c01b0382811619821616612b658482614063565b6001600160c01b038116612c345760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401600060405180830381600087803b158015612be557600080fd5b505af1158015612bf9573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f4e24fe590612c82908a908a906004016158a5565b600060405180830381600087803b158015612c9c57600080fd5b505af1158015612cb0573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612d029087908a906004016158c9565b600060405180830381600087803b158015612d1c57600080fd5b505af1158015612d30573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612d829087908a906004016158c9565b600060405180830381600087803b158015612d9c57600080fd5b505af1158015612db0573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906313542a4e90602401602060405180830381865afa158015612e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9e91906158e2565b90506000819003610e8e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bf79ce588484612ee387610f42565b6040518463ffffffff1660e01b8152600401612f01939291906158fb565b6020604051808303816000875af1158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289791906158e2565b6020808201516000908152609a909152604090205460ff1615612fea5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a401610848565b428160400151101561307f5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a401610848565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161092f926001600160a01b03909216916130ca91889188918891906117a6565b8351614224565b6130f560405180606001604052806060815260200160608152602001606081525090565b600061313d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff16915061280d9050565b9050600061314a886122d6565b90506001600160c01b0382166131c85760405162461bcd60e51b815260206004820152603960248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206269746d61702063616e6e6f742062652030000000000000006064820152608401610848565b8082166001600160c01b03161561327e5760405162461bcd60e51b815260206004820152606860248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c401610848565b6001600160c01b03818116908316176132978982614063565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516132c791906155e7565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561330157613301614bd9565b1461341a576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff19169083600281111561335c5761335c614bd9565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169150639926ee7d906133b1908d90899060040161596b565b600060405180830381600087803b1580156133cb57600080fd5b505af11580156133df573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633fb279529061346a908d908c908c906004016159df565b600060405180830381600087803b15801561348457600080fd5b505af1158015613498573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250632550477791506134ee908d908d908d908d90600401615a04565b6000604051808303816000875af115801561350d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135359190810190615a90565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062bff04d90613592908c908c908c90600401615af3565b6000604051808303816000875af11580156135b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135d99190810190615b0d565b84525050509695505050505050565b6020808301516001600160a01b03808216600081815260999094526040909320549192908716036136675760405162461bcd60e51b81526020600482015260356024820152600080516020615d1283398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b6064820152608401610848565b8760ff16846000015160ff16146136e45760405162461bcd60e51b81526020600482015260476024820152600080516020615d1283398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a401610848565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635401ed2790604401602060405180830381865afa158015613755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137799190615ba6565b905061378581856143de565b6001600160601b0316866001600160601b0316116138185760405162461bcd60e51b81526020600482015260566024820152600080516020615d1283398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a401610848565b6138228885614402565b6001600160601b0316816001600160601b0316106120f95760405162461bcd60e51b815260206004820152605c6024820152600080516020615d1283398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a401610848565b600081815260986020526040812054815b8181101561394e5760016138e1828461580f565b6138eb919061580f565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff168154811061391e5761391e61555c565b60009182526020909120015463ffffffff161161393c575050610e8e565b8061394681615588565b9150506138cd565b5060405162461bcd60e51b815260206004820152606c60248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c401610848565b60965460ff1660c08110613a6c5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b6064820152608401610848565b613a77816001615bc3565b6096805460ff191660ff9290921691909117905580613a96818661289e565b60405160016296b58960e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ff694a7790613ae990849088908890600401615bdc565b600060405180830381600087803b158015613b0357600080fd5b505af1158015613b17573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613b7f57600080fd5b505af1158015613b93573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613bfb57600080fd5b505af11580156120f9573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015613c3657506001600160a01b03821615155b613cb85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610848565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613cfb826124fa565b5050565b6000805b8215610e8e57613d1460018461580f565b9092169180613d2281615c55565b915050613d03565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613d8357507f000000000000000000000000000000000000000000000000000000000000000046145b15613dad57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615d328339815191526003600080516020615d3283398151915286600080516020615d32833981519152888909090890506000613ec7827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615d3283398151915261441c565b91959194509092505050565b600061010082511115613f5c5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610848565b8151600003613f6d57506000919050565b60008083600081518110613f8357613f8361555c565b0160200151600160f89190911c81901b92505b845181101561405a57848181518110613fb157613fb161555c565b0160200151600160f89190911c1b91508282116140465760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610848565b9181179161405381615588565b9050613f96565b50909392505050565b6000828152609860205260408120549081900361410b576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b600083815260986020526040812061412460018461580f565b815481106141345761413461555c565b6000918252602090912001805490915063ffffffff4381169116036141765780546001600160401b0316600160401b6001600160c01b0385160217815561092f565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561433e57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061426490869086906004016158c9565b602060405180830381865afa158015614281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142a59190615c76565b6001600160e01b031916146116a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610848565b826001600160a01b031661435283836144c5565b6001600160a01b0316146116a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610848565b6020810151600090612710906143f89061ffff1685615ca0565b6128979190615ccb565b6040810151600090612710906143f89061ffff1685615ca0565b60008061442761482b565b61442f614849565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061446c57fe5b50826144ba5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610848565b505195945050505050565b60008060006144d485856144e1565b91509150611d7f8161454f565b60008082516041036145175760208301516040840151606085015160001a61450b87828585614705565b94509450505050614548565b825160400361454057602083015160408401516145358683836147f2565b935093505050614548565b506000905060025b9250929050565b600081600481111561456357614563614bd9565b0361456b5750565b600181600481111561457f5761457f614bd9565b036145cc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610848565b60028160048111156145e0576145e0614bd9565b0361462d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610848565b600381600481111561464157614641614bd9565b036146995760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610848565b60048160048111156146ad576146ad614bd9565b03610cc35760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610848565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561473c57506000905060036147e9565b8460ff16601b1415801561475457508460ff16601c14155b1561476557506000905060046147e9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156147b9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147e2576000600192509250506147e9565b9150600090505b94509492505050565b6000806001600160ff1b0383168161480f60ff86901c601b615731565b905061481d87828885614705565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f84011261487957600080fd5b5081356001600160401b0381111561489057600080fd5b6020830191508360208260051b850101111561454857600080fd5b600080602083850312156148be57600080fd5b82356001600160401b038111156148d457600080fd5b6148e085828601614867565b90969095509350505050565b6000602082840312156148fe57600080fd5b5035919050565b63ffffffff81168114610cc357600080fd5b60008060006060848603121561492c57600080fd5b83359250602084013561493e81614905565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156149875761498761494f565b60405290565b604080519081016001600160401b03811182821017156149875761498761494f565b604051601f8201601f191681016001600160401b03811182821017156149d7576149d761494f565b604052919050565b60006001600160401b038311156149f8576149f861494f565b614a0b601f8401601f19166020016149af565b9050828152838383011115614a1f57600080fd5b828260208301376000602084830101529392505050565b600060208284031215614a4857600080fd5b81356001600160401b03811115614a5e57600080fd5b8201601f81018413614a6f57600080fd5b614a7e848235602084016149df565b949350505050565b6001600160a01b0381168114610cc357600080fd5b8035614aa681614a86565b919050565b600060208284031215614abd57600080fd5b813561289781614a86565b60008060408385031215614adb57600080fd5b50508035926020909101359150565b803560ff81168114614aa657600080fd5b600060208284031215614b0d57600080fd5b61289782614aea565b815181526020808301519082015260408101610e8e565b60008083601f840112614b3f57600080fd5b5081356001600160401b03811115614b5657600080fd5b60208301915083602082850101111561454857600080fd5b60008060008060408587031215614b8457600080fd5b84356001600160401b0380821115614b9b57600080fd5b614ba788838901614867565b90965094506020870135915080821115614bc057600080fd5b50614bcd87828801614b2d565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614c0d57634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614c2c90840182614bef565b5092915050565b803561ffff81168114614aa657600080fd5b600060608284031215614c5757600080fd5b614c5f614965565b90508135614c6c81614905565b8152614c7a60208301614c33565b6020820152614c8b60408301614c33565b604082015292915050565b60008060808385031215614ca957600080fd5b614cb283614aea565b9150614cc18460208501614c45565b90509250929050565b600080600060408486031215614cdf57600080fd5b8335614cea81614a86565b925060208401356001600160401b03811115614d0557600080fd5b614d1186828701614b2d565b9497909650939450505050565b60006001600160401b03821115614d3757614d3761494f565b5060051b60200190565b600060408284031215614d5357600080fd5b614d5b61498d565b9050614d6682614aea565b81526020820135614d7681614a86565b602082015292915050565b600080600080600060a08688031215614d9957600080fd5b8535614da481614a86565b945060208681013594506040808801356001600160401b03811115614dc857600080fd5b8801601f81018a13614dd957600080fd5b8035614dec614de782614d1e565b6149af565b81815260069190911b8201840190848101908c831115614e0b57600080fd5b928501925b82841015614e3157614e228d85614d41565b82529284019290850190614e10565b999c989b5098996060810135995060800135979650505050505050565b60006101008284031215614e6157600080fd5b50919050565b60008083601f840112614e7957600080fd5b5081356001600160401b03811115614e9057600080fd5b6020830191508360208260061b850101111561454857600080fd5b600060608284031215614ebd57600080fd5b614ec5614965565b905081356001600160401b03811115614edd57600080fd5b8201601f81018413614eee57600080fd5b614efd848235602084016149df565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f3957600080fd5b89356001600160401b0380821115614f5057600080fd5b614f5c8d838e01614b2d565b909b50995060208c0135915080821115614f7557600080fd5b614f818d838e01614b2d565b9099509750879150614f968d60408e01614e4e565b96506101408c0135915080821115614fad57600080fd5b614fb98d838e01614e67565b90965094506101608c0135915080821115614fd357600080fd5b614fdf8d838e01614eab565b93506101808c0135915080821115614ff657600080fd5b506150038c828d01614eab565b9150509295985092959850929598565b600080600080600080610160878903121561502d57600080fd5b86356001600160401b038082111561504457600080fd5b6150508a838b01614b2d565b9098509650602089013591508082111561506957600080fd5b6150758a838b01614b2d565b909650945084915061508a8a60408b01614e4e565b93506101408901359150808211156150a157600080fd5b506150ae89828a01614eab565b9150509295509295509295565b600080604083850312156150ce57600080fd5b82356150d981614905565b91506020838101356001600160401b038111156150f557600080fd5b8401601f8101861361510657600080fd5b8035615114614de782614d1e565b81815260059190911b8201830190838101908883111561513357600080fd5b928401925b8284101561515157833582529284019290840190615138565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561519e57835163ffffffff168352928401929184019160010161517c565b50909695505050505050565b600080602083850312156151bd57600080fd5b82356001600160401b038111156151d357600080fd5b6148e085828601614b2d565b6001600160601b0381168114610cc357600080fd5b600082601f83011261520557600080fd5b81356020615215614de783614d1e565b82815260069290921b8401810191818101908684111561523457600080fd5b8286015b8481101561528557604081890312156152515760008081fd5b61525961498d565b813561526481614a86565b815281850135615273816151df565b81860152835291830191604001615238565b509695505050505050565b600080600060a084860312156152a557600080fd5b6152af8585614c45565b925060608401356152bf816151df565b915060808401356001600160401b038111156152da57600080fd5b6152e6868287016151f4565b9150509250925092565b600082601f83011261530157600080fd5b81356020615311614de783614d1e565b8281526060928302850182019282820191908785111561533057600080fd5b8387015b85811015615353576153468982614c45565b8452928401928101615334565b5090979650505050505050565b600082601f83011261537157600080fd5b81356020615381614de783614d1e565b82815260059290921b840181019181810190868411156153a057600080fd5b8286015b848110156152855780356153b7816151df565b83529183019183016153a4565b600082601f8301126153d557600080fd5b813560206153e5614de783614d1e565b82815260059290921b8401810191818101908684111561540457600080fd5b8286015b848110156152855780356001600160401b038111156154275760008081fd5b6154358986838b01016151f4565b845250918301918301615408565b600080600080600080600080610100898b03121561546057600080fd5b61546989614a9b565b975061547760208a01614a9b565b965061548560408a01614a9b565b955061549360608a01614a9b565b94506080890135935060a08901356001600160401b03808211156154b657600080fd5b6154c28c838d016152f0565b945060c08b01359150808211156154d857600080fd5b6154e48c838d01615360565b935060e08b01359150808211156154fa57600080fd5b506155078b828c016153c4565b9150509295985092959890939650565b60208101610e8e8284614bef565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161559a5761559a615572565b5060010190565b6000815180845260005b818110156155c7576020818501810151868301820152016155ab565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061289760208301846155a1565b60006020828403121561560c57600080fd5b815161289781614a86565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561567357600080fd5b8151801515811461289757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e198436030181126156e257600080fd5b8301803591506001600160401b038211156156fc57600080fd5b6020019150600581901b360382131561454857600080fd5b60006020828403121561572657600080fd5b815161289781614905565b80820180821115610e8e57610e8e615572565b6000808585111561575457600080fd5b8386111561576157600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a16828601526040898187015260c0606087015283895180865260e088019150848b01955060005b818110156157d3578651805160ff16845286015185168684015295850195918301916001016157a9565b505060808701989098525050505060a09091019190915250949350505050565b60006040828403121561580557600080fd5b6128978383614d41565b81810381811115610e8e57610e8e615572565b60018060a01b038416815282602082015260606040820152600061584960608301846155a1565b95945050505050565b60006020828403121561586457600080fd5b81516001600160c01b038116811461289757600080fd5b634e487b7160e01b600052601260045260246000fd5b6000826158a0576158a061587b565b500690565b6001600160a01b0383168152604060208201819052600090614a7e908301846155a1565b828152604060208201526000614a7e60408301846155a1565b6000602082840312156158f457600080fd5b5051919050565b6001600160a01b03841681526101608101615923602083018580358252602090810135910152565b61593d606083016040860180358252602090810135910152565b60406080850160a0840137604060c0850160e084013782516101208301526020830151610140830152614a7e565b60018060a01b038316815260406020820152600082516060604084015261599560a08401826155a1565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038416815260406020820181905260009061584990830184866159b6565b60018060a01b03851681528360208201526060604082015260006117e66060830184866159b6565b600082601f830112615a3d57600080fd5b81516020615a4d614de783614d1e565b82815260059290921b84018101918181019086841115615a6c57600080fd5b8286015b84811015615285578051615a83816151df565b8352918301918301615a70565b60008060408385031215615aa357600080fd5b82516001600160401b0380821115615aba57600080fd5b615ac686838701615a2c565b93506020850151915080821115615adc57600080fd5b50615ae985828601615a2c565b9150509250929050565b8381526040602082015260006158496040830184866159b6565b60006020808385031215615b2057600080fd5b82516001600160401b03811115615b3657600080fd5b8301601f81018513615b4757600080fd5b8051615b55614de782614d1e565b81815260059190911b82018301908381019087831115615b7457600080fd5b928401925b82841015615b9b578351615b8c81614905565b82529284019290840190615b79565b979650505050505050565b600060208284031215615bb857600080fd5b8151612897816151df565b60ff8181168382160190811115610e8e57610e8e615572565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615c4557865180516001600160a01b031684528601518516868401529585019591830191600101615c15565b50909a9950505050505050505050565b600061ffff808316818103615c6c57615c6c615572565b6001019392505050565b600060208284031215615c8857600080fd5b81516001600160e01b03198116811461289757600080fd5b6001600160601b03818116838216028082169190828114615cc357615cc3615572565b505092915050565b60006001600160601b0380841680615ce557615ce561587b565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c696461746543687530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d8b4dfde053d85837f1454ad329a51343c75d718d88d9362a8d22cce02463b664736f6c63430008140033"] + #[doc = r" ```"] + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xfd[P`\x046\x10a\x02\x94W`\05`\xe0\x1c\x80c]\xf4YF\x11a\x01gW\x80c\x9f\xea\xb8Y\x11a\0\xceW\x80c\xd7[L\x88\x11a\0\x87W\x80c\xd7[L\x88\x14a\x06\xf5W\x80c\xdd\x82\x83\xf3\x14a\x07\x08W\x80c\xe6W\x97\xad\x14a\x07\x1bW\x80c\xf2\xfd\xe3\x8b\x14a\x07\xbeW\x80c\xfa\xbc\x1c\xbc\x14a\x07\xd1W\x80c\xfd9\x10Z\x14a\x07\xe4W`\0\x80\xfd[\x80c\x9f\xea\xb8Y\x14a\x06YW\x80c\xa5\x08W\xbf\x14a\x06\x80W\x80c\xc3\x91B^\x14a\x06\x93W\x80c\xca\r\xe8\x82\x14a\x06\xb3W\x80c\xcaO-\x97\x14a\x06\xdaW\x80c\xd7-\x8d\xd6\x14a\x06\xedW`\0\x80\xfd[\x80c\x87\x1e\xf0I\x11a\x01 W\x80c\x87\x1e\xf0I\x14a\x05\xccW\x80c\x88o\x11\x95\x14a\x05\xdfW\x80c\x8d\xa5\xcb[\x14a\x05\xf8W\x80c\x9a\xa1e=\x14a\x06\0W\x80c\x9b]\x17{\x14a\x06\x1fW\x80c\x9e\x99#\xc2\x14a\x062W`\0\x80\xfd[\x80c]\xf4YF\x14a\x05=W\x80ccG\xc9\0\x14a\x05dW\x80ch0H5\x14a\x05wW\x80cn;\x17\xdb\x14a\x05\x9eW\x80cqP\x18\xa6\x14a\x05\xb1W\x80c\x84\xcaR\x13\x14a\x05\xb9W`\0\x80\xfd[\x80c(\xf6\x1b1\x11a\x02\x0bW\x80cQ@\xa5H\x11a\x01\xc4W\x80cQ@\xa5H\x14a\x04\xc8W\x80cXe\xc6\x0c\x14a\x04\xdbW\x80cY\\jg\x14a\x04\xfbW\x80cZ\xc8j\xb7\x14a\x05\x03W\x80c[\x0b\x82\x9f\x14a\x05\"W\x80c\\\x97Z\xbb\x14a\x055W`\0\x80\xfd[\x80c(\xf6\x1b1\x14a\x045W\x80c)k\xb0d\x14a\x04HW\x80c)\xd1\xe0\xc3\x14a\x04[W\x80c,\xdd\x1e\x86\x14a\x04nW\x80c9\x98\xfd\xd3\x14a\x04\x81W\x80c<*\x7fL\x14a\x04\xa8W`\0\x80\xfd[\x80c\x10\xd6z/\x11a\x02]W\x80c\x10\xd6z/\x14a\x03JW\x80c\x13T*N\x14a\x03]W\x80c\x13d9\xdd\x14a\x03\x86W\x80c\x14x\x85\x1f\x14a\x03\x99W\x80c\x1e\xb8\x12\xda\x14a\x03\xccW\x80c$\x9a\x0cB\x14a\x04\x15W`\0\x80\xfd[\x80b\xcf*\xb5\x14a\x02\x99W\x80c\x03\xfd4\x92\x14a\x02\xaeW\x80c\x04\xeccQ\x14a\x02\xe1W\x80c\x05C\x10\xe6\x14a\x03\x0cW\x80c\x0c\xf4\xb7g\x14a\x037W[`\0\x80\xfd[a\x02\xaca\x02\xa76`\x04aH\xabV[a\x08 V[\0[a\x02\xcea\x02\xbc6`\x04aH\xecV[`\0\x90\x81R`\x98` R`@\x90 T\x90V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xf3[a\x02\xf4a\x02\xef6`\x04aI\x17V[a\t5V[`@Q`\x01`\x01`\xc0\x1b\x03\x90\x91\x16\x81R` \x01a\x02\xd8V[`\x9dTa\x03\x1f\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[`@Q`\x01`\x01`\xa0\x1b\x03\x90\x91\x16\x81R` \x01a\x02\xd8V[a\x02\xaca\x03E6`\x04aJ6V[a\x0b+V[a\x02\xaca\x03X6`\x04aJ\xabV[a\x0c\x13V[a\x02\xcea\x03k6`\x04aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x16`\0\x90\x81R`\x99` R`@\x90 T\x90V[a\x02\xaca\x03\x946`\x04aH\xecV[a\x0c\xc6V[a\x03\xbca\x03\xa76`\x04aH\xecV[`\x9a` R`\0\x90\x81R`@\x90 T`\xff\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\x02\xd8V[a\x03\xdfa\x03\xda6`\x04aJ\xc8V[a\x0e\x03V[`@\x80Q\x82Qc\xff\xff\xff\xff\x90\x81\x16\x82R` \x80\x85\x01Q\x90\x91\x16\x90\x82\x01R\x91\x81\x01Q`\x01`\x01`\xc0\x1b\x03\x16\x90\x82\x01R``\x01a\x02\xd8V[a\x02\xcea\x04#6`\x04aJ\xfbV[`\x9b` R`\0\x90\x81R`@\x90 T\x81V[`\x9eTa\x03\x1f\x90`\x01`\x01`\xa0\x1b\x03\x16\x81V[a\x03\x1fa\x04V6`\x04aH\xecV[a\x0e\x94V[a\x02\xaca\x04i6`\x04aJ\xabV[a\x0f V[a\x02\xaca\x04|6`\x04aJ\xabV[a\x0f1V[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x04\xbba\x04\xb66`\x04aJ\xabV[a\x0fBV[`@Qa\x02\xd8\x91\x90aK\x16V[a\x02\xaca\x04\xd66`\x04aKnV[a\x0f\xc1V[a\x04\xeea\x04\xe96`\x04aJ\xabV[a\x14\xd1V[`@Qa\x02\xd8\x91\x90aL\x11V[a\x02\xaca\x15EV[a\x03\xbca\x05\x116`\x04aJ\xfbV[`\x01\x80T`\xff\x90\x92\x16\x1b\x90\x81\x16\x14\x90V[a\x02\xaca\x0506`\x04aL\x96V[a\x16\x11V[`\x01Ta\x02\xceV[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x03\x1fa\x05r6`\x04aH\xecV[a\x16\xa8V[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x02\xaca\x05\xac6`\x04aL\xcaV[a\x16\xd2V[a\x02\xaca\x17\x92V[a\x02\xcea\x05\xc76`\x04aM\x81V[a\x17\xa6V[a\x02\xf4a\x05\xda6`\x04aH\xecV[a\x17\xf0V[`\0Ta\x03\x1f\x90b\x01\0\0\x90\x04`\x01`\x01`\xa0\x1b\x03\x16\x81V[a\x03\x1fa\x17\xfbV[`\x96Ta\x06\r\x90`\xff\x16\x81V[`@Q`\xff\x90\x91\x16\x81R` \x01a\x02\xd8V[a\x02\xaca\x06-6`\x04aO\x1aV[a\x18\x14V[a\x03\x1f\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x02\xce\x7f+\xd8!$\x05\x7f\t\x13\xbc;w,\xe7\xb8>\x80W\xc1\xad\x1f5\x10\xfc\x83w\x8b\xe2\x0f\x10\xec]\xe6\x81V[a\x02\xaca\x06\x8e6`\x04aP\x13V[a\x1bKV[a\x06\xa6a\x06\xa16`\x04aP\xbbV[a\x1c\xceV[`@Qa\x02\xd8\x91\x90aQ`V[a\x02\xce\x7fM@N2v\xe7\xac!c\xd8\xeeGj\xfajA\xd1\xf6\x8f\xb7\x1f-\x8beF\xb2NU\xce\x01\xb7*\x81V[a\x02\xaca\x06\xe86`\x04aQ\xaaV[a\x1d\x87V[`\x9cTa\x02\xceV[a\x02\xaca\x07\x036`\x04aR\x90V[a\x1d\xedV[a\x02\xaca\x07\x166`\x04aTCV[a\x1e\0V[a\x07\x8aa\x07)6`\x04aJ\xfbV[`@\x80Q``\x80\x82\x01\x83R`\0\x80\x83R` \x80\x84\x01\x82\x90R\x92\x84\x01\x81\x90R`\xff\x94\x90\x94\x16\x84R`\x97\x82R\x92\x82\x90 \x82Q\x93\x84\x01\x83RTc\xff\xff\xff\xff\x81\x16\x84Ra\xff\xff`\x01` \x1b\x82\x04\x81\x16\x92\x85\x01\x92\x90\x92R`\x01`0\x1b\x90\x04\x16\x90\x82\x01R\x90V[`@\x80Q\x82Qc\xff\xff\xff\xff\x16\x81R` \x80\x84\x01Qa\xff\xff\x90\x81\x16\x91\x83\x01\x91\x90\x91R\x92\x82\x01Q\x90\x92\x16\x90\x82\x01R``\x01a\x02\xd8V[a\x02\xaca\x07\xcc6`\x04aJ\xabV[a!\x04V[a\x02\xaca\x07\xdf6`\x04aH\xecV[a!zV[a\x08\x13a\x07\xf26`\x04aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x16`\0\x90\x81R`\x99` R`@\x90 `\x01\x01T`\xff\x16\x90V[`@Qa\x02\xd8\x91\x90aU\x17V[`\x01T`\x02\x90`\x04\x90\x81\x16\x03a\x08QW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aU%V[`@Q\x80\x91\x03\x90\xfd[`\0[\x82\x81\x10\x15a\t/W`\0\x84\x84\x83\x81\x81\x10a\x08pWa\x08paU\\V[\x90P` \x02\x01` \x81\x01\x90a\x08\x85\x91\x90aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x81\x16`\0\x90\x81R`\x99` \x90\x81R`@\x80\x83 \x81Q\x80\x83\x01\x90\x92R\x80T\x82R`\x01\x81\x01T\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\xff\x16`\x02\x81\x11\x15a\x08\xd0Wa\x08\xd0aK\xd9V[`\x02\x81\x11\x15a\x08\xe1Wa\x08\xe1aK\xd9V[\x90RP\x80Q\x90\x91P`\0a\x08\xf4\x82a\"\xd6V[\x90P`\0a\t\n\x82`\x01`\x01`\xc0\x1b\x03\x16a#AV[\x90Pa\t\x17\x85\x85\x83a$\rV[PPPPP\x80\x80a\t'\x90aU\x88V[\x91PPa\x08TV[PPPPV[`\0\x83\x81R`\x98` R`@\x81 \x80T\x82\x91\x90\x84\x90\x81\x10a\tXWa\tXaU\\V[`\0\x91\x82R` \x91\x82\x90 `@\x80Q``\x81\x01\x82R\x92\x90\x91\x01Tc\xff\xff\xff\xff\x80\x82\x16\x80\x85R`\x01` \x1b\x83\x04\x82\x16\x95\x85\x01\x95\x90\x95R`\x01`@\x1b\x90\x91\x04`\x01`\x01`\xc0\x1b\x03\x16\x91\x83\x01\x91\x90\x91R\x90\x92P\x85\x16\x10\x15a\nRW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`e`$\x82\x01R\x7fRegistryCoordinator.getQuorumBit`D\x82\x01R\x7fmapAtBlockNumberByIndex: quorumB`d\x82\x01R\x7fitmapUpdate is from after blockN`\x84\x82\x01Rd:\xb6\xb12\xb9`\xd9\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[` \x81\x01Qc\xff\xff\xff\xff\x16\x15\x80a\nxWP\x80` \x01Qc\xff\xff\xff\xff\x16\x84c\xff\xff\xff\xff\x16\x10[a\x0b\x1fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`f`$\x82\x01R\x7fRegistryCoordinator.getQuorumBit`D\x82\x01R\x7fmapAtBlockNumberByIndex: quorumB`d\x82\x01R\x7fitmapUpdate is from before block`\x84\x82\x01Re':\xb6\xb12\xb9`\xd1\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[`@\x01Q\x94\x93PPPPV[`\x013`\0\x90\x81R`\x99` R`@\x90 `\x01\x01T`\xff\x16`\x02\x81\x11\x15a\x0bTWa\x0bTaK\xd9V[\x14a\x0b\xc7W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`<`$\x82\x01R\x7fRegistryCoordinator.updateSocket`D\x82\x01R\x7f: operator is not registered\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[3`\0\x90\x81R`\x99` R`@\x90\x81\x90 T\x90Q\x7f\xec)c\xab!\xc1\xe5\x0e\x1eX*\xa5B\xaf.K\xf7\xbf8\xe6\xe1@<'\xb4.\x1c]nb\x1e\xaa\x90a\x0c\x08\x90\x84\x90aU\xe7V[`@Q\x80\x91\x03\x90\xa2PV[`\0`\x02\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xa0\x1b\x03\x16`\x01`\x01`\xa0\x1b\x03\x16c\xea\xb6mz`@Q\x81c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0cfW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0c\x8a\x91\x90aU\xfaV[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\x0c\xbaW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x17V[a\x0c\xc3\x81a$\xfaV[PV[`\0T`@Qc#}\xfbG`\xe1\x1b\x81R3`\x04\x82\x01Rb\x01\0\0\x90\x91\x04`\x01`\x01`\xa0\x1b\x03\x16\x90cF\xfb\xf6\x8e\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\r\x13W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r7\x91\x90aVaV[a\rSW`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x83V[`\x01T\x81\x81\x16\x14a\r\xccW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.pause: invalid attempt `D\x82\x01R\x7fto unpause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[`\x01\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01a\x0c\x08V[`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x82\x01\x81\x90R\x91\x81\x01\x91\x90\x91R`\0\x83\x81R`\x98` R`@\x90 \x80T\x83\x90\x81\x10a\x0e@Wa\x0e@aU\\V[`\0\x91\x82R` \x91\x82\x90 `@\x80Q``\x81\x01\x82R\x91\x90\x92\x01Tc\xff\xff\xff\xff\x80\x82\x16\x83R`\x01` \x1b\x82\x04\x16\x93\x82\x01\x93\x90\x93R`\x01`\x01`\xc0\x1b\x03`\x01`@\x1b\x90\x93\x04\x92\x90\x92\x16\x90\x82\x01R\x90P[\x92\x91PPV[`@Qc\x08\xf6b\x9d`\xe3\x1b\x81R`\x04\x81\x01\x82\x90R`\0\x90\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x90cG\xb3\x14\xe8\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x0e\xfcW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0e\x8e\x91\x90aU\xfaV[a\x0f(a%\xffV[a\x0c\xc3\x81a&^V[a\x0f9a%\xffV[a\x0c\xc3\x81a&\xc7V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra\x0e\x8ea\x0f\xbc\x7f+\xd8!$\x05\x7f\t\x13\xbc;w,\xe7\xb8>\x80W\xc1\xad\x1f5\x10\xfc\x83w\x8b\xe2\x0f\x10\xec]\xe6\x84`@Q` \x01a\x0f\xa1\x92\x91\x90\x91\x82R`\x01`\x01`\xa0\x1b\x03\x16` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a'0V[a'~V[`\x01T`\x02\x90`\x04\x90\x81\x16\x03a\x0f\xe9W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aU%V[`\0a\x101\x84\x84\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPP`\x96T`\xff\x16\x91Pa(\r\x90PV[\x90P\x84\x83\x14a\x10\xa2W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R`\0\x80Q` a\\\xf2\x839\x81Q\x91R`D\x82\x01R\x7forsForQuorum: input length misma`d\x82\x01Rb\x0e\x8cm`\xeb\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\0[\x83\x81\x10\x15a\x14\xc8W`\0\x85\x85\x83\x81\x81\x10a\x10\xc1Wa\x10\xc1aU\\V[\x91\x90\x91\x015`\xf8\x1c\x91P6\x90P`\0\x89\x89\x85\x81\x81\x10a\x10\xe2Wa\x10\xe2aU\\V[\x90P` \x02\x81\x01\x90a\x10\xf4\x91\x90aV\xcbV[`@Qcy\xa0\x84\x91`\xe1\x1b\x81R`\xff\x86\x16`\x04\x82\x01R\x91\x93P\x91P\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x90c\xf3A\t\"\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a\x11`W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\x84\x91\x90aW\x14V[c\xff\xff\xff\xff\x16\x81\x14a\x12 W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`e`$\x82\x01R`\0\x80Q` a\\\xf2\x839\x81Q\x91R`D\x82\x01R\x7forsForQuorum: number of updated `d\x82\x01R\x7foperators does not match quorum `\x84\x82\x01Rd\x1d\x1b\xdd\x18[`\xda\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[`\0\x80[\x82\x81\x10\x15a\x14gW`\0\x84\x84\x83\x81\x81\x10a\x12@Wa\x12@aU\\V[\x90P` \x02\x01` \x81\x01\x90a\x12U\x91\x90aJ\xabV[`\x01`\x01`\xa0\x1b\x03\x81\x16`\0\x90\x81R`\x99` \x90\x81R`@\x80\x83 \x81Q\x80\x83\x01\x90\x92R\x80T\x82R`\x01\x81\x01T\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\xff\x16`\x02\x81\x11\x15a\x12\xa0Wa\x12\xa0aK\xd9V[`\x02\x81\x11\x15a\x12\xb1Wa\x12\xb1aK\xd9V[\x90RP\x80Q\x90\x91P`\0a\x12\xc4\x82a\"\xd6V[\x90P`\x01`\x01`\x01`\xc0\x1b\x03\x82\x16`\xff\x8b\x16\x1c\x81\x16\x14a\x13HW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R`\0\x80Q` a\\\xf2\x839\x81Q\x91R\x90\x82\x01R\x7forsForQuorum: operator not in qu`d\x82\x01Rcorum`\xe0\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x85`\x01`\x01`\xa0\x1b\x03\x16\x84`\x01`\x01`\xa0\x1b\x03\x16\x11a\x13\xf3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`g`$\x82\x01R`\0\x80Q` a\\\xf2\x839\x81Q\x91R`D\x82\x01R\x7forsForQuorum: operators array mu`d\x82\x01R\x7fst be sorted in ascending addres`\x84\x82\x01Rf9\x907\xb922\xb9`\xc9\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[Pa\x14Q\x83\x83\x8f\x8f\x8d\x90\x8e`\x01a\x14\n\x91\x90aW1V[\x92a\x14\x17\x93\x92\x91\x90aWDV[\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa$\r\x92PPPV[P\x90\x92Pa\x14`\x90P\x81aU\x88V[\x90Pa\x12$V[P`\xff\x84\x16`\0\x81\x81R`\x9b` \x90\x81R`@\x91\x82\x90 C\x90\x81\x90U\x91Q\x91\x82R\x7fF\x07}U3\x07c\xf1bi\xfdu\xe5v\x16c\xf4\x19-'\x91t|\x01\x89\xb1j\xd3\x1d\xb0}\xb4\x91\x01`@Q\x80\x91\x03\x90\xa2PPPP\x80a\x14\xc1\x90aU\x88V[\x90Pa\x10\xa5V[PPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\x01`\x01`\xa0\x1b\x03\x82\x16`\0\x90\x81R`\x99` \x90\x81R`@\x91\x82\x90 \x82Q\x80\x84\x01\x90\x93R\x80T\x83R`\x01\x81\x01T\x90\x91\x83\x01\x90`\xff\x16`\x02\x81\x11\x15a\x15+Wa\x15+aK\xd9V[`\x02\x81\x11\x15a\x15=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x15\xb6\x91\x90aVaV[a\x15\xd2W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x83V[`\0\x19`\x01\x81\x90U`@Q\x90\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2V[a\x16\x19a%\xffV[`\x96T\x82\x90`\xff\x90\x81\x16\x90\x82\x16\x10a\x16\x99W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7fRegistryCoordinator.quorumExists`D\x82\x01R\x7f: quorum does not exist\0\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[a\x16\xa3\x83\x83a(\x9eV[PPPV[`\x9c\x81\x81T\x81\x10a\x16\xb8W`\0\x80\xfd[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\xa0\x1b\x03\x16\x90P\x81V[`\x9eT`\x01`\x01`\xa0\x1b\x03\x163\x14a\x17RW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7fRegistryCoordinator.onlyEjector:`D\x82\x01R\x7f caller is not the ejector\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[a\x16\xa3\x83\x83\x83\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa)K\x92PPPV[a\x17\x9aa%\xffV[a\x17\xa4`\0a-\xbdV[V[`\0a\x17\xe6\x7fM@N2v\xe7\xac!c\xd8\xeeGj\xfajA\xd1\xf6\x8f\xb7\x1f-\x8beF\xb2NU\xce\x01\xb7*\x87\x87\x87\x87\x87`@Q` \x01a\x0f\xa1\x96\x95\x94\x93\x92\x91\x90aWnV[\x96\x95PPPPPPV[`\0a\x0e\x8e\x82a\"\xd6V[`\0a\x18\x0f`dT`\x01`\x01`\xa0\x1b\x03\x16\x90V[\x90P\x90V[`\x01\x80T`\0\x91\x90\x81\x16\x03a\x18;W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aU%V[\x83\x89\x14a\x18\xbeW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R\x7fRegistryCoordinator.registerOper\x90\x82\x01R\x7fatorWithChurn: input length mism`d\x82\x01Rc\x0c.\x8cm`\xe3\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\0a\x18\xca3\x88a.\x0fV[\x90Pa\x19*3\x82\x88\x88\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x19\x1fWa\x19\x10`@\x83\x02\x86\x016\x81\x90\x03\x81\x01\x90aW\xf3V[\x81R` \x01\x90`\x01\x01\x90a\x18\xf3V[PPPPP\x87a/DV[`\0a\x19q3\x83\x8e\x8e\x8e\x8e\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x8c\x92Pa0\xd1\x91PPV[\x90P`\0[\x8b\x81\x10\x15a\x1b=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!\xf1\x91\x90aU\xfaV[`\x01`\x01`\xa0\x1b\x03\x163`\x01`\x01`\xa0\x1b\x03\x16\x14a\"!W`@QbF\x1b\xcd`\xe5\x1b\x81R`\x04\x01a\x08H\x90aV\x17V[`\x01T\x19\x81\x19`\x01T\x19\x16\x14a\"\x9fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7fPausable.unpause: invalid attemp`D\x82\x01R\x7ft to pause functionality\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[`\x01\x81\x90U`@Q\x81\x81R3\x90\x7f5\x82\xd1\x82\x8e&\xbfV\xbd\x80\x15\x02\xbc\x02\x1a\xc0\xbc\x8a\xfbW\xc8&\xe4\x98kEY<\x8f\xad8\x9c\x90` \x01a\x0c\x08V[`\0\x81\x81R`\x98` R`@\x81 T\x80\x82\x03a\"\xf5WP`\0\x92\x91PPV[`\0\x83\x81R`\x98` R`@\x90 a#\x0e`\x01\x83aX\x0fV[\x81T\x81\x10a#\x1eWa#\x1eaU\\V[`\0\x91\x82R` \x90\x91 \x01T`\x01`@\x1b\x90\x04`\x01`\x01`\xc0\x1b\x03\x16\x93\x92PPPV[```\0\x80a#O\x84a<\xffV[a\xff\xff\x16`\x01`\x01`@\x1b\x03\x81\x11\x15a#jWa#jaIOV[`@Q\x90\x80\x82R\x80`\x1f\x01`\x1f\x19\x16` \x01\x82\x01`@R\x80\x15a#\x94W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x80[\x82Q\x82\x10\x80\x15a#\xacWPa\x01\0\x81\x10[\x15a$\x03W`\x01\x81\x1b\x93P\x85\x84\x16\x15a#\xf3W\x80`\xf8\x1b\x83\x83\x81Q\x81\x10a#\xd5Wa#\xd5aU\\V[` \x01\x01\x90`\x01`\x01`\xf8\x1b\x03\x19\x16\x90\x81`\0\x1a\x90SP\x81`\x01\x01\x91P[a#\xfc\x81aU\x88V[\x90Pa#\x9bV[P\x90\x94\x93PPPPV[`\x01\x82` \x01Q`\x02\x81\x11\x15a$%Wa$%aK\xd9V[\x14a$/WPPPV[\x81Q`@Qc3V\x7f\x7f`\xe1\x1b\x81R`\0\x90`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90cf\xac\xfe\xfe\x90a$\x84\x90\x88\x90\x86\x90\x88\x90`\x04\x01aX\"V[` `@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a$\xa3W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a$\xc7\x91\x90aXRV[\x90P`\x01`\x01`\xc0\x1b\x03\x81\x16\x15a$\xf3Wa$\xf3\x85a$\xee\x83`\x01`\x01`\xc0\x1b\x03\x16a#AV[a)KV[PPPPPV[`\x01`\x01`\xa0\x1b\x03\x81\x16a%\x88W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`I`$\x82\x01R\x7fPausable._setPauserRegistry: new`D\x82\x01R\x7fPauserRegistry cannot be the zer`d\x82\x01Rho address`\xb8\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\0T`@\x80Q`\x01`\x01`\xa0\x1b\x03b\x01\0\0\x90\x93\x04\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7fn\x9f\xcdS\x98\x96\xfc\xa6\x0e\x8b\x0f\x01\xddX\x023\xe4\x8ak\x0f}\xf0\x13\xb8\x9b\xa7\xf5e\x86\x9a\xcd\xb6\x91\x01`@Q\x80\x91\x03\x90\xa1`\0\x80T`\x01`\x01`\xa0\x1b\x03\x90\x92\x16b\x01\0\0\x02b\x01\0\0`\x01`\xb0\x1b\x03\x19\x90\x92\x16\x91\x90\x91\x17\x90UV[3a&\x08a\x17\xfbV[`\x01`\x01`\xa0\x1b\x03\x16\x14a\x17\xa4W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7fOwnable: caller is not the owner`D\x82\x01R`d\x01a\x08HV[`\x9dT`@\x80Q`\x01`\x01`\xa0\x1b\x03\x92\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7f1TW\xd8\xa8\xfe`\xf0J\xf1|\x16\xe2\xf5\xa5\xe1\xdba+1d\x8eX\x03\x03`u\x9e\xf8\xf3R\x8c\x91\x01`@Q\x80\x91\x03\x90\xa1`\x9d\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\x9eT`@\x80Q`\x01`\x01`\xa0\x1b\x03\x92\x83\x16\x81R\x91\x83\x16` \x83\x01R\x7f\x8f0\xab\t\xf4:l\x15}\x7f\xce~\n\x13\xc0\x03\x04,\x1c\x95\xe8\xa7.z\x14j!\xc0\xca\xa2M\xc9\x91\x01`@Q\x80\x91\x03\x90\xa1`\x9e\x80T`\x01`\x01`\xa0\x1b\x03\x19\x16`\x01`\x01`\xa0\x1b\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\0a\x0e\x8ea'=a=*V[\x83`@Qa\x19\x01`\xf0\x1b` \x82\x01R`\"\x81\x01\x83\x90R`B\x81\x01\x82\x90R`\0\x90`b\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0\x80\x80a'\xae`\0\x80Q` a]2\x839\x81Q\x91R\x86aX\x91V[\x90P[a'\xba\x81a>QV[\x90\x93P\x91P`\0\x80Q` a]2\x839\x81Q\x91R\x82\x83\t\x83\x03a'\xf3W`@\x80Q\x80\x82\x01\x90\x91R\x90\x81R` \x81\x01\x91\x90\x91R\x93\x92PPPV[`\0\x80Q` a]2\x839\x81Q\x91R`\x01\x82\x08\x90Pa'\xb1V[`\0\x80a(\x19\x84a>\xd3V[\x90P\x80\x83`\xff\x16`\x01\x90\x1b\x11a(\x97W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`?`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: bitmap exceeds max value\0`d\x82\x01R`\x84\x01a\x08HV[\x93\x92PPPV[`\xff\x82\x16`\0\x81\x81R`\x97` \x90\x81R`@\x91\x82\x90 \x84Q\x81T\x86\x84\x01\x80Q\x88\x87\x01\x80Qc\xff\xff\xff\xff\x90\x95\x16e\xff\xff\xff\xff\xff\xff\x19\x90\x94\x16\x84\x17`\x01` \x1ba\xff\xff\x93\x84\x16\x02\x17g\xff\xff\0\0\0\0\0\0\x19\x16`\x01`0\x1b\x95\x83\x16\x95\x90\x95\x02\x94\x90\x94\x17\x90\x94U\x85Q\x91\x82RQ\x83\x16\x93\x81\x01\x93\x90\x93RQ\x16\x91\x81\x01\x91\x90\x91R\x7f>\xe6\xfe\x8dTa\x02D\xc3\xe9\xd3\xc0f\xaeJ\xee\x99x\x84\xaa(\xf1\x06\x16\xae\x82\x19%@\x13\x18\xac\x90``\x01`@Q\x80\x91\x03\x90\xa2PPV[`\x01`\x01`\xa0\x1b\x03\x82\x16`\0\x90\x81R`\x99` R`@\x90 \x80T`\x01\x80\x83\x01T`\xff\x16`\x02\x81\x11\x15a)\x7fWa)\x7faK\xd9V[\x14a)\xfeW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`C`$\x82\x01R\x7fRegistryCoordinator._deregisterO`D\x82\x01R\x7fperator: operator is not registe`d\x82\x01Rb\x1c\x99Y`\xea\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\x96T`\0\x90a*\x12\x90\x85\x90`\xff\x16a(\rV[\x90P`\0a*\x1f\x83a\"\xd6V[\x90P`\x01`\x01`\xc0\x1b\x03\x82\x16a*\x9dW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`;`$\x82\x01R\x7fRegistryCoordinator._deregisterO`D\x82\x01R\x7fperator: bitmap cannot be 0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[a*\xb4`\x01`\x01`\xc0\x1b\x03\x83\x81\x16\x90\x83\x16\x81\x16\x14\x90V[a+LW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`Y`$\x82\x01R\x7fRegistryCoordinator._deregisterO`D\x82\x01R\x7fperator: operator is not registe`d\x82\x01R\x7fred for specified quorums\0\0\0\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x08HV[`\x01`\x01`\xc0\x1b\x03\x82\x81\x16\x19\x82\x16\x16a+e\x84\x82a@cV[`\x01`\x01`\xc0\x1b\x03\x81\x16a,4W`\x01\x85\x01\x80T`\xff\x19\x16`\x02\x17\x90U`@QcQ\xb2zm`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x88\x81\x16`\x04\x83\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c\xa3d\xf4\xda\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a+\xe5W`\0\x80\xfd[PZ\xf1\x15\x80\x15a+\xf9W=`\0\x80>=`\0\xfd[PP`@Q\x86\x92P`\x01`\x01`\xa0\x1b\x03\x8a\x16\x91P\x7f9o\xdc\xb1\x80\xcb\x0f\xea&\x92\x81\x13\xfb\x0f\xd1\xc3T\x98c\xf9\xcdV>j\x18O\x1dW\x81\x16\xc8\xe4\x90`\0\x90\xa3[`@Qc\xf4\xe2O\xe5`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c\xf4\xe2O\xe5\x90a,\x82\x90\x8a\x90\x8a\x90`\x04\x01aX\xa5V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a,\x9cW`\0\x80\xfd[PZ\xf1\x15\x80\x15a,\xb0W=`\0\x80>=`\0\xfd[PP`@Qc\xbd)\xb8\xcd`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92Pc\xbd)\xb8\xcd\x91Pa-\x02\x90\x87\x90\x8a\x90`\x04\x01aX\xc9V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a-\x1cW`\0\x80\xfd[PZ\xf1\x15\x80\x15a-0W=`\0\x80>=`\0\xfd[PP`@Qc\xbd)\xb8\xcd`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92Pc\xbd)\xb8\xcd\x91Pa-\x82\x90\x87\x90\x8a\x90`\x04\x01aX\xc9V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a-\x9cW`\0\x80\xfd[PZ\xf1\x15\x80\x15a-\xb0W=`\0\x80>=`\0\xfd[PPPPPPPPPPPV[`d\x80T`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x01`\x01`\xa0\x1b\x03\x19\x83\x16\x81\x17\x90\x93U`@Q\x91\x16\x91\x90\x82\x90\x7f\x8b\xe0\x07\x9cS\x16Y\x14\x13D\xcd\x1f\xd0\xa4\xf2\x84\x19I\x7f\x97\"\xa3\xda\xaf\xe3\xb4\x18okdW\xe0\x90`\0\x90\xa3PPV[`@Qc\t\xaa\x15'`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x83\x81\x16`\x04\x83\x01R`\0\x91\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90\x91\x16\x90c\x13T*N\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a.zW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a.\x9e\x91\x90aX\xe2V[\x90P`\0\x81\x90\x03a\x0e\x8eW\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16c\xbfy\xceX\x84\x84a.\xe3\x87a\x0fBV[`@Q\x84c\xff\xff\xff\xff\x16`\xe0\x1b\x81R`\x04\x01a/\x01\x93\x92\x91\x90aX\xfbV[` `@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a/ W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(\x97\x91\x90aX\xe2V[` \x80\x82\x01Q`\0\x90\x81R`\x9a\x90\x91R`@\x90 T`\xff\x16\x15a/\xeaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`R`$\x82\x01R\x7fRegistryCoordinator._verifyChurn`D\x82\x01R\x7fApproverSignature: churnApprover`d\x82\x01Rq\x08\x1c\xd8[\x1d\x08\x18[\x1c\x99XY\x1eH\x1d\\\xd9Y`r\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[B\x81`@\x01Q\x10\x15a0\x7fW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`R`$\x82\x01R\x7fRegistryCoordinator._verifyChurn`D\x82\x01R\x7fApproverSignature: churnApprover`d\x82\x01Rq\x08\x1c\xdaY\xdb\x98]\x1d\\\x99H\x19^\x1c\x1a\\\x99Y`r\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[` \x80\x82\x01\x80Q`\0\x90\x81R`\x9a\x90\x92R`@\x91\x82\x90 \x80T`\xff\x19\x16`\x01\x17\x90U`\x9dT\x90Q\x91\x83\x01Qa\t/\x92`\x01`\x01`\xa0\x1b\x03\x90\x92\x16\x91a0\xca\x91\x88\x91\x88\x91\x88\x91\x90a\x17\xa6V[\x83QaB$V[a0\xf5`@Q\x80``\x01`@R\x80``\x81R` \x01``\x81R` \x01``\x81RP\x90V[`\0a1=\x86\x86\x80\x80`\x1f\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPP`\x96T`\xff\x16\x91Pa(\r\x90PV[\x90P`\0a1J\x88a\"\xd6V[\x90P`\x01`\x01`\xc0\x1b\x03\x82\x16a1\xc8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`9`$\x82\x01R\x7fRegistryCoordinator._registerOpe`D\x82\x01R\x7frator: bitmap cannot be 0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x08HV[\x80\x82\x16`\x01`\x01`\xc0\x1b\x03\x16\x15a2~W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`h`$\x82\x01R\x7fRegistryCoordinator._registerOpe`D\x82\x01R\x7frator: operator already register`d\x82\x01R\x7fed for some quorums being regist`\x84\x82\x01Rg2\xb92\xb2\x1037\xb9`\xc1\x1b`\xa4\x82\x01R`\xc4\x01a\x08HV[`\x01`\x01`\xc0\x1b\x03\x81\x81\x16\x90\x83\x16\x17a2\x97\x89\x82a@cV[\x88\x7f\xec)c\xab!\xc1\xe5\x0e\x1eX*\xa5B\xaf.K\xf7\xbf8\xe6\xe1@<'\xb4.\x1c]nb\x1e\xaa\x87`@Qa2\xc7\x91\x90aU\xe7V[`@Q\x80\x91\x03\x90\xa2`\x01`\x01`\x01`\xa0\x1b\x03\x8b\x16`\0\x90\x81R`\x99` R`@\x90 `\x01\x01T`\xff\x16`\x02\x81\x11\x15a3\x01Wa3\x01aK\xd9V[\x14a4\x1aW`@\x80Q\x80\x82\x01\x82R\x8a\x81R`\x01` \x80\x83\x01\x82\x81R`\x01`\x01`\xa0\x1b\x03\x8f\x16`\0\x90\x81R`\x99\x90\x92R\x93\x90 \x82Q\x81U\x92Q\x83\x82\x01\x80T\x93\x94\x93\x91\x92\x90\x91`\xff\x19\x16\x90\x83`\x02\x81\x11\x15a3\\Wa3\\aK\xd9V[\x02\x17\x90UPP`@Qc\x99&\xee}`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91Pc\x99&\xee}\x90a3\xb1\x90\x8d\x90\x89\x90`\x04\x01aYkV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a3\xcbW`\0\x80\xfd[PZ\xf1\x15\x80\x15a3\xdfW=`\0\x80>=`\0\xfd[PP`@Q\x8b\x92P`\x01`\x01`\xa0\x1b\x03\x8d\x16\x91P\x7f\xe8\xe6\x8c\xef\x1c:v\x1e\xd7\xbe~\x84c\xa3u\xf2\x7f{\xc35\xe5\x18$\"<\xac\xcecn\xc5\xc3\xfe\x90`\0\x90\xa3[`@Qc\x1f\xd9<\xa9`\xe1\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c?\xb2yR\x90a4j\x90\x8d\x90\x8c\x90\x8c\x90`\x04\x01aY\xdfV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a4\x84W`\0\x80\xfd[PZ\xf1\x15\x80\x15a4\x98W=`\0\x80>=`\0\xfd[PP`@Qc%PGw`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92Pc%PGw\x91Pa4\xee\x90\x8d\x90\x8d\x90\x8d\x90\x8d\x90`\x04\x01aZ\x04V[`\0`@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a5\rW=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra55\x91\x90\x81\x01\x90aZ\x90V[`@\x80\x87\x01\x91\x90\x91R` \x86\x01\x91\x90\x91RQb\xbf\xf0M`\xe0\x1b\x81R`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90b\xbf\xf0M\x90a5\x92\x90\x8c\x90\x8c\x90\x8c\x90`\x04\x01aZ\xf3V[`\0`@Q\x80\x83\x03\x81`\0\x87Z\xf1\x15\x80\x15a5\xb1W=`\0\x80>=`\0\xfd[PPPP`@Q=`\0\x82>`\x1f=\x90\x81\x01`\x1f\x19\x16\x82\x01`@Ra5\xd9\x91\x90\x81\x01\x90a[\rV[\x84RPPP\x96\x95PPPPPPV[` \x80\x83\x01Q`\x01`\x01`\xa0\x1b\x03\x80\x82\x16`\0\x81\x81R`\x99\x90\x94R`@\x90\x93 T\x91\x92\x90\x87\x16\x03a6gW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`5`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01Rt97\x1d\x101\xb0\xb777\xba\x101\xb4:\xb97\x109\xb2\xb63`Y\x1b`d\x82\x01R`\x84\x01a\x08HV[\x87`\xff\x16\x84`\0\x01Q`\xff\x16\x14a6\xe4W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01R\x7frn: quorumNumber not the same as`d\x82\x01Rf\x08\x1c\xdaY\xdb\x99Y`\xca\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`@QcT\x01\xed'`\xe0\x1b\x81R`\x04\x81\x01\x82\x90R`\xff\x89\x16`$\x82\x01R`\0\x90\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x90cT\x01\xed'\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15a7UW=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a7y\x91\x90a[\xa6V[\x90Pa7\x85\x81\x85aC\xdeV[`\x01`\x01``\x1b\x03\x16\x86`\x01`\x01``\x1b\x03\x16\x11a8\x18W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`V`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01R\x7frn: incoming operator has insuff`d\x82\x01Ru4\xb1\xb4\xb2\xb7:\x109\xba0\xb5\xb2\x9037\xb9\x101\xb4:\xb97`Q\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[a8\"\x88\x85aD\x02V[`\x01`\x01``\x1b\x03\x16\x81`\x01`\x01``\x1b\x03\x16\x10a \xf9W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\\`$\x82\x01R`\0\x80Q` a]\x12\x839\x81Q\x91R`D\x82\x01R\x7frn: cannot kick operator with mo`d\x82\x01R\x7fre than kickBIPsOfTotalStake\0\0\0\0`\x84\x82\x01R`\xa4\x01a\x08HV[`\0\x81\x81R`\x98` R`@\x81 T\x81[\x81\x81\x10\x15a9NW`\x01a8\xe1\x82\x84aX\x0fV[a8\xeb\x91\x90aX\x0fV[\x92P\x84c\xff\xff\xff\xff\x16`\x98`\0\x86\x81R` \x01\x90\x81R` \x01`\0 \x84c\xff\xff\xff\xff\x16\x81T\x81\x10a9\x1eWa9\x1eaU\\V[`\0\x91\x82R` \x90\x91 \x01Tc\xff\xff\xff\xff\x16\x11a9=`\0\xfd[PP`@Qc\x13l\xa0\xf9`\xe1\x1b\x81R`\xff\x84\x16`\x04\x82\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x92Pc&\xd9A\xf2\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a;\x7fW`\0\x80\xfd[PZ\xf1\x15\x80\x15a;\x93W=`\0\x80>=`\0\xfd[PP`@Qc\x13l\xa0\xf9`\xe1\x1b\x81R`\xff\x84\x16`\x04\x82\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xa0\x1b\x03\x16\x92Pc&\xd9A\xf2\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a;\xfbW`\0\x80\xfd[PZ\xf1\x15\x80\x15a \xf9W=`\0\x80>=`\0\xfd[`\0Tb\x01\0\0\x90\x04`\x01`\x01`\xa0\x1b\x03\x16\x15\x80\x15a<6WP`\x01`\x01`\xa0\x1b\x03\x82\x16\x15\x15[a<\xb8W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fPausable._initializePauser: _ini`D\x82\x01R\x7ftializePauser() can only be call`d\x82\x01Rfed once`\xc8\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[`\x01\x81\x90U`@Q\x81\x81R3\x90\x7f\xab@\xa3t\xbcQ\xde7\"\0\xa8\xbc\x98\x1a\xf8\xc9\xec\xdc\x08\xdf\xda\xef\x0b\xb6\xe0\x9f\x88\xf3\xc6\x16\xef=\x90` \x01`@Q\x80\x91\x03\x90\xa2a<\xfb\x82a$\xfaV[PPV[`\0\x80[\x82\x15a\x0e\x8eWa=\x14`\x01\x84aX\x0fV[\x90\x92\x16\x91\x80a=\"\x81a\\UV[\x91PPa=\x03V[`\00`\x01`\x01`\xa0\x1b\x03\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14\x80\x15a=\x83WP\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0F\x14[\x15a=\xadWP\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90V[P`@\x80Q\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x80\x83\x01\x91\x90\x91R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x84\x01R\x7f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``\x83\x01RF`\x80\x83\x01R0`\xa0\x80\x84\x01\x91\x90\x91R\x83Q\x80\x84\x03\x90\x91\x01\x81R`\xc0\x90\x92\x01\x90\x92R\x80Q\x91\x01 \x90V[`\0\x80\x80`\0\x80Q` a]2\x839\x81Q\x91R`\x03`\0\x80Q` a]2\x839\x81Q\x91R\x86`\0\x80Q` a]2\x839\x81Q\x91R\x88\x89\t\t\x08\x90P`\0a>\xc7\x82\x7f\x0c\x19\x13\x9c\xb8Lh\nn\x14\x11m\xa0`V\x17e\xe0Z\xa4Z\x1cr\xa3O\x08#\x05\xb6\x1f?R`\0\x80Q` a]2\x839\x81Q\x91RaD\x1cV[\x91\x95\x91\x94P\x90\x92PPPV[`\0a\x01\0\x82Q\x11\x15a?\\W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`D`$\x82\x01\x81\x90R\x7fBitmapUtils.orderedBytesArrayToB\x90\x82\x01R\x7fitmap: orderedBytesArray is too `d\x82\x01Rclong`\xe0\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x81Q`\0\x03a?mWP`\0\x91\x90PV[`\0\x80\x83`\0\x81Q\x81\x10a?\x83Wa?\x83aU\\V[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x81\x90\x1b\x92P[\x84Q\x81\x10\x15a@ZW\x84\x81\x81Q\x81\x10a?\xb1Wa?\xb1aU\\V[\x01` \x01Q`\x01`\xf8\x91\x90\x91\x1c\x1b\x91P\x82\x82\x11a@FW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fBitmapUtils.orderedBytesArrayToB`D\x82\x01R\x7fitmap: orderedBytesArray is not `d\x82\x01Rf\x1b\xdc\x99\x19\\\x99Y`\xca\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x91\x81\x17\x91a@S\x81aU\x88V[\x90Pa?\x96V[P\x90\x93\x92PPPV[`\0\x82\x81R`\x98` R`@\x81 T\x90\x81\x90\x03aA\x0bW`\0\x83\x81R`\x98` \x90\x81R`@\x80\x83 \x81Q``\x81\x01\x83Rc\xff\xff\xff\xffC\x81\x16\x82R\x81\x85\x01\x86\x81R`\x01`\x01`\xc0\x1b\x03\x80\x8a\x16\x95\x84\x01\x95\x86R\x84T`\x01\x81\x01\x86U\x94\x88R\x95\x90\x96 \x91Q\x91\x90\x92\x01\x80T\x95Q\x93Q\x90\x94\x16`\x01`@\x1b\x02`\x01`\x01`@\x1b\x03\x93\x83\x16`\x01` \x1b\x02g\xff\xff\xff\xff\xff\xff\xff\xff\x19\x90\x96\x16\x91\x90\x92\x16\x17\x93\x90\x93\x17\x16\x91\x90\x91\x17\x90UPPPV[`\0\x83\x81R`\x98` R`@\x81 aA$`\x01\x84aX\x0fV[\x81T\x81\x10aA4WaA4aU\\V[`\0\x91\x82R` \x90\x91 \x01\x80T\x90\x91Pc\xff\xff\xff\xffC\x81\x16\x91\x16\x03aAvW\x80T`\x01`\x01`@\x1b\x03\x16`\x01`@\x1b`\x01`\x01`\xc0\x1b\x03\x85\x16\x02\x17\x81Ua\t/V[\x80Tc\xff\xff\xff\xffC\x81\x16`\x01` \x1b\x81\x81\x02g\xff\xff\xff\xff\0\0\0\0\x19\x90\x94\x16\x93\x90\x93\x17\x84U`\0\x87\x81R`\x98` \x90\x81R`@\x80\x83 \x81Q``\x81\x01\x83R\x94\x85R\x84\x83\x01\x84\x81R`\x01`\x01`\xc0\x1b\x03\x80\x8c\x16\x93\x87\x01\x93\x84R\x82T`\x01\x81\x01\x84U\x92\x86R\x93\x90\x94 \x94Q\x94\x01\x80T\x93Q\x91Q\x90\x92\x16`\x01`@\x1b\x02`\x01`\x01`@\x1b\x03\x91\x86\x16\x90\x96\x02g\xff\xff\xff\xff\xff\xff\xff\xff\x19\x90\x93\x16\x93\x90\x94\x16\x92\x90\x92\x17\x17\x91\x90\x91\x16\x91\x90\x91\x17\x90UPPPPV[`\x01`\x01`\xa0\x1b\x03\x83\x16;\x15aC>W`@Qc\x0b\x13]?`\xe1\x1b\x80\x82R\x90`\x01`\x01`\xa0\x1b\x03\x85\x16\x90c\x16&\xba~\x90aBd\x90\x86\x90\x86\x90`\x04\x01aX\xc9V[` `@Q\x80\x83\x03\x81\x86Z\xfa\x15\x80\x15aB\x81W=`\0\x80>=`\0\xfd[PPPP`@Q=`\x1f\x19`\x1f\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90aB\xa5\x91\x90a\\vV[`\x01`\x01`\xe0\x1b\x03\x19\x16\x14a\x16\xa3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`S`$\x82\x01R\x7fEIP1271SignatureUtils.checkSigna`D\x82\x01R\x7fture_EIP1271: ERC1271 signature `d\x82\x01Rr\x1d\x99\\\x9aY\x9aX\xd8]\x1a[\xdb\x88\x19\x98Z[\x19Y`j\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[\x82`\x01`\x01`\xa0\x1b\x03\x16aCR\x83\x83aD\xc5V[`\x01`\x01`\xa0\x1b\x03\x16\x14a\x16\xa3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`G`$\x82\x01R\x7fEIP1271SignatureUtils.checkSigna`D\x82\x01R\x7fture_EIP1271: signature not from`d\x82\x01Rf\x109\xb4\xb3\xb72\xb9`\xc9\x1b`\x84\x82\x01R`\xa4\x01a\x08HV[` \x81\x01Q`\0\x90a'\x10\x90aC\xf8\x90a\xff\xff\x16\x85a\\\xa0V[a(\x97\x91\x90a\\\xcbV[`@\x81\x01Q`\0\x90a'\x10\x90aC\xf8\x90a\xff\xff\x16\x85a\\\xa0V[`\0\x80aD'aH+V[aD/aHIV[` \x80\x82R\x81\x81\x01\x81\x90R`@\x82\x01\x81\x90R``\x82\x01\x88\x90R`\x80\x82\x01\x87\x90R`\xa0\x82\x01\x86\x90R\x82`\xc0\x83`\x05a\x07\xd0Z\x03\xfa\x92P\x82\x80aDlW\xfe[P\x82aD\xbaW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1a`$\x82\x01R\x7fBN254.expMod: call failure\0\0\0\0\0\0`D\x82\x01R`d\x01a\x08HV[PQ\x95\x94PPPPPV[`\0\x80`\0aD\xd4\x85\x85aD\xe1V[\x91P\x91Pa\x1d\x7f\x81aEOV[`\0\x80\x82Q`A\x03aE\x17W` \x83\x01Q`@\x84\x01Q``\x85\x01Q`\0\x1aaE\x0b\x87\x82\x85\x85aG\x05V[\x94P\x94PPPPaEHV[\x82Q`@\x03aE@W` \x83\x01Q`@\x84\x01QaE5\x86\x83\x83aG\xf2V[\x93P\x93PPPaEHV[P`\0\x90P`\x02[\x92P\x92\x90PV[`\0\x81`\x04\x81\x11\x15aEcWaEcaK\xd9V[\x03aEkWPV[`\x01\x81`\x04\x81\x11\x15aE\x7fWaE\x7faK\xd9V[\x03aE\xccW`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7fECDSA: invalid signature\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x08HV[`\x02\x81`\x04\x81\x11\x15aE\xe0WaE\xe0aK\xd9V[\x03aF-W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\x1f`$\x82\x01R\x7fECDSA: invalid signature length\0`D\x82\x01R`d\x01a\x08HV[`\x03\x81`\x04\x81\x11\x15aFAWaFAaK\xd9V[\x03aF\x99W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7fECDSA: invalid signature 's' val`D\x82\x01Raue`\xf0\x1b`d\x82\x01R`\x84\x01a\x08HV[`\x04\x81`\x04\x81\x11\x15aF\xadWaF\xadaK\xd9V[\x03a\x0c\xc3W`@QbF\x1b\xcd`\xe5\x1b\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7fECDSA: invalid signature 'v' val`D\x82\x01Raue`\xf0\x1b`d\x82\x01R`\x84\x01a\x08HV[`\0\x80\x7f\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff]WnsW\xa4P\x1d\xdf\xe9/Fh\x1b \xa0\x83\x11\x15aG=`\0\xfd[PP`@Q`\x1f\x19\x01Q\x91PP`\x01`\x01`\xa0\x1b\x03\x81\x16aG\xe2W`\0`\x01\x92P\x92PPaG\xe9V[\x91P`\0\x90P[\x94P\x94\x92PPPV[`\0\x80`\x01`\x01`\xff\x1b\x03\x83\x16\x81aH\x0f`\xff\x86\x90\x1c`\x1baW1V[\x90PaH\x1d\x87\x82\x88\x85aG\x05V[\x93P\x93PPP\x93P\x93\x91PPV[`@Q\x80` \x01`@R\x80`\x01\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xc0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`\0\x80\x83`\x1f\x84\x01\x12aHyW`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aH\x90W`\0\x80\xfd[` \x83\x01\x91P\x83` \x82`\x05\x1b\x85\x01\x01\x11\x15aEHW`\0\x80\xfd[`\0\x80` \x83\x85\x03\x12\x15aH\xbeW`\0\x80\xfd[\x825`\x01`\x01`@\x1b\x03\x81\x11\x15aH\xd4W`\0\x80\xfd[aH\xe0\x85\x82\x86\x01aHgV[\x90\x96\x90\x95P\x93PPPPV[`\0` \x82\x84\x03\x12\x15aH\xfeW`\0\x80\xfd[P5\x91\x90PV[c\xff\xff\xff\xff\x81\x16\x81\x14a\x0c\xc3W`\0\x80\xfd[`\0\x80`\0``\x84\x86\x03\x12\x15aI,W`\0\x80\xfd[\x835\x92P` \x84\x015aI>\x81aI\x05V[\x92\x95\x92\x94PPP`@\x91\x90\x91\x015\x90V[cNH{q`\xe0\x1b`\0R`A`\x04R`$`\0\xfd[`@Q``\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aI\x87WaI\x87aIOV[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aI\x87WaI\x87aIOV[`@Q`\x1f\x82\x01`\x1f\x19\x16\x81\x01`\x01`\x01`@\x1b\x03\x81\x11\x82\x82\x10\x17\x15aI\xd7WaI\xd7aIOV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1b\x03\x83\x11\x15aI\xf8WaI\xf8aIOV[aJ\x0b`\x1f\x84\x01`\x1f\x19\x16` \x01aI\xafV[\x90P\x82\x81R\x83\x83\x83\x01\x11\x15aJ\x1fW`\0\x80\xfd[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15aJHW`\0\x80\xfd[\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aJ^W`\0\x80\xfd[\x82\x01`\x1f\x81\x01\x84\x13aJoW`\0\x80\xfd[aJ~\x84\x825` \x84\x01aI\xdfV[\x94\x93PPPPV[`\x01`\x01`\xa0\x1b\x03\x81\x16\x81\x14a\x0c\xc3W`\0\x80\xfd[\x805aJ\xa6\x81aJ\x86V[\x91\x90PV[`\0` \x82\x84\x03\x12\x15aJ\xbdW`\0\x80\xfd[\x815a(\x97\x81aJ\x86V[`\0\x80`@\x83\x85\x03\x12\x15aJ\xdbW`\0\x80\xfd[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\xff\x81\x16\x81\x14aJ\xa6W`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aK\rW`\0\x80\xfd[a(\x97\x82aJ\xeaV[\x81Q\x81R` \x80\x83\x01Q\x90\x82\x01R`@\x81\x01a\x0e\x8eV[`\0\x80\x83`\x1f\x84\x01\x12aK?W`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aKVW`\0\x80\xfd[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15aEHW`\0\x80\xfd[`\0\x80`\0\x80`@\x85\x87\x03\x12\x15aK\x84W`\0\x80\xfd[\x845`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aK\x9bW`\0\x80\xfd[aK\xa7\x88\x83\x89\x01aHgV[\x90\x96P\x94P` \x87\x015\x91P\x80\x82\x11\x15aK\xc0W`\0\x80\xfd[PaK\xcd\x87\x82\x88\x01aK-V[\x95\x98\x94\x97P\x95PPPPV[cNH{q`\xe0\x1b`\0R`!`\x04R`$`\0\xfd[`\x03\x81\x10aL\rWcNH{q`\xe0\x1b`\0R`!`\x04R`$`\0\xfd[\x90RV[\x81Q\x81R` \x80\x83\x01Q`@\x83\x01\x91aL,\x90\x84\x01\x82aK\xefV[P\x92\x91PPV[\x805a\xff\xff\x81\x16\x81\x14aJ\xa6W`\0\x80\xfd[`\0``\x82\x84\x03\x12\x15aLWW`\0\x80\xfd[aL_aIeV[\x90P\x815aLl\x81aI\x05V[\x81RaLz` \x83\x01aL3V[` \x82\x01RaL\x8b`@\x83\x01aL3V[`@\x82\x01R\x92\x91PPV[`\0\x80`\x80\x83\x85\x03\x12\x15aL\xa9W`\0\x80\xfd[aL\xb2\x83aJ\xeaV[\x91PaL\xc1\x84` \x85\x01aLEV[\x90P\x92P\x92\x90PV[`\0\x80`\0`@\x84\x86\x03\x12\x15aL\xdfW`\0\x80\xfd[\x835aL\xea\x81aJ\x86V[\x92P` \x84\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aM\x05W`\0\x80\xfd[aM\x11\x86\x82\x87\x01aK-V[\x94\x97\x90\x96P\x93\x94PPPPV[`\0`\x01`\x01`@\x1b\x03\x82\x11\x15aM7WaM7aIOV[P`\x05\x1b` \x01\x90V[`\0`@\x82\x84\x03\x12\x15aMSW`\0\x80\xfd[aM[aI\x8dV[\x90PaMf\x82aJ\xeaV[\x81R` \x82\x015aMv\x81aJ\x86V[` \x82\x01R\x92\x91PPV[`\0\x80`\0\x80`\0`\xa0\x86\x88\x03\x12\x15aM\x99W`\0\x80\xfd[\x855aM\xa4\x81aJ\x86V[\x94P` \x86\x81\x015\x94P`@\x80\x88\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aM\xc8W`\0\x80\xfd[\x88\x01`\x1f\x81\x01\x8a\x13aM\xd9W`\0\x80\xfd[\x805aM\xecaM\xe7\x82aM\x1eV[aI\xafV[\x81\x81R`\x06\x91\x90\x91\x1b\x82\x01\x84\x01\x90\x84\x81\x01\x90\x8c\x83\x11\x15aN\x0bW`\0\x80\xfd[\x92\x85\x01\x92[\x82\x84\x10\x15aN1WaN\"\x8d\x85aMAV[\x82R\x92\x84\x01\x92\x90\x85\x01\x90aN\x10V[\x99\x9c\x98\x9bP\x98\x99``\x81\x015\x99P`\x80\x015\x97\x96PPPPPPPV[`\0a\x01\0\x82\x84\x03\x12\x15aNaW`\0\x80\xfd[P\x91\x90PV[`\0\x80\x83`\x1f\x84\x01\x12aNyW`\0\x80\xfd[P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aN\x90W`\0\x80\xfd[` \x83\x01\x91P\x83` \x82`\x06\x1b\x85\x01\x01\x11\x15aEHW`\0\x80\xfd[`\0``\x82\x84\x03\x12\x15aN\xbdW`\0\x80\xfd[aN\xc5aIeV[\x90P\x815`\x01`\x01`@\x1b\x03\x81\x11\x15aN\xddW`\0\x80\xfd[\x82\x01`\x1f\x81\x01\x84\x13aN\xeeW`\0\x80\xfd[aN\xfd\x84\x825` \x84\x01aI\xdfV[\x82RP` \x82\x015` \x82\x01R`@\x82\x015`@\x82\x01R\x92\x91PPV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01\xa0\x8a\x8c\x03\x12\x15aO9W`\0\x80\xfd[\x895`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aOPW`\0\x80\xfd[aO\\\x8d\x83\x8e\x01aK-V[\x90\x9bP\x99P` \x8c\x015\x91P\x80\x82\x11\x15aOuW`\0\x80\xfd[aO\x81\x8d\x83\x8e\x01aK-V[\x90\x99P\x97P\x87\x91PaO\x96\x8d`@\x8e\x01aNNV[\x96Pa\x01@\x8c\x015\x91P\x80\x82\x11\x15aO\xadW`\0\x80\xfd[aO\xb9\x8d\x83\x8e\x01aNgV[\x90\x96P\x94Pa\x01`\x8c\x015\x91P\x80\x82\x11\x15aO\xd3W`\0\x80\xfd[aO\xdf\x8d\x83\x8e\x01aN\xabV[\x93Pa\x01\x80\x8c\x015\x91P\x80\x82\x11\x15aO\xf6W`\0\x80\xfd[PaP\x03\x8c\x82\x8d\x01aN\xabV[\x91PP\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80a\x01`\x87\x89\x03\x12\x15aP-W`\0\x80\xfd[\x865`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aPDW`\0\x80\xfd[aPP\x8a\x83\x8b\x01aK-V[\x90\x98P\x96P` \x89\x015\x91P\x80\x82\x11\x15aPiW`\0\x80\xfd[aPu\x8a\x83\x8b\x01aK-V[\x90\x96P\x94P\x84\x91PaP\x8a\x8a`@\x8b\x01aNNV[\x93Pa\x01@\x89\x015\x91P\x80\x82\x11\x15aP\xa1W`\0\x80\xfd[PaP\xae\x89\x82\x8a\x01aN\xabV[\x91PP\x92\x95P\x92\x95P\x92\x95V[`\0\x80`@\x83\x85\x03\x12\x15aP\xceW`\0\x80\xfd[\x825aP\xd9\x81aI\x05V[\x91P` \x83\x81\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aP\xf5W`\0\x80\xfd[\x84\x01`\x1f\x81\x01\x86\x13aQ\x06W`\0\x80\xfd[\x805aQ\x14aM\xe7\x82aM\x1eV[\x81\x81R`\x05\x91\x90\x91\x1b\x82\x01\x83\x01\x90\x83\x81\x01\x90\x88\x83\x11\x15aQ3W`\0\x80\xfd[\x92\x84\x01\x92[\x82\x84\x10\x15aQQW\x835\x82R\x92\x84\x01\x92\x90\x84\x01\x90aQ8V[\x80\x95PPPPPP\x92P\x92\x90PV[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15aQ\x9eW\x83Qc\xff\xff\xff\xff\x16\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01aQ|V[P\x90\x96\x95PPPPPPV[`\0\x80` \x83\x85\x03\x12\x15aQ\xbdW`\0\x80\xfd[\x825`\x01`\x01`@\x1b\x03\x81\x11\x15aQ\xd3W`\0\x80\xfd[aH\xe0\x85\x82\x86\x01aK-V[`\x01`\x01``\x1b\x03\x81\x16\x81\x14a\x0c\xc3W`\0\x80\xfd[`\0\x82`\x1f\x83\x01\x12aR\x05W`\0\x80\xfd[\x815` aR\x15aM\xe7\x83aM\x1eV[\x82\x81R`\x06\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aR4W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W`@\x81\x89\x03\x12\x15aRQW`\0\x80\x81\xfd[aRYaI\x8dV[\x815aRd\x81aJ\x86V[\x81R\x81\x85\x015aRs\x81aQ\xdfV[\x81\x86\x01R\x83R\x91\x83\x01\x91`@\x01aR8V[P\x96\x95PPPPPPV[`\0\x80`\0`\xa0\x84\x86\x03\x12\x15aR\xa5W`\0\x80\xfd[aR\xaf\x85\x85aLEV[\x92P``\x84\x015aR\xbf\x81aQ\xdfV[\x91P`\x80\x84\x015`\x01`\x01`@\x1b\x03\x81\x11\x15aR\xdaW`\0\x80\xfd[aR\xe6\x86\x82\x87\x01aQ\xf4V[\x91PP\x92P\x92P\x92V[`\0\x82`\x1f\x83\x01\x12aS\x01W`\0\x80\xfd[\x815` aS\x11aM\xe7\x83aM\x1eV[\x82\x81R``\x92\x83\x02\x85\x01\x82\x01\x92\x82\x82\x01\x91\x90\x87\x85\x11\x15aS0W`\0\x80\xfd[\x83\x87\x01[\x85\x81\x10\x15aSSWaSF\x89\x82aLEV[\x84R\x92\x84\x01\x92\x81\x01aS4V[P\x90\x97\x96PPPPPPPV[`\0\x82`\x1f\x83\x01\x12aSqW`\0\x80\xfd[\x815` aS\x81aM\xe7\x83aM\x1eV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aS\xa0W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W\x805aS\xb7\x81aQ\xdfV[\x83R\x91\x83\x01\x91\x83\x01aS\xa4V[`\0\x82`\x1f\x83\x01\x12aS\xd5W`\0\x80\xfd[\x815` aS\xe5aM\xe7\x83aM\x1eV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aT\x04W`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W\x805`\x01`\x01`@\x1b\x03\x81\x11\x15aT'W`\0\x80\x81\xfd[aT5\x89\x86\x83\x8b\x01\x01aQ\xf4V[\x84RP\x91\x83\x01\x91\x83\x01aT\x08V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8b\x03\x12\x15aT`W`\0\x80\xfd[aTi\x89aJ\x9bV[\x97PaTw` \x8a\x01aJ\x9bV[\x96PaT\x85`@\x8a\x01aJ\x9bV[\x95PaT\x93``\x8a\x01aJ\x9bV[\x94P`\x80\x89\x015\x93P`\xa0\x89\x015`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aT\xb6W`\0\x80\xfd[aT\xc2\x8c\x83\x8d\x01aR\xf0V[\x94P`\xc0\x8b\x015\x91P\x80\x82\x11\x15aT\xd8W`\0\x80\xfd[aT\xe4\x8c\x83\x8d\x01aS`V[\x93P`\xe0\x8b\x015\x91P\x80\x82\x11\x15aT\xfaW`\0\x80\xfd[PaU\x07\x8b\x82\x8c\x01aS\xc4V[\x91PP\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[` \x81\x01a\x0e\x8e\x82\x84aK\xefV[` \x80\x82R`\x19\x90\x82\x01R\x7fPausable: index is paused\0\0\0\0\0\0\0`@\x82\x01R``\x01\x90V[cNH{q`\xe0\x1b`\0R`2`\x04R`$`\0\xfd[cNH{q`\xe0\x1b`\0R`\x11`\x04R`$`\0\xfd[`\0`\x01\x82\x01aU\x9aWaU\x9aaUrV[P`\x01\x01\x90V[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15aU\xc7W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01aU\xabV[P`\0` \x82\x86\x01\x01R` `\x1f\x19`\x1f\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R`\0a(\x97` \x83\x01\x84aU\xa1V[`\0` \x82\x84\x03\x12\x15aV\x0cW`\0\x80\xfd[\x81Qa(\x97\x81aJ\x86V[` \x80\x82R`*\x90\x82\x01R\x7fmsg.sender is not permissioned a`@\x82\x01Ri9\x90:\xb780\xba\xb9\xb2\xb9`\xb1\x1b``\x82\x01R`\x80\x01\x90V[`\0` \x82\x84\x03\x12\x15aVsW`\0\x80\xfd[\x81Q\x80\x15\x15\x81\x14a(\x97W`\0\x80\xfd[` \x80\x82R`(\x90\x82\x01R\x7fmsg.sender is not permissioned a`@\x82\x01Rg9\x9080\xba\xb9\xb2\xb9`\xc1\x1b``\x82\x01R`\x80\x01\x90V[`\0\x80\x835`\x1e\x19\x846\x03\x01\x81\x12aV\xe2W`\0\x80\xfd[\x83\x01\x805\x91P`\x01`\x01`@\x1b\x03\x82\x11\x15aV\xfcW`\0\x80\xfd[` \x01\x91P`\x05\x81\x90\x1b6\x03\x82\x13\x15aEHW`\0\x80\xfd[`\0` \x82\x84\x03\x12\x15aW&W`\0\x80\xfd[\x81Qa(\x97\x81aI\x05V[\x80\x82\x01\x80\x82\x11\x15a\x0e\x8eWa\x0e\x8eaUrV[`\0\x80\x85\x85\x11\x15aWTW`\0\x80\xfd[\x83\x86\x11\x15aWaW`\0\x80\xfd[PP\x82\x01\x93\x91\x90\x92\x03\x91PV[`\0`\xc0\x82\x01\x88\x83R` `\x01\x80`\xa0\x1b\x03\x80\x8a\x16\x82\x86\x01R`@\x89\x81\x87\x01R`\xc0``\x87\x01R\x83\x89Q\x80\x86R`\xe0\x88\x01\x91P\x84\x8b\x01\x95P`\0[\x81\x81\x10\x15aW\xd3W\x86Q\x80Q`\xff\x16\x84R\x86\x01Q\x85\x16\x86\x84\x01R\x95\x85\x01\x95\x91\x83\x01\x91`\x01\x01aW\xa9V[PP`\x80\x87\x01\x98\x90\x98RPPPP`\xa0\x90\x91\x01\x91\x90\x91RP\x94\x93PPPPV[`\0`@\x82\x84\x03\x12\x15aX\x05W`\0\x80\xfd[a(\x97\x83\x83aMAV[\x81\x81\x03\x81\x81\x11\x15a\x0e\x8eWa\x0e\x8eaUrV[`\x01\x80`\xa0\x1b\x03\x84\x16\x81R\x82` \x82\x01R```@\x82\x01R`\0aXI``\x83\x01\x84aU\xa1V[\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15aXdW`\0\x80\xfd[\x81Q`\x01`\x01`\xc0\x1b\x03\x81\x16\x81\x14a(\x97W`\0\x80\xfd[cNH{q`\xe0\x1b`\0R`\x12`\x04R`$`\0\xfd[`\0\x82aX\xa0WaX\xa0aX{V[P\x06\x90V[`\x01`\x01`\xa0\x1b\x03\x83\x16\x81R`@` \x82\x01\x81\x90R`\0\x90aJ~\x90\x83\x01\x84aU\xa1V[\x82\x81R`@` \x82\x01R`\0aJ~`@\x83\x01\x84aU\xa1V[`\0` \x82\x84\x03\x12\x15aX\xf4W`\0\x80\xfd[PQ\x91\x90PV[`\x01`\x01`\xa0\x1b\x03\x84\x16\x81Ra\x01`\x81\x01aY#` \x83\x01\x85\x805\x82R` \x90\x81\x015\x91\x01RV[aY=``\x83\x01`@\x86\x01\x805\x82R` \x90\x81\x015\x91\x01RV[`@`\x80\x85\x01`\xa0\x84\x017`@`\xc0\x85\x01`\xe0\x84\x017\x82Qa\x01 \x83\x01R` \x83\x01Qa\x01@\x83\x01RaJ~V[`\x01\x80`\xa0\x1b\x03\x83\x16\x81R`@` \x82\x01R`\0\x82Q```@\x84\x01RaY\x95`\xa0\x84\x01\x82aU\xa1V[\x90P` \x84\x01Q``\x84\x01R`@\x84\x01Q`\x80\x84\x01R\x80\x91PP\x93\x92PPPV[\x81\x83R\x81\x81` \x85\x017P`\0\x82\x82\x01` \x90\x81\x01\x91\x90\x91R`\x1f\x90\x91\x01`\x1f\x19\x16\x90\x91\x01\x01\x90V[`\x01`\x01`\xa0\x1b\x03\x84\x16\x81R`@` \x82\x01\x81\x90R`\0\x90aXI\x90\x83\x01\x84\x86aY\xb6V[`\x01\x80`\xa0\x1b\x03\x85\x16\x81R\x83` \x82\x01R```@\x82\x01R`\0a\x17\xe6``\x83\x01\x84\x86aY\xb6V[`\0\x82`\x1f\x83\x01\x12aZ=W`\0\x80\xfd[\x81Q` aZMaM\xe7\x83aM\x1eV[\x82\x81R`\x05\x92\x90\x92\x1b\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15aZlW`\0\x80\xfd[\x82\x86\x01[\x84\x81\x10\x15aR\x85W\x80QaZ\x83\x81aQ\xdfV[\x83R\x91\x83\x01\x91\x83\x01aZpV[`\0\x80`@\x83\x85\x03\x12\x15aZ\xa3W`\0\x80\xfd[\x82Q`\x01`\x01`@\x1b\x03\x80\x82\x11\x15aZ\xbaW`\0\x80\xfd[aZ\xc6\x86\x83\x87\x01aZ,V[\x93P` \x85\x01Q\x91P\x80\x82\x11\x15aZ\xdcW`\0\x80\xfd[PaZ\xe9\x85\x82\x86\x01aZ,V[\x91PP\x92P\x92\x90PV[\x83\x81R`@` \x82\x01R`\0aXI`@\x83\x01\x84\x86aY\xb6V[`\0` \x80\x83\x85\x03\x12\x15a[ W`\0\x80\xfd[\x82Q`\x01`\x01`@\x1b\x03\x81\x11\x15a[6W`\0\x80\xfd[\x83\x01`\x1f\x81\x01\x85\x13a[GW`\0\x80\xfd[\x80Qa[UaM\xe7\x82aM\x1eV[\x81\x81R`\x05\x91\x90\x91\x1b\x82\x01\x83\x01\x90\x83\x81\x01\x90\x87\x83\x11\x15a[tW`\0\x80\xfd[\x92\x84\x01\x92[\x82\x84\x10\x15a[\x9bW\x83Qa[\x8c\x81aI\x05V[\x82R\x92\x84\x01\x92\x90\x84\x01\x90a[yV[\x97\x96PPPPPPPV[`\0` \x82\x84\x03\x12\x15a[\xb8W`\0\x80\xfd[\x81Qa(\x97\x81aQ\xdfV[`\xff\x81\x81\x16\x83\x82\x16\x01\x90\x81\x11\x15a\x0e\x8eWa\x0e\x8eaUrV[`\0``\x82\x01`\xff\x86\x16\x83R` `\x01`\x01``\x1b\x03\x80\x87\x16\x82\x86\x01R`@``\x81\x87\x01R\x83\x87Q\x80\x86R`\x80\x88\x01\x91P\x84\x89\x01\x95P`\0[\x81\x81\x10\x15a\\EW\x86Q\x80Q`\x01`\x01`\xa0\x1b\x03\x16\x84R\x86\x01Q\x85\x16\x86\x84\x01R\x95\x85\x01\x95\x91\x83\x01\x91`\x01\x01a\\\x15V[P\x90\x9a\x99PPPPPPPPPPV[`\0a\xff\xff\x80\x83\x16\x81\x81\x03a\\lWa\\laUrV[`\x01\x01\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\\\x88W`\0\x80\xfd[\x81Q`\x01`\x01`\xe0\x1b\x03\x19\x81\x16\x81\x14a(\x97W`\0\x80\xfd[`\x01`\x01``\x1b\x03\x81\x81\x16\x83\x82\x16\x02\x80\x82\x16\x91\x90\x82\x81\x14a\\\xc3Wa\\\xc3aUrV[PP\x92\x91PPV[`\0`\x01`\x01``\x1b\x03\x80\x84\x16\x80a\\\xe5Wa\\\xe5aX{V[\x92\x16\x91\x90\x91\x04\x92\x91PPV\xfeRegistryCoordinator.updateOperatRegistryCoordinator._validateChu0dNr\xe11\xa0)\xb8PE\xb6\x81\x81X]\x97\x81j\x91hq\xca\x8d< \x8c\x16\xd8|\xfdG\xa2dipfsX\"\x12 \x8d\x8bM\xfd\xe0S\xd8X7\xf1EJ\xd3)\xa5\x13C\xc7]q\x8d\x88\xd96*\x8d\"\xcc\xe0$c\xb6dsolcC\0\x08\x14\03"); + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct OperatorStatus(u8); + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for u8 { + #[inline] + fn stv_to_tokens( + &self, + ) -> <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::Token<'_> + { + alloy_sol_types::private::SolTypeValue::<::alloy_sol_types::sol_data::Uint<8>>::stv_to_tokens(self) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize(self).0 + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::abi_encode_packed_to(self, out) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::abi_encoded_size( + self, + ) + } + } + #[automatically_derived] + impl OperatorStatus { + #[doc = r" The Solidity type name."] + pub const NAME: &'static str = "@name"; + #[doc = r" Convert from the underlying value type."] + #[inline] + pub const fn from(value: u8) -> Self { + Self(value) + } + #[doc = r" Return the underlying value."] + #[inline] + pub const fn into(self) -> u8 { + self.0 + } + #[doc = r" Return the single encoding of this value, delegating to the"] + #[doc = r" underlying type."] + #[inline] + pub fn abi_encode(&self) -> alloy_sol_types::private::Vec { + ::abi_encode(&self.0) + } + #[doc = r" Return the packed encoding of this value, delegating to the"] + #[doc = r" underlying type."] + #[inline] + pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec { + ::abi_encode_packed(&self.0) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for OperatorStatus { + type RustType = u8; + type Token<'a> = + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = Self::NAME; + const ENCODED_SIZE: Option = + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + Self::type_check(token).is_ok() + } + #[inline] + fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::type_check( + token, + ) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::detokenize( + token, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for OperatorStatus { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::EventTopic>::topic_preimage_length(rust) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out) + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::EventTopic>::encode_topic( + rust, + ) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct G1Point { uint256 X; uint256 Y; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct G1Point { + pub X: ::alloy_sol_types::private::U256, + pub Y: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::U256, + ::alloy_sol_types::private::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: G1Point) -> Self { + (value.X, value.Y) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for G1Point { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + X: tuple.0, + Y: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for G1Point { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for G1Point { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.X, + ), + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.Y, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for G1Point { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for G1Point { + const NAME: &'static str = "G1Point"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("G1Point(uint256 X,uint256 Y)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::eip712_data_word(&self.X).0, <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::eip712_data_word(&self.Y).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for G1Point { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.X) + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.Y) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.X, out); + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.Y, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct G2Point { uint256[2] X; uint256[2] Y; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct G2Point { + pub X: [::alloy_sol_types::private::U256; 2usize], + pub Y: [::alloy_sol_types::private::U256; 2usize], + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::FixedArray<::alloy_sol_types::sol_data::Uint<256>, 2usize>, + ::alloy_sol_types::sol_data::FixedArray<::alloy_sol_types::sol_data::Uint<256>, 2usize>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + [::alloy_sol_types::private::U256; 2usize], + [::alloy_sol_types::private::U256; 2usize], + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: G2Point) -> Self { + (value.X, value.Y) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for G2Point { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + X: tuple.0, + Y: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for G2Point { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for G2Point { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::tokenize(&self.X), + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::tokenize(&self.Y), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for G2Point { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for G2Point { + const NAME: &'static str = "G2Point"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("G2Point(uint256[2] X,uint256[2] Y)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [ + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::eip712_data_word(&self.X) + .0, + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::SolType>::eip712_data_word(&self.Y) + .0, + ] + .concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for G2Point { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::topic_preimage_length( + &rust.X + ) + + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::topic_preimage_length( + &rust.Y + ) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.X, out + ); + <::alloy_sol_types::sol_data::FixedArray< + ::alloy_sol_types::sol_data::Uint<256>, + 2usize, + > as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.Y, out + ); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct OperatorInfo { bytes32 operatorId; OperatorStatus status; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct OperatorInfo { + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + pub status: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>, OperatorStatus); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::FixedBytes<32>, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OperatorInfo) -> Self { + (value.operatorId, value.status) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OperatorInfo { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorId: tuple.0, + status: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for OperatorInfo { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for OperatorInfo { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId), ::tokenize(&self.status),) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for OperatorInfo { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for OperatorInfo { + const NAME: &'static str = "OperatorInfo"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "OperatorInfo(bytes32 operatorId,uint8 status)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::eip712_data_word(&self.operatorId).0, ::eip712_data_word(&self.status).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for OperatorInfo { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.operatorId) + ::topic_preimage_length(&rust.status) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.operatorId, out); + ::encode_topic_preimage( + &rust.status, + out, + ); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct OperatorKickParam { uint8 quorumNumber; address operator; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct OperatorKickParam { + pub quorumNumber: u8, + pub operator: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<8>, + ::alloy_sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u8, ::alloy_sol_types::private::Address); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OperatorKickParam) -> Self { + (value.quorumNumber, value.operator) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OperatorKickParam { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + quorumNumber: tuple.0, + operator: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for OperatorKickParam { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for OperatorKickParam { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self.quorumNumber, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.operator, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for OperatorKickParam { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for OperatorKickParam { + const NAME: &'static str = "OperatorKickParam"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "OperatorKickParam(uint8 quorumNumber,address operator)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::eip712_data_word(&self.quorumNumber).0, <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::eip712_data_word(&self.operator).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for OperatorKickParam { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.quorumNumber) + <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.operator) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.quorumNumber, out); + <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.operator, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct OperatorSetParam { uint32 maxOperatorCount; uint16 kickBIPsOfOperatorStake; uint16 kickBIPsOfTotalStake; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct OperatorSetParam { + pub maxOperatorCount: u32, + pub kickBIPsOfOperatorStake: u16, + pub kickBIPsOfTotalStake: u16, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Uint<16>, + ::alloy_sol_types::sol_data::Uint<16>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u32, u16, u16); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OperatorSetParam) -> Self { + ( + value.maxOperatorCount, + value.kickBIPsOfOperatorStake, + value.kickBIPsOfTotalStake, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OperatorSetParam { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + maxOperatorCount: tuple.0, + kickBIPsOfOperatorStake: tuple.1, + kickBIPsOfTotalStake: tuple.2, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for OperatorSetParam { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for OperatorSetParam { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.maxOperatorCount, + ), + <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::SolType>::tokenize( + &self.kickBIPsOfOperatorStake, + ), + <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::SolType>::tokenize( + &self.kickBIPsOfTotalStake, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for OperatorSetParam { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for OperatorSetParam { + const NAME: &'static str = "OperatorSetParam"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("OperatorSetParam(uint32 maxOperatorCount,uint16 kickBIPsOfOperatorStake,uint16 kickBIPsOfTotalStake)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::eip712_data_word(&self.maxOperatorCount).0, <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::SolType>::eip712_data_word(&self.kickBIPsOfOperatorStake).0, <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::SolType>::eip712_data_word(&self.kickBIPsOfTotalStake).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for OperatorSetParam { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.maxOperatorCount) + <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.kickBIPsOfOperatorStake) + <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.kickBIPsOfTotalStake) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.maxOperatorCount, out); + <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.kickBIPsOfOperatorStake, out); + <::alloy_sol_types::sol_data::Uint<16> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.kickBIPsOfTotalStake, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct PubkeyRegistrationParams { G1Point pubkeyRegistrationSignature; G1Point pubkeyG1; G2Point pubkeyG2; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct PubkeyRegistrationParams { + pub pubkeyRegistrationSignature: ::RustType, + pub pubkeyG1: ::RustType, + pub pubkeyG2: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (G1Point, G1Point, G2Point); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::RustType, + ::RustType, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: PubkeyRegistrationParams) -> Self { + ( + value.pubkeyRegistrationSignature, + value.pubkeyG1, + value.pubkeyG2, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for PubkeyRegistrationParams { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + pubkeyRegistrationSignature: tuple.0, + pubkeyG1: tuple.1, + pubkeyG2: tuple.2, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for PubkeyRegistrationParams { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for PubkeyRegistrationParams { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + ::tokenize( + &self.pubkeyRegistrationSignature, + ), + ::tokenize(&self.pubkeyG1), + ::tokenize(&self.pubkeyG2), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for PubkeyRegistrationParams { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for PubkeyRegistrationParams { + const NAME: &'static str = "PubkeyRegistrationParams"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("PubkeyRegistrationParams(G1Point pubkeyRegistrationSignature,G1Point pubkeyG1,G2Point pubkeyG2)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + let mut components = alloy_sol_types::private::Vec::with_capacity(3); + components.push(::eip712_root_type()); + components.extend(::eip712_components()); + components.push(::eip712_root_type()); + components.extend(::eip712_components()); + components.push(::eip712_root_type()); + components.extend(::eip712_components()); + components + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [ + ::eip712_data_word( + &self.pubkeyRegistrationSignature, + ) + .0, + ::eip712_data_word(&self.pubkeyG1).0, + ::eip712_data_word(&self.pubkeyG2).0, + ] + .concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for PubkeyRegistrationParams { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + + ::topic_preimage_length( + &rust.pubkeyRegistrationSignature, + ) + + ::topic_preimage_length( + &rust.pubkeyG1, + ) + + ::topic_preimage_length( + &rust.pubkeyG2, + ) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + ::encode_topic_preimage( + &rust.pubkeyRegistrationSignature, + out, + ); + ::encode_topic_preimage( + &rust.pubkeyG1, + out, + ); + ::encode_topic_preimage( + &rust.pubkeyG2, + out, + ); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct QuorumBitmapUpdate { uint32 updateBlockNumber; uint32 nextUpdateBlockNumber; uint192 quorumBitmap; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct QuorumBitmapUpdate { + pub updateBlockNumber: u32, + pub nextUpdateBlockNumber: u32, + pub quorumBitmap: + <::alloy_sol_types::sol_data::Uint<192> as ::alloy_sol_types::SolType>::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Uint<192>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + u32, + u32, + <::alloy_sol_types::sol_data::Uint<192> as ::alloy_sol_types::SolType>::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: QuorumBitmapUpdate) -> Self { + ( + value.updateBlockNumber, + value.nextUpdateBlockNumber, + value.quorumBitmap, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for QuorumBitmapUpdate { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + updateBlockNumber: tuple.0, + nextUpdateBlockNumber: tuple.1, + quorumBitmap: tuple.2, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for QuorumBitmapUpdate { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for QuorumBitmapUpdate { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.updateBlockNumber, + ), + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize( + &self.nextUpdateBlockNumber, + ), + <::alloy_sol_types::sol_data::Uint<192> as alloy_sol_types::SolType>::tokenize( + &self.quorumBitmap, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for QuorumBitmapUpdate { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for QuorumBitmapUpdate { + const NAME: &'static str = "QuorumBitmapUpdate"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed("QuorumBitmapUpdate(uint32 updateBlockNumber,uint32 nextUpdateBlockNumber,uint192 quorumBitmap)") + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::eip712_data_word(&self.updateBlockNumber).0, <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::eip712_data_word(&self.nextUpdateBlockNumber).0, <::alloy_sol_types::sol_data::Uint<192> as alloy_sol_types::SolType>::eip712_data_word(&self.quorumBitmap).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for QuorumBitmapUpdate { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.updateBlockNumber) + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nextUpdateBlockNumber) + <::alloy_sol_types::sol_data::Uint<192> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.quorumBitmap) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.updateBlockNumber, out); + <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.nextUpdateBlockNumber, out); + <::alloy_sol_types::sol_data::Uint<192> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.quorumBitmap, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct SignatureWithSaltAndExpiry { bytes signature; bytes32 salt; uint256 expiry; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct SignatureWithSaltAndExpiry { + pub signature: ::alloy_sol_types::private::Bytes, + pub salt: ::alloy_sol_types::private::FixedBytes<32>, + pub expiry: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Bytes, + ::alloy_sol_types::private::FixedBytes<32>, + ::alloy_sol_types::private::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: SignatureWithSaltAndExpiry) -> Self { + (value.signature, value.salt, value.expiry) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for SignatureWithSaltAndExpiry { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + signature: tuple.0, + salt: tuple.1, + expiry: tuple.2, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for SignatureWithSaltAndExpiry { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for SignatureWithSaltAndExpiry { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + (<::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(&self.signature), <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.salt), <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(&self.expiry),) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for SignatureWithSaltAndExpiry { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for SignatureWithSaltAndExpiry { + const NAME: &'static str = "SignatureWithSaltAndExpiry"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "SignatureWithSaltAndExpiry(bytes signature,bytes32 salt,uint256 expiry)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::eip712_data_word(&self.signature).0, <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::eip712_data_word(&self.salt).0, <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::eip712_data_word(&self.expiry).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for SignatureWithSaltAndExpiry { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.signature) + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.salt) + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.expiry) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.signature, out); + <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.salt, out); + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.expiry, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "```solidity\nstruct StrategyParams { address strategy; uint96 multiplier; }\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct StrategyParams { + pub strategy: ::alloy_sol_types::private::Address, + pub multiplier: + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Uint<96>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: StrategyParams) -> Self { + (value.strategy, value.multiplier) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for StrategyParams { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + strategy: tuple.0, + multiplier: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolValue for StrategyParams { + type SolType = Self; + } + #[automatically_derived] + impl alloy_sol_types::private::SolTypeValue for StrategyParams { + #[inline] + fn stv_to_tokens(&self) -> ::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.strategy, + ), + <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::SolType>::tokenize( + &self.multiplier, + ), + ) + } + #[inline] + fn stv_abi_encoded_size(&self) -> usize { + if let Some(size) = ::ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + } + #[inline] + fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { + ::eip712_hash_struct(self) + } + #[inline] + fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) { + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_encode_packed_to( + &tuple, out, + ) + } + #[inline] + fn stv_abi_packed_encoded_size(&self) -> usize { + if let Some(size) = ::PACKED_ENCODED_SIZE { + return size; + } + let tuple = + as ::core::convert::From>::from(self.clone()); + as alloy_sol_types::SolType>::abi_packed_encoded_size( + &tuple, + ) + } + } + #[automatically_derived] + impl alloy_sol_types::SolType for StrategyParams { + type RustType = Self; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SOL_NAME: &'static str = ::NAME; + const ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::ENCODED_SIZE; + const PACKED_ENCODED_SIZE: Option = + as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + #[inline] + fn valid_token(token: &Self::Token<'_>) -> bool { + as alloy_sol_types::SolType>::valid_token(token) + } + #[inline] + fn detokenize(token: Self::Token<'_>) -> Self::RustType { + let tuple = as alloy_sol_types::SolType>::detokenize(token); + >>::from(tuple) + } + } + #[automatically_derived] + impl alloy_sol_types::SolStruct for StrategyParams { + const NAME: &'static str = "StrategyParams"; + #[inline] + fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { + alloy_sol_types::private::Cow::Borrowed( + "StrategyParams(address strategy,uint96 multiplier)", + ) + } + #[inline] + fn eip712_components( + ) -> alloy_sol_types::private::Vec> + { + alloy_sol_types::private::Vec::new() + } + #[inline] + fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { + ::eip712_root_type() + } + #[inline] + fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { + [<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::eip712_data_word(&self.strategy).0, <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::SolType>::eip712_data_word(&self.multiplier).0, ].concat() + } + } + #[automatically_derived] + impl alloy_sol_types::EventTopic for StrategyParams { + #[inline] + fn topic_preimage_length(rust: &Self::RustType) -> usize { + 0usize + <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.strategy) + <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.multiplier) + } + #[inline] + fn encode_topic_preimage( + rust: &Self::RustType, + out: &mut alloy_sol_types::private::Vec, + ) { + out.reserve(::topic_preimage_length(rust)); + <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.strategy, out); + <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.multiplier, out); + } + #[inline] + fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken { + let mut out = alloy_sol_types::private::Vec::new(); + ::encode_topic_preimage(rust, &mut out); + alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out)) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `ChurnApproverUpdated(address,address)` and selector `0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c`.\n```solidity\nevent ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct ChurnApproverUpdated { + #[allow(missing_docs)] + pub prevChurnApprover: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newChurnApprover: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for ChurnApproverUpdated { + type DataTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "ChurnApproverUpdated(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 49u8, 84u8, 87u8, 216u8, 168u8, 254u8, 96u8, 240u8, 74u8, 241u8, 124u8, 22u8, + 226u8, 245u8, 165u8, 225u8, 219u8, 97u8, 43u8, 49u8, 100u8, 142u8, 88u8, 3u8, + 3u8, 96u8, 117u8, 158u8, 248u8, 243u8, 82u8, 140u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + prevChurnApprover: data.0, + newChurnApprover: data.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.prevChurnApprover, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newChurnApprover, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for ChurnApproverUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&ChurnApproverUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &ChurnApproverUpdated) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `EjectorUpdated(address,address)` and selector `0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9`.\n```solidity\nevent EjectorUpdated(address prevEjector, address newEjector);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct EjectorUpdated { + #[allow(missing_docs)] + pub prevEjector: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newEjector: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for EjectorUpdated { + type DataTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "EjectorUpdated(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 143u8, 48u8, 171u8, 9u8, 244u8, 58u8, 108u8, 21u8, 125u8, 127u8, 206u8, 126u8, + 10u8, 19u8, 192u8, 3u8, 4u8, 44u8, 28u8, 149u8, 232u8, 167u8, 46u8, 122u8, + 20u8, 106u8, 33u8, 192u8, 202u8, 162u8, 77u8, 201u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + prevEjector: data.0, + newEjector: data.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.prevEjector, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newEjector, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for EjectorUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&EjectorUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &EjectorUpdated) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `Initialized(uint8)` and selector `0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498`.\n```solidity\nevent Initialized(uint8 version);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u8, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint8)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 127u8, 38u8, 184u8, 63u8, 249u8, 110u8, 31u8, 43u8, 106u8, 104u8, 47u8, 19u8, + 56u8, 82u8, 246u8, 121u8, 138u8, 9u8, 196u8, 101u8, 218u8, 149u8, 146u8, 20u8, + 96u8, 206u8, 251u8, 56u8, 71u8, 64u8, 36u8, 152u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self.version, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `OperatorDeregistered(address,bytes32)` and selector `0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4`.\n```solidity\nevent OperatorDeregistered(address indexed operator, bytes32 indexed operatorId);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct OperatorDeregistered { + #[allow(missing_docs)] + pub operator: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OperatorDeregistered { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ); + const SIGNATURE: &'static str = "OperatorDeregistered(address,bytes32)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 57u8, 111u8, 220u8, 177u8, 128u8, 203u8, 15u8, 234u8, 38u8, 146u8, 129u8, 19u8, + 251u8, 15u8, 209u8, 195u8, 84u8, 152u8, 99u8, 249u8, 205u8, 86u8, 62u8, 106u8, + 24u8, 79u8, 29u8, 87u8, 129u8, 22u8, 200u8, 228u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + operator: topics.1, + operatorId: topics.2, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.operator.clone(), + self.operatorId.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.operator); + out[2usize] = <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::encode_topic(&self.operatorId); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OperatorDeregistered { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OperatorDeregistered> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OperatorDeregistered) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `OperatorRegistered(address,bytes32)` and selector `0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe`.\n```solidity\nevent OperatorRegistered(address indexed operator, bytes32 indexed operatorId);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct OperatorRegistered { + #[allow(missing_docs)] + pub operator: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OperatorRegistered { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ); + const SIGNATURE: &'static str = "OperatorRegistered(address,bytes32)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 232u8, 230u8, 140u8, 239u8, 28u8, 58u8, 118u8, 30u8, 215u8, 190u8, 126u8, + 132u8, 99u8, 163u8, 117u8, 242u8, 127u8, 123u8, 195u8, 53u8, 229u8, 24u8, 36u8, + 34u8, 60u8, 172u8, 206u8, 99u8, 110u8, 197u8, 195u8, 254u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + operator: topics.1, + operatorId: topics.2, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.operator.clone(), + self.operatorId.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.operator); + out[2usize] = <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::encode_topic(&self.operatorId); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OperatorRegistered { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OperatorRegistered> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OperatorRegistered) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `OperatorSetParamsUpdated(uint8,(uint32,uint16,uint16))` and selector `0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac`.\n```solidity\nevent OperatorSetParamsUpdated(uint8 indexed quorumNumber, OperatorSetParam operatorSetParams);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct OperatorSetParamsUpdated { + #[allow(missing_docs)] + pub quorumNumber: u8, + #[allow(missing_docs)] + pub operatorSetParams: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OperatorSetParamsUpdated { + type DataTuple<'a> = (OperatorSetParam,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<8>, + ); + const SIGNATURE: &'static str = + "OperatorSetParamsUpdated(uint8,(uint32,uint16,uint16))"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 62u8, 230u8, 254u8, 141u8, 84u8, 97u8, 2u8, 68u8, 195u8, 233u8, 211u8, 192u8, + 102u8, 174u8, 74u8, 238u8, 153u8, 120u8, 132u8, 170u8, 40u8, 241u8, 6u8, 22u8, + 174u8, 130u8, 25u8, 37u8, 64u8, 19u8, 24u8, 172u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + quorumNumber: topics.1, + operatorSetParams: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + (::tokenize( + &self.operatorSetParams, + ),) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.quorumNumber.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::EventTopic>::encode_topic(&self.quorumNumber); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OperatorSetParamsUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OperatorSetParamsUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OperatorSetParamsUpdated) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `OperatorSocketUpdate(bytes32,string)` and selector `0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa`.\n```solidity\nevent OperatorSocketUpdate(bytes32 indexed operatorId, string socket);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct OperatorSocketUpdate { + #[allow(missing_docs)] + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + #[allow(missing_docs)] + pub socket: ::alloy_sol_types::private::String, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OperatorSocketUpdate { + type DataTuple<'a> = (::alloy_sol_types::sol_data::String,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ); + const SIGNATURE: &'static str = "OperatorSocketUpdate(bytes32,string)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 236u8, 41u8, 99u8, 171u8, 33u8, 193u8, 229u8, 14u8, 30u8, 88u8, 42u8, 165u8, + 66u8, 175u8, 46u8, 75u8, 247u8, 191u8, 56u8, 230u8, 225u8, 64u8, 60u8, 39u8, + 180u8, 46u8, 28u8, 93u8, 110u8, 98u8, 30u8, 170u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + operatorId: topics.1, + socket: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize( + &self.socket, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.operatorId.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::EventTopic>::encode_topic(&self.operatorId); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OperatorSocketUpdate { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OperatorSocketUpdate> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OperatorSocketUpdate) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`.\n```solidity\nevent OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, 31u8, + 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, 218u8, + 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.previousOwner); + out[2usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.newOwner); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `Paused(address,uint256)` and selector `0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d`.\n```solidity\nevent Paused(address indexed account, uint256 newPausedStatus);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct Paused { + #[allow(missing_docs)] + pub account: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Paused { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Paused(address,uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 171u8, 64u8, 163u8, 116u8, 188u8, 81u8, 222u8, 55u8, 34u8, 0u8, 168u8, 188u8, + 152u8, 26u8, 248u8, 201u8, 236u8, 220u8, 8u8, 223u8, 218u8, 239u8, 11u8, 182u8, + 224u8, 159u8, 136u8, 243u8, 198u8, 22u8, 239u8, 61u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + account: topics.1, + newPausedStatus: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.account.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.account); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Paused { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Paused> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Paused) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `PauserRegistrySet(address,address)` and selector `0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6`.\n```solidity\nevent PauserRegistrySet(address pauserRegistry, address newPauserRegistry);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct PauserRegistrySet { + #[allow(missing_docs)] + pub pauserRegistry: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newPauserRegistry: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for PauserRegistrySet { + type DataTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "PauserRegistrySet(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 110u8, 159u8, 205u8, 83u8, 152u8, 150u8, 252u8, 166u8, 14u8, 139u8, 15u8, 1u8, + 221u8, 88u8, 2u8, 51u8, 228u8, 138u8, 107u8, 15u8, 125u8, 240u8, 19u8, 184u8, + 155u8, 167u8, 245u8, 101u8, 134u8, 154u8, 205u8, 182u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + pauserRegistry: data.0, + newPauserRegistry: data.1, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.pauserRegistry, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newPauserRegistry, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for PauserRegistrySet { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&PauserRegistrySet> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &PauserRegistrySet) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `QuorumBlockNumberUpdated(uint8,uint256)` and selector `0x46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4`.\n```solidity\nevent QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct QuorumBlockNumberUpdated { + #[allow(missing_docs)] + pub quorumNumber: u8, + #[allow(missing_docs)] + pub blocknumber: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for QuorumBlockNumberUpdated { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<8>, + ); + const SIGNATURE: &'static str = "QuorumBlockNumberUpdated(uint8,uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 70u8, 7u8, 125u8, 85u8, 51u8, 7u8, 99u8, 241u8, 98u8, 105u8, 253u8, 117u8, + 229u8, 118u8, 22u8, 99u8, 244u8, 25u8, 45u8, 39u8, 145u8, 116u8, 124u8, 1u8, + 137u8, 177u8, 106u8, 211u8, 29u8, 176u8, 125u8, 180u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + quorumNumber: topics.1, + blocknumber: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.blocknumber, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.quorumNumber.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::EventTopic>::encode_topic(&self.quorumNumber); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for QuorumBlockNumberUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&QuorumBlockNumberUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &QuorumBlockNumberUpdated) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Event with signature `Unpaused(address,uint256)` and selector `0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c`.\n```solidity\nevent Unpaused(address indexed account, uint256 newPausedStatus);\n```"] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + #[derive(Clone)] + pub struct Unpaused { + #[allow(missing_docs)] + pub account: ::alloy_sol_types::private::Address, + #[allow(missing_docs)] + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Unpaused { + type DataTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Unpaused(address,uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = + alloy_sol_types::private::B256::new([ + 53u8, 130u8, 209u8, 130u8, 142u8, 38u8, 191u8, 86u8, 189u8, 128u8, 21u8, 2u8, + 188u8, 2u8, 26u8, 192u8, 188u8, 138u8, 251u8, 87u8, 200u8, 38u8, 228u8, 152u8, + 107u8, 69u8, 89u8, 60u8, 143u8, 173u8, 56u8, 156u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + account: topics.1, + newPausedStatus: data.0, + } + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.account.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken(Self::SIGNATURE_HASH); + out[1usize] = <::alloy_sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(&self.account); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Unpaused { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Unpaused> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Unpaused) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Constructor`.\n```solidity\nconstructor(address _serviceManager, address _stakeRegistry, address _blsApkRegistry, address _indexRegistry);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct constructorCall { + pub _serviceManager: ::alloy_sol_types::private::Address, + pub _stakeRegistry: ::alloy_sol_types::private::Address, + pub _blsApkRegistry: ::alloy_sol_types::private::Address, + pub _indexRegistry: ::alloy_sol_types::private::Address, + } + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + ( + value._serviceManager, + value._stakeRegistry, + value._blsApkRegistry, + value._indexRegistry, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _serviceManager: tuple.0, + _stakeRegistry: tuple.1, + _blsApkRegistry: tuple.2, + _indexRegistry: tuple.3, + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._serviceManager, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._stakeRegistry, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._blsApkRegistry, + ), + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._indexRegistry, + ), + ) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `OPERATOR_CHURN_APPROVAL_TYPEHASH()` and selector `0xca0de882`.\n```solidity\nfunction OPERATOR_CHURN_APPROVAL_TYPEHASH() external view returns (bytes32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct OPERATOR_CHURN_APPROVAL_TYPEHASHCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`OPERATOR_CHURN_APPROVAL_TYPEHASH()`](OPERATOR_CHURN_APPROVAL_TYPEHASHCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct OPERATOR_CHURN_APPROVAL_TYPEHASHReturn { + pub _0: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OPERATOR_CHURN_APPROVAL_TYPEHASHCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OPERATOR_CHURN_APPROVAL_TYPEHASHCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OPERATOR_CHURN_APPROVAL_TYPEHASHReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OPERATOR_CHURN_APPROVAL_TYPEHASHReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for OPERATOR_CHURN_APPROVAL_TYPEHASHCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = OPERATOR_CHURN_APPROVAL_TYPEHASHReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OPERATOR_CHURN_APPROVAL_TYPEHASH()"; + const SELECTOR: [u8; 4] = [202u8, 13u8, 232u8, 130u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `PUBKEY_REGISTRATION_TYPEHASH()` and selector `0x9feab859`.\n```solidity\nfunction PUBKEY_REGISTRATION_TYPEHASH() external view returns (bytes32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct PUBKEY_REGISTRATION_TYPEHASHCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`PUBKEY_REGISTRATION_TYPEHASH()`](PUBKEY_REGISTRATION_TYPEHASHCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct PUBKEY_REGISTRATION_TYPEHASHReturn { + pub _0: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: PUBKEY_REGISTRATION_TYPEHASHCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for PUBKEY_REGISTRATION_TYPEHASHCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: PUBKEY_REGISTRATION_TYPEHASHReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for PUBKEY_REGISTRATION_TYPEHASHReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for PUBKEY_REGISTRATION_TYPEHASHCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = PUBKEY_REGISTRATION_TYPEHASHReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "PUBKEY_REGISTRATION_TYPEHASH()"; + const SELECTOR: [u8; 4] = [159u8, 234u8, 184u8, 89u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `blsApkRegistry()` and selector `0x5df45946`.\n```solidity\nfunction blsApkRegistry() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct blsApkRegistryCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`blsApkRegistry()`](blsApkRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct blsApkRegistryReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: blsApkRegistryCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for blsApkRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: blsApkRegistryReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for blsApkRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for blsApkRegistryCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = blsApkRegistryReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "blsApkRegistry()"; + const SELECTOR: [u8; 4] = [93u8, 244u8, 89u8, 70u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `calculateOperatorChurnApprovalDigestHash(address,bytes32,(uint8,address)[],bytes32,uint256)` and selector `0x84ca5213`.\n```solidity\nfunction calculateOperatorChurnApprovalDigestHash(address registeringOperator, bytes32 registeringOperatorId, OperatorKickParam[] memory operatorKickParams, bytes32 salt, uint256 expiry) external view returns (bytes32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct calculateOperatorChurnApprovalDigestHashCall { + pub registeringOperator: ::alloy_sol_types::private::Address, + pub registeringOperatorId: ::alloy_sol_types::private::FixedBytes<32>, + pub operatorKickParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + pub salt: ::alloy_sol_types::private::FixedBytes<32>, + pub expiry: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`calculateOperatorChurnApprovalDigestHash(address,bytes32,(uint8,address)[],bytes32,uint256)`](calculateOperatorChurnApprovalDigestHashCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct calculateOperatorChurnApprovalDigestHashReturn { + pub _0: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Array, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::FixedBytes<32>, + ::alloy_sol_types::private::Vec< + ::RustType, + >, + ::alloy_sol_types::private::FixedBytes<32>, + ::alloy_sol_types::private::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> + { + fn from(value: calculateOperatorChurnApprovalDigestHashCall) -> Self { + ( + value.registeringOperator, + value.registeringOperatorId, + value.operatorKickParams, + value.salt, + value.expiry, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for calculateOperatorChurnApprovalDigestHashCall + { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + registeringOperator: tuple.0, + registeringOperatorId: tuple.1, + operatorKickParams: tuple.2, + salt: tuple.3, + expiry: tuple.4, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> + { + fn from(value: calculateOperatorChurnApprovalDigestHashReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for calculateOperatorChurnApprovalDigestHashReturn + { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for calculateOperatorChurnApprovalDigestHashCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Array, + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = calculateOperatorChurnApprovalDigestHashReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "calculateOperatorChurnApprovalDigestHash(address,bytes32,(uint8,address)[],bytes32,uint256)"; + const SELECTOR: [u8; 4] = [132u8, 202u8, 82u8, 19u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self.registeringOperator), <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.registeringOperatorId), <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::tokenize(&self.operatorKickParams), <::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.salt), <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(&self.expiry),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `churnApprover()` and selector `0x054310e6`.\n```solidity\nfunction churnApprover() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct churnApproverCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`churnApprover()`](churnApproverCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct churnApproverReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: churnApproverCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for churnApproverCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: churnApproverReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for churnApproverReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for churnApproverCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = churnApproverReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "churnApprover()"; + const SELECTOR: [u8; 4] = [5u8, 67u8, 16u8, 230u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `createQuorum((uint32,uint16,uint16),uint96,(address,uint96)[])` and selector `0xd75b4c88`.\n```solidity\nfunction createQuorum(OperatorSetParam memory operatorSetParams, uint96 minimumStake, StrategyParams[] memory strategyParams) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct createQuorumCall { + pub operatorSetParams: ::RustType, + pub minimumStake: + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + pub strategyParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`createQuorum((uint32,uint16,uint16),uint96,(address,uint96)[])`](createQuorumCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct createQuorumReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + OperatorSetParam, + ::alloy_sol_types::sol_data::Uint<96>, + ::alloy_sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::RustType, + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + ::alloy_sol_types::private::Vec< + ::RustType, + >, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: createQuorumCall) -> Self { + ( + value.operatorSetParams, + value.minimumStake, + value.strategyParams, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for createQuorumCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorSetParams: tuple.0, + minimumStake: tuple.1, + strategyParams: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: createQuorumReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for createQuorumReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for createQuorumCall { + type Parameters<'a> = ( + OperatorSetParam, + ::alloy_sol_types::sol_data::Uint<96>, + ::alloy_sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = createQuorumReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = + "createQuorum((uint32,uint16,uint16),uint96,(address,uint96)[])"; + const SELECTOR: [u8; 4] = [215u8, 91u8, 76u8, 136u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (::tokenize(&self.operatorSetParams), <::alloy_sol_types::sol_data::Uint<96> as alloy_sol_types::SolType>::tokenize(&self.minimumStake), <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::tokenize(&self.strategyParams),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `deregisterOperator(bytes)` and selector `0xca4f2d97`.\n```solidity\nfunction deregisterOperator(bytes memory quorumNumbers) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct deregisterOperatorCall { + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`deregisterOperator(bytes)`](deregisterOperatorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct deregisterOperatorReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: deregisterOperatorCall) -> Self { + (value.quorumNumbers,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for deregisterOperatorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + quorumNumbers: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: deregisterOperatorReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for deregisterOperatorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for deregisterOperatorCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = deregisterOperatorReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "deregisterOperator(bytes)"; + const SELECTOR: [u8; 4] = [202u8, 79u8, 45u8, 151u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize( + &self.quorumNumbers, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `ejectOperator(address,bytes)` and selector `0x6e3b17db`.\n```solidity\nfunction ejectOperator(address operator, bytes memory quorumNumbers) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ejectOperatorCall { + pub operator: ::alloy_sol_types::private::Address, + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`ejectOperator(address,bytes)`](ejectOperatorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ejectOperatorReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ejectOperatorCall) -> Self { + (value.operator, value.quorumNumbers) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ejectOperatorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operator: tuple.0, + quorumNumbers: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ejectOperatorReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ejectOperatorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ejectOperatorCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = ejectOperatorReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ejectOperator(address,bytes)"; + const SELECTOR: [u8; 4] = [110u8, 59u8, 23u8, 219u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.operator, + ), + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize( + &self.quorumNumbers, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `ejector()` and selector `0x28f61b31`.\n```solidity\nfunction ejector() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ejectorCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`ejector()`](ejectorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ejectorReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ejectorCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ejectorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ejectorReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ejectorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ejectorCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = ejectorReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ejector()"; + const SELECTOR: [u8; 4] = [40u8, 246u8, 27u8, 49u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getCurrentQuorumBitmap(bytes32)` and selector `0x871ef049`.\n```solidity\nfunction getCurrentQuorumBitmap(bytes32 operatorId) external view returns (uint192);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getCurrentQuorumBitmapCall { + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getCurrentQuorumBitmap(bytes32)`](getCurrentQuorumBitmapCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getCurrentQuorumBitmapReturn { + pub _0: <::alloy_sol_types::sol_data::Uint<192> as ::alloy_sol_types::SolType>::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCurrentQuorumBitmapCall) -> Self { + (value.operatorId,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCurrentQuorumBitmapCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorId: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<192>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + <::alloy_sol_types::sol_data::Uint<192> as ::alloy_sol_types::SolType>::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCurrentQuorumBitmapReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCurrentQuorumBitmapReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getCurrentQuorumBitmapCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getCurrentQuorumBitmapReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<192>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getCurrentQuorumBitmap(bytes32)"; + const SELECTOR: [u8; 4] = [135u8, 30u8, 240u8, 73u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getOperator(address)` and selector `0x5865c60c`.\n```solidity\nfunction getOperator(address operator) external view returns (OperatorInfo memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorCall { + pub operator: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getOperator(address)`](getOperatorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorReturn { + pub _0: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorCall) -> Self { + (value.operator,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { operator: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (OperatorInfo,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = + (::RustType,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getOperatorCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getOperatorReturn; + type ReturnTuple<'a> = (OperatorInfo,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getOperator(address)"; + const SELECTOR: [u8; 4] = [88u8, 101u8, 198u8, 12u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.operator, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getOperatorFromId(bytes32)` and selector `0x296bb064`.\n```solidity\nfunction getOperatorFromId(bytes32 operatorId) external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorFromIdCall { + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getOperatorFromId(bytes32)`](getOperatorFromIdCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorFromIdReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorFromIdCall) -> Self { + (value.operatorId,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorFromIdCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorId: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorFromIdReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorFromIdReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getOperatorFromIdCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getOperatorFromIdReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getOperatorFromId(bytes32)"; + const SELECTOR: [u8; 4] = [41u8, 107u8, 176u8, 100u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getOperatorId(address)` and selector `0x13542a4e`.\n```solidity\nfunction getOperatorId(address operator) external view returns (bytes32);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorIdCall { + pub operator: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getOperatorId(address)`](getOperatorIdCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorIdReturn { + pub _0: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorIdCall) -> Self { + (value.operator,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorIdCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { operator: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorIdReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorIdReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getOperatorIdCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getOperatorIdReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getOperatorId(address)"; + const SELECTOR: [u8; 4] = [19u8, 84u8, 42u8, 78u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.operator, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getOperatorSetParams(uint8)` and selector `0xe65797ad`.\n```solidity\nfunction getOperatorSetParams(uint8 quorumNumber) external view returns (OperatorSetParam memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorSetParamsCall { + pub quorumNumber: u8, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getOperatorSetParams(uint8)`](getOperatorSetParamsCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorSetParamsReturn { + pub _0: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u8,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorSetParamsCall) -> Self { + (value.quorumNumber,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorSetParamsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + quorumNumber: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (OperatorSetParam,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = + (::RustType,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorSetParamsReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorSetParamsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getOperatorSetParamsCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getOperatorSetParamsReturn; + type ReturnTuple<'a> = (OperatorSetParam,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getOperatorSetParams(uint8)"; + const SELECTOR: [u8; 4] = [230u8, 87u8, 151u8, 173u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self.quorumNumber, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getOperatorStatus(address)` and selector `0xfd39105a`.\n```solidity\nfunction getOperatorStatus(address operator) external view returns (OperatorStatus);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorStatusCall { + pub operator: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getOperatorStatus(address)`](getOperatorStatusCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getOperatorStatusReturn { + pub _0: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorStatusCall) -> Self { + (value.operator,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorStatusCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { operator: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (OperatorStatus,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = + (::RustType,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getOperatorStatusReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getOperatorStatusReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getOperatorStatusCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getOperatorStatusReturn; + type ReturnTuple<'a> = (OperatorStatus,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getOperatorStatus(address)"; + const SELECTOR: [u8; 4] = [253u8, 57u8, 16u8, 90u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.operator, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getQuorumBitmapAtBlockNumberByIndex(bytes32,uint32,uint256)` and selector `0x04ec6351`.\n```solidity\nfunction getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) external view returns (uint192);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapAtBlockNumberByIndexCall { + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + pub blockNumber: u32, + pub index: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getQuorumBitmapAtBlockNumberByIndex(bytes32,uint32,uint256)`](getQuorumBitmapAtBlockNumberByIndexCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapAtBlockNumberByIndexReturn { + pub _0: <::alloy_sol_types::sol_data::Uint<192> as ::alloy_sol_types::SolType>::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::FixedBytes<32>, + u32, + ::alloy_sol_types::private::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapAtBlockNumberByIndexCall) -> Self { + (value.operatorId, value.blockNumber, value.index) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapAtBlockNumberByIndexCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorId: tuple.0, + blockNumber: tuple.1, + index: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<192>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + <::alloy_sol_types::sol_data::Uint<192> as ::alloy_sol_types::SolType>::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapAtBlockNumberByIndexReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapAtBlockNumberByIndexReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getQuorumBitmapAtBlockNumberByIndexCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getQuorumBitmapAtBlockNumberByIndexReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<192>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = + "getQuorumBitmapAtBlockNumberByIndex(bytes32,uint32,uint256)"; + const SELECTOR: [u8; 4] = [4u8, 236u8, 99u8, 81u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId), <::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize(&self.blockNumber), <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(&self.index),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getQuorumBitmapHistoryLength(bytes32)` and selector `0x03fd3492`.\n```solidity\nfunction getQuorumBitmapHistoryLength(bytes32 operatorId) external view returns (uint256);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapHistoryLengthCall { + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getQuorumBitmapHistoryLength(bytes32)`](getQuorumBitmapHistoryLengthCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapHistoryLengthReturn { + pub _0: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapHistoryLengthCall) -> Self { + (value.operatorId,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapHistoryLengthCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorId: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapHistoryLengthReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapHistoryLengthReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getQuorumBitmapHistoryLengthCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getQuorumBitmapHistoryLengthReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getQuorumBitmapHistoryLength(bytes32)"; + const SELECTOR: [u8; 4] = [3u8, 253u8, 52u8, 146u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getQuorumBitmapIndicesAtBlockNumber(uint32,bytes32[])` and selector `0xc391425e`.\n```solidity\nfunction getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] memory operatorIds) external view returns (uint32[] memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapIndicesAtBlockNumberCall { + pub blockNumber: u32, + pub operatorIds: + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::FixedBytes<32>>, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getQuorumBitmapIndicesAtBlockNumber(uint32,bytes32[])`](getQuorumBitmapIndicesAtBlockNumberCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapIndicesAtBlockNumberReturn { + pub _0: ::alloy_sol_types::private::Vec, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + u32, + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::FixedBytes<32>>, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapIndicesAtBlockNumberCall) -> Self { + (value.blockNumber, value.operatorIds) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapIndicesAtBlockNumberCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + blockNumber: tuple.0, + operatorIds: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = + (::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Vec,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapIndicesAtBlockNumberReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapIndicesAtBlockNumberReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getQuorumBitmapIndicesAtBlockNumberCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Uint<32>, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getQuorumBitmapIndicesAtBlockNumberReturn; + type ReturnTuple<'a> = + (::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<32>>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getQuorumBitmapIndicesAtBlockNumber(uint32,bytes32[])"; + const SELECTOR: [u8; 4] = [195u8, 145u8, 66u8, 94u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Uint<32> as alloy_sol_types::SolType>::tokenize(&self.blockNumber), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::FixedBytes<32>> as alloy_sol_types::SolType>::tokenize(&self.operatorIds),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `getQuorumBitmapUpdateByIndex(bytes32,uint256)` and selector `0x1eb812da`.\n```solidity\nfunction getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) external view returns (QuorumBitmapUpdate memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapUpdateByIndexCall { + pub operatorId: ::alloy_sol_types::private::FixedBytes<32>, + pub index: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`getQuorumBitmapUpdateByIndex(bytes32,uint256)`](getQuorumBitmapUpdateByIndexCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct getQuorumBitmapUpdateByIndexReturn { + pub _0: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::FixedBytes<32>, + ::alloy_sol_types::private::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapUpdateByIndexCall) -> Self { + (value.operatorId, value.index) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapUpdateByIndexCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorId: tuple.0, + index: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (QuorumBitmapUpdate,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = + (::RustType,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getQuorumBitmapUpdateByIndexReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getQuorumBitmapUpdateByIndexReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getQuorumBitmapUpdateByIndexCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::FixedBytes<32>, + ::alloy_sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = getQuorumBitmapUpdateByIndexReturn; + type ReturnTuple<'a> = (QuorumBitmapUpdate,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getQuorumBitmapUpdateByIndex(bytes32,uint256)"; + const SELECTOR: [u8; 4] = [30u8, 184u8, 18u8, 218u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self.operatorId), <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(&self.index),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `indexRegistry()` and selector `0x9e9923c2`.\n```solidity\nfunction indexRegistry() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct indexRegistryCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`indexRegistry()`](indexRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct indexRegistryReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: indexRegistryCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for indexRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: indexRegistryReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for indexRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for indexRegistryCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = indexRegistryReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "indexRegistry()"; + const SELECTOR: [u8; 4] = [158u8, 153u8, 35u8, 194u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `initialize(address,address,address,address,uint256,(uint32,uint16,uint16)[],uint96[],(address,uint96)[][])` and selector `0xdd8283f3`.\n```solidity\nfunction initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, OperatorSetParam[] memory _operatorSetParams, uint96[] memory _minimumStakes, StrategyParams[][] memory _strategyParams) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct initializeCall { + pub _initialOwner: ::alloy_sol_types::private::Address, + pub _churnApprover: ::alloy_sol_types::private::Address, + pub _ejector: ::alloy_sol_types::private::Address, + pub _pauserRegistry: ::alloy_sol_types::private::Address, + pub _initialPausedStatus: ::alloy_sol_types::private::U256, + pub _operatorSetParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + pub _minimumStakes: ::alloy_sol_types::private::Vec< + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + >, + pub _strategyParams: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec< + ::RustType, + >, + >, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`initialize(address,address,address,address,uint256,(uint32,uint16,uint16)[],uint96[],(address,uint96)[][])`](initializeCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Array, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>>, + ::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array, + >, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::Address, + ::alloy_sol_types::private::U256, + ::alloy_sol_types::private::Vec< + ::RustType, + >, + ::alloy_sol_types::private::Vec< + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + >, + ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec< + ::RustType, + >, + >, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + ( + value._initialOwner, + value._churnApprover, + value._ejector, + value._pauserRegistry, + value._initialPausedStatus, + value._operatorSetParams, + value._minimumStakes, + value._strategyParams, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _initialOwner: tuple.0, + _churnApprover: tuple.1, + _ejector: tuple.2, + _pauserRegistry: tuple.3, + _initialPausedStatus: tuple.4, + _operatorSetParams: tuple.5, + _minimumStakes: tuple.6, + _strategyParams: tuple.7, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Address, + ::alloy_sol_types::sol_data::Uint<256>, + ::alloy_sol_types::sol_data::Array, + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>>, + ::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array, + >, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize(address,address,address,address,uint256,(uint32,uint16,uint16)[],uint96[],(address,uint96)[][])"; + const SELECTOR: [u8; 4] = [221u8, 130u8, 131u8, 243u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self._initialOwner), <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self._churnApprover), <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self._ejector), <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(&self._pauserRegistry), <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(&self._initialPausedStatus), <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::tokenize(&self._operatorSetParams), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Uint<96>> as alloy_sol_types::SolType>::tokenize(&self._minimumStakes), <::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Array> as alloy_sol_types::SolType>::tokenize(&self._strategyParams),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `isChurnApproverSaltUsed(bytes32)` and selector `0x1478851f`.\n```solidity\nfunction isChurnApproverSaltUsed(bytes32) external view returns (bool);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct isChurnApproverSaltUsedCall { + pub _0: ::alloy_sol_types::private::FixedBytes<32>, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`isChurnApproverSaltUsed(bytes32)`](isChurnApproverSaltUsedCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct isChurnApproverSaltUsedReturn { + pub _0: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isChurnApproverSaltUsedCall) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isChurnApproverSaltUsedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isChurnApproverSaltUsedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isChurnApproverSaltUsedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isChurnApproverSaltUsedCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::FixedBytes<32>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = isChurnApproverSaltUsedReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isChurnApproverSaltUsed(bytes32)"; + const SELECTOR: [u8; 4] = [20u8, 120u8, 133u8, 31u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::FixedBytes<32> as alloy_sol_types::SolType>::tokenize(&self._0),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `numRegistries()` and selector `0xd72d8dd6`.\n```solidity\nfunction numRegistries() external view returns (uint256);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct numRegistriesCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`numRegistries()`](numRegistriesCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct numRegistriesReturn { + pub _0: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: numRegistriesCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for numRegistriesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: numRegistriesReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for numRegistriesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for numRegistriesCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = numRegistriesReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "numRegistries()"; + const SELECTOR: [u8; 4] = [215u8, 45u8, 141u8, 214u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `owner()` and selector `0x8da5cb5b`.\n```solidity\nfunction owner() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ownerCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`owner()`](ownerCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct ownerReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = ownerReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `pause(uint256)` and selector `0x136439dd`.\n```solidity\nfunction pause(uint256 newPausedStatus) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseCall { + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`pause(uint256)`](pauseCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseCall) -> Self { + (value.newPausedStatus,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newPausedStatus: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for pauseCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = pauseReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "pause(uint256)"; + const SELECTOR: [u8; 4] = [19u8, 100u8, 57u8, 221u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `pauseAll()` and selector `0x595c6a67`.\n```solidity\nfunction pauseAll() external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseAllCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`pauseAll()`](pauseAllCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauseAllReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseAllCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseAllCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauseAllReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauseAllReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for pauseAllCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = pauseAllReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "pauseAll()"; + const SELECTOR: [u8; 4] = [89u8, 92u8, 106u8, 103u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `paused(uint8)` and selector `0x5ac86ab7`.\n```solidity\nfunction paused(uint8 index) external view returns (bool);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_0Call { + pub index: u8, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`paused(uint8)`](paused_0Call) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_0Return { + pub _0: bool, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u8,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_0Call) -> Self { + (value.index,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_0Call { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { index: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_0Return) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_0Return { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for paused_0Call { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = paused_0Return; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "paused(uint8)"; + const SELECTOR: [u8; 4] = [90u8, 200u8, 106u8, 183u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self.index, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `paused()` and selector `0x5c975abb`.\n```solidity\nfunction paused() external view returns (uint256);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_1Call {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`paused()`](paused_1Call) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct paused_1Return { + pub _0: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_1Call) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_1Call { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: paused_1Return) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for paused_1Return { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for paused_1Call { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = paused_1Return; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "paused()"; + const SELECTOR: [u8; 4] = [92u8, 151u8, 90u8, 187u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `pauserRegistry()` and selector `0x886f1195`.\n```solidity\nfunction pauserRegistry() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauserRegistryCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`pauserRegistry()`](pauserRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pauserRegistryReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauserRegistryCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauserRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pauserRegistryReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pauserRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for pauserRegistryCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = pauserRegistryReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "pauserRegistry()"; + const SELECTOR: [u8; 4] = [136u8, 111u8, 17u8, 149u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `pubkeyRegistrationMessageHash(address)` and selector `0x3c2a7f4c`.\n```solidity\nfunction pubkeyRegistrationMessageHash(address operator) external view returns (G1Point memory);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pubkeyRegistrationMessageHashCall { + pub operator: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`pubkeyRegistrationMessageHash(address)`](pubkeyRegistrationMessageHashCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct pubkeyRegistrationMessageHashReturn { + pub _0: ::RustType, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pubkeyRegistrationMessageHashCall) -> Self { + (value.operator,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pubkeyRegistrationMessageHashCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { operator: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (G1Point,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::RustType,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: pubkeyRegistrationMessageHashReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for pubkeyRegistrationMessageHashReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for pubkeyRegistrationMessageHashCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = pubkeyRegistrationMessageHashReturn; + type ReturnTuple<'a> = (G1Point,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "pubkeyRegistrationMessageHash(address)"; + const SELECTOR: [u8; 4] = [60u8, 42u8, 127u8, 76u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.operator, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `quorumCount()` and selector `0x9aa1653d`.\n```solidity\nfunction quorumCount() external view returns (uint8);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct quorumCountCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`quorumCount()`](quorumCountCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct quorumCountReturn { + pub _0: u8, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: quorumCountCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for quorumCountCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u8,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: quorumCountReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for quorumCountReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for quorumCountCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = quorumCountReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "quorumCount()"; + const SELECTOR: [u8; 4] = [154u8, 161u8, 101u8, 61u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `quorumUpdateBlockNumber(uint8)` and selector `0x249a0c42`.\n```solidity\nfunction quorumUpdateBlockNumber(uint8) external view returns (uint256);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct quorumUpdateBlockNumberCall { + pub _0: u8, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`quorumUpdateBlockNumber(uint8)`](quorumUpdateBlockNumberCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct quorumUpdateBlockNumberReturn { + pub _0: ::alloy_sol_types::private::U256, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u8,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: quorumUpdateBlockNumberCall) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for quorumUpdateBlockNumberCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: quorumUpdateBlockNumberReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for quorumUpdateBlockNumberReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for quorumUpdateBlockNumberCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<8>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = quorumUpdateBlockNumberReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "quorumUpdateBlockNumber(uint8)"; + const SELECTOR: [u8; 4] = [36u8, 154u8, 12u8, 66u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self._0, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `registerOperator(bytes,string,((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])),(bytes,bytes32,uint256))` and selector `0xa50857bf`.\n```solidity\nfunction registerOperator(bytes memory quorumNumbers, string memory socket, PubkeyRegistrationParams memory params, SignatureWithSaltAndExpiry memory operatorSignature) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registerOperatorCall { + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + pub socket: ::alloy_sol_types::private::String, + pub params: ::RustType, + pub operatorSignature: ::RustType, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`registerOperator(bytes,string,((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])),(bytes,bytes32,uint256))`](registerOperatorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registerOperatorReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::String, + PubkeyRegistrationParams, + SignatureWithSaltAndExpiry, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Bytes, + ::alloy_sol_types::private::String, + ::RustType, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registerOperatorCall) -> Self { + ( + value.quorumNumbers, + value.socket, + value.params, + value.operatorSignature, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registerOperatorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + quorumNumbers: tuple.0, + socket: tuple.1, + params: tuple.2, + operatorSignature: tuple.3, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registerOperatorReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registerOperatorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for registerOperatorCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::String, + PubkeyRegistrationParams, + SignatureWithSaltAndExpiry, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = registerOperatorReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "registerOperator(bytes,string,((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])),(bytes,bytes32,uint256))"; + const SELECTOR: [u8; 4] = [165u8, 8u8, 87u8, 191u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize( + &self.quorumNumbers, + ), + <::alloy_sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize( + &self.socket, + ), + ::tokenize(&self.params), + ::tokenize( + &self.operatorSignature, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `registerOperatorWithChurn(bytes,string,((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])),(uint8,address)[],(bytes,bytes32,uint256),(bytes,bytes32,uint256))` and selector `0x9b5d177b`.\n```solidity\nfunction registerOperatorWithChurn(bytes memory quorumNumbers, string memory socket, PubkeyRegistrationParams memory params, OperatorKickParam[] memory operatorKickParams, SignatureWithSaltAndExpiry memory churnApproverSignature, SignatureWithSaltAndExpiry memory operatorSignature) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registerOperatorWithChurnCall { + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + pub socket: ::alloy_sol_types::private::String, + pub params: ::RustType, + pub operatorKickParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + pub churnApproverSignature: + ::RustType, + pub operatorSignature: ::RustType, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`registerOperatorWithChurn(bytes,string,((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])),(uint8,address)[],(bytes,bytes32,uint256),(bytes,bytes32,uint256))`](registerOperatorWithChurnCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registerOperatorWithChurnReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::String, + PubkeyRegistrationParams, + ::alloy_sol_types::sol_data::Array, + SignatureWithSaltAndExpiry, + SignatureWithSaltAndExpiry, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Bytes, + ::alloy_sol_types::private::String, + ::RustType, + ::alloy_sol_types::private::Vec< + ::RustType, + >, + ::RustType, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registerOperatorWithChurnCall) -> Self { + ( + value.quorumNumbers, + value.socket, + value.params, + value.operatorKickParams, + value.churnApproverSignature, + value.operatorSignature, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registerOperatorWithChurnCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + quorumNumbers: tuple.0, + socket: tuple.1, + params: tuple.2, + operatorKickParams: tuple.3, + churnApproverSignature: tuple.4, + operatorSignature: tuple.5, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registerOperatorWithChurnReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registerOperatorWithChurnReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for registerOperatorWithChurnCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Bytes, + ::alloy_sol_types::sol_data::String, + PubkeyRegistrationParams, + ::alloy_sol_types::sol_data::Array, + SignatureWithSaltAndExpiry, + SignatureWithSaltAndExpiry, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = registerOperatorWithChurnReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "registerOperatorWithChurn(bytes,string,((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])),(uint8,address)[],(bytes,bytes32,uint256),(bytes,bytes32,uint256))"; + const SELECTOR: [u8; 4] = [155u8, 93u8, 23u8, 123u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(&self.quorumNumbers), <::alloy_sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(&self.socket), ::tokenize(&self.params), <::alloy_sol_types::sol_data::Array as alloy_sol_types::SolType>::tokenize(&self.operatorKickParams), ::tokenize(&self.churnApproverSignature), ::tokenize(&self.operatorSignature),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `registries(uint256)` and selector `0x6347c900`.\n```solidity\nfunction registries(uint256) external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registriesCall { + pub _0: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`registries(uint256)`](registriesCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct registriesReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registriesCall) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registriesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: registriesReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for registriesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for registriesCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = registriesReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "registries(uint256)"; + const SELECTOR: [u8; 4] = [99u8, 71u8, 201u8, 0u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self._0, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `renounceOwnership()` and selector `0x715018a6`.\n```solidity\nfunction renounceOwnership() external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct renounceOwnershipCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `serviceManager()` and selector `0x3998fdd3`.\n```solidity\nfunction serviceManager() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct serviceManagerCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`serviceManager()`](serviceManagerCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct serviceManagerReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: serviceManagerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for serviceManagerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: serviceManagerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for serviceManagerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for serviceManagerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = serviceManagerReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "serviceManager()"; + const SELECTOR: [u8; 4] = [57u8, 152u8, 253u8, 211u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `setChurnApprover(address)` and selector `0x29d1e0c3`.\n```solidity\nfunction setChurnApprover(address _churnApprover) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setChurnApproverCall { + pub _churnApprover: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`setChurnApprover(address)`](setChurnApproverCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setChurnApproverReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setChurnApproverCall) -> Self { + (value._churnApprover,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setChurnApproverCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _churnApprover: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setChurnApproverReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setChurnApproverReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setChurnApproverCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setChurnApproverReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setChurnApprover(address)"; + const SELECTOR: [u8; 4] = [41u8, 209u8, 224u8, 195u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._churnApprover, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `setEjector(address)` and selector `0x2cdd1e86`.\n```solidity\nfunction setEjector(address _ejector) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setEjectorCall { + pub _ejector: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`setEjector(address)`](setEjectorCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setEjectorReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setEjectorCall) -> Self { + (value._ejector,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setEjectorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _ejector: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setEjectorReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setEjectorReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setEjectorCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setEjectorReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setEjector(address)"; + const SELECTOR: [u8; 4] = [44u8, 221u8, 30u8, 134u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self._ejector, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `setOperatorSetParams(uint8,(uint32,uint16,uint16))` and selector `0x5b0b829f`.\n```solidity\nfunction setOperatorSetParams(uint8 quorumNumber, OperatorSetParam memory operatorSetParams) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setOperatorSetParamsCall { + pub quorumNumber: u8, + pub operatorSetParams: ::RustType, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`setOperatorSetParams(uint8,(uint32,uint16,uint16))`](setOperatorSetParamsCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setOperatorSetParamsReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<8>, OperatorSetParam); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + u8, + ::RustType, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setOperatorSetParamsCall) -> Self { + (value.quorumNumber, value.operatorSetParams) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setOperatorSetParamsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + quorumNumber: tuple.0, + operatorSetParams: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setOperatorSetParamsReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setOperatorSetParamsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setOperatorSetParamsCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<8>, OperatorSetParam); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setOperatorSetParamsReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setOperatorSetParams(uint8,(uint32,uint16,uint16))"; + const SELECTOR: [u8; 4] = [91u8, 11u8, 130u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<8> as alloy_sol_types::SolType>::tokenize( + &self.quorumNumber, + ), + ::tokenize( + &self.operatorSetParams, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `setPauserRegistry(address)` and selector `0x10d67a2f`.\n```solidity\nfunction setPauserRegistry(address newPauserRegistry) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setPauserRegistryCall { + pub newPauserRegistry: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`setPauserRegistry(address)`](setPauserRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct setPauserRegistryReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setPauserRegistryCall) -> Self { + (value.newPauserRegistry,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setPauserRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newPauserRegistry: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: setPauserRegistryReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for setPauserRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setPauserRegistryCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setPauserRegistryReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setPauserRegistry(address)"; + const SELECTOR: [u8; 4] = [16u8, 214u8, 122u8, 47u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newPauserRegistry, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `stakeRegistry()` and selector `0x68304835`.\n```solidity\nfunction stakeRegistry() external view returns (address);\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct stakeRegistryCall {} + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`stakeRegistry()`](stakeRegistryCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct stakeRegistryReturn { + pub _0: ::alloy_sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: stakeRegistryCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for stakeRegistryCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: stakeRegistryReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for stakeRegistryReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for stakeRegistryCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = stakeRegistryReturn; + type ReturnTuple<'a> = (::alloy_sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "stakeRegistry()"; + const SELECTOR: [u8; 4] = [104u8, 48u8, 72u8, 53u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `transferOwnership(address)` and selector `0xf2fde38b`.\n```solidity\nfunction transferOwnership(address newOwner) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct transferOwnershipCall { + pub newOwner: ::alloy_sol_types::private::Address, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `unpause(uint256)` and selector `0xfabc1cbc`.\n```solidity\nfunction unpause(uint256 newPausedStatus) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct unpauseCall { + pub newPausedStatus: ::alloy_sol_types::private::U256, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`unpause(uint256)`](unpauseCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct unpauseReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::U256,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: unpauseCall) -> Self { + (value.newPausedStatus,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for unpauseCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newPausedStatus: tuple.0, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: unpauseReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for unpauseReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for unpauseCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = unpauseReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "unpause(uint256)"; + const SELECTOR: [u8; 4] = [250u8, 188u8, 28u8, 188u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize( + &self.newPausedStatus, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `updateOperators(address[])` and selector `0x00cf2ab5`.\n```solidity\nfunction updateOperators(address[] memory operators) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct updateOperatorsCall { + pub operators: ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Address>, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`updateOperators(address[])`](updateOperatorsCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct updateOperatorsReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = + (::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Address>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = + (::alloy_sol_types::private::Vec<::alloy_sol_types::private::Address>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateOperatorsCall) -> Self { + (value.operators,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateOperatorsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { operators: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateOperatorsReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateOperatorsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateOperatorsCall { + type Parameters<'a> = + (::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Address>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateOperatorsReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateOperators(address[])"; + const SELECTOR: [u8; 4] = [0u8, 207u8, 42u8, 181u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + (<::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Address, + > as alloy_sol_types::SolType>::tokenize( + &self.operators + ),) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `updateOperatorsForQuorum(address[][],bytes)` and selector `0x5140a548`.\n```solidity\nfunction updateOperatorsForQuorum(address[][] memory operatorsPerQuorum, bytes memory quorumNumbers) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct updateOperatorsForQuorumCall { + pub operatorsPerQuorum: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Address>, + >, + pub quorumNumbers: ::alloy_sol_types::private::Bytes, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`updateOperatorsForQuorum(address[][],bytes)`](updateOperatorsForQuorumCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct updateOperatorsForQuorumReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + ::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Address>, + >, + ::alloy_sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Address>, + >, + ::alloy_sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateOperatorsForQuorumCall) -> Self { + (value.operatorsPerQuorum, value.quorumNumbers) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateOperatorsForQuorumCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + operatorsPerQuorum: tuple.0, + quorumNumbers: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateOperatorsForQuorumReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateOperatorsForQuorumReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateOperatorsForQuorumCall { + type Parameters<'a> = ( + ::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Address>, + >, + ::alloy_sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateOperatorsForQuorumReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateOperatorsForQuorum(address[][],bytes)"; + const SELECTOR: [u8; 4] = [81u8, 64u8, 165u8, 72u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::Array< + ::alloy_sol_types::sol_data::Array<::alloy_sol_types::sol_data::Address>, + > as alloy_sol_types::SolType>::tokenize( + &self.operatorsPerQuorum + ), + <::alloy_sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize( + &self.quorumNumbers, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Function with signature `updateSocket(string)` and selector `0x0cf4b767`.\n```solidity\nfunction updateSocket(string memory socket) external;\n```"] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct updateSocketCall { + pub socket: ::alloy_sol_types::private::String, + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container type for the return parameters of the [`updateSocket(string)`](updateSocketCall) function."] + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct updateSocketReturn {} + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use ::alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (::alloy_sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (::alloy_sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateSocketCall) -> Self { + (value.socket,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateSocketCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { socket: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateSocketReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateSocketReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateSocketCall { + type Parameters<'a> = (::alloy_sol_types::sol_data::String,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateSocketReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateSocket(string)"; + const SELECTOR: [u8; 4] = [12u8, 244u8, 183u8, 103u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + <::alloy_sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize( + &self.socket, + ), + ) + } + #[inline] + fn abi_decode_returns( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence( + data, validate, + ) + .map(Into::into) + } + } + }; + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container for all the [`RegistryCoordinator`](self) function calls."] + pub enum RegistryCoordinatorCalls { + OPERATOR_CHURN_APPROVAL_TYPEHASH(OPERATOR_CHURN_APPROVAL_TYPEHASHCall), + PUBKEY_REGISTRATION_TYPEHASH(PUBKEY_REGISTRATION_TYPEHASHCall), + blsApkRegistry(blsApkRegistryCall), + calculateOperatorChurnApprovalDigestHash(calculateOperatorChurnApprovalDigestHashCall), + churnApprover(churnApproverCall), + createQuorum(createQuorumCall), + deregisterOperator(deregisterOperatorCall), + ejectOperator(ejectOperatorCall), + ejector(ejectorCall), + getCurrentQuorumBitmap(getCurrentQuorumBitmapCall), + getOperator(getOperatorCall), + getOperatorFromId(getOperatorFromIdCall), + getOperatorId(getOperatorIdCall), + getOperatorSetParams(getOperatorSetParamsCall), + getOperatorStatus(getOperatorStatusCall), + getQuorumBitmapAtBlockNumberByIndex(getQuorumBitmapAtBlockNumberByIndexCall), + getQuorumBitmapHistoryLength(getQuorumBitmapHistoryLengthCall), + getQuorumBitmapIndicesAtBlockNumber(getQuorumBitmapIndicesAtBlockNumberCall), + getQuorumBitmapUpdateByIndex(getQuorumBitmapUpdateByIndexCall), + indexRegistry(indexRegistryCall), + initialize(initializeCall), + isChurnApproverSaltUsed(isChurnApproverSaltUsedCall), + numRegistries(numRegistriesCall), + owner(ownerCall), + pause(pauseCall), + pauseAll(pauseAllCall), + paused_0(paused_0Call), + paused_1(paused_1Call), + pauserRegistry(pauserRegistryCall), + pubkeyRegistrationMessageHash(pubkeyRegistrationMessageHashCall), + quorumCount(quorumCountCall), + quorumUpdateBlockNumber(quorumUpdateBlockNumberCall), + registerOperator(registerOperatorCall), + registerOperatorWithChurn(registerOperatorWithChurnCall), + registries(registriesCall), + renounceOwnership(renounceOwnershipCall), + serviceManager(serviceManagerCall), + setChurnApprover(setChurnApproverCall), + setEjector(setEjectorCall), + setOperatorSetParams(setOperatorSetParamsCall), + setPauserRegistry(setPauserRegistryCall), + stakeRegistry(stakeRegistryCall), + transferOwnership(transferOwnershipCall), + unpause(unpauseCall), + updateOperators(updateOperatorsCall), + updateOperatorsForQuorum(updateOperatorsForQuorumCall), + updateSocket(updateSocketCall), + } + #[automatically_derived] + impl RegistryCoordinatorCalls { + #[doc = r" All the selectors of this enum."] + #[doc = r""] + #[doc = r" Note that the selectors might not be in the same order as the variants."] + #[doc = r" No guarantees are made about the order of the selectors."] + #[doc = r""] + #[doc = r" Prefer using `SolInterface` methods instead."] + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [0u8, 207u8, 42u8, 181u8], + [3u8, 253u8, 52u8, 146u8], + [4u8, 236u8, 99u8, 81u8], + [5u8, 67u8, 16u8, 230u8], + [12u8, 244u8, 183u8, 103u8], + [16u8, 214u8, 122u8, 47u8], + [19u8, 84u8, 42u8, 78u8], + [19u8, 100u8, 57u8, 221u8], + [20u8, 120u8, 133u8, 31u8], + [30u8, 184u8, 18u8, 218u8], + [36u8, 154u8, 12u8, 66u8], + [40u8, 246u8, 27u8, 49u8], + [41u8, 107u8, 176u8, 100u8], + [41u8, 209u8, 224u8, 195u8], + [44u8, 221u8, 30u8, 134u8], + [57u8, 152u8, 253u8, 211u8], + [60u8, 42u8, 127u8, 76u8], + [81u8, 64u8, 165u8, 72u8], + [88u8, 101u8, 198u8, 12u8], + [89u8, 92u8, 106u8, 103u8], + [90u8, 200u8, 106u8, 183u8], + [91u8, 11u8, 130u8, 159u8], + [92u8, 151u8, 90u8, 187u8], + [93u8, 244u8, 89u8, 70u8], + [99u8, 71u8, 201u8, 0u8], + [104u8, 48u8, 72u8, 53u8], + [110u8, 59u8, 23u8, 219u8], + [113u8, 80u8, 24u8, 166u8], + [132u8, 202u8, 82u8, 19u8], + [135u8, 30u8, 240u8, 73u8], + [136u8, 111u8, 17u8, 149u8], + [141u8, 165u8, 203u8, 91u8], + [154u8, 161u8, 101u8, 61u8], + [155u8, 93u8, 23u8, 123u8], + [158u8, 153u8, 35u8, 194u8], + [159u8, 234u8, 184u8, 89u8], + [165u8, 8u8, 87u8, 191u8], + [195u8, 145u8, 66u8, 94u8], + [202u8, 13u8, 232u8, 130u8], + [202u8, 79u8, 45u8, 151u8], + [215u8, 45u8, 141u8, 214u8], + [215u8, 91u8, 76u8, 136u8], + [221u8, 130u8, 131u8, 243u8], + [230u8, 87u8, 151u8, 173u8], + [242u8, 253u8, 227u8, 139u8], + [250u8, 188u8, 28u8, 188u8], + [253u8, 57u8, 16u8, 90u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for RegistryCoordinatorCalls { + const NAME: &'static str = "RegistryCoordinatorCalls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 47usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::OPERATOR_CHURN_APPROVAL_TYPEHASH(_) => ::SELECTOR, + Self::PUBKEY_REGISTRATION_TYPEHASH(_) => ::SELECTOR, + Self::blsApkRegistry(_) => ::SELECTOR, + Self::calculateOperatorChurnApprovalDigestHash(_) => ::SELECTOR, + Self::churnApprover(_) => ::SELECTOR, + Self::createQuorum(_) => ::SELECTOR, + Self::deregisterOperator(_) => ::SELECTOR, + Self::ejectOperator(_) => ::SELECTOR, + Self::ejector(_) => ::SELECTOR, + Self::getCurrentQuorumBitmap(_) => ::SELECTOR, + Self::getOperator(_) => ::SELECTOR, + Self::getOperatorFromId(_) => ::SELECTOR, + Self::getOperatorId(_) => ::SELECTOR, + Self::getOperatorSetParams(_) => ::SELECTOR, + Self::getOperatorStatus(_) => ::SELECTOR, + Self::getQuorumBitmapAtBlockNumberByIndex(_) => ::SELECTOR, + Self::getQuorumBitmapHistoryLength(_) => ::SELECTOR, + Self::getQuorumBitmapIndicesAtBlockNumber(_) => ::SELECTOR, + Self::getQuorumBitmapUpdateByIndex(_) => ::SELECTOR, + Self::indexRegistry(_) => ::SELECTOR, + Self::initialize(_) => ::SELECTOR, + Self::isChurnApproverSaltUsed(_) => ::SELECTOR, + Self::numRegistries(_) => ::SELECTOR, + Self::owner(_) => ::SELECTOR, + Self::pause(_) => ::SELECTOR, + Self::pauseAll(_) => ::SELECTOR, + Self::paused_0(_) => ::SELECTOR, + Self::paused_1(_) => ::SELECTOR, + Self::pauserRegistry(_) => ::SELECTOR, + Self::pubkeyRegistrationMessageHash(_) => ::SELECTOR, + Self::quorumCount(_) => ::SELECTOR, + Self::quorumUpdateBlockNumber(_) => ::SELECTOR, + Self::registerOperator(_) => ::SELECTOR, + Self::registerOperatorWithChurn(_) => ::SELECTOR, + Self::registries(_) => ::SELECTOR, + Self::renounceOwnership(_) => ::SELECTOR, + Self::serviceManager(_) => ::SELECTOR, + Self::setChurnApprover(_) => ::SELECTOR, + Self::setEjector(_) => ::SELECTOR, + Self::setOperatorSetParams(_) => ::SELECTOR, + Self::setPauserRegistry(_) => ::SELECTOR, + Self::stakeRegistry(_) => ::SELECTOR, + Self::transferOwnership(_) => ::SELECTOR, + Self::unpause(_) => ::SELECTOR, + Self::updateOperators(_) => ::SELECTOR, + Self::updateOperatorsForQuorum(_) => ::SELECTOR, + Self::updateSocket(_) => ::SELECTOR, + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(unsafe_code, non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + bool, + ) + -> alloy_sol_types::Result] = &[ + { + fn updateOperators( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::updateOperators) + } + updateOperators + }, + { + fn getQuorumBitmapHistoryLength( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::getQuorumBitmapHistoryLength) + } + getQuorumBitmapHistoryLength + }, + { + fn getQuorumBitmapAtBlockNumberByIndex( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::getQuorumBitmapAtBlockNumberByIndex) + } + getQuorumBitmapAtBlockNumberByIndex + }, + { + fn churnApprover( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::churnApprover) + } + churnApprover + }, + { + fn updateSocket( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::updateSocket) + } + updateSocket + }, + { + fn setPauserRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::setPauserRegistry) + } + setPauserRegistry + }, + { + fn getOperatorId( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::getOperatorId) + } + getOperatorId + }, + { + fn pause( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::pause) + } + pause + }, + { + fn isChurnApproverSaltUsed( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::isChurnApproverSaltUsed) + } + isChurnApproverSaltUsed + }, + { + fn getQuorumBitmapUpdateByIndex( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::getQuorumBitmapUpdateByIndex) + } + getQuorumBitmapUpdateByIndex + }, + { + fn quorumUpdateBlockNumber( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::quorumUpdateBlockNumber) + } + quorumUpdateBlockNumber + }, + { + fn ejector( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::ejector) + } + ejector + }, + { + fn getOperatorFromId( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::getOperatorFromId) + } + getOperatorFromId + }, + { + fn setChurnApprover( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::setChurnApprover) + } + setChurnApprover + }, + { + fn setEjector( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::setEjector) + } + setEjector + }, + { + fn serviceManager( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::serviceManager) + } + serviceManager + }, + { + fn pubkeyRegistrationMessageHash( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::pubkeyRegistrationMessageHash) + } + pubkeyRegistrationMessageHash + }, + { + fn updateOperatorsForQuorum( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::updateOperatorsForQuorum) + } + updateOperatorsForQuorum + }, + { + fn getOperator( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::getOperator) + } + getOperator + }, + { + fn pauseAll( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::pauseAll) + } + pauseAll + }, + { + fn paused_0( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::paused_0) + } + paused_0 + }, + { + fn setOperatorSetParams( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::setOperatorSetParams) + } + setOperatorSetParams + }, + { + fn paused_1( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::paused_1) + } + paused_1 + }, + { + fn blsApkRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::blsApkRegistry) + } + blsApkRegistry + }, + { + fn registries( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::registries) + } + registries + }, + { + fn stakeRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::stakeRegistry) + } + stakeRegistry + }, + { + fn ejectOperator( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::ejectOperator) + } + ejectOperator + }, + { + fn renounceOwnership( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::renounceOwnership) + } + renounceOwnership + }, + { + fn calculateOperatorChurnApprovalDigestHash( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::calculateOperatorChurnApprovalDigestHash) + } + calculateOperatorChurnApprovalDigestHash + }, + { + fn getCurrentQuorumBitmap( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::getCurrentQuorumBitmap) + } + getCurrentQuorumBitmap + }, + { + fn pauserRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::pauserRegistry) + } + pauserRegistry + }, + { + fn owner( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::owner) + } + owner + }, + { + fn quorumCount( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::quorumCount) + } + quorumCount + }, + { + fn registerOperatorWithChurn( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::registerOperatorWithChurn) + } + registerOperatorWithChurn + }, + { + fn indexRegistry( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::indexRegistry) + } + indexRegistry + }, + { + fn PUBKEY_REGISTRATION_TYPEHASH( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::PUBKEY_REGISTRATION_TYPEHASH) + } + PUBKEY_REGISTRATION_TYPEHASH + }, + { + fn registerOperator( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::registerOperator) + } + registerOperator + }, + { + fn getQuorumBitmapIndicesAtBlockNumber( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::getQuorumBitmapIndicesAtBlockNumber) + } + getQuorumBitmapIndicesAtBlockNumber + }, + { + fn OPERATOR_CHURN_APPROVAL_TYPEHASH( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate).map(RegistryCoordinatorCalls::OPERATOR_CHURN_APPROVAL_TYPEHASH) + } + OPERATOR_CHURN_APPROVAL_TYPEHASH + }, + { + fn deregisterOperator( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::deregisterOperator) + } + deregisterOperator + }, + { + fn numRegistries( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::numRegistries) + } + numRegistries + }, + { + fn createQuorum( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::createQuorum) + } + createQuorum + }, + { + fn initialize( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::initialize) + } + initialize + }, + { + fn getOperatorSetParams( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::getOperatorSetParams) + } + getOperatorSetParams + }, + { + fn transferOwnership( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::transferOwnership) + } + transferOwnership + }, + { + fn unpause( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data, validate) + .map(RegistryCoordinatorCalls::unpause) + } + unpause + }, + { + fn getOperatorStatus( + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, validate, + ) + .map(RegistryCoordinatorCalls::getOperatorStatus) + } + getOperatorStatus + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err(alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + )); + }; + (unsafe { DECODE_SHIMS.get_unchecked(idx) })(data, validate) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::OPERATOR_CHURN_APPROVAL_TYPEHASH(inner) => ::abi_encoded_size(inner), + Self::PUBKEY_REGISTRATION_TYPEHASH(inner) => ::abi_encoded_size(inner), + Self::blsApkRegistry(inner) => ::abi_encoded_size(inner), + Self::calculateOperatorChurnApprovalDigestHash(inner) => ::abi_encoded_size(inner), + Self::churnApprover(inner) => ::abi_encoded_size(inner), + Self::createQuorum(inner) => ::abi_encoded_size(inner), + Self::deregisterOperator(inner) => ::abi_encoded_size(inner), + Self::ejectOperator(inner) => ::abi_encoded_size(inner), + Self::ejector(inner) => ::abi_encoded_size(inner), + Self::getCurrentQuorumBitmap(inner) => ::abi_encoded_size(inner), + Self::getOperator(inner) => ::abi_encoded_size(inner), + Self::getOperatorFromId(inner) => ::abi_encoded_size(inner), + Self::getOperatorId(inner) => ::abi_encoded_size(inner), + Self::getOperatorSetParams(inner) => ::abi_encoded_size(inner), + Self::getOperatorStatus(inner) => ::abi_encoded_size(inner), + Self::getQuorumBitmapAtBlockNumberByIndex(inner) => ::abi_encoded_size(inner), + Self::getQuorumBitmapHistoryLength(inner) => ::abi_encoded_size(inner), + Self::getQuorumBitmapIndicesAtBlockNumber(inner) => ::abi_encoded_size(inner), + Self::getQuorumBitmapUpdateByIndex(inner) => ::abi_encoded_size(inner), + Self::indexRegistry(inner) => ::abi_encoded_size(inner), + Self::initialize(inner) => ::abi_encoded_size(inner), + Self::isChurnApproverSaltUsed(inner) => ::abi_encoded_size(inner), + Self::numRegistries(inner) => ::abi_encoded_size(inner), + Self::owner(inner) => ::abi_encoded_size(inner), + Self::pause(inner) => ::abi_encoded_size(inner), + Self::pauseAll(inner) => ::abi_encoded_size(inner), + Self::paused_0(inner) => ::abi_encoded_size(inner), + Self::paused_1(inner) => ::abi_encoded_size(inner), + Self::pauserRegistry(inner) => ::abi_encoded_size(inner), + Self::pubkeyRegistrationMessageHash(inner) => ::abi_encoded_size(inner), + Self::quorumCount(inner) => ::abi_encoded_size(inner), + Self::quorumUpdateBlockNumber(inner) => ::abi_encoded_size(inner), + Self::registerOperator(inner) => ::abi_encoded_size(inner), + Self::registerOperatorWithChurn(inner) => ::abi_encoded_size(inner), + Self::registries(inner) => ::abi_encoded_size(inner), + Self::renounceOwnership(inner) => ::abi_encoded_size(inner), + Self::serviceManager(inner) => ::abi_encoded_size(inner), + Self::setChurnApprover(inner) => ::abi_encoded_size(inner), + Self::setEjector(inner) => ::abi_encoded_size(inner), + Self::setOperatorSetParams(inner) => ::abi_encoded_size(inner), + Self::setPauserRegistry(inner) => ::abi_encoded_size(inner), + Self::stakeRegistry(inner) => ::abi_encoded_size(inner), + Self::transferOwnership(inner) => ::abi_encoded_size(inner), + Self::unpause(inner) => ::abi_encoded_size(inner), + Self::updateOperators(inner) => ::abi_encoded_size(inner), + Self::updateOperatorsForQuorum(inner) => ::abi_encoded_size(inner), + Self::updateSocket(inner) => ::abi_encoded_size(inner), + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::OPERATOR_CHURN_APPROVAL_TYPEHASH(inner) => ::abi_encode_raw(inner, out), + Self::PUBKEY_REGISTRATION_TYPEHASH(inner) => ::abi_encode_raw(inner, out), + Self::blsApkRegistry(inner) => ::abi_encode_raw(inner, out), + Self::calculateOperatorChurnApprovalDigestHash(inner) => ::abi_encode_raw(inner, out), + Self::churnApprover(inner) => ::abi_encode_raw(inner, out), + Self::createQuorum(inner) => ::abi_encode_raw(inner, out), + Self::deregisterOperator(inner) => ::abi_encode_raw(inner, out), + Self::ejectOperator(inner) => ::abi_encode_raw(inner, out), + Self::ejector(inner) => ::abi_encode_raw(inner, out), + Self::getCurrentQuorumBitmap(inner) => ::abi_encode_raw(inner, out), + Self::getOperator(inner) => ::abi_encode_raw(inner, out), + Self::getOperatorFromId(inner) => ::abi_encode_raw(inner, out), + Self::getOperatorId(inner) => ::abi_encode_raw(inner, out), + Self::getOperatorSetParams(inner) => ::abi_encode_raw(inner, out), + Self::getOperatorStatus(inner) => ::abi_encode_raw(inner, out), + Self::getQuorumBitmapAtBlockNumberByIndex(inner) => ::abi_encode_raw(inner, out), + Self::getQuorumBitmapHistoryLength(inner) => ::abi_encode_raw(inner, out), + Self::getQuorumBitmapIndicesAtBlockNumber(inner) => ::abi_encode_raw(inner, out), + Self::getQuorumBitmapUpdateByIndex(inner) => ::abi_encode_raw(inner, out), + Self::indexRegistry(inner) => ::abi_encode_raw(inner, out), + Self::initialize(inner) => ::abi_encode_raw(inner, out), + Self::isChurnApproverSaltUsed(inner) => ::abi_encode_raw(inner, out), + Self::numRegistries(inner) => ::abi_encode_raw(inner, out), + Self::owner(inner) => ::abi_encode_raw(inner, out), + Self::pause(inner) => ::abi_encode_raw(inner, out), + Self::pauseAll(inner) => ::abi_encode_raw(inner, out), + Self::paused_0(inner) => ::abi_encode_raw(inner, out), + Self::paused_1(inner) => ::abi_encode_raw(inner, out), + Self::pauserRegistry(inner) => ::abi_encode_raw(inner, out), + Self::pubkeyRegistrationMessageHash(inner) => ::abi_encode_raw(inner, out), + Self::quorumCount(inner) => ::abi_encode_raw(inner, out), + Self::quorumUpdateBlockNumber(inner) => ::abi_encode_raw(inner, out), + Self::registerOperator(inner) => ::abi_encode_raw(inner, out), + Self::registerOperatorWithChurn(inner) => ::abi_encode_raw(inner, out), + Self::registries(inner) => ::abi_encode_raw(inner, out), + Self::renounceOwnership(inner) => ::abi_encode_raw(inner, out), + Self::serviceManager(inner) => ::abi_encode_raw(inner, out), + Self::setChurnApprover(inner) => ::abi_encode_raw(inner, out), + Self::setEjector(inner) => ::abi_encode_raw(inner, out), + Self::setOperatorSetParams(inner) => ::abi_encode_raw(inner, out), + Self::setPauserRegistry(inner) => ::abi_encode_raw(inner, out), + Self::stakeRegistry(inner) => ::abi_encode_raw(inner, out), + Self::transferOwnership(inner) => ::abi_encode_raw(inner, out), + Self::unpause(inner) => ::abi_encode_raw(inner, out), + Self::updateOperators(inner) => ::abi_encode_raw(inner, out), + Self::updateOperatorsForQuorum(inner) => ::abi_encode_raw(inner, out), + Self::updateSocket(inner) => ::abi_encode_raw(inner, out), + } + } + } + #[allow(missing_docs, clippy::too_many_arguments)] + #[derive(Debug)] + #[doc = "Container for all the [`RegistryCoordinator`](self) events."] + pub enum RegistryCoordinatorEvents { + ChurnApproverUpdated(ChurnApproverUpdated), + EjectorUpdated(EjectorUpdated), + Initialized(Initialized), + OperatorDeregistered(OperatorDeregistered), + OperatorRegistered(OperatorRegistered), + OperatorSetParamsUpdated(OperatorSetParamsUpdated), + OperatorSocketUpdate(OperatorSocketUpdate), + OwnershipTransferred(OwnershipTransferred), + Paused(Paused), + PauserRegistrySet(PauserRegistrySet), + QuorumBlockNumberUpdated(QuorumBlockNumberUpdated), + Unpaused(Unpaused), + } + #[automatically_derived] + impl RegistryCoordinatorEvents { + #[doc = r" All the selectors of this enum."] + #[doc = r""] + #[doc = r" Note that the selectors might not be in the same order as the variants."] + #[doc = r" No guarantees are made about the order of the selectors."] + #[doc = r""] + #[doc = r" Prefer using `SolInterface` methods instead."] + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 49u8, 84u8, 87u8, 216u8, 168u8, 254u8, 96u8, 240u8, 74u8, 241u8, 124u8, 22u8, + 226u8, 245u8, 165u8, 225u8, 219u8, 97u8, 43u8, 49u8, 100u8, 142u8, 88u8, 3u8, 3u8, + 96u8, 117u8, 158u8, 248u8, 243u8, 82u8, 140u8, + ], + [ + 53u8, 130u8, 209u8, 130u8, 142u8, 38u8, 191u8, 86u8, 189u8, 128u8, 21u8, 2u8, + 188u8, 2u8, 26u8, 192u8, 188u8, 138u8, 251u8, 87u8, 200u8, 38u8, 228u8, 152u8, + 107u8, 69u8, 89u8, 60u8, 143u8, 173u8, 56u8, 156u8, + ], + [ + 57u8, 111u8, 220u8, 177u8, 128u8, 203u8, 15u8, 234u8, 38u8, 146u8, 129u8, 19u8, + 251u8, 15u8, 209u8, 195u8, 84u8, 152u8, 99u8, 249u8, 205u8, 86u8, 62u8, 106u8, + 24u8, 79u8, 29u8, 87u8, 129u8, 22u8, 200u8, 228u8, + ], + [ + 62u8, 230u8, 254u8, 141u8, 84u8, 97u8, 2u8, 68u8, 195u8, 233u8, 211u8, 192u8, + 102u8, 174u8, 74u8, 238u8, 153u8, 120u8, 132u8, 170u8, 40u8, 241u8, 6u8, 22u8, + 174u8, 130u8, 25u8, 37u8, 64u8, 19u8, 24u8, 172u8, + ], + [ + 70u8, 7u8, 125u8, 85u8, 51u8, 7u8, 99u8, 241u8, 98u8, 105u8, 253u8, 117u8, 229u8, + 118u8, 22u8, 99u8, 244u8, 25u8, 45u8, 39u8, 145u8, 116u8, 124u8, 1u8, 137u8, 177u8, + 106u8, 211u8, 29u8, 176u8, 125u8, 180u8, + ], + [ + 110u8, 159u8, 205u8, 83u8, 152u8, 150u8, 252u8, 166u8, 14u8, 139u8, 15u8, 1u8, + 221u8, 88u8, 2u8, 51u8, 228u8, 138u8, 107u8, 15u8, 125u8, 240u8, 19u8, 184u8, + 155u8, 167u8, 245u8, 101u8, 134u8, 154u8, 205u8, 182u8, + ], + [ + 127u8, 38u8, 184u8, 63u8, 249u8, 110u8, 31u8, 43u8, 106u8, 104u8, 47u8, 19u8, 56u8, + 82u8, 246u8, 121u8, 138u8, 9u8, 196u8, 101u8, 218u8, 149u8, 146u8, 20u8, 96u8, + 206u8, 251u8, 56u8, 71u8, 64u8, 36u8, 152u8, + ], + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, 31u8, 208u8, + 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, 218u8, 175u8, 227u8, + 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 143u8, 48u8, 171u8, 9u8, 244u8, 58u8, 108u8, 21u8, 125u8, 127u8, 206u8, 126u8, + 10u8, 19u8, 192u8, 3u8, 4u8, 44u8, 28u8, 149u8, 232u8, 167u8, 46u8, 122u8, 20u8, + 106u8, 33u8, 192u8, 202u8, 162u8, 77u8, 201u8, + ], + [ + 171u8, 64u8, 163u8, 116u8, 188u8, 81u8, 222u8, 55u8, 34u8, 0u8, 168u8, 188u8, + 152u8, 26u8, 248u8, 201u8, 236u8, 220u8, 8u8, 223u8, 218u8, 239u8, 11u8, 182u8, + 224u8, 159u8, 136u8, 243u8, 198u8, 22u8, 239u8, 61u8, + ], + [ + 232u8, 230u8, 140u8, 239u8, 28u8, 58u8, 118u8, 30u8, 215u8, 190u8, 126u8, 132u8, + 99u8, 163u8, 117u8, 242u8, 127u8, 123u8, 195u8, 53u8, 229u8, 24u8, 36u8, 34u8, + 60u8, 172u8, 206u8, 99u8, 110u8, 197u8, 195u8, 254u8, + ], + [ + 236u8, 41u8, 99u8, 171u8, 33u8, 193u8, 229u8, 14u8, 30u8, 88u8, 42u8, 165u8, 66u8, + 175u8, 46u8, 75u8, 247u8, 191u8, 56u8, 230u8, 225u8, 64u8, 60u8, 39u8, 180u8, 46u8, + 28u8, 93u8, 110u8, 98u8, 30u8, 170u8, + ], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for RegistryCoordinatorEvents { + const NAME: &'static str = "RegistryCoordinatorEvents"; + const COUNT: usize = 12usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + validate: bool, + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::ChurnApproverUpdated) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::EjectorUpdated) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::Initialized) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::OperatorDeregistered) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::OperatorRegistered) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::OperatorSetParamsUpdated) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::OperatorSocketUpdate) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::OwnershipTransferred) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data, validate) + .map(Self::Paused) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::PauserRegistrySet) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, data, validate, + ) + .map(Self::QuorumBlockNumberUpdated) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data, validate) + .map(Self::Unpaused) + } + _ => alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }), + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for RegistryCoordinatorEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::ChurnApproverUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::EjectorUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OperatorDeregistered(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OperatorRegistered(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OperatorSetParamsUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OperatorSocketUpdate(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Paused(inner) => alloy_sol_types::private::IntoLogData::to_log_data(inner), + Self::PauserRegistrySet(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::QuorumBlockNumberUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Unpaused(inner) => alloy_sol_types::private::IntoLogData::to_log_data(inner), + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::ChurnApproverUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::EjectorUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OperatorDeregistered(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OperatorRegistered(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OperatorSetParamsUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OperatorSocketUpdate(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Paused(inner) => alloy_sol_types::private::IntoLogData::into_log_data(inner), + Self::PauserRegistrySet(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::QuorumBlockNumberUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Unpaused(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use ::alloy_contract; + #[doc = "Creates a new wrapper around an on-chain [`RegistryCoordinator`](self) contract instance.\n\nSee the [wrapper's documentation](`RegistryCoordinatorInstance`) for more details."] + #[inline] + pub const fn new< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> RegistryCoordinatorInstance { + RegistryCoordinatorInstance::::new(address, provider) + } + #[doc = "Deploys this contract using the given `provider` and constructor arguments, if any.\n\nReturns a new instance of the contract, if the deployment was successful.\n\nFor more fine-grained control over the deployment process, use [`deploy_builder`] instead."] + #[inline] + pub fn deploy< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + _serviceManager: ::alloy_sol_types::private::Address, + _stakeRegistry: ::alloy_sol_types::private::Address, + _blsApkRegistry: ::alloy_sol_types::private::Address, + _indexRegistry: ::alloy_sol_types::private::Address, + ) -> impl ::core::future::Future>> + { + RegistryCoordinatorInstance::::deploy( + provider, + _serviceManager, + _stakeRegistry, + _blsApkRegistry, + _indexRegistry, + ) + } + #[doc = "Creates a `RawCallBuilder` for deploying this contract using the given `provider`\nand constructor arguments, if any.\n\nThis is a simple wrapper around creating a `RawCallBuilder` with the data set to\nthe bytecode concatenated with the constructor's ABI-encoded arguments."] + #[inline] + pub fn deploy_builder< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + _serviceManager: ::alloy_sol_types::private::Address, + _stakeRegistry: ::alloy_sol_types::private::Address, + _blsApkRegistry: ::alloy_sol_types::private::Address, + _indexRegistry: ::alloy_sol_types::private::Address, + ) -> alloy_contract::RawCallBuilder { + RegistryCoordinatorInstance::::deploy_builder( + provider, + _serviceManager, + _stakeRegistry, + _blsApkRegistry, + _indexRegistry, + ) + } + #[doc = "A [`RegistryCoordinator`](self) instance.\n\nContains type-safe methods for interacting with an on-chain instance of the\n[`RegistryCoordinator`](self) contract located at a given `address`, using a given\nprovider `P`.\n\nIf the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)\ndocumentation on how to provide it), the `deploy` and `deploy_builder` methods can\nbe used to deploy a new instance of the contract.\n\nSee the [module-level documentation](self) for all the available methods."] + #[derive(Clone)] + pub struct RegistryCoordinatorInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network_transport: ::core::marker::PhantomData<(N, T)>, + } + #[automatically_derived] + impl ::core::fmt::Debug for RegistryCoordinatorInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("RegistryCoordinatorInstance") + .field(&self.address) + .finish() + } + } + #[doc = r" Instantiation and getters/setters."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > RegistryCoordinatorInstance + { + #[doc = "Creates a new wrapper around an on-chain [`RegistryCoordinator`](self) contract instance.\n\nSee the [wrapper's documentation](`RegistryCoordinatorInstance`) for more details."] + #[inline] + pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self { + Self { + address, + provider, + _network_transport: ::core::marker::PhantomData, + } + } + #[doc = "Deploys this contract using the given `provider` and constructor arguments, if any.\n\nReturns a new instance of the contract, if the deployment was successful.\n\nFor more fine-grained control over the deployment process, use [`deploy_builder`] instead."] + #[inline] + pub async fn deploy( + provider: P, + _serviceManager: ::alloy_sol_types::private::Address, + _stakeRegistry: ::alloy_sol_types::private::Address, + _blsApkRegistry: ::alloy_sol_types::private::Address, + _indexRegistry: ::alloy_sol_types::private::Address, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder( + provider, + _serviceManager, + _stakeRegistry, + _blsApkRegistry, + _indexRegistry, + ); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + #[doc = "Creates a `RawCallBuilder` for deploying this contract using the given `provider`\nand constructor arguments, if any.\n\nThis is a simple wrapper around creating a `RawCallBuilder` with the data set to\nthe bytecode concatenated with the constructor's ABI-encoded arguments."] + #[inline] + pub fn deploy_builder( + provider: P, + _serviceManager: ::alloy_sol_types::private::Address, + _stakeRegistry: ::alloy_sol_types::private::Address, + _blsApkRegistry: ::alloy_sol_types::private::Address, + _indexRegistry: ::alloy_sol_types::private::Address, + ) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + [ + &BYTECODE[..], + &alloy_sol_types::SolConstructor::abi_encode(&constructorCall { + _serviceManager, + _stakeRegistry, + _blsApkRegistry, + _indexRegistry, + })[..], + ] + .concat() + .into(), + ) + } + #[doc = r" Returns a reference to the address."] + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + #[doc = r" Sets the address."] + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + #[doc = r" Sets the address and returns `self`."] + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + #[doc = r" Returns a reference to the provider."] + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl RegistryCoordinatorInstance { + #[doc = r" Clones the provider and returns a new instance with the cloned provider."] + #[inline] + pub fn with_cloned_provider(self) -> RegistryCoordinatorInstance { + RegistryCoordinatorInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network_transport: ::core::marker::PhantomData, + } + } + } + #[doc = r" Function calls."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > RegistryCoordinatorInstance + { + #[doc = r" Creates a new call builder using this contract instance's provider and address."] + #[doc = r""] + #[doc = r" Note that the call can be any function call, not just those defined in this"] + #[doc = r" contract. Prefer using the other methods for building type-safe contract calls."] + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + #[doc = "Creates a new call builder for the [`OPERATOR_CHURN_APPROVAL_TYPEHASH`] function."] + pub fn OPERATOR_CHURN_APPROVAL_TYPEHASH( + &self, + ) -> alloy_contract::SolCallBuilder + { + self.call_builder(&OPERATOR_CHURN_APPROVAL_TYPEHASHCall {}) + } + #[doc = "Creates a new call builder for the [`PUBKEY_REGISTRATION_TYPEHASH`] function."] + pub fn PUBKEY_REGISTRATION_TYPEHASH( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&PUBKEY_REGISTRATION_TYPEHASHCall {}) + } + #[doc = "Creates a new call builder for the [`blsApkRegistry`] function."] + pub fn blsApkRegistry( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&blsApkRegistryCall {}) + } + #[doc = "Creates a new call builder for the [`calculateOperatorChurnApprovalDigestHash`] function."] + pub fn calculateOperatorChurnApprovalDigestHash( + &self, + registeringOperator: ::alloy_sol_types::private::Address, + registeringOperatorId: ::alloy_sol_types::private::FixedBytes<32>, + operatorKickParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + salt: ::alloy_sol_types::private::FixedBytes<32>, + expiry: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder + { + self.call_builder(&calculateOperatorChurnApprovalDigestHashCall { + registeringOperator, + registeringOperatorId, + operatorKickParams, + salt, + expiry, + }) + } + #[doc = "Creates a new call builder for the [`churnApprover`] function."] + pub fn churnApprover(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&churnApproverCall {}) + } + #[doc = "Creates a new call builder for the [`createQuorum`] function."] + pub fn createQuorum( + &self, + operatorSetParams: ::RustType, + minimumStake: <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + strategyParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&createQuorumCall { + operatorSetParams, + minimumStake, + strategyParams, + }) + } + #[doc = "Creates a new call builder for the [`deregisterOperator`] function."] + pub fn deregisterOperator( + &self, + quorumNumbers: ::alloy_sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&deregisterOperatorCall { quorumNumbers }) + } + #[doc = "Creates a new call builder for the [`ejectOperator`] function."] + pub fn ejectOperator( + &self, + operator: ::alloy_sol_types::private::Address, + quorumNumbers: ::alloy_sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&ejectOperatorCall { + operator, + quorumNumbers, + }) + } + #[doc = "Creates a new call builder for the [`ejector`] function."] + pub fn ejector(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&ejectorCall {}) + } + #[doc = "Creates a new call builder for the [`getCurrentQuorumBitmap`] function."] + pub fn getCurrentQuorumBitmap( + &self, + operatorId: ::alloy_sol_types::private::FixedBytes<32>, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getCurrentQuorumBitmapCall { operatorId }) + } + #[doc = "Creates a new call builder for the [`getOperator`] function."] + pub fn getOperator( + &self, + operator: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getOperatorCall { operator }) + } + #[doc = "Creates a new call builder for the [`getOperatorFromId`] function."] + pub fn getOperatorFromId( + &self, + operatorId: ::alloy_sol_types::private::FixedBytes<32>, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getOperatorFromIdCall { operatorId }) + } + #[doc = "Creates a new call builder for the [`getOperatorId`] function."] + pub fn getOperatorId( + &self, + operator: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getOperatorIdCall { operator }) + } + #[doc = "Creates a new call builder for the [`getOperatorSetParams`] function."] + pub fn getOperatorSetParams( + &self, + quorumNumber: u8, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getOperatorSetParamsCall { quorumNumber }) + } + #[doc = "Creates a new call builder for the [`getOperatorStatus`] function."] + pub fn getOperatorStatus( + &self, + operator: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getOperatorStatusCall { operator }) + } + #[doc = "Creates a new call builder for the [`getQuorumBitmapAtBlockNumberByIndex`] function."] + pub fn getQuorumBitmapAtBlockNumberByIndex( + &self, + operatorId: ::alloy_sol_types::private::FixedBytes<32>, + blockNumber: u32, + index: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder + { + self.call_builder(&getQuorumBitmapAtBlockNumberByIndexCall { + operatorId, + blockNumber, + index, + }) + } + #[doc = "Creates a new call builder for the [`getQuorumBitmapHistoryLength`] function."] + pub fn getQuorumBitmapHistoryLength( + &self, + operatorId: ::alloy_sol_types::private::FixedBytes<32>, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getQuorumBitmapHistoryLengthCall { operatorId }) + } + #[doc = "Creates a new call builder for the [`getQuorumBitmapIndicesAtBlockNumber`] function."] + pub fn getQuorumBitmapIndicesAtBlockNumber( + &self, + blockNumber: u32, + operatorIds: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::FixedBytes<32>, + >, + ) -> alloy_contract::SolCallBuilder + { + self.call_builder(&getQuorumBitmapIndicesAtBlockNumberCall { + blockNumber, + operatorIds, + }) + } + #[doc = "Creates a new call builder for the [`getQuorumBitmapUpdateByIndex`] function."] + pub fn getQuorumBitmapUpdateByIndex( + &self, + operatorId: ::alloy_sol_types::private::FixedBytes<32>, + index: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&getQuorumBitmapUpdateByIndexCall { operatorId, index }) + } + #[doc = "Creates a new call builder for the [`indexRegistry`] function."] + pub fn indexRegistry(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&indexRegistryCall {}) + } + #[doc = "Creates a new call builder for the [`initialize`] function."] + pub fn initialize( + &self, + _initialOwner: ::alloy_sol_types::private::Address, + _churnApprover: ::alloy_sol_types::private::Address, + _ejector: ::alloy_sol_types::private::Address, + _pauserRegistry: ::alloy_sol_types::private::Address, + _initialPausedStatus: ::alloy_sol_types::private::U256, + _operatorSetParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + _minimumStakes: ::alloy_sol_types::private::Vec< + <::alloy_sol_types::sol_data::Uint<96> as ::alloy_sol_types::SolType>::RustType, + >, + _strategyParams: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec< + ::RustType, + >, + >, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&initializeCall { + _initialOwner, + _churnApprover, + _ejector, + _pauserRegistry, + _initialPausedStatus, + _operatorSetParams, + _minimumStakes, + _strategyParams, + }) + } + #[doc = "Creates a new call builder for the [`isChurnApproverSaltUsed`] function."] + pub fn isChurnApproverSaltUsed( + &self, + _0: ::alloy_sol_types::private::FixedBytes<32>, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&isChurnApproverSaltUsedCall { _0 }) + } + #[doc = "Creates a new call builder for the [`numRegistries`] function."] + pub fn numRegistries(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&numRegistriesCall {}) + } + #[doc = "Creates a new call builder for the [`owner`] function."] + pub fn owner(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&ownerCall {}) + } + #[doc = "Creates a new call builder for the [`pause`] function."] + pub fn pause( + &self, + newPausedStatus: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&pauseCall { newPausedStatus }) + } + #[doc = "Creates a new call builder for the [`pauseAll`] function."] + pub fn pauseAll(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&pauseAllCall {}) + } + #[doc = "Creates a new call builder for the [`paused_0`] function."] + pub fn paused_0( + &self, + index: u8, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&paused_0Call { index }) + } + #[doc = "Creates a new call builder for the [`paused_1`] function."] + pub fn paused_1(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&paused_1Call {}) + } + #[doc = "Creates a new call builder for the [`pauserRegistry`] function."] + pub fn pauserRegistry( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&pauserRegistryCall {}) + } + #[doc = "Creates a new call builder for the [`pubkeyRegistrationMessageHash`] function."] + pub fn pubkeyRegistrationMessageHash( + &self, + operator: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&pubkeyRegistrationMessageHashCall { operator }) + } + #[doc = "Creates a new call builder for the [`quorumCount`] function."] + pub fn quorumCount(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&quorumCountCall {}) + } + #[doc = "Creates a new call builder for the [`quorumUpdateBlockNumber`] function."] + pub fn quorumUpdateBlockNumber( + &self, + _0: u8, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&quorumUpdateBlockNumberCall { _0 }) + } + #[doc = "Creates a new call builder for the [`registerOperator`] function."] + pub fn registerOperator( + &self, + quorumNumbers: ::alloy_sol_types::private::Bytes, + socket: ::alloy_sol_types::private::String, + params: ::RustType, + operatorSignature: ::RustType, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(®isterOperatorCall { + quorumNumbers, + socket, + params, + operatorSignature, + }) + } + #[doc = "Creates a new call builder for the [`registerOperatorWithChurn`] function."] + pub fn registerOperatorWithChurn( + &self, + quorumNumbers: ::alloy_sol_types::private::Bytes, + socket: ::alloy_sol_types::private::String, + params: ::RustType, + operatorKickParams: ::alloy_sol_types::private::Vec< + ::RustType, + >, + churnApproverSignature: ::RustType, + operatorSignature: ::RustType, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(®isterOperatorWithChurnCall { + quorumNumbers, + socket, + params, + operatorKickParams, + churnApproverSignature, + operatorSignature, + }) + } + #[doc = "Creates a new call builder for the [`registries`] function."] + pub fn registries( + &self, + _0: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(®istriesCall { _0 }) + } + #[doc = "Creates a new call builder for the [`renounceOwnership`] function."] + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&renounceOwnershipCall {}) + } + #[doc = "Creates a new call builder for the [`serviceManager`] function."] + pub fn serviceManager( + &self, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&serviceManagerCall {}) + } + #[doc = "Creates a new call builder for the [`setChurnApprover`] function."] + pub fn setChurnApprover( + &self, + _churnApprover: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&setChurnApproverCall { _churnApprover }) + } + #[doc = "Creates a new call builder for the [`setEjector`] function."] + pub fn setEjector( + &self, + _ejector: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&setEjectorCall { _ejector }) + } + #[doc = "Creates a new call builder for the [`setOperatorSetParams`] function."] + pub fn setOperatorSetParams( + &self, + quorumNumber: u8, + operatorSetParams: ::RustType, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&setOperatorSetParamsCall { + quorumNumber, + operatorSetParams, + }) + } + #[doc = "Creates a new call builder for the [`setPauserRegistry`] function."] + pub fn setPauserRegistry( + &self, + newPauserRegistry: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&setPauserRegistryCall { newPauserRegistry }) + } + #[doc = "Creates a new call builder for the [`stakeRegistry`] function."] + pub fn stakeRegistry(&self) -> alloy_contract::SolCallBuilder { + self.call_builder(&stakeRegistryCall {}) + } + #[doc = "Creates a new call builder for the [`transferOwnership`] function."] + pub fn transferOwnership( + &self, + newOwner: ::alloy_sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&transferOwnershipCall { newOwner }) + } + #[doc = "Creates a new call builder for the [`unpause`] function."] + pub fn unpause( + &self, + newPausedStatus: ::alloy_sol_types::private::U256, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&unpauseCall { newPausedStatus }) + } + #[doc = "Creates a new call builder for the [`updateOperators`] function."] + pub fn updateOperators( + &self, + operators: ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Address>, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&updateOperatorsCall { operators }) + } + #[doc = "Creates a new call builder for the [`updateOperatorsForQuorum`] function."] + pub fn updateOperatorsForQuorum( + &self, + operatorsPerQuorum: ::alloy_sol_types::private::Vec< + ::alloy_sol_types::private::Vec<::alloy_sol_types::private::Address>, + >, + quorumNumbers: ::alloy_sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&updateOperatorsForQuorumCall { + operatorsPerQuorum, + quorumNumbers, + }) + } + #[doc = "Creates a new call builder for the [`updateSocket`] function."] + pub fn updateSocket( + &self, + socket: ::alloy_sol_types::private::String, + ) -> alloy_contract::SolCallBuilder { + self.call_builder(&updateSocketCall { socket }) + } + } + #[doc = r" Event filters."] + #[automatically_derived] + impl< + T: alloy_contract::private::Transport + ::core::clone::Clone, + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > RegistryCoordinatorInstance + { + #[doc = r" Creates a new event filter using this contract instance's provider and address."] + #[doc = r""] + #[doc = r" Note that the type can be any event, not just those defined in this contract."] + #[doc = r" Prefer using the other methods for building type-safe event filters."] + pub fn event_filter( + &self, + ) -> alloy_contract::Event { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + #[doc = "Creates a new event filter for the [`ChurnApproverUpdated`] event."] + pub fn ChurnApproverUpdated_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`EjectorUpdated`] event."] + pub fn EjectorUpdated_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`Initialized`] event."] + pub fn Initialized_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`OperatorDeregistered`] event."] + pub fn OperatorDeregistered_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`OperatorRegistered`] event."] + pub fn OperatorRegistered_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`OperatorSetParamsUpdated`] event."] + pub fn OperatorSetParamsUpdated_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`OperatorSocketUpdate`] event."] + pub fn OperatorSocketUpdate_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`OwnershipTransferred`] event."] + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`Paused`] event."] + pub fn Paused_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`PauserRegistrySet`] event."] + pub fn PauserRegistrySet_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`QuorumBlockNumberUpdated`] event."] + pub fn QuorumBlockNumberUpdated_filter( + &self, + ) -> alloy_contract::Event { + self.event_filter::() + } + #[doc = "Creates a new event filter for the [`Unpaused`] event."] + pub fn Unpaused_filter(&self) -> alloy_contract::Event { + self.event_filter::() + } + } +} diff --git a/blueprint-test-utils/src/eigenlayer_test_env.rs b/blueprint-test-utils/src/eigenlayer_test_env.rs index 93c62070..0207af89 100644 --- a/blueprint-test-utils/src/eigenlayer_test_env.rs +++ b/blueprint-test-utils/src/eigenlayer_test_env.rs @@ -1,33 +1,72 @@ -use alloy_primitives::{address, Address}; -use alloy_provider::Provider; -use gadget_sdk::info; -use gadget_sdk::{config::protocol::EigenlayerContractAddresses, utils::evm::get_provider_http}; +use crate::anvil; +pub use crate::binding::ipauserregistry::PauserRegistry; +pub use crate::binding::registrycoordinator::RegistryCoordinator; +pub use crate::helpers::get_receipt; +pub use alloy_primitives::{address, Address, Bytes, U256}; +pub use alloy_provider::Provider; +pub use gadget_sdk::config::protocol::EigenlayerContractAddresses; +pub use gadget_sdk::futures::StreamExt; +pub use gadget_sdk::tokio::sync::Mutex; +pub use gadget_sdk::utils::evm::{get_provider_http, get_provider_ws}; +pub use gadget_sdk::{error, info}; +pub use std::sync::Arc; +pub use std::time::Duration; +use testcontainers::{ContainerAsync, GenericImage}; -use crate::helpers::get_receipt; +pub const AVS_DIRECTORY_ADDR: Address = address!("0000000000000000000000000000000000000000"); +pub const DELEGATION_MANAGER_ADDR: Address = address!("dc64a140aa3e981100a9beca4e685f962f0cf6c9"); +pub const ERC20_MOCK_ADDR: Address = address!("7969c5ed335650692bc04293b07f5bf2e7a673c0"); +pub const MAILBOX_ADDR: Address = address!("0000000000000000000000000000000000000000"); +pub const OPERATOR_STATE_RETRIEVER_ADDR: Address = + address!("1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8"); +pub const REGISTRY_COORDINATOR_ADDR: Address = address!("c3e53f4d16ae77db1c982e75a937b9f60fe63690"); +pub const SERVICE_MANAGER_ADDR: Address = address!("67d269191c92caf3cd7723f116c85e6e9bf55933"); +pub const STRATEGY_MANAGER_ADDR: Address = address!("5fc8d32690cc91d4c39d9d3abcbd16989f875707"); -alloy_sol_types::sol!( - #[allow(missing_docs)] - #[sol(rpc)] - #[derive(Debug)] - IncredibleSquaringTaskManager, - "./../blueprints/incredible-squaring-eigenlayer/contracts/out/IncredibleSquaringTaskManager.sol/IncredibleSquaringTaskManager.json" -); +const DEFAULT_ANVIL_STATE_PATH: &str = + "./blueprint-test-utils/anvil/deployed_anvil_states/testnet_state.json"; -alloy_sol_types::sol!( - #[allow(missing_docs)] - #[sol(rpc)] - #[derive(Debug)] - PauserRegistry, - "./../blueprints/incredible-squaring-eigenlayer/contracts/out/IPauserRegistry.sol/IPauserRegistry.json" -); +/// Starts an Anvil container for testing from the given state file in JSON format. +/// +/// # Arguments +/// * `path` - The path to the save-state file. +/// * `include_logs` - If true, testnet output will be printed to the console. +/// +/// # Returns +/// `(container, http_endpoint, ws_endpoint)` +/// - `container` as a [`ContainerAsync`] - The Anvil container. +/// - `http_endpoint` as a `String` - The Anvil HTTP endpoint. +/// - `ws_endpoint` as a `String` - The Anvil WS endpoint. +pub async fn start_anvil_testnet( + path: &str, + include_logs: bool, +) -> (ContainerAsync, String, String) { + let (container, http_endpoint, ws_endpoint) = + anvil::start_anvil_container(path, include_logs).await; + std::env::set_var("EIGENLAYER_HTTP_ENDPOINT", http_endpoint.clone()); + std::env::set_var("EIGENLAYER_WS_ENDPOINT", ws_endpoint.clone()); -alloy_sol_types::sol!( - #[allow(missing_docs, clippy::too_many_arguments)] - #[sol(rpc)] - #[derive(Debug)] - RegistryCoordinator, - "./../blueprints/incredible-squaring-eigenlayer/contracts/out/RegistryCoordinator.sol/RegistryCoordinator.json" -); + // Sleep to give the testnet time to spin up + tokio::time::sleep(Duration::from_secs(1)).await; + (container, http_endpoint, ws_endpoint) +} + +/// Starts an Anvil container for testing from this library's default state file. +/// +/// # Arguments +/// * `include_logs` - If true, testnet output will be printed to the console. +/// +/// # Returns +/// `(container, http_endpoint, ws_endpoint)` +/// - `container` as a [`ContainerAsync`] - The Anvil container. +/// - `http_endpoint` as a `String` - The Anvil HTTP endpoint. +/// - `ws_endpoint` as a `String` - The Anvil WS endpoint. +pub async fn start_default_anvil_testnet( + include_logs: bool, +) -> (ContainerAsync, String, String) { + info!("Starting Anvil testnet from default state file"); + anvil::start_anvil_container(DEFAULT_ANVIL_STATE_PATH, include_logs).await +} pub struct EigenlayerTestEnvironment { pub http_endpoint: String, @@ -37,6 +76,11 @@ pub struct EigenlayerTestEnvironment { pub pauser_registry_address: Address, } +/// Sets up the test environment for the EigenLayer Blueprint. +/// +/// # Description +/// - Sets all the necessary environment variables for the necessary EigenLayer Contract Addresses. +/// - Returns a [`EigenlayerTestEnvironment`] struct containing the test environment state. pub async fn setup_eigenlayer_test_environment( http_endpoint: &str, ws_endpoint: &str, diff --git a/blueprint-test-utils/src/helpers.rs b/blueprint-test-utils/src/helpers.rs index 41832f6a..79074163 100644 --- a/blueprint-test-utils/src/helpers.rs +++ b/blueprint-test-utils/src/helpers.rs @@ -8,6 +8,7 @@ use std::net::IpAddr; use std::path::{Path, PathBuf}; use std::str::FromStr; use std::sync::Arc; +use std::time::Duration; use thiserror::Error; use tokio::process::Child; use tokio::sync::Mutex; @@ -269,3 +270,22 @@ where Ok(receipt) } + +/// Waits for the given `successful_responses` Mutex to be greater than or equal to `task_response_count`. +pub async fn wait_for_responses( + successful_responses: Arc>, + task_response_count: usize, + timeout_duration: Duration, +) -> Result, tokio::time::error::Elapsed> { + tokio::time::timeout(timeout_duration, async move { + loop { + let count = *successful_responses.lock().await; + if count >= task_response_count { + crate::info!("Successfully received {} task responses", count); + return Ok(()); + } + tokio::time::sleep(Duration::from_secs(1)).await; + } + }) + .await +} diff --git a/blueprint-test-utils/src/incredible_squaring_helpers.rs b/blueprint-test-utils/src/incredible_squaring_helpers.rs deleted file mode 100644 index 73f928b1..00000000 --- a/blueprint-test-utils/src/incredible_squaring_helpers.rs +++ /dev/null @@ -1,170 +0,0 @@ -use futures::StreamExt; -use gadget_sdk::utils::evm::{get_provider_http, get_provider_ws}; -use gadget_sdk::{error, info}; -use std::sync::Arc; -use std::time::Duration; -use tokio::sync::Mutex; - -#[cfg(feature = "eigenlayer_test")] -use crate::eigenlayer_test_env::{IncredibleSquaringTaskManager, RegistryCoordinator}; -use crate::helpers::get_receipt; -use alloy_primitives::{Address, Bytes, U256}; -use alloy_provider::Provider; - -#[cfg(feature = "eigenlayer_test")] -pub async fn deploy_task_manager( - http_endpoint: &str, - registry_coordinator_address: Address, - pauser_registry_address: Address, - owner_address: Address, - aggregator_address: Address, - task_generator_address: Address, -) -> Address { - let provider = get_provider_http(http_endpoint); - let deploy_call = IncredibleSquaringTaskManager::deploy_builder( - provider.clone(), - registry_coordinator_address, - 10u32, - ); - info!("Deploying Incredible Squaring Task Manager"); - let task_manager_address = match get_receipt(deploy_call).await { - Ok(receipt) => match receipt.contract_address { - Some(address) => address, - None => { - error!("Failed to get contract address from receipt"); - panic!("Failed to get contract address from receipt"); - } - }, - Err(e) => { - error!("Failed to get receipt: {:?}", e); - panic!("Failed to get contract address from receipt"); - } - }; - info!( - "Deployed Incredible Squaring Task Manager at {}", - task_manager_address - ); - std::env::set_var("TASK_MANAGER_ADDRESS", task_manager_address.to_string()); - - let task_manager = IncredibleSquaringTaskManager::new(task_manager_address, provider.clone()); - // Initialize the Incredible Squaring Task Manager - info!("Initializing Incredible Squaring Task Manager"); - let init_call = task_manager.initialize( - pauser_registry_address, - owner_address, - aggregator_address, - task_generator_address, - ); - let init_receipt = get_receipt(init_call).await.unwrap(); - assert!(init_receipt.status()); - info!("Initialized Incredible Squaring Task Manager"); - - task_manager_address -} - -#[cfg(feature = "eigenlayer_test")] -pub async fn setup_task_spawner( - task_manager_address: Address, - registry_coordinator_address: Address, - task_generator_address: Address, - accounts: Vec
, - http_endpoint: String, -) -> impl std::future::Future { - let provider = get_provider_http(http_endpoint.as_str()); - let task_manager = IncredibleSquaringTaskManager::new(task_manager_address, provider.clone()); - let registry_coordinator = - RegistryCoordinator::new(registry_coordinator_address, provider.clone()); - - let operators = vec![vec![accounts[0]]]; - let quorums = Bytes::from(vec![0]); - async move { - loop { - tokio::time::sleep(std::time::Duration::from_millis(10000)).await; - - info!("Creating a new task..."); - if get_receipt( - task_manager - .createNewTask(U256::from(2), 100u32, quorums.clone()) - .from(task_generator_address), - ) - .await - .unwrap() - .status() - { - info!("Created a new task..."); - } - - if get_receipt( - registry_coordinator.updateOperatorsForQuorum(operators.clone(), quorums.clone()), - ) - .await - .unwrap() - .status() - { - info!("Updated operators for quorum..."); - } - - tokio::process::Command::new("sh") - .arg("-c") - .arg(format!( - "cast rpc anvil_mine 1 --rpc-url {} > /dev/null", - http_endpoint - )) - .output() - .await - .unwrap(); - info!("Mined a block..."); - } - } -} - -#[cfg(feature = "eigenlayer_test")] -pub async fn setup_task_response_listener( - task_manager_address: Address, - ws_endpoint: String, - successful_responses: Arc>, -) -> impl std::future::Future { - let task_manager = IncredibleSquaringTaskManager::new( - task_manager_address, - get_provider_ws(ws_endpoint.as_str()).await, - ); - - async move { - let filter = task_manager.TaskResponded_filter().filter; - let mut event_stream = match task_manager.provider().subscribe_logs(&filter).await { - Ok(stream) => stream.into_stream(), - Err(e) => { - error!("Failed to subscribe to logs: {:?}", e); - return; - } - }; - while let Some(event) = event_stream.next().await { - let IncredibleSquaringTaskManager::TaskResponded { - taskResponse: _, .. - } = event - .log_decode::() - .unwrap() - .inner - .data; - let mut counter = successful_responses.lock().await; - *counter += 1; - } - } -} - -pub async fn wait_for_responses( - successful_responses: Arc>, - task_response_count: usize, - timeout_duration: Duration, -) -> Result, tokio::time::error::Elapsed> { - tokio::time::timeout(timeout_duration, async move { - loop { - let count = *successful_responses.lock().await; - if count >= task_response_count { - return Ok(()); - } - tokio::time::sleep(Duration::from_secs(1)).await; - } - }) - .await -} diff --git a/blueprint-test-utils/src/lib.rs b/blueprint-test-utils/src/lib.rs index b7ed958e..0b500477 100644 --- a/blueprint-test-utils/src/lib.rs +++ b/blueprint-test-utils/src/lib.rs @@ -39,16 +39,14 @@ pub type InputValue = runtime_types::tangle_primitives::services::field::Field; pub mod anvil; +pub mod binding; +pub mod eigenlayer_test_env; pub mod helpers; +pub mod symbiotic_test_env; pub mod sync; pub mod tangle; pub mod test_ext; -#[cfg(feature = "eigenlayer_test")] -pub mod eigenlayer_test_env; -pub mod incredible_squaring_helpers; -pub mod symbiotic_test_env; - pub type TestClient = TangleClient; pub struct PerTestNodeInput { @@ -681,28 +679,17 @@ mod tests_standard { use crate::test_ext::new_test_ext_blueprint_manager; use cargo_tangle::deploy::Opts; - #[cfg(feature = "eigenlayer_test")] - use eigenlayer_test_env::{setup_eigenlayer_test_environment, EigenlayerTestEnvironment}; use gadget_sdk::config::protocol::EigenlayerContractAddresses; use gadget_sdk::config::Protocol; use gadget_sdk::logging::setup_log; use gadget_sdk::{error, info}; use helpers::BlueprintProcessManager; - #[cfg(feature = "eigenlayer_test")] - use incredible_squaring_helpers::{ - deploy_task_manager, setup_task_response_listener, setup_task_spawner, wait_for_responses, - }; use std::sync::Arc; use tokio::sync::Mutex; - #[cfg(feature = "eigenlayer_test")] - const ANVIL_STATE_PATH: &str = - "./blueprint-test-utils/anvil/deployed_anvil_states/testnet_state.json"; - /// This test requires that `yarn install` has been executed inside the /// `./blueprints/incredible-squaring/` directory /// The other requirement is that there is a locally-running tangle node - #[tokio::test(flavor = "multi_thread")] #[allow(clippy::needless_return)] async fn test_externalities_gadget_starts() { @@ -786,126 +773,4 @@ mod tests_standard { }) .await } - - #[tokio::test(flavor = "multi_thread")] - #[allow(clippy::needless_return)] - #[cfg(feature = "eigenlayer_test")] - async fn test_eigenlayer_incredible_squaring_blueprint() { - setup_log(); - - let (_container, http_endpoint, ws_endpoint) = - anvil::start_anvil_container(ANVIL_STATE_PATH, true).await; - - std::env::set_var("EIGENLAYER_HTTP_ENDPOINT", http_endpoint.clone()); - std::env::set_var("EIGENLAYER_WS_ENDPOINT", ws_endpoint.clone()); - // Sleep to give the testnet time to spin up - tokio::time::sleep(Duration::from_secs(1)).await; - - let EigenlayerTestEnvironment { - accounts, - http_endpoint, - ws_endpoint, - eigenlayer_contract_addresses: - EigenlayerContractAddresses { - registry_coordinator_address, - .. - }, - pauser_registry_address, - .. - } = setup_eigenlayer_test_environment(&http_endpoint, &ws_endpoint).await; - let owner_address = &accounts[1]; - let aggregator_address = &accounts[9]; - let task_generator_address = &accounts[4]; - let task_manager_address = deploy_task_manager( - &http_endpoint, - registry_coordinator_address, - pauser_registry_address, - *owner_address, - *aggregator_address, - *task_generator_address, - ) - .await; - - let num_successful_responses_required = 3; - let successful_responses = Arc::new(Mutex::new(0)); - let successful_responses_clone = successful_responses.clone(); - - // Start the Task Response Listener - let response_listener = setup_task_response_listener( - task_manager_address, - ws_endpoint.clone(), - successful_responses, - ) - .await; - - // Start the Task Spawner - let task_spawner = setup_task_spawner( - task_manager_address, - registry_coordinator_address, - *task_generator_address, - accounts.to_vec(), - http_endpoint.clone(), - ) - .await; - - tokio::spawn(async move { - task_spawner.await; - }); - - tokio::spawn(async move { - response_listener.await; - }); - - info!("Starting Blueprint Binary..."); - - let blueprint_process_manager = BlueprintProcessManager::new(); - let current_dir = std::env::current_dir().unwrap(); - let xsquare_task_program_path = PathBuf::from(format!( - "{}/../target/release/incredible-squaring-blueprint-eigenlayer", - current_dir.display() - )) - .canonicalize() - .unwrap(); - - let tmp_dir = tempfile::TempDir::new().unwrap(); - let keystore_path = &format!("{}", tmp_dir.path().display()); - - blueprint_process_manager - .start_blueprints( - vec![xsquare_task_program_path], - &http_endpoint, - ws_endpoint.as_ref(), - Protocol::Eigenlayer, - keystore_path, - ) - .await - .unwrap(); - - // Wait for the process to complete or timeout - let timeout_duration = Duration::from_secs(300); - let result = wait_for_responses( - successful_responses_clone.clone(), - num_successful_responses_required, - timeout_duration, - ) - .await; - - // Check the result - if let Ok(Ok(())) = result { - info!("Test completed successfully with {num_successful_responses_required} tasks responded to."); - blueprint_process_manager - .kill_all() - .await - .unwrap_or_else(|e| { - error!("Failed to kill all blueprint processes: {:?}", e); - }); - } else { - panic!( - "Test timed out after {} seconds with {} successful responses out of {} required", - timeout_duration.as_secs(), - successful_responses_clone.lock().await, - num_successful_responses_required - ); - } - } } diff --git a/blueprints/examples/Cargo.toml b/blueprints/examples/Cargo.toml index 393c0f6d..39fa6706 100644 --- a/blueprints/examples/Cargo.toml +++ b/blueprints/examples/Cargo.toml @@ -10,32 +10,43 @@ repository.workspace = true publish = false [dependencies] +async-trait = { workspace = true } gadget-sdk = { workspace = true, features = ["std"] } +eigensdk = { workspace = true } color-eyre = { workspace = true } reqwest = { workspace = true } +serde = { workspace = true } serde_json = { workspace = true } +tempfile = { workspace = true } tokio = { workspace = true, features = ["full"] } +tokio-util = { workspace = true } tracing = { workspace = true } uuid = { workspace = true } -alloy-primitives = "0.7.2" -alloy-json-abi = "0.7.2" -alloy-sol-types = "0.7.2" -alloy-rpc-client = "0.4.2" -alloy-rpc-types = { version = "0.1" } -alloy-rpc-types-eth = { version = "0.1" } -alloy-provider = { version = "0.1", features = ["reqwest", "ws"] } -alloy-pubsub = { version = "0.1" } -alloy-signer = { version = "0.1" } -alloy-signer-local = { version = "0.1" } -alloy-network = { version = "0.1" } -alloy-node-bindings = "0.4.2" -alloy-contract = { version = "0.1" } -alloy-consensus = { version = "0.1" } -alloy-transport = { version = "0.1" } -alloy-transport-http = { version = "0.1" } +alloy-primitives = { workspace = true } +alloy-json-abi = { workspace = true } +alloy-sol-types = { workspace = true } +alloy-rpc-client = { workspace = true } +alloy-rpc-types = { workspace = true } +alloy-rpc-types-eth = { workspace = true } +alloy-provider = { workspace = true } +alloy-pubsub = { workspace = true } +alloy-signer = { workspace = true } +alloy-signer-local = { workspace = true } +alloy-network = { workspace = true } +alloy-node-bindings = { workspace = true } +alloy-contract = { workspace = true } +alloy-consensus = { workspace = true } +alloy-transport = { workspace = true } +alloy-transport-http = { workspace = true } + +[dev-dependencies] +blueprint-test-utils = { workspace = true } +gadget-io = { workspace = true, features = ["std"] } + [build-dependencies] blueprint-metadata = { workspace = true } +blueprint-build-utils = { workspace = true } [features] default = ["std"] diff --git a/blueprints/examples/build.rs b/blueprints/examples/build.rs index 9d51e42b..6d902527 100644 --- a/blueprints/examples/build.rs +++ b/blueprints/examples/build.rs @@ -1,5 +1,7 @@ fn main() { println!("cargo:rerun-if-changed=src/lib.rs"); println!("cargo:rerun-if-changed=src/main.rs"); - // blueprint_metadata::generate_json(); + println!("cargo:rerun-if-changed=contracts/src/*"); + blueprint_build_utils::build_contracts(vec!["contracts"]); + blueprint_metadata::generate_json(); } diff --git a/blueprints/examples/contracts/.github/workflows/test.yml b/blueprints/examples/contracts/.github/workflows/test.yml deleted file mode 100644 index 762a2966..00000000 --- a/blueprints/examples/contracts/.github/workflows/test.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: CI - -on: - push: - pull_request: - workflow_dispatch: - -env: - FOUNDRY_PROFILE: ci - -jobs: - check: - strategy: - fail-fast: true - - name: Foundry project - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - with: - version: nightly - - - name: Show Forge version - run: | - forge --version - - - name: Run Forge fmt - run: | - forge fmt --check - id: fmt - - - name: Run Forge build - run: | - forge build --sizes - id: build - - - name: Run Forge tests - run: | - forge test -vvv - id: test diff --git a/blueprints/examples/contracts/README.md b/blueprints/examples/contracts/README.md deleted file mode 100644 index 9265b455..00000000 --- a/blueprints/examples/contracts/README.md +++ /dev/null @@ -1,66 +0,0 @@ -## Foundry - -**Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.** - -Foundry consists of: - -- **Forge**: Ethereum testing framework (like Truffle, Hardhat and DappTools). -- **Cast**: Swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data. -- **Anvil**: Local Ethereum node, akin to Ganache, Hardhat Network. -- **Chisel**: Fast, utilitarian, and verbose solidity REPL. - -## Documentation - -https://book.getfoundry.sh/ - -## Usage - -### Build - -```shell -$ forge build -``` - -### Test - -```shell -$ forge test -``` - -### Format - -```shell -$ forge fmt -``` - -### Gas Snapshots - -```shell -$ forge snapshot -``` - -### Anvil - -```shell -$ anvil -``` - -### Deploy - -```shell -$ forge script script/Counter.s.sol:CounterScript --rpc-url --private-key -``` - -### Cast - -```shell -$ cast -``` - -### Help - -```shell -$ forge --help -$ anvil --help -$ cast --help -``` diff --git a/blueprints/examples/contracts/lib/forge-std b/blueprints/examples/contracts/lib/forge-std deleted file mode 160000 index 1eea5bae..00000000 --- a/blueprints/examples/contracts/lib/forge-std +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1eea5bae12ae557d589f9f0f0edae2faa47cb262 diff --git a/blueprints/examples/contracts/script/Counter.s.sol b/blueprints/examples/contracts/script/Counter.s.sol deleted file mode 100644 index cdc1fe9a..00000000 --- a/blueprints/examples/contracts/script/Counter.s.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import {Script, console} from "forge-std/Script.sol"; -import {Counter} from "../src/Counter.sol"; - -contract CounterScript is Script { - Counter public counter; - - function setUp() public {} - - function run() public { - vm.startBroadcast(); - - counter = new Counter(); - - vm.stopBroadcast(); - } -} diff --git a/blueprints/examples/contracts/src/Counter.sol b/blueprints/examples/contracts/src/Counter.sol deleted file mode 100644 index 6e5b1272..00000000 --- a/blueprints/examples/contracts/src/Counter.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -contract Counter { - struct NumberSequence { - uint256[5] numbers; - } - - mapping(bytes32 => NumberSequence) sequences; - - event NumberIncremented(bytes32 indexed id, uint8 indexed index, uint256 indexed oldValue, uint256 newValue); - - function setNumber(bytes32 id, uint8 index, uint256 newNumber) public { - require(index < 5, "Index out of bounds"); - sequences[id].numbers[index] = newNumber; - } - - function increment(bytes32 id, uint8 index) public { - require(index < 5, "Index out of bounds"); - uint256 oldValue = sequences[id].numbers[index]; - sequences[id].numbers[index]++; - emit NumberIncremented(id, index, oldValue, sequences[id].numbers[index]); - } - - function getSequence(bytes32 id) public view returns (uint256[5] memory) { - return sequences[id].numbers; - } -} diff --git a/blueprints/examples/contracts/src/ExampleTaskManager.sol b/blueprints/examples/contracts/src/ExampleTaskManager.sol new file mode 100644 index 00000000..47e02a95 --- /dev/null +++ b/blueprints/examples/contracts/src/ExampleTaskManager.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.8.13; + +contract ExampleTaskManager { + // Define the Task struct + struct Task { + address targetAddress; + uint32 taskCreatedBlock; + // Additional fields can be added as needed + } + + // Event to be emitted when a new task is created + event NewTaskCreated(uint32 indexed taskIndex, Task task); + + // Mapping to store tasks + mapping(uint32 => Task) public tasks; + uint32 public taskCounter; + + constructor() { + taskCounter = 0; + } + + // Function to create a new task + function createTask(address targetAddress) external { + Task memory newTask = Task({ + targetAddress: targetAddress, + taskCreatedBlock: uint32(block.number) + }); + + tasks[taskCounter] = newTask; + emit NewTaskCreated(taskCounter, newTask); + + taskCounter++; + } + + // Function to get task details + function getTask(uint32 taskIndex) external view returns (Task memory) { + return tasks[taskIndex]; + } +} \ No newline at end of file diff --git a/blueprints/examples/contracts/test/Counter.t.sol b/blueprints/examples/contracts/test/Counter.t.sol deleted file mode 100644 index c9df4f51..00000000 --- a/blueprints/examples/contracts/test/Counter.t.sol +++ /dev/null @@ -1,108 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import {Test, console} from "forge-std/Test.sol"; -import {Counter} from "../src/Counter.sol"; - -contract CounterTest is Test { - Counter public counter; - bytes32 constant TEST_ID = bytes32(uint256(1)); - bytes32 constant TEST_ID_2 = bytes32(uint256(2)); - uint8 constant TEST_INDEX = 0; - - function setUp() public { - counter = new Counter(); - } - - function test_InitialSequenceIsZero() public { - uint256[5] memory sequence = counter.getSequence(TEST_ID); - for(uint8 i = 0; i < 5; i++) { - assertEq(sequence[i], 0); - } - } - - function test_SetNumber() public { - counter.setNumber(TEST_ID, TEST_INDEX, 42); - uint256[5] memory sequence = counter.getSequence(TEST_ID); - assertEq(sequence[TEST_INDEX], 42); - } - - function test_Increment() public { - counter.increment(TEST_ID, TEST_INDEX); - uint256[5] memory sequence = counter.getSequence(TEST_ID); - assertEq(sequence[TEST_INDEX], 1); - } - - function test_MultipleIncrements() public { - for(uint8 i = 0; i < 5; i++) { - counter.increment(TEST_ID, TEST_INDEX); - } - uint256[5] memory sequence = counter.getSequence(TEST_ID); - assertEq(sequence[TEST_INDEX], 5); - } - - function test_IncrementMultipleIndices() public { - for(uint8 i = 0; i < 5; i++) { - counter.increment(TEST_ID, i); - } - uint256[5] memory sequence = counter.getSequence(TEST_ID); - for(uint8 i = 0; i < 5; i++) { - assertEq(sequence[i], 1); - } - } - - function test_MultipleSequences() public { - counter.increment(TEST_ID, 0); - counter.increment(TEST_ID_2, 0); - - uint256[5] memory sequence1 = counter.getSequence(TEST_ID); - uint256[5] memory sequence2 = counter.getSequence(TEST_ID_2); - - assertEq(sequence1[0], 1); - assertEq(sequence2[0], 1); - } - - function testFuzz_SetNumber(uint256 x) public { - vm.assume(x < type(uint256).max); - counter.setNumber(TEST_ID, TEST_INDEX, x); - uint256[5] memory sequence = counter.getSequence(TEST_ID); - assertEq(sequence[TEST_INDEX], x); - } - - function testFuzz_SetNumberMultipleIndices(uint8 index, uint256 value) public { - vm.assume(index < 5); - vm.assume(value < type(uint256).max); - counter.setNumber(TEST_ID, index, value); - uint256[5] memory sequence = counter.getSequence(TEST_ID); - assertEq(sequence[index], value); - } - - function test_RevertWhenIndexOutOfBounds() public { - vm.expectRevert("Index out of bounds"); - counter.setNumber(TEST_ID, 5, 1); - } - - function test_RevertWhenIncrementIndexOutOfBounds() public { - vm.expectRevert("Index out of bounds"); - counter.increment(TEST_ID, 5); - } - - function test_EventEmission() public { - vm.expectEmit(true, true, true, true); - emit Counter.NumberIncremented(TEST_ID, TEST_INDEX, 0, 1); - counter.increment(TEST_ID, TEST_INDEX); - } - - function test_SequenceIndependence() public { - counter.setNumber(TEST_ID, 0, 1); - counter.setNumber(TEST_ID, 1, 2); - counter.setNumber(TEST_ID, 2, 3); - - uint256[5] memory sequence = counter.getSequence(TEST_ID); - assertEq(sequence[0], 1); - assertEq(sequence[1], 2); - assertEq(sequence[2], 3); - assertEq(sequence[3], 0); - assertEq(sequence[4], 0); - } -} diff --git a/blueprints/examples/src/eigen_context.rs b/blueprints/examples/src/eigen_context.rs new file mode 100644 index 00000000..ecc478b0 --- /dev/null +++ b/blueprints/examples/src/eigen_context.rs @@ -0,0 +1,189 @@ +use alloy_primitives::{address, Address, Bytes}; +use color_eyre::eyre::eyre; +use gadget_sdk::event_listener::evm::contracts::EvmContractEventListener; +use gadget_sdk::event_utils::InitializableEventHandler; +use gadget_sdk::subxt_core::ext::sp_runtime::traits::Zero; +use gadget_sdk::utils::evm::get_provider_http; +use gadget_sdk::{config::StdGadgetConfiguration, ctx::EigenlayerContext, job, load_abi}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::env; +use std::ops::Deref; + +alloy_sol_types::sol!( + #[allow(missing_docs)] + #[sol(rpc)] + #[derive(Debug, Serialize, Deserialize)] + ExampleTaskManager, + "contracts/out/ExampleTaskManager.sol/ExampleTaskManager.json" +); + +load_abi!( + EXAMPLE_TASK_MANAGER_ABI_STRING, + "contracts/out/ExampleTaskManager.sol/ExampleTaskManager.json" +); + +#[derive(Clone, EigenlayerContext)] +pub struct ExampleEigenContext { + #[config] + pub std_config: StdGadgetConfiguration, +} + +pub async fn constructor( + env: StdGadgetConfiguration, +) -> color_eyre::Result { + let example_address = env::var("EXAMPLE_TASK_MANAGER_ADDRESS") + .map(|addr| addr.parse().expect("Invalid EXAMPLE_TASK_MANAGER_ADDRESS")) + .map_err(|e| eyre!(e))?; + + let example_task_manager = ExampleTaskManager::ExampleTaskManagerInstance::new( + example_address, + get_provider_http(&env.http_rpc_endpoint), + ); + + Ok(FetchDetailsEventHandler::new( + example_task_manager, + ExampleEigenContext { + std_config: env.clone(), + }, + )) +} + +#[job( + id = 0, + params(event, log), + event_listener( + listener = EvmContractEventListener, + instance = ExampleTaskManager, + abi = EXAMPLE_TASK_MANAGER_ABI_STRING, + pre_processor = handle_events, + ), +)] +pub async fn fetch_details( + ctx: ExampleEigenContext, + event: ExampleTaskManager::NewTaskCreated, + log: alloy_rpc_types::Log, +) -> Result> { + // Example address, quorum number, and index + let operator_addr = address!("70997970C51812dc3A010C7d01b50e0d17dc79C8"); + let quorum_number: u8 = 0; + let index: U256 = U256::from(0); + + // Get an Operator's ID as FixedBytes from its Address. + let operator_id = ctx.get_operator_id(operator_addr).await?; + println!("Operator ID from Address: {:?}", operator_id); + + // Get an Operator's latest stake update. + let latest_stake_update = ctx + .get_latest_stake_update(operator_id, quorum_number) + .await?; + println!("Latest Stake Update: \n\tStake: {:?},\n\tUpdate Block Number: {:?},\n\tNext Update Block Number: {:?}", + latest_stake_update.stake, + latest_stake_update.updateBlockNumber, + latest_stake_update.nextUpdateBlockNumber); + let block_number = latest_stake_update.updateBlockNumber; + assert!(latest_stake_update.nextUpdateBlockNumber.is_zero()); + + // Get Operator stake in Quorums at a given block. + let stake_in_quorums_at_block = ctx + .get_operator_stake_in_quorums_at_block(block_number, Bytes::from(vec![0])) + .await?; + println!("Stake in Quorums at Block: {:?}", stake_in_quorums_at_block); + assert!(!stake_in_quorums_at_block.is_empty()); + + // Get an Operator's stake in Quorums at the current block. + let stake_in_quorums_at_current_block = ctx + .get_operator_stake_in_quorums_at_current_block(operator_id) + .await?; + println!( + "Stake in Quorums at Current Block: {:?}", + stake_in_quorums_at_current_block + ); + assert!(!stake_in_quorums_at_current_block.is_empty()); + + // Get an Operator by ID. + let operator_by_id = ctx.get_operator_by_id(*operator_id).await?; + println!("Operator by ID: {:?}", operator_by_id); + assert_eq!(operator_by_id, operator_addr); + + // Get an Operator stake history. + let stake_history = ctx + .get_operator_stake_history(operator_id, quorum_number) + .await?; + println!("Stake History for {operator_id} in Quorum {quorum_number}:"); + for (update_num, stake_update) in stake_history.as_slice().iter().enumerate() { + println!("\tStake Update {update_num}: \n\t\tStake: {:?},\n\t\tUpdate Block Number: {:?},\n\t\tNext Update Block Number: {:?}", + stake_update.stake, + stake_update.updateBlockNumber, + stake_update.nextUpdateBlockNumber); + } + assert!(!stake_history.is_empty()); + + // Get an Operator stake update at a given index. + let stake_update_at_index = ctx + .get_operator_stake_update_at_index(quorum_number, operator_id, index) + .await?; + println!("Stake Update at Index {index}: \n\tStake: {:?}\n\tUpdate Block Number: {:?}\n\tNext Update Block Number: {:?}", stake_update_at_index.stake, stake_update_at_index.updateBlockNumber, stake_update_at_index.nextUpdateBlockNumber); + assert!(stake_update_at_index.nextUpdateBlockNumber.is_zero()); + + // Get an Operator's stake at a given block number. + let stake_at_block_number = ctx + .get_operator_stake_at_block_number(operator_id, quorum_number, block_number) + .await?; + println!("Stake at Block Number: {:?}", stake_at_block_number); + assert!(!stake_at_block_number.is_zero()); + + // Get an Operator's details. + let operator = ctx.get_operator_details(operator_addr).await?; + println!("Operator Details: \n\tAddress: {:?},\n\tEarnings receiver address: {:?},\n\tDelegation approver address: {:?},\n\tMetadata URL: {:?},\n\tStaker Opt Out Window Blocks: {:?}", + operator.address, + operator.earnings_receiver_address, + operator.delegation_approver_address, + operator.metadata_url, + operator.staker_opt_out_window_blocks); + assert_eq!(operator.address, operator_addr); + + // Get an Operator's latest stake update. + let latest_stake_update = ctx + .get_latest_stake_update(operator_id, quorum_number) + .await?; + let block_number = latest_stake_update.updateBlockNumber - 1; + // Get the total stake at a given block number from a given index. + let total_stake_at_block_number_from_index = ctx + .get_total_stake_at_block_number_from_index(quorum_number, block_number, index) + .await?; + println!( + "Total Stake at Block Number from Index: {:?}", + total_stake_at_block_number_from_index + ); + assert!(total_stake_at_block_number_from_index.is_zero()); + + // Get the total stake history length of a given quorum. + let total_stake_history_length = ctx.get_total_stake_history_length(quorum_number).await?; + println!( + "Total Stake History Length: {:?}", + total_stake_history_length + ); + assert!(!total_stake_history_length.is_zero()); + + // Provides the public keys of existing registered operators within the provided block range. + let existing_registered_operator_pub_keys = ctx + .query_existing_registered_operator_pub_keys(0, block_number as u64) + .await?; + println!( + "Existing Registered Operator Public Keys: {:?}", + existing_registered_operator_pub_keys + ); + assert!(existing_registered_operator_pub_keys.0.is_empty()); + assert!(existing_registered_operator_pub_keys.1.is_empty()); + + // Set environment variable to indicate success for test + std::env::set_var("EIGEN_CONTEXT_STATUS", "true"); + Ok(0) +} + +pub async fn handle_events( + event: (ExampleTaskManager::NewTaskCreated, alloy_rpc_types::Log), +) -> Result<(ExampleTaskManager::NewTaskCreated, alloy_rpc_types::Log), gadget_sdk::Error> { + Ok(event) +} diff --git a/blueprints/examples/src/lib.rs b/blueprints/examples/src/lib.rs index 54d9a0a3..fe46f449 100644 --- a/blueprints/examples/src/lib.rs +++ b/blueprints/examples/src/lib.rs @@ -1,2 +1,5 @@ +pub mod eigen_context; pub mod periodic_web_poller; pub mod raw_tangle_events; +#[cfg(test)] +mod tests; diff --git a/blueprints/examples/src/main.rs b/blueprints/examples/src/main.rs index 26e51aca..a6e81e0b 100644 --- a/blueprints/examples/src/main.rs +++ b/blueprints/examples/src/main.rs @@ -1,16 +1,41 @@ -use blueprint::*; -use blueprint_examples as blueprint; +use blueprint_examples::{eigen_context, periodic_web_poller, raw_tangle_events}; use gadget_sdk::info; +use gadget_sdk::runners::eigenlayer::EigenlayerConfig; use gadget_sdk::runners::{tangle::TangleConfig, BlueprintRunner}; +use std::env; #[gadget_sdk::main(env)] -async fn main() { - info!("~~~ Executing the incredible squaring blueprint ~~~"); - BlueprintRunner::new(TangleConfig::default(), env.clone()) - .job(raw_tangle_events::constructor(env.clone()).await?) - .job(periodic_web_poller::constructor()) - .run() - .await?; +async fn main() -> Result<(), Box> { + info!("~~~ Executing Blueprint Examples ~~~"); + + // Read the EXAMPLE_PROTOCOL environment variable + let example_protocol = env::var("EXAMPLE_PROTOCOL") + .unwrap_or_else(|_| "tangle".to_string()) + .to_lowercase(); + + match example_protocol.as_str() { + "tangle" => { + info!("Running Tangle examples"); + BlueprintRunner::new(TangleConfig::default(), env.clone()) + .job(raw_tangle_events::constructor(env.clone()).await?) + .job(periodic_web_poller::constructor()) + .run() + .await?; + } + "eigenlayer" => { + info!("Running Eigenlayer examples"); + BlueprintRunner::new(EigenlayerConfig {}, env.clone()) + .job(eigen_context::constructor(env.clone()).await?) + .run() + .await?; + } + _ => { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "Invalid EXAMPLE_PROTOCOL value. Use 'tangle' or 'eigenlayer'.", + ))); + } + } info!("Exiting..."); Ok(()) diff --git a/blueprints/examples/src/raw_tangle_events.rs b/blueprints/examples/src/raw_tangle_events.rs index 602ab8ee..1a004c9d 100644 --- a/blueprints/examples/src/raw_tangle_events.rs +++ b/blueprints/examples/src/raw_tangle_events.rs @@ -12,18 +12,14 @@ pub async fn constructor( ) -> color_eyre::Result { use gadget_sdk::subxt_core::tx::signer::Signer; - let client = env.client().await.map_err(|e| color_eyre::eyre::eyre!(e))?; let signer = env .first_sr25519_signer() .map_err(|e| color_eyre::eyre::eyre!(e))?; gadget_sdk::info!("Starting the event watcher for {} ...", signer.account_id()); - Ok(RawEventHandler { - service_id: env.service_id().expect("No service ID found"), - context: MyContext, - client, - signer, - }) + RawEventHandler::new(&env, MyContext) + .await + .map_err(|e| color_eyre::eyre::eyre!(e)) } #[job( diff --git a/blueprints/examples/src/tests.rs b/blueprints/examples/src/tests.rs new file mode 100644 index 00000000..3b189a3c --- /dev/null +++ b/blueprints/examples/src/tests.rs @@ -0,0 +1,125 @@ +use crate::eigen_context; +use crate::eigen_context::ExampleTaskManager; +use alloy_provider::Provider; +use blueprint_test_utils::eigenlayer_test_env::start_default_anvil_testnet; +use blueprint_test_utils::helpers::get_receipt; +use blueprint_test_utils::{inject_test_keys, KeyGenType}; +use gadget_io::SupportedChains; +use gadget_sdk::config::protocol::EigenlayerContractAddresses; +use gadget_sdk::config::ContextConfig; +use gadget_sdk::info; +use gadget_sdk::logging::setup_log; +use gadget_sdk::runners::eigenlayer::EigenlayerConfig; +use gadget_sdk::runners::BlueprintRunner; +use gadget_sdk::utils::evm::get_provider_http; +use reqwest::Url; +use std::path::Path; +use std::time::Duration; +use tokio::time::timeout; + +#[tokio::test] +async fn test_eigenlayer_context() { + setup_log(); + + let (_container, http_endpoint, ws_endpoint) = start_default_anvil_testnet(false).await; + let url = Url::parse(&http_endpoint).unwrap(); + + let provider = get_provider_http(&http_endpoint); + info!("Fetching accounts"); + let accounts = provider.get_accounts().await.unwrap(); + + let owner_address = accounts[1]; + let task_generator_address = accounts[4]; + + info!("Deploying Example Task Manager..."); + let context_example_task_manager = ExampleTaskManager::deploy_builder(provider.clone()); + let context_example_task_manager_address = get_receipt(context_example_task_manager) + .await + .unwrap() + .contract_address + .unwrap(); + std::env::set_var( + "EXAMPLE_TASK_MANAGER_ADDRESS", + context_example_task_manager_address.to_string(), + ); + let context_example_task_manager = + ExampleTaskManager::new(context_example_task_manager_address, provider.clone()); + + info!("Starting Eigenlayer Blueprint Context Test..."); + + // Set up Task Spawner + let _task_spawner_handle = tokio::task::spawn(async move { + loop { + tokio::time::sleep(std::time::Duration::from_millis(10000)).await; + match get_receipt( + context_example_task_manager + .createTask(owner_address) + .from(task_generator_address), + ) + .await + { + Ok(receipt) => { + info!("Created task with receipt: {:?}", receipt); + } + Err(e) => { + panic!("Failed to create task: {:?}", e); + } + } + } + }); + + // Set up Temporary Testing Keystore + let tmp_dir = tempfile::TempDir::new().unwrap(); + let keystore_path = &format!("{}", tmp_dir.path().display()); + let keystore_path = Path::new(keystore_path); + let keystore_uri = keystore_path.join(format!("keystores/{}", uuid::Uuid::new_v4())); + inject_test_keys(&keystore_uri, KeyGenType::Anvil(1)) + .await + .expect("Failed to inject testing keys for Blueprint Examples Test"); + let keystore_uri_normalized = + std::path::absolute(&keystore_uri).expect("Failed to resolve keystore URI"); + let keystore_uri_str = format!("file:{}", keystore_uri_normalized.display()); + + let config = ContextConfig::create_eigenlayer_config( + url, + Url::parse(&ws_endpoint).unwrap(), + keystore_uri_str, + SupportedChains::LocalTestnet, + EigenlayerContractAddresses::default(), + ); + let env = gadget_sdk::config::load(config).expect("Failed to load environment"); + + let mut blueprint = BlueprintRunner::new(EigenlayerConfig {}, env.clone()); + + let result = timeout(Duration::from_secs(90), async { + tokio::select! { + _ = blueprint + .job(eigen_context::constructor(env.clone()).await.unwrap()) + .run() + => { + panic!("Blueprint ended unexpectedly"); + } + _ = tokio::task::spawn(async move { + loop { + tokio::time::sleep(Duration::from_millis(3000)).await; + let result = std::env::var("EIGEN_CONTEXT_STATUS").unwrap_or_else(|_| "false".to_string()); + match result.as_str() { + "true" => { + break; + } + _ => { + info!("Waiting for Eigenlayer Context Job to Successfully Finish..."); + } + } + } + }) => { + info!("Eigenlayer Context Test Finished Successfully"); + } + } + }).await; + + match result { + Ok(_) => info!("Success! Exiting..."), + Err(_) => panic!("Test timed out"), + } +} diff --git a/blueprints/incredible-squaring-eigenlayer/Cargo.toml b/blueprints/incredible-squaring-eigenlayer/Cargo.toml index 5863f598..982db7dd 100644 --- a/blueprints/incredible-squaring-eigenlayer/Cargo.toml +++ b/blueprints/incredible-squaring-eigenlayer/Cargo.toml @@ -58,6 +58,7 @@ num-bigint = { workspace = true } [dev-dependencies] blueprint-test-utils = { workspace = true } gadget-io = { workspace = true } +tempfile = { workspace = true } [build-dependencies] blueprint-build-utils = { workspace = true } diff --git a/blueprints/incredible-squaring-eigenlayer/README.md b/blueprints/incredible-squaring-eigenlayer/README.md index efadfc19..6d48dae4 100644 --- a/blueprints/incredible-squaring-eigenlayer/README.md +++ b/blueprints/incredible-squaring-eigenlayer/README.md @@ -36,5 +36,5 @@ cargo build --release -p incredible-squaring-blueprint-eigenlayer - We have a test for running this AVS Blueprint on a local Anvil Testnet. You can run the test with the following: ```bash -RUST_LOG=gadget=trace cargo test --package blueprint-test-utils test_eigenlayer_incredible_squaring_blueprint -- --nocapture +RUST_LOG=gadget=trace cargo test --package incredible-squaring-blueprint-eigenlayer test_eigenlayer_incredible_squaring_blueprint -- --nocapture ``` \ No newline at end of file diff --git a/blueprints/incredible-squaring-eigenlayer/build.rs b/blueprints/incredible-squaring-eigenlayer/build.rs index e3190ee5..d4bbad9b 100644 --- a/blueprints/incredible-squaring-eigenlayer/build.rs +++ b/blueprints/incredible-squaring-eigenlayer/build.rs @@ -5,6 +5,5 @@ fn main() { "./contracts/lib/forge-std", "./contracts", ]; - blueprint_build_utils::build_contracts(contract_dirs); } diff --git a/blueprints/incredible-squaring-eigenlayer/src/contexts/aggregator.rs b/blueprints/incredible-squaring-eigenlayer/src/contexts/aggregator.rs index 19656b52..7b039081 100644 --- a/blueprints/incredible-squaring-eigenlayer/src/contexts/aggregator.rs +++ b/blueprints/incredible-squaring-eigenlayer/src/contexts/aggregator.rs @@ -22,15 +22,13 @@ use gadget_sdk::{ use jsonrpc_core::{IoHandler, Params, Value}; use jsonrpc_http_server::{AccessControlAllowOrigin, DomainsValidation, ServerBuilder}; use std::{collections::VecDeque, net::SocketAddr, sync::Arc, time::Duration}; +use tokio::sync::{oneshot, Mutex, Notify}; use tokio::task::JoinHandle; -use tokio::{ - sync::{oneshot, Mutex}, - time::interval, -}; +use tokio::time::interval; use crate::IncredibleSquaringTaskManager::Task; use alloy_network::EthereumWallet; -use alloy_primitives::Address; +use alloy_primitives::{Address, Bytes}; use eigensdk::client_avsregistry::reader::AvsRegistryChainReader; use eigensdk::services_avsregistry::chaincaller::AvsRegistryServiceChainCaller; use eigensdk::services_blsaggregation::bls_agg::BlsAggregatorService; @@ -54,6 +52,7 @@ pub struct AggregatorContext { pub response_cache: Arc>>, #[config] pub sdk_config: StdGadgetConfiguration, + shutdown: Arc<(Notify, Mutex)>, } impl AggregatorContext { @@ -73,6 +72,7 @@ impl AggregatorContext { wallet, response_cache: Arc::new(Mutex::new(VecDeque::new())), sdk_config, + shutdown: Arc::new((Notify::new(), Mutex::new(false))), }; // Initialize the bls registry service @@ -84,35 +84,40 @@ impl AggregatorContext { Ok(aggregator_context) } - pub fn start(self) -> (JoinHandle<()>, oneshot::Sender<()>) { - let (shutdown_tx, shutdown_rx) = oneshot::channel(); + pub async fn start(self) -> JoinHandle<()> { let aggregator = Arc::new(Mutex::new(self)); - let handle = tokio::spawn(async move { + tokio::spawn(async move { info!("Starting aggregator RPC server"); - let server_handle = - tokio::spawn(Self::start_server(Arc::clone(&aggregator), shutdown_rx)); + let server_handle = tokio::spawn(Self::start_server(Arc::clone(&aggregator))); let process_handle = tokio::spawn(Self::process_cached_responses(Arc::clone(&aggregator))); - tokio::select! { - _ = server_handle => { - error!("Server task unexpectedly finished"); - } - _ = process_handle => { - error!("Process cached responses task unexpectedly finished"); - } + // Wait for both tasks to complete + let (server_result, process_result) = tokio::join!(server_handle, process_handle); + + if let Err(e) = server_result { + error!("Server task failed: {}", e); + } + if let Err(e) = process_result { + error!("Process cached responses task failed: {}", e); } - }); - (handle, shutdown_tx) + info!("Aggregator shutdown complete"); + }) } - async fn start_server( - aggregator: Arc>, - shutdown: oneshot::Receiver<()>, - ) -> Result<()> { + pub async fn shutdown(&self) { + info!("Initiating aggregator shutdown"); + + // Set internal shutdown flag + let (notify, is_shutdown) = &*self.shutdown; + *is_shutdown.lock().await = true; + notify.notify_waiters(); + } + + async fn start_server(aggregator: Arc>) -> Result<()> { let mut io = IoHandler::new(); io.add_method("process_signed_task_response", { let aggregator = Arc::clone(&aggregator); @@ -159,16 +164,52 @@ impl AggregatorContext { // Create a close handle before we move the server let close_handle = server.close_handle(); + // Get shutdown components + let shutdown = { + let agg = aggregator.lock().await; + agg.shutdown.clone() + }; + + // Create a channel to coordinate shutdown + let (server_tx, server_rx) = oneshot::channel(); + + // Spawn the server in a blocking task + let server_handle = tokio::task::spawn_blocking(move || { + server.wait(); + let _ = server_tx.send(()); + }); + // Use tokio::select! to wait for either the server to finish or the shutdown signal tokio::select! { - _ = async { server.wait() } => { - info!("Server has stopped"); + result = server_handle => { + info!("Server has stopped naturally"); + result.map_err(|e| { + error!("Server task failed: {}", e); + e + })?; } - _ = shutdown => { + _ = async { + let (_, is_shutdown) = &*shutdown; + loop { + if *is_shutdown.lock().await { + break; + } + tokio::time::sleep(Duration::from_millis(100)).await; + } + } => { info!("Initiating server shutdown"); - close_handle.close(); + // Spawn a blocking task to handle server shutdown + tokio::task::spawn_blocking(move || { + close_handle.close(); + }).await?; + + // Wait for server to complete + let _ = server_rx.await; + info!("Server has stopped after shutdown"); } } + + info!("Server shutdown complete"); Ok(()) } @@ -189,18 +230,53 @@ impl AggregatorContext { async fn process_cached_responses(aggregator: Arc>) { let mut interval = interval(Duration::from_secs(6)); - loop { - interval.tick().await; - - let mut aggregator = aggregator.lock().await; - let responses_to_process = aggregator.response_cache.lock().await.clone(); + // Get shutdown components + let shutdown = { + let agg = aggregator.lock().await; + agg.shutdown.clone() + }; - for resp in responses_to_process { - if let Err(e) = aggregator.process_response(resp).await { - error!("Failed to process cached response: {:?}", e); - // Continue processing other responses without failing - } else { - aggregator.response_cache.lock().await.pop_front(); + loop { + tokio::select! { + _ = interval.tick() => { + // Check shutdown status first + if *shutdown.1.lock().await { + info!("Process cached responses received shutdown signal"); + break; + } + + // Get responses to process while holding the lock briefly + let responses_to_process = { + let guard = aggregator.lock().await; + let cache = guard.response_cache.lock().await; + cache.clone() + }; + + // Process each response without holding the main lock + for resp in responses_to_process { + let res = { + let mut guard = aggregator.lock().await; + guard.process_response(resp.clone()).await + }; + match res { + Ok(_) => { + // Only remove from cache if processing succeeded + let guard = aggregator.lock().await; + let mut cache = guard.response_cache.lock().await; + cache.pop_front(); + } + Err(e) => { + error!("Failed to process cached response: {:?}", e); + // Continue processing other responses without failing + } + } + } + } + _ = shutdown.0.notified() => { + if *shutdown.1.lock().await { + info!("Process cached responses received shutdown signal"); + break; + } } } } @@ -280,76 +356,6 @@ impl AggregatorContext { Ok(()) } - // async fn process_signed_task_response(&mut self, resp: SignedTaskResponse) -> Result<()> { - // let SignedTaskResponse { - // task_response, - // signature, - // operator_id, - // } = resp.clone(); - // let task_index = task_response.referenceTaskIndex; - // let task_response_digest = keccak256(TaskResponse::abi_encode(&task_response)); - - // info!( - // "Processing signed task response for task index: {}, task response digest: {}", - // task_index, task_response_digest - // ); - - // if self - // .tasks_responses - // .lock() - // .await - // .entry(task_index) - // .or_default() - // .contains_key(&task_response_digest) - // { - // info!( - // "Task response digest already processed for task index: {}", - // task_index - // ); - // return Ok(()); - // } - - // if let Some(tasks_responses) = self.tasks_responses.lock().await.get_mut(&task_index) { - // tasks_responses.insert(task_response_digest, task_response.clone()); - // } - - // debug!( - // "Inserted task response for task index: {}, {:?}", - // task_index, resp - // ); - - // if let Err(e) = self - // .bls_aggregation_service_in_memory() - // .await? - // .process_new_signature(task_index, task_response_digest, signature, operator_id) - // .await - // { - // error!( - // "Failed to process new signature for task index: {}. Error: {:?}", - // task_index, e - // ); - // } else { - // debug!( - // "Successfully processed new signature for task index: {}", - // task_index - // ); - // } - - // if let Some(aggregated_response) = self - // .bls_aggregation_service_in_memory() - // .await? - // .aggregated_response_receiver - // .lock() - // .await - // .recv() - // .await - // { - // self.send_aggregated_response_to_contract(aggregated_response?) - // .await?; - // } - // Ok(()) - // } - async fn send_aggregated_response_to_contract( &self, response: BlsAggregationServiceResponse, @@ -421,28 +427,23 @@ impl AggregatorContext { #[async_trait::async_trait] impl BackgroundService for AggregatorContext { async fn start(&self) -> Result>, RunnerError> { - let (tx, rx) = oneshot::channel(); - - let aggregator = self.clone(); + let handle = self.clone().start().await; + let (result_tx, result_rx) = oneshot::channel(); tokio::spawn(async move { - let (handle, shutdown_tx) = aggregator.start(); - - // Wait for the handle to complete - if let Err(e) = handle.await { - error!("Aggregator task failed: {:?}", e); - let _ = tx.send(Err(RunnerError::EigenlayerError(format!( - "Aggregator task failed: {:?}", - e - )))); - } else { - let _ = tx.send(Ok(())); + match handle.await { + Ok(_) => { + let _ = result_tx.send(Ok(())); + } + Err(e) => { + let _ = result_tx.send(Err(RunnerError::EigenlayerError(format!( + "Aggregator task failed: {:?}", + e + )))); + } } - - // Drop the shutdown sender to ensure proper cleanup - drop(shutdown_tx); }); - Ok(rx) + Ok(result_rx) } } diff --git a/blueprints/incredible-squaring-eigenlayer/src/lib.rs b/blueprints/incredible-squaring-eigenlayer/src/lib.rs index aa3b3ebf..1b90d76d 100644 --- a/blueprints/incredible-squaring-eigenlayer/src/lib.rs +++ b/blueprints/incredible-squaring-eigenlayer/src/lib.rs @@ -6,6 +6,8 @@ use serde::{Deserialize, Serialize}; pub mod constants; pub mod contexts; pub mod jobs; +#[cfg(test)] +mod tests; sol!( #[allow(missing_docs)] @@ -19,3 +21,19 @@ load_abi!( INCREDIBLE_SQUARING_TASK_MANAGER_ABI_STRING, "contracts/out/IncredibleSquaringTaskManager.sol/IncredibleSquaringTaskManager.json" ); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + #[derive(Debug)] + PauserRegistry, + "./contracts/out/IPauserRegistry.sol/IPauserRegistry.json" +); + +sol!( + #[allow(missing_docs, clippy::too_many_arguments)] + #[sol(rpc)] + #[derive(Debug)] + RegistryCoordinator, + "./contracts/out/RegistryCoordinator.sol/RegistryCoordinator.json" +); diff --git a/blueprints/incredible-squaring-eigenlayer/src/main.rs b/blueprints/incredible-squaring-eigenlayer/src/main.rs index 9f249d75..5714e8c5 100644 --- a/blueprints/incredible-squaring-eigenlayer/src/main.rs +++ b/blueprints/incredible-squaring-eigenlayer/src/main.rs @@ -39,17 +39,10 @@ async fn main() { provider, ); - let initialize_task = InitializeBlsTaskEventHandler { - ctx: aggregator_context.clone(), - contract: contract.clone(), - contract_instance: Default::default(), - }; + let initialize_task = + InitializeBlsTaskEventHandler::new(contract.clone(), aggregator_context.clone()); - let x_square_eigen = XsquareEigenEventHandler { - ctx: eigen_client_context, - contract: contract.clone(), - contract_instance: Default::default(), - }; + let x_square_eigen = XsquareEigenEventHandler::new(contract.clone(), eigen_client_context); info!("~~~ Executing the incredible squaring blueprint ~~~"); let eigen_config = EigenlayerConfig {}; diff --git a/blueprints/incredible-squaring-eigenlayer/src/tests.rs b/blueprints/incredible-squaring-eigenlayer/src/tests.rs new file mode 100644 index 00000000..c3f3d05d --- /dev/null +++ b/blueprints/incredible-squaring-eigenlayer/src/tests.rs @@ -0,0 +1,318 @@ +use crate::constants::{AGGREGATOR_PRIVATE_KEY, TASK_MANAGER_ADDRESS}; +use crate::contexts::aggregator::AggregatorContext; +use crate::contexts::client::AggregatorClient; +use crate::contexts::x_square::EigenSquareContext; +use crate::jobs::compute_x_square::XsquareEigenEventHandler; +use crate::jobs::initialize_task::InitializeBlsTaskEventHandler; +use crate::IncredibleSquaringTaskManager; +use alloy_network::EthereumWallet; +use alloy_provider::Provider; +use alloy_signer_local::PrivateKeySigner; +use blueprint_test_utils::eigenlayer_test_env::*; +use blueprint_test_utils::{ + eigenlayer_test_env::start_default_anvil_testnet, helpers::wait_for_responses, + inject_test_keys, KeyGenType, +}; +use gadget_io::SupportedChains; +use gadget_sdk::config::ContextConfig; +use gadget_sdk::logging::setup_log; +use gadget_sdk::runners::eigenlayer::EigenlayerConfig; +use gadget_sdk::runners::BlueprintRunner; +use gadget_sdk::utils::evm::get_wallet_provider_http; +use reqwest::Url; +use std::path::Path; + +const ANVIL_STATE_PATH: &str = + "./blueprint-test-utils/anvil/deployed_anvil_states/testnet_state.json"; + +#[tokio::test(flavor = "multi_thread")] +#[allow(clippy::needless_return)] +async fn test_eigenlayer_incredible_squaring_blueprint() { + setup_log(); + + let (_container, http_endpoint, ws_endpoint) = start_default_anvil_testnet(true).await; + + let EigenlayerTestEnvironment { + accounts, + http_endpoint, + ws_endpoint, + eigenlayer_contract_addresses: + EigenlayerContractAddresses { + registry_coordinator_address, + .. + }, + pauser_registry_address, + .. + } = setup_eigenlayer_test_environment(&http_endpoint, &ws_endpoint).await; + let owner_address = &accounts[1]; + let aggregator_address = &accounts[9]; + let task_generator_address = &accounts[4]; + let task_manager_address = deploy_task_manager( + &http_endpoint, + registry_coordinator_address, + pauser_registry_address, + *owner_address, + *aggregator_address, + *task_generator_address, + ) + .await; + + let num_successful_responses_required = 3; + let successful_responses = Arc::new(Mutex::new(0)); + let successful_responses_clone = successful_responses.clone(); + + // Start the Task Response Listener + let response_listener = setup_task_response_listener( + task_manager_address, + ws_endpoint.clone(), + successful_responses, + ) + .await; + + // Start the Task Spawner + let task_spawner = setup_task_spawner( + task_manager_address, + registry_coordinator_address, + *task_generator_address, + accounts.to_vec(), + http_endpoint.clone(), + ) + .await; + + tokio::spawn(async move { + task_spawner.await; + }); + + tokio::spawn(async move { + response_listener.await; + }); + + info!("Starting Blueprint Execution..."); + + let signer: PrivateKeySigner = AGGREGATOR_PRIVATE_KEY + .parse() + .expect("failed to generate wallet "); + let wallet = EthereumWallet::from(signer); + let provider = get_wallet_provider_http(&http_endpoint, wallet.clone()); + + // Set up Temporary Testing Keystore + let tmp_dir = tempfile::TempDir::new().unwrap(); + let keystore_path = &format!("{}", tmp_dir.path().display()); + let keystore_path = Path::new(keystore_path); + let keystore_uri = keystore_path.join(format!("keystores/{}", uuid::Uuid::new_v4())); + inject_test_keys(&keystore_uri, KeyGenType::Anvil(0)) + .await + .expect("Failed to inject testing keys for Blueprint Examples Test"); + let keystore_uri_normalized = + std::path::absolute(&keystore_uri).expect("Failed to resolve keystore URI"); + let keystore_uri_str = format!("file:{}", keystore_uri_normalized.display()); + + let config = ContextConfig::create_eigenlayer_config( + Url::parse(&http_endpoint).unwrap(), + Url::parse(&ws_endpoint).unwrap(), + keystore_uri_str, + SupportedChains::LocalTestnet, + EigenlayerContractAddresses::default(), + ); + let env = gadget_sdk::config::load(config).expect("Failed to load environment"); + + let server_address = format!("{}:{}", env.target_addr, 8081); + let eigen_client_context = EigenSquareContext { + client: AggregatorClient::new(&server_address).unwrap(), + std_config: env.clone(), + }; + let aggregator_context = + AggregatorContext::new(server_address, *TASK_MANAGER_ADDRESS, wallet, env.clone()) + .await + .unwrap(); + let aggregator_context = Arc::new(aggregator_context); + let aggregator_context_clone = aggregator_context.clone(); + + let contract = IncredibleSquaringTaskManager::IncredibleSquaringTaskManagerInstance::new( + task_manager_address, + provider, + ); + + let initialize_task = + InitializeBlsTaskEventHandler::new(contract.clone(), (*aggregator_context).clone()); + + let x_square_eigen = XsquareEigenEventHandler::new(contract.clone(), eigen_client_context); + + info!("~~~ Executing the incredible squaring blueprint ~~~"); + let eigen_config = EigenlayerConfig {}; + + let blueprint_handle = tokio::spawn(async move { + BlueprintRunner::new(eigen_config, env) + .job(x_square_eigen) + .job(initialize_task) + .background_service(Box::new((*aggregator_context).clone())) + .run() + .await + .unwrap(); + }); + + // Wait for the process to complete or timeout + let timeout_duration = Duration::from_secs(300); + let result = wait_for_responses( + successful_responses_clone.clone(), + num_successful_responses_required, + timeout_duration, + ) + .await; + + // Start the shutdown/cleanup process + aggregator_context_clone.shutdown().await; + blueprint_handle.abort(); + blueprint_handle.await.unwrap_err(); + + match result { + Ok(Ok(())) => { + info!("Test completed successfully with {num_successful_responses_required} tasks responded to."); + } + _ => { + panic!( + "Test failed with {} successful responses out of {} required", + successful_responses_clone.lock().await, + num_successful_responses_required + ); + } + } +} + +pub async fn deploy_task_manager( + http_endpoint: &str, + registry_coordinator_address: Address, + pauser_registry_address: Address, + owner_address: Address, + aggregator_address: Address, + task_generator_address: Address, +) -> Address { + let provider = get_provider_http(http_endpoint); + let deploy_call = IncredibleSquaringTaskManager::deploy_builder( + provider.clone(), + registry_coordinator_address, + 10u32, + ); + info!("Deploying Incredible Squaring Task Manager"); + let task_manager_address = match get_receipt(deploy_call).await { + Ok(receipt) => match receipt.contract_address { + Some(address) => address, + None => { + error!("Failed to get contract address from receipt"); + panic!("Failed to get contract address from receipt"); + } + }, + Err(e) => { + error!("Failed to get receipt: {:?}", e); + panic!("Failed to get contract address from receipt"); + } + }; + info!( + "Deployed Incredible Squaring Task Manager at {}", + task_manager_address + ); + std::env::set_var("TASK_MANAGER_ADDRESS", task_manager_address.to_string()); + + let task_manager = IncredibleSquaringTaskManager::new(task_manager_address, provider.clone()); + // Initialize the Incredible Squaring Task Manager + info!("Initializing Incredible Squaring Task Manager"); + let init_call = task_manager.initialize( + pauser_registry_address, + owner_address, + aggregator_address, + task_generator_address, + ); + let init_receipt = get_receipt(init_call).await.unwrap(); + assert!(init_receipt.status()); + info!("Initialized Incredible Squaring Task Manager"); + + task_manager_address +} + +pub async fn setup_task_spawner( + task_manager_address: Address, + registry_coordinator_address: Address, + task_generator_address: Address, + accounts: Vec
, + http_endpoint: String, +) -> impl std::future::Future { + let provider = get_provider_http(http_endpoint.as_str()); + let task_manager = IncredibleSquaringTaskManager::new(task_manager_address, provider.clone()); + let registry_coordinator = + RegistryCoordinator::new(registry_coordinator_address, provider.clone()); + + let operators = vec![vec![accounts[0]]]; + let quorums = Bytes::from(vec![0]); + async move { + loop { + tokio::time::sleep(std::time::Duration::from_millis(5000)).await; + + info!("Creating a new task..."); + if get_receipt( + task_manager + .createNewTask(U256::from(2), 100u32, quorums.clone()) + .from(task_generator_address), + ) + .await + .unwrap() + .status() + { + info!("Created a new task..."); + } + + if get_receipt( + registry_coordinator.updateOperatorsForQuorum(operators.clone(), quorums.clone()), + ) + .await + .unwrap() + .status() + { + info!("Updated operators for quorum..."); + } + + tokio::process::Command::new("sh") + .arg("-c") + .arg(format!( + "cast rpc anvil_mine 1 --rpc-url {} > /dev/null", + http_endpoint + )) + .output() + .await + .unwrap(); + info!("Mined a block..."); + } + } +} + +pub async fn setup_task_response_listener( + task_manager_address: Address, + ws_endpoint: String, + successful_responses: Arc>, +) -> impl std::future::Future { + let task_manager = IncredibleSquaringTaskManager::new( + task_manager_address, + get_provider_ws(ws_endpoint.as_str()).await, + ); + + async move { + let filter = task_manager.TaskResponded_filter().filter; + let mut event_stream = match task_manager.provider().subscribe_logs(&filter).await { + Ok(stream) => stream.into_stream(), + Err(e) => { + error!("Failed to subscribe to logs: {:?}", e); + return; + } + }; + while let Some(event) = event_stream.next().await { + let IncredibleSquaringTaskManager::TaskResponded { + taskResponse: _, .. + } = event + .log_decode::() + .unwrap() + .inner + .data; + let mut counter = successful_responses.lock().await; + *counter += 1; + } + } +} diff --git a/blueprints/incredible-squaring-symbiotic/build.rs b/blueprints/incredible-squaring-symbiotic/build.rs index 5a98e538..ffa8e479 100644 --- a/blueprints/incredible-squaring-symbiotic/build.rs +++ b/blueprints/incredible-squaring-symbiotic/build.rs @@ -4,6 +4,5 @@ fn main() { "./contracts/lib/forge-std", "./contracts", ]; - blueprint_build_utils::build_contracts(contract_dirs); } diff --git a/macros/context-derive/src/eigenlayer.rs b/macros/context-derive/src/eigenlayer.rs index 5240fc67..82920ffe 100644 --- a/macros/context-derive/src/eigenlayer.rs +++ b/macros/context-derive/src/eigenlayer.rs @@ -4,6 +4,7 @@ use syn::DeriveInput; use crate::cfg::FieldInfo; /// Generate the `EigenlayerContext` implementation for the given struct. +#[allow(clippy::too_many_lines)] pub fn generate_context_impl( DeriveInput { ident: name, @@ -21,6 +22,15 @@ pub fn generate_context_impl( quote! { use alloy_provider::Provider; + use eigensdk::client_avsregistry::reader::AvsRegistryReader; + use eigensdk::utils::binding::RegistryCoordinator; + use eigensdk::utils::binding::StakeRegistry::{StakeRegistryInstance, StakeUpdate}; + use eigensdk::types::operator::{Operator, OperatorPubKeys}; + use eigensdk::client_elcontracts::reader::ELChainReader; + use eigensdk::logging::get_test_logger; + use gadget_sdk::utils::evm::get_slasher_address; + use gadget_sdk::ctx::BigInt; + use alloy_primitives::{U256, FixedBytes}; #[async_trait::async_trait] impl #impl_generics gadget_sdk::ctx::EigenlayerContext for #name #ty_generics #where_clause { @@ -108,6 +118,227 @@ pub fn generate_context_impl( let avs_registry_service = self.avs_registry_service_chain_caller_in_memory().await?; Ok(eigensdk::services_blsaggregation::bls_agg::BlsAggregatorService::new(avs_registry_service)) } + + async fn get_operator_stake_in_quorums_at_block( + &self, + block_number: u32, + quorum_numbers: Bytes, + ) -> Result>, std::io::Error> { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + self.avs_registry_reader().await?.get_operators_stake_in_quorums_at_block( + block_number, + quorum_numbers, + ).await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + } + + async fn get_operator_stake_in_quorums_at_current_block( + &self, + operator_id: FixedBytes<32>, + ) -> Result, std::io::Error> { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + self.avs_registry_reader().await?.get_operator_stake_in_quorums_of_operator_at_current_block( + operator_id, + ).await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + } + + async fn get_operator_by_id( + &self, + operator_id: [u8; 32], + ) -> Result { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + self.avs_registry_reader().await?.get_operator_from_id( + operator_id, + ).await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + } + + async fn get_operator_stake_history( + &self, + operator_id: FixedBytes<32>, + quorum_number: u8, + ) -> Result, std::io::Error> { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + let gadget_sdk::config::ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &#field_access.protocol_specific else { + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "Expected Eigenlayer protocol")); + }; + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_rpc_endpoint.parse().map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?) + .root() + .clone() + .boxed(); + let registry_coordinator = RegistryCoordinator::new(contract_addresses.registry_coordinator_address, provider.clone()); + let stake_registry_address = registry_coordinator.stakeRegistry().call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?._0; + let instance = StakeRegistryInstance::new(stake_registry_address, provider.clone()); + let call_builder = instance.getStakeHistory(operator_id, quorum_number); + let response = call_builder.call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + Ok(response._0) + } + + async fn get_operator_stake_update_at_index( + &self, + quorum_number: u8, + operator_id: FixedBytes<32>, + index: U256, + ) -> Result { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + let gadget_sdk::config::ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &#field_access.protocol_specific else { + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "Expected Eigenlayer protocol")); + }; + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_rpc_endpoint.parse().map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?) + .root() + .clone() + .boxed(); + let registry_coordinator = RegistryCoordinator::new(contract_addresses.registry_coordinator_address, provider.clone()); + let stake_registry_address = registry_coordinator.stakeRegistry().call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?._0; + let instance = StakeRegistryInstance::new(stake_registry_address, provider.clone()); + let call_builder = instance.getStakeUpdateAtIndex(quorum_number, operator_id, index); + let response = call_builder.call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + Ok(response._0) + } + + async fn get_operator_stake_at_block_number( + &self, + operator_id: FixedBytes<32>, + quorum_number: u8, + block_number: u32, + ) -> Result { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + let gadget_sdk::config::ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &#field_access.protocol_specific else { + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "Expected Eigenlayer protocol")); + }; + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_rpc_endpoint.parse().map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?) + .root() + .clone() + .boxed(); + let registry_coordinator = RegistryCoordinator::new(contract_addresses.registry_coordinator_address, provider.clone()); + let stake_registry_address = registry_coordinator.stakeRegistry().call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?._0; + let instance = StakeRegistryInstance::new(stake_registry_address, provider.clone()); + let call_builder = instance.getStakeAtBlockNumber(operator_id, quorum_number, block_number); + let response = call_builder.call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + Ok(response._0) + } + + async fn get_operator_details( + &self, + operator_addr: Address + ) -> Result { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + let gadget_sdk::config::ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &#field_access.protocol_specific else { + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "Expected Eigenlayer protocol")); + }; + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_rpc_endpoint.parse().map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?) + .root() + .clone() + .boxed(); + let slasher_addr = get_slasher_address(contract_addresses.delegation_manager_address, &http_rpc_endpoint.clone()).await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + let chain_reader = ELChainReader::new( + get_test_logger(), + slasher_addr, + contract_addresses.delegation_manager_address, + contract_addresses.avs_directory_address, + http_rpc_endpoint.clone(), + ); + Ok(chain_reader.get_operator_details(operator_addr).await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?) + + } + + async fn get_latest_stake_update( + &self, + operator_id: FixedBytes<32>, + quorum_number: u8, + ) -> Result { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + let gadget_sdk::config::ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &#field_access.protocol_specific else { + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "Expected Eigenlayer protocol")); + }; + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_rpc_endpoint.parse().map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?) + .root() + .clone() + .boxed(); + let registry_coordinator = RegistryCoordinator::new(contract_addresses.registry_coordinator_address, provider.clone()); + let stake_registry_address = registry_coordinator.stakeRegistry().call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?._0; + let instance = StakeRegistryInstance::new(stake_registry_address, provider.clone()); + let call_builder = instance.getLatestStakeUpdate(operator_id, quorum_number); + let response = call_builder.call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + Ok(response._0) + } + + async fn get_operator_id( + &self, + operator_addr: Address, + ) -> Result, std::io::Error> { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + self.avs_registry_reader().await?.get_operator_id( + operator_addr, + ).await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + } + + async fn get_total_stake_at_block_number_from_index( + &self, + quorum_number: u8, + block_number: u32, + index: U256, + ) -> Result { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + let gadget_sdk::config::ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &#field_access.protocol_specific else { + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "Expected Eigenlayer protocol")); + }; + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_rpc_endpoint.parse().map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?) + .root() + .clone() + .boxed(); + let registry_coordinator = RegistryCoordinator::new(contract_addresses.registry_coordinator_address, provider.clone()); + let stake_registry_address = registry_coordinator.stakeRegistry().call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?._0; + let instance = StakeRegistryInstance::new(stake_registry_address, provider.clone()); + let call_builder = instance.getTotalStakeAtBlockNumberFromIndex(quorum_number, block_number, index); + let response = call_builder.call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + Ok(response._0) + } + + async fn get_total_stake_history_length( + &self, + quorum_number: u8, + ) -> Result { + let http_rpc_endpoint = #field_access.http_rpc_endpoint.clone(); + let gadget_sdk::config::ProtocolSpecificSettings::Eigenlayer(contract_addresses) = &#field_access.protocol_specific else { + return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "Expected Eigenlayer protocol")); + }; + let provider = alloy_provider::ProviderBuilder::new() + .with_recommended_fillers() + .on_http(http_rpc_endpoint.parse().map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?) + .root() + .clone() + .boxed(); + let registry_coordinator = RegistryCoordinator::new(contract_addresses.registry_coordinator_address, provider.clone()); + let stake_registry_address = registry_coordinator.stakeRegistry().call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?._0; + let instance = StakeRegistryInstance::new(stake_registry_address, provider.clone()); + let call_builder = instance.getTotalStakeHistoryLength(quorum_number); + let response = call_builder.call().await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + Ok(response._0) + } + + async fn query_existing_registered_operator_pub_keys( + &self, + start_block: u64, + to_block: u64, + ) -> Result<(Vec
, Vec), std::io::Error> { + let ws_rpc_endpoint = #field_access.ws_rpc_endpoint.clone(); + self.avs_registry_reader().await?.query_existing_registered_operator_pub_keys( + start_block, + to_block, + ws_rpc_endpoint, + ).await.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + } } } } diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 520ee08c..a1504c60 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -78,6 +78,7 @@ tangle-subxt = { workspace = true } alloy-contract = { workspace = true } alloy-network = { workspace = true } alloy-primitives = { workspace = true } +alloy-json-abi = { workspace = true, features = ["serde_json"] } alloy-provider = { workspace = true, optional = true } alloy-rpc-types = { workspace = true } alloy-sol-types = { workspace = true } diff --git a/sdk/src/config/context_config.rs b/sdk/src/config/context_config.rs index 6ebe33cf..0146840a 100644 --- a/sdk/src/config/context_config.rs +++ b/sdk/src/config/context_config.rs @@ -1,11 +1,14 @@ use super::*; +use crate::config::protocol::{EigenlayerContractAddresses, SymbioticContractAddresses}; use alloc::string::String; use alloy_primitives::Address; use core::fmt::Debug; use core::net::IpAddr; +use core::str::FromStr; use gadget_io::SupportedChains; use libp2p::Multiaddr; use serde::{Deserialize, Serialize}; +use std::net::Ipv4Addr; use url::Url; #[derive(Debug, Default, Clone, clap::Parser, Serialize, Deserialize)] @@ -210,6 +213,200 @@ impl Default for GadgetCLICoreSettings { } } +impl ContextConfig { + /// Creates a new context config with the given parameters + /// + /// # Arguments + /// - `http_rpc_url`: The HTTP RPC URL of the target chain + /// - `ws_rpc_url`: The WebSocket RPC URL of the target chain + /// - `use_secure_url`: Whether to use a secure URL (ws/wss and http/https) + /// - `keystore_uri`: The keystore URI as a string + /// - `chain`: The [`chain`](SupportedChains) + /// - `protocol`: The [`Protocol`] + /// - `eigenlayer_contract_addresses`: The [`contract addresses`](EigenlayerContractAddresses) for the necessary EigenLayer contracts + /// - `symbiotic_contract_addresses`: The [`contract addresses`](SymbioticContractAddresses) for the necessary Symbiotic contracts + /// - `blueprint_id`: The blueprint ID - only required for Tangle + /// - `service_id`: The service ID - only required for Tangle + #[allow(clippy::too_many_arguments)] + pub fn create_config( + target_addr: IpAddr, + target_port: u16, + http_rpc_url: Url, + ws_rpc_url: Url, + use_secure_url: bool, + skip_registration: bool, + keystore_uri: String, + keystore_password: Option, + chain: SupportedChains, + protocol: Protocol, + eigenlayer_contract_addresses: Option, + symbiotic_contract_addresses: Option, + blueprint_id: Option, + service_id: Option, + ) -> Self { + // Eigenlayer addresses + let registry_coordinator = + eigenlayer_contract_addresses.map(|a| a.registry_coordinator_address); + let operator_state_retriever = + eigenlayer_contract_addresses.map(|a| a.operator_state_retriever_address); + let delegation_manager = + eigenlayer_contract_addresses.map(|a| a.delegation_manager_address); + let strategy_manager = eigenlayer_contract_addresses.map(|a| a.strategy_manager_address); + let avs_directory = eigenlayer_contract_addresses.map(|a| a.avs_directory_address); + + // Symbiotic addresses + let operator_registry = symbiotic_contract_addresses.map(|a| a.operator_registry_address); + let network_registry = symbiotic_contract_addresses.map(|a| a.network_registry_address); + let base_delegator = symbiotic_contract_addresses.map(|a| a.base_delegator_address); + let network_opt_in_service = + symbiotic_contract_addresses.map(|a| a.network_opt_in_service_address); + let vault_opt_in_service = + symbiotic_contract_addresses.map(|a| a.vault_opt_in_service_address); + let slasher = symbiotic_contract_addresses.map(|a| a.slasher_address); + let veto_slasher = symbiotic_contract_addresses.map(|a| a.veto_slasher_address); + + ContextConfig { + gadget_core_settings: GadgetCLICoreSettings::Run { + target_addr, + target_port, + use_secure_url, + test_mode: false, + log_id: None, + http_rpc_url, + bootnodes: None, + keystore_uri, + chain, + verbose: 3, + pretty: true, + keystore_password, + blueprint_id, + service_id, + skip_registration, + protocol, + registry_coordinator, + operator_state_retriever, + delegation_manager, + ws_rpc_url, + strategy_manager, + avs_directory, + operator_registry, + network_registry, + base_delegator, + network_opt_in_service, + vault_opt_in_service, + slasher, + veto_slasher, + }, + } + } + + /// Creates a new context config with the given parameters + /// + /// # Defaults + /// - `target_addr`: The same host address as the given http_rpc_url, defaulting to 127.0.0.1 if an error occurs + /// - `target_port`: The same port as the given http_rpc_url, defaulting to 0 if an error occurs + /// - `use_secure_url`: false + /// - `skip_registration`: false + /// - `keystore_password`: None + #[allow(clippy::too_many_arguments)] + pub fn create_config_with_defaults( + http_rpc_url: Url, + ws_rpc_url: Url, + keystore_uri: String, + chain: SupportedChains, + protocol: Protocol, + eigenlayer_contract_addresses: Option, + symbiotic_contract_addresses: Option, + blueprint_id: Option, + service_id: Option, + ) -> Self { + let target_port = http_rpc_url.port().unwrap_or_default(); + let target_addr = http_rpc_url + .host_str() + .and_then(|host| IpAddr::from_str(host).ok()) + .unwrap_or_else(|| IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1))); + + ContextConfig::create_config( + target_addr, + target_port, + http_rpc_url, + ws_rpc_url, + false, + false, + keystore_uri, + None, + chain, + protocol, + eigenlayer_contract_addresses, + symbiotic_contract_addresses, + blueprint_id, + service_id, + ) + } + + /// Creates a new context config with defaults for Eigenlayer + pub fn create_eigenlayer_config( + http_rpc_url: Url, + ws_rpc_url: Url, + keystore_uri: String, + chain: SupportedChains, + eigenlayer_contract_addresses: EigenlayerContractAddresses, + ) -> Self { + Self::create_config_with_defaults( + http_rpc_url, + ws_rpc_url, + keystore_uri, + chain, + Protocol::Eigenlayer, + Some(eigenlayer_contract_addresses), + None, + None, + None, + ) + } + + /// Creates a new context config with defaults for Symbiotic + pub fn create_symbiotic_config( + http_rpc_url: Url, + ws_rpc_url: Url, + keystore_uri: String, + chain: SupportedChains, + symbiotic_contract_addresses: SymbioticContractAddresses, + ) -> Self { + Self::create_config_with_defaults( + http_rpc_url, + ws_rpc_url, + keystore_uri, + chain, + Protocol::Symbiotic, + None, + Some(symbiotic_contract_addresses), + None, + None, + ) + } + + /// Creates a new context config with defaults for Tangle + pub fn create_tangle_config( + http_rpc_url: Url, + ws_rpc_url: Url, + keystore_uri: String, + chain: SupportedChains, + ) -> Self { + Self::create_config_with_defaults( + http_rpc_url, + ws_rpc_url, + keystore_uri, + chain, + Protocol::Tangle, + None, + None, + None, + None, + ) + } +} + fn default_protocol() -> Protocol { Protocol::Tangle } diff --git a/sdk/src/ctx.rs b/sdk/src/ctx.rs index b3826b4b..d8540d40 100644 --- a/sdk/src/ctx.rs +++ b/sdk/src/ctx.rs @@ -46,15 +46,20 @@ //! } //! ``` -use core::future::Future; - use crate::keystore::backend::GenericKeyStore; +use alloy_primitives::{Address, Bytes, FixedBytes, U256}; +use core::future::Future; +use eigensdk::types::operator::{Operator, OperatorPubKeys}; +use eigensdk::utils::binding::OperatorStateRetriever; +use eigensdk::utils::binding::StakeRegistry::StakeUpdate; use eigensdk::{ client_avsregistry::{reader::AvsRegistryChainReader, writer::AvsRegistryChainWriter}, services_avsregistry::chaincaller::AvsRegistryServiceChainCaller, services_blsaggregation::bls_agg::BlsAggregatorService, services_operatorsinfo::operatorsinfo_inmemory::OperatorInfoServiceInMemory, }; +pub use num_bigint::BigInt; +use std::collections::HashMap; // derives pub use gadget_context_derive::*; use tangle_subxt::tangle_testnet_runtime::api::runtime_types::{ @@ -151,4 +156,83 @@ pub trait EigenlayerContext { >, std::io::Error, >; + + /// Get Operator stake in Quorums at a given block. + async fn get_operator_stake_in_quorums_at_block( + &self, + block_number: u32, + quorum_numbers: Bytes, + ) -> Result>, std::io::Error>; + + /// Get an Operator's stake in Quorums at current block. + async fn get_operator_stake_in_quorums_at_current_block( + &self, + operator_id: FixedBytes<32>, + ) -> Result, std::io::Error>; + + /// Get an Operator by ID. + async fn get_operator_by_id(&self, operator_id: [u8; 32]) -> Result; + + /// Get an Operator stake history. + async fn get_operator_stake_history( + &self, + operator_id: FixedBytes<32>, + quorum_number: u8, + ) -> Result, std::io::Error>; + + /// Get an Operator stake update at a given index. + async fn get_operator_stake_update_at_index( + &self, + quorum_number: u8, + operator_id: FixedBytes<32>, + index: U256, + ) -> Result; + + /// Get an Operator's stake at a given block number. + async fn get_operator_stake_at_block_number( + &self, + operator_id: FixedBytes<32>, + quorum_number: u8, + block_number: u32, + ) -> Result; + + /// Get an Operator's [`details`](OperatorDetails). + async fn get_operator_details( + &self, + operator_addr: Address, + ) -> Result; + + /// Get an Operator's latest stake update. + async fn get_latest_stake_update( + &self, + operator_id: FixedBytes<32>, + quorum_number: u8, + ) -> Result; + + /// Get an Operator's ID as [`FixedBytes`] from its [`Address`]. + async fn get_operator_id( + &self, + operator_addr: Address, + ) -> Result, std::io::Error>; + + /// Get the total stake at a given block number from a given index. + async fn get_total_stake_at_block_number_from_index( + &self, + quorum_number: u8, + block_number: u32, + index: U256, + ) -> Result; + + /// Get the total stake history length of a given quorum. + async fn get_total_stake_history_length( + &self, + quorum_number: u8, + ) -> Result; + + /// Provides the public keys of existing registered operators within the provided block range. + async fn query_existing_registered_operator_pub_keys( + &self, + start_block: u64, + to_block: u64, + ) -> Result<(Vec
, Vec), std::io::Error>; } diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index 28413672..cd732a24 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -9,6 +9,7 @@ #![cfg_attr(all(not(feature = "std"), not(feature = "wasm")), no_std)] extern crate alloc; +extern crate core; /// Benchmark Module #[cfg(any(feature = "std", feature = "wasm"))] diff --git a/sdk/src/runners/mod.rs b/sdk/src/runners/mod.rs index 3d3be1b8..906a1b45 100644 --- a/sdk/src/runners/mod.rs +++ b/sdk/src/runners/mod.rs @@ -128,7 +128,7 @@ impl BlueprintRunner { pub async fn run(&mut self) -> Result<(), RunnerError> { if self.config.requires_registration(&self.env).await? { - self.config.register(&self.env).await? + self.config.register(&self.env).await?; } let mut background_receivers = Vec::new();