diff --git a/xmtp_id/src/bindings/base_64.rs b/xmtp_id/src/bindings/base_64.rs new file mode 100644 index 000000000..7e103147e --- /dev/null +++ b/xmtp_id/src/bindings/base_64.rs @@ -0,0 +1,119 @@ +pub use base_64::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod base_64 { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static BASE64_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \x9DGb\x8C3\x8A\xAC\x06\x01\xDF\x06~\x1A1:\x8E`:\xF3R\x12\xED\xF1\xE1\x1C\x9AT\xAC\x16\x07\xADXdsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static BASE64_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \x9DGb\x8C3\x8A\xAC\x06\x01\xDF\x06~\x1A1:\x8E`:\xF3R\x12\xED\xF1\xE1\x1C\x9AT\xAC\x16\x07\xADXdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static BASE64_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct Base64(::ethers::contract::Contract); + impl ::core::clone::Clone for Base64 { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for Base64 { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for Base64 { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for Base64 { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(Base64)) + .field(&self.address()) + .finish() + } + } + impl Base64 { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + BASE64_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + BASE64_ABI.clone(), + BASE64_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> for Base64 { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/base_64_url.rs b/xmtp_id/src/bindings/base_64_url.rs new file mode 100644 index 000000000..4324c9f5b --- /dev/null +++ b/xmtp_id/src/bindings/base_64_url.rs @@ -0,0 +1,119 @@ +pub use base_64_url::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod base_64_url { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static BASE64URL_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xD5\xE6\x1B\xE4\x1A8S\xB6\x84\xB6-\x82\x8B\x9D\xFB6\x95\xEB\xDA'\x91Y\x05'}\x9C\xC1\x07\x8B\xA5 \x90dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static BASE64URL_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xD5\xE6\x1B\xE4\x1A8S\xB6\x84\xB6-\x82\x8B\x9D\xFB6\x95\xEB\xDA'\x91Y\x05'}\x9C\xC1\x07\x8B\xA5 \x90dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static BASE64URL_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct Base64Url(::ethers::contract::Contract); + impl ::core::clone::Clone for Base64Url { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for Base64Url { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for Base64Url { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for Base64Url { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(Base64Url)) + .field(&self.address()) + .finish() + } + } + impl Base64Url { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + BASE64URL_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + BASE64URL_ABI.clone(), + BASE64URL_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> for Base64Url { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/coinbase_smart_wallet.rs b/xmtp_id/src/bindings/coinbase_smart_wallet.rs new file mode 100644 index 000000000..052bb35a3 --- /dev/null +++ b/xmtp_id/src/bindings/coinbase_smart_wallet.rs @@ -0,0 +1,2623 @@ +pub use coinbase_smart_wallet::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod coinbase_smart_wallet { + pub use super::super::shared_types::*; + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::Some(::ethers::core::abi::ethabi::Constructor { + inputs: ::std::vec![], + }), + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("REPLAYABLE_NONCE_KEY"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("REPLAYABLE_NONCE_KEY",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("canSkipChainIdValidation"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("canSkipChainIdValidation",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("functionSelector"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("domainSeparator"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("domainSeparator"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("eip712Domain"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("eip712Domain"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("fields"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(1usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes1"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("name"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("chainId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("verifyingContract"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("salt"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("extensions"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256[]"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("entryPoint"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("entryPoint"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("execute"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("execute"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("target"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("value"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("executeBatch"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("executeBatch"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("calls"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct CoinbaseSmartWallet.Call[]", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("executeWithoutChainIdValidation"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("executeWithoutChainIdValidation",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getUserOpHashWithoutChainId"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getUserOpHashWithoutChainId",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("implementation"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("implementation"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("$"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("initialize"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("initialize"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owners"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes[]"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isValidSignature"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isValidSignature"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("signature"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("result"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("proxiableUUID"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("proxiableUUID"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("replaySafeHash"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("replaySafeHash"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("newImplementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("validateUserOp"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("validateUserOp"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("missingAccountFunds",), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("validationData"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AddOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("AddOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("RemoveOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("RemoveOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Upgraded"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Upgraded"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("implementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + },], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Initialized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("Initialized"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidNonceKey"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidNonceKey"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("key"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("SelectorNotAllowed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("SelectorNotAllowed"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("selector"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Unauthorized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("Unauthorized"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + inputs: ::std::vec![], + },], + ), + ]), + receive: true, + fallback: true, + } + } + ///The parsed JSON ABI of the contract. + pub static COINBASESMARTWALLET_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\xA0`@R0`\x80R4\x80\x15b\0\0\x15W`\0\x80\xFD[P`@\x80Q`\x01\x80\x82R\x81\x83\x01\x90\x92R`\0\x91\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81b\0\0-W\x90PP`@\x80Q`\0` \x82\x01R\x91\x92P\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x81`\0\x81Q\x81\x10b\0\0wWb\0\0wb\0\x03zV[` \x90\x81\x02\x91\x90\x91\x01\x01Rb\0\0\x8D\x81b\0\0\x94V[Pb\0\x05\xB0V[`\0[\x81Q\x81\x10\x15b\0\x02&W\x81\x81\x81Q\x81\x10b\0\0\xB6Wb\0\0\xB6b\0\x03zV[` \x02` \x01\x01QQ` \x14\x15\x80\x15b\0\0\xEEWP\x81\x81\x81Q\x81\x10b\0\0\xE0Wb\0\0\xE0b\0\x03zV[` \x02` \x01\x01QQ`@\x14\x15[\x15b\0\x016W\x81\x81\x81Q\x81\x10b\0\x01\tWb\0\x01\tb\0\x03zV[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01b\0\x01-\x91\x90b\0\x03\xB6V[`@Q\x80\x91\x03\x90\xFD[\x81\x81\x81Q\x81\x10b\0\x01KWb\0\x01Kb\0\x03zV[` \x02` \x01\x01QQ` \x14\x80\x15b\0\x01\x93WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10b\0\x01~Wb\0\x01~b\0\x03zV[` \x02` \x01\x01Qb\0\x01\x91\x90b\0\x03\xEBV[\x11[\x15b\0\x01\xD2W\x81\x81\x81Q\x81\x10b\0\x01\xAEWb\0\x01\xAEb\0\x03zV[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01b\0\x01-\x91\x90b\0\x03\xB6V[b\0\x02\x1D\x82\x82\x81Q\x81\x10b\0\x01\xEBWb\0\x01\xEBb\0\x03zV[` \x02` \x01\x01Qb\0\x02\x03b\0\x02*` \x1B` \x1CV[\x80T\x90`\0b\0\x02\x13\x83b\0\x04\x13V[\x90\x91UPb\0\x02=V[`\x01\x01b\0\0\x97V[PPV[`\0\x80Q` b\087\x839\x81Q\x91R\x90V[b\0\x02H\x82b\0\x03&V[\x15b\0\x02kW\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01b\0\x01-\x91\x90b\0\x03\xB6V[`\x01`\0\x80Q` b\087\x839\x81Q\x91R`\x02\x01\x83`@Qb\0\x02\x90\x91\x90b\0\x04;V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81b\0\x02\xC8`\0\x80Q` b\087\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90b\0\x02\xE7\x90\x82b\0\x04\xE4V[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qb\0\x03\x1A\x91\x90b\0\x03\xB6V[`@Q\x80\x91\x03\x90\xA2PPV[`\0`\0\x80Q` b\087\x839\x81Q\x91R`\x02\x01\x82`@Qb\0\x03K\x91\x90b\0\x04;V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0[\x83\x81\x10\x15b\0\x03\xADW\x81\x81\x01Q\x83\x82\x01R` \x01b\0\x03\x93V[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Rb\0\x03\xD7\x81`@\x85\x01` \x87\x01b\0\x03\x90V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15b\0\x04\rW`\0\x19\x81` \x03`\x03\x1B\x1B\x82\x16\x91P[P\x91\x90PV[`\0`\x01\x82\x01b\0\x044WcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[P`\x01\x01\x90V[`\0\x82Qb\0\x04O\x81\x84` \x87\x01b\0\x03\x90V[\x91\x90\x91\x01\x92\x91PPV[`\x01\x81\x81\x1C\x90\x82\x16\x80b\0\x04nW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03b\0\x04\rWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[`\x1F\x82\x11\x15b\0\x04\xDFW`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15b\0\x04\xBAWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15b\0\x04\xDBW\x82\x81U`\x01\x01b\0\x04\xC6V[PPP[PPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15b\0\x05\0Wb\0\x05\0b\0\x03dV[b\0\x05\x18\x81b\0\x05\x11\x84Tb\0\x04YV[\x84b\0\x04\x8FV[` \x80`\x1F\x83\x11`\x01\x81\x14b\0\x05PW`\0\x84\x15b\0\x057WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ub\0\x04\xDBV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15b\0\x05\x81W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01b\0\x05`V[P\x85\x82\x10\x15b\0\x05\xA0W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[`\x80Qa2db\0\x05\xD3`\09`\0\x81\x81a\x08\x1E\x01Ra\tU\x01Ra2d`\0\xF3\xFE`\x80`@R`\x046\x10a\x01OW`\x005`\xE0\x1C\x80cr\xDE;Z\x11a\0\xB6W\x80c\xB0\xD6\x91\xFE\x11a\0oW\x80c\xB0\xD6\x91\xFE\x14a\x03\xF4W\x80c\xB6\x1D'\xF6\x14a\x04\x1BW\x80c\xBFk\xA1\xFC\x14a\x04.W\x80c\xCE\x15\x06\xBE\x14a\x04AW\x80c\xD9H\xFD.\x14a\x04aW\x80c\xF6\x98\xDA%\x14a\x04\x83Wa\x01VV[\x80cr\xDE;Z\x14a\x03)W\x80c\x84\xB0\x19n\x14a\x03IW\x80c\x88\xCEL|\x14a\x03qW\x80c\x8E\xA6\x90)\x14a\x03\x87W\x80c\x9F\x9B\xCB4\x14a\x03\xB4W\x80c\xA2\xE1\xA8\xD8\x14a\x03\xD4Wa\x01VV[\x80c:\x87\x1C\xDD\x11a\x01\x08W\x80c:\x87\x1C\xDD\x14a\x02eW\x80cO\x1E\xF2\x86\x14a\x02\x86W\x80cOn\x7F\"\x14a\x02\x99W\x80cR\xD1\x90-\x14a\x02\xB9W\x80c\\`\xDA\x1B\x14a\x02\xCEW\x80co-\xE7\x0E\x14a\x03\x16Wa\x01VV[\x80c\x06j\x1E\xB7\x14a\x01\x84W\x80c\x0F\x0F?$\x14a\x01\xB9W\x80c\x16&\xBA~\x14a\x01\xD9W\x80c\x1C\xA59?\x14a\x02\x12W\x80c)V^;\x14a\x022W\x80c4\xFC\xD5\xBE\x14a\x02RWa\x01VV[6a\x01VW\0[`\x005`\xE0\x1Cc\xBC\x19|\x81\x81\x14c\xF2:na\x82\x14\x17c\x15\x0Bz\x02\x82\x14\x17\x15a\x01\x82W\x80` R` `<\xF3[\0[4\x80\x15a\x01\x90W`\0\x80\xFD[Pa\x01\xA4a\x01\x9F6`\x04a'iV[a\x04\x98V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xC5W`\0\x80\xFD[Pa\x01\x82a\x01\xD46`\x04a'\xA7V[a\x05\x07V[4\x80\x15a\x01\xE5W`\0\x80\xFD[Pa\x01\xF9a\x01\xF46`\x04a(\nV[a\x05?V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01\xB0V[4\x80\x15a\x02\x1EW`\0\x80\xFD[Pa\x01\xA4a\x02-6`\x04a)@V[a\x05yV[4\x80\x15a\x02>W`\0\x80\xFD[Pa\x01\x82a\x02M6`\x04a'iV[a\x05\xB4V[a\x01\x82a\x02`6`\x04a)\xB8V[a\x05\xDDV[a\x02xa\x02s6`\x04a*\x12V[a\x06\xE1V[`@Q\x90\x81R` \x01a\x01\xB0V[a\x01\x82a\x02\x946`\x04a*_V[a\x08\x1CV[4\x80\x15a\x02\xA5W`\0\x80\xFD[Pa\x02xa\x02\xB46`\x04a*\x98V[a\t\0V[4\x80\x15a\x02\xC5W`\0\x80\xFD[Pa\x02xa\tQV[4\x80\x15a\x02\xDAW`\0\x80\xFD[P\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xB0V[a\x01\x82a\x03$6`\x04a)\xB8V[a\t\xB1V[4\x80\x15a\x035W`\0\x80\xFD[Pa\x01\x82a\x03D6`\x04a*\xCCV[a\t\xF1V[4\x80\x15a\x03UW`\0\x80\xFD[Pa\x03^a\n\xDEV[`@Qa\x01\xB0\x97\x96\x95\x94\x93\x92\x91\x90a+5V[4\x80\x15a\x03}W`\0\x80\xFD[Pa\x02xa!\x05\x81V[4\x80\x15a\x03\x93W`\0\x80\xFD[Pa\x03\xA7a\x03\xA26`\x04a*\xCCV[a\x0B\x05V[`@Qa\x01\xB0\x91\x90a+\xCEV[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xA4a\x03\xCF6`\x04a+\xE1V[a\x0B\xC6V[4\x80\x15a\x03\xE0W`\0\x80\xFD[Pa\x01\xA4a\x03\xEF6`\x04a'\xA7V[a\x0CBV[4\x80\x15a\x04\0W`\0\x80\xFD[Ps_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89a\x02\xFEV[a\x01\x82a\x04)6`\x04a,\x0BV[a\x0C\x88V[a\x01\x82a\x04<6`\x04a,dV[a\x0C\xECV[4\x80\x15a\x04MW`\0\x80\xFD[Pa\x02xa\x04\\6`\x04a*\xCCV[a\r\xADV[4\x80\x15a\x04mW`\0\x80\xFD[P`\0\x80Q` a2\x0F\x839\x81Q\x91RTa\x02xV[4\x80\x15a\x04\x8FW`\0\x80\xFD[Pa\x02xa\r\xB8V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x04\xEB\x91a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P[\x92\x91PPV[a\x05\x0Fa\x0E>V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x05<\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0EpV[PV[`\0a\x05Ta\x05M\x85a\r\xADV[\x84\x84a\x0E\x9BV[\x15a\x05gWPc\x0B\x13]?`\xE1\x1Ba\x05rV[P`\x01`\x01`\xE0\x1B\x03\x19[\x93\x92PPPV[`\0`\0\x80Q` a2\x0F\x839\x81Q\x91R`\x02\x01\x82`@Qa\x05\x9B\x91\x90a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x05\xBCa\x0E>V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x05\xD9\x90``\x01a\x05(V[PPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x06\0Wa\x06\0a\x0E>V[`\0[\x81\x81\x10\x15a\x06\xDCWa\x06\xD4\x83\x83\x83\x81\x81\x10a\x06 Wa\x06 a,\xB5V[\x90P` \x02\x81\x01\x90a\x062\x91\x90a,\xCBV[a\x06@\x90` \x81\x01\x90a'\xA7V[\x84\x84\x84\x81\x81\x10a\x06RWa\x06Ra,\xB5V[\x90P` \x02\x81\x01\x90a\x06d\x91\x90a,\xCBV[` \x015\x85\x85\x85\x81\x81\x10a\x06zWa\x06za,\xB5V[\x90P` \x02\x81\x01\x90a\x06\x8C\x91\x90a,\xCBV[a\x06\x9A\x90`@\x81\x01\x90a,\xE1V[\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\x0F\xB0\x92PPPV[`\x01\x01a\x06\x03V[PPPV[`\x003s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x07\x16W`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81` \x85\x015`@\x1C`\x04a\x07.``\x88\x01\x88a,\xE1V[\x90P\x10\x15\x80\x15a\x07rWPa\x07F``\x87\x01\x87a,\xE1V[a\x07U\x91`\x04\x91`\0\x91a-'V[a\x07^\x91a-QV[`\x01`\x01`\xE0\x1B\x03\x19\x16c\xBFk\xA1\xFC`\xE0\x1B\x14[\x15a\x07\xB1Wa\x07\x80\x86a\t\0V[\x94Pa!\x05\x81\x14a\x07\xACW`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x07\xD6V[a!\x05\x81\x03a\x07\xD6W`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x07\xA3V[a\x07\xED\x85a\x07\xE8a\x01@\x89\x01\x89a,\xE1V[a\x0E\x9BV[\x15a\x07\xFCW`\0\x92PPa\x08\x02V[`\x01\x92PP[\x80\x15a\x08\x14W`\08`\08\x843Z\xF1P[P\x93\x92PPPV[\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\x000\x81\x03a\x08RWc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[a\x08[\x84a\x10 V[\x83``\x1B``\x1C\x93PcR\xD1\x90-`\x01R\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80` `\x01`\x04`\x1D\x89Z\xFAQ\x14a\x08\xADWcU)\x9BI`\x01R`\x04`\x1D\xFD[\x84\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`\08\xA2\x84\x90U\x81\x15a\x08\xFAW`@Q\x82\x84\x827`\08\x84\x83\x88Z\xF4a\x08\xF8W=`\0\x82>=\x81\xFD[P[PPPPV[`\0a\t\x0B\x82a\x10(V[`@\x80Q` \x81\x01\x92\x90\x92Rs_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x90\x82\x01R``\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\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\x000\x81\x14a\t\x89Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x91P[P\x90V[`\0\x80Q` a2\x0F\x839\x81Q\x91RT\x15a\t\xDFW`@Qc\x02\xEDT=`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05\xD9a\t\xEC\x82\x84a-\x81V[a\x10AV[a\t\xF9a\x0E>V[`\0a\n\x04\x82a\x0B\x05V[\x90P\x80Q`\0\x03a\n+W`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x07\xA3V[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\n[\x90\x83\x90a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\n\x87`\0\x80Q` a2\x0F\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\n\xA2\x91a'\x1FV[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\n\xD2\x91\x90a+\xCEV[`@Q\x80\x91\x03\x90\xA2PPV[`\x0F`\xF8\x1B``\x80`\0\x80\x80\x83a\n\xF3a\x11\x93V[\x97\x98\x90\x97\x96PF\x95P0\x94P\x91\x92P\x90V[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x0BA\x90a.\x06V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x0Bm\x90a.\x06V[\x80\x15a\x0B\xBAW\x80`\x1F\x10a\x0B\x8FWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x0B\xBAV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x0B\x9DW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c)V^;`\xE0\x1B\x14\x80a\x0B\xF7WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\x03\xC3\xCF\xC9`\xE2\x1B\x14[\x80a\x0C\x12WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c9o\x1D\xAD`\xE1\x1B\x14[\x80a\x0C-WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c'\x8FyC`\xE1\x1B\x14[\x15a\x0C:WP`\x01\x91\x90PV[P`\0\x91\x90PV[`\0`\0\x80Q` a2\x0F\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x05\x9B\x91a,\x99V[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x0C\xABWa\x0C\xABa\x0E>V[a\x08\xFA\x84\x84\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\x91RPa\x0F\xB0\x92PPPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\r\x1FW`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\r.`\x04\x82\x84\x86a-'V[a\r7\x91a-QV[\x90Pa\rB\x81a\x0B\xC6V[a\rkW`@Qc\x1D\x83p\xA3`\xE1\x1B\x81R`\x01`\x01`\xE0\x1B\x03\x19\x82\x16`\x04\x82\x01R`$\x01a\x07\xA3V[a\x06\xDC0`\0\x85\x85\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\x0F\xB0\x92PPPV[`\0a\x05\x01\x82a\x11\xDAV[`\0\x80`\0a\r\xC5a\x11\x93V[\x81Q` \x80\x84\x01\x91\x90\x91 \x82Q\x82\x84\x01 `@\x80Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x94\x81\x01\x94\x90\x94R\x83\x01\x91\x90\x91R``\x82\x01RF`\x80\x82\x01R0`\xA0\x82\x01R\x91\x93P\x91P`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x90V[a\x0EG3a\x0CBV[\x80a\x0EQWP30\x14[\x15a\x0EXWV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05<\x81`\0\x80Q` a2\x0F\x839\x81Q\x91R[\x80T\x90`\0a\x0E\x92\x83a.PV[\x91\x90PUa\x12\x10V[`\0\x80a\x0E\xAA\x83\x85\x01\x85a.iV[\x90P`\0a\x0E\xBB\x82`\0\x01Qa\x0B\x05V[\x90P\x80Q` \x03a\x0F\x1AW`\x01`\x01`\xA0\x1B\x03a\x0E\xD7\x82a.\xF5V[\x11\x15a\x0E\xF8W\x80`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[`\0` \x82\x01Q\x90Pa\x0F\x10\x81\x88\x85` \x01Qa\x12\xDFV[\x93PPPPa\x05rV[\x80Q`@\x03a\x0F\x95W`\0\x80\x82\x80` \x01\x90Q\x81\x01\x90a\x0F:\x91\x90a/\x19V[\x91P\x91P`\0\x84` \x01Q\x80` \x01\x90Q\x81\x01\x90a\x0FX\x91\x90a/\x82V[\x90Pa\x0F\x89\x89`@Q` \x01a\x0Fp\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0\x83\x86\x86a\x13\xE4V[\x95PPPPPPa\x05rV[\x80`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[`\0\x80\x84`\x01`\x01`\xA0\x1B\x03\x16\x84\x84`@Qa\x0F\xCC\x91\x90a,\x99V[`\0`@Q\x80\x83\x03\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a\x10\tW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x10\x0EV[``\x91P[P\x91P\x91P\x81a\x08\xF8W\x80Q` \x82\x01\xFD[a\x05V[`\0a\x103\x82a\x17TV[\x80Q\x90` \x01 \x90P\x91\x90PV[`\0[\x81Q\x81\x10\x15a\x05\xD9W\x81\x81\x81Q\x81\x10a\x10_Wa\x10_a,\xB5V[` \x02` \x01\x01QQ` \x14\x15\x80\x15a\x10\x93WP\x81\x81\x81Q\x81\x10a\x10\x85Wa\x10\x85a,\xB5V[` \x02` \x01\x01QQ`@\x14\x15[\x15a\x10\xCCW\x81\x81\x81Q\x81\x10a\x10\xAAWa\x10\xAAa,\xB5V[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[\x81\x81\x81Q\x81\x10a\x10\xDEWa\x10\xDEa,\xB5V[` \x02` \x01\x01QQ` \x14\x80\x15a\x11 WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10a\x11\rWa\x11\ra,\xB5V[` \x02` \x01\x01Qa\x11\x1E\x90a.\xF5V[\x11[\x15a\x11YW\x81\x81\x81Q\x81\x10a\x117Wa\x117a,\xB5V[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[a\x11\x8B\x82\x82\x81Q\x81\x10a\x11nWa\x11na,\xB5V[` \x02` \x01\x01Qa\x0E\x84`\0\x80Q` a2\x0F\x839\x81Q\x91R\x90V[`\x01\x01a\x10DV[`@\x80Q\x80\x82\x01\x82R`\x15\x81Rt\x10\xDB\xDA[\x98\x98\\\xD9H\x14\xDBX\\\x9D\x08\x15\xD8[\x1B\x19]`Z\x1B` \x80\x83\x01\x91\x90\x91R\x82Q\x80\x84\x01\x90\x93R`\x01\x83R`1`\xF8\x1B\x90\x83\x01R\x91V[`\0a\x11\xE4a\r\xB8V[a\x11\xED\x83a\x18'V[`@Qa\x19\x01`\xF0\x1B` \x82\x01R`\"\x81\x01\x92\x90\x92R`B\x82\x01R`b\x01a\t4V[a\x12\x19\x82a\x05yV[\x15a\x129W\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[`\x01`\0\x80Q` a2\x0F\x839\x81Q\x91R`\x02\x01\x83`@Qa\x12[\x91\x90a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x12\x91`\0\x80Q` a2\x0F\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x12\xAE\x90\x82a0\x8DV[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\n\xD2\x91\x90a+\xCEV[`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91`\0\x83\x15a\x05rW`@Q\x83`\0R` \x83\x01Q`@R`@\x83Q\x03a\x13OW`@\x83\x01Q`\x1B\x81`\xFF\x1C\x01` R\x80`\x01\x1B`\x01\x1C``RP` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13MWP`\0``R`@RP`\x01a\x05rV[P[`A\x83Q\x03a\x13\x95W``\x83\x01Q`\0\x1A` R`@\x83\x01Q``R` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13\x93WP`\0``R`@RP`\x01a\x05rV[P[`\0``R\x80`@Rc\x16&\xBA~`\xE0\x1B\x80\x82R\x84`\x04\x83\x01R`$\x82\x01`@\x81R\x84Q` \x01\x80`D\x85\x01\x82\x88`\x04Z\xFAPP` \x81`D=\x01\x85\x8AZ\xFA\x90Q\x90\x91\x14\x16\x91PP\x93\x92PPPV[`\0\x7F\x7F\xFF\xFF\xFF\x80\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDEs}V\xD3\x8B\xCFBy\xDC\xE5a~1\x92\xA8\x84`\xA0\x01Q\x11\x15a\x14\x1AWP`\0a\x17KV[``\x84\x01Q`\0\x90a\x14=\x90a\x141\x81`\x15a1LV[` \x88\x01Q\x91\x90a\x18bV[\x90P\x7F\xFF\x1A*\x91v\xD6P\xE4\xA9\x9D\xED\xB5\x8F\x17\x93\095\x13\x05y\xFE\x17\xB5\xA3\xF6\x98\xAC[\0\xE64\x81\x80Q\x90` \x01 \x14a\x14wW`\0\x91PPa\x17KV[`\0a\x14\x85\x88`\x01\x80a\x18\xC8V[`@Q` \x01a\x14\x95\x91\x90a1_V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0a\x14\xCD\x87`@\x01Q\x83Q\x89`@\x01Qa\x14\xC1\x91\x90a1LV[` \x8A\x01Q\x91\x90a\x18bV[\x90P\x81\x80Q\x90` \x01 \x81\x80Q\x90` \x01 \x14a\x14\xF0W`\0\x93PPPPa\x17KV[\x86Q\x80Q`\x01`\xF8\x1B\x91\x82\x91` \x90\x81\x10a\x15\rWa\x15\ra,\xB5V[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14a\x15.W`\0\x93PPPPa\x17KV[\x87\x80\x15a\x15fWP\x86Q\x80Q`\x01`\xFA\x1B\x91\x82\x91` \x90\x81\x10a\x15SWa\x15Sa,\xB5V[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14\x15[\x15a\x15wW`\0\x93PPPPa\x17KV[`\0`\x02\x88` \x01Q`@Qa\x15\x8D\x91\x90a,\x99V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x15\xAAW=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x15\xCD\x91\x90a1\xA0V[\x90P`\0`\x02\x89`\0\x01Q\x83`@Q` \x01a\x15\xEA\x92\x91\x90a1\xB9V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x16\x04\x91a,\x99V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x16!W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16D\x91\x90a1\xA0V[`\x80\x80\x8B\x01Q`\xA0\x80\x8D\x01Q`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x93\x90\x93R``\x83\x01R\x91\x81\x01\x8B\x90R\x90\x81\x01\x89\x90R\x90\x91P`\0\x90`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x01\0`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\x16\xAA\x91\x90a,\x99V[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\x16\xE5W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x16\xEAV[``\x91P[P\x80Q\x91\x93P\x91P\x15\x15\x82\x80\x15a\x16\xFEWP\x80[\x15a\x17*W\x81\x80` \x01\x90Q\x81\x01\x90a\x17\x17\x91\x90a1\xA0V[`\x01\x14\x99PPPPPPPPPPa\x17KV[a\x17?\x85\x8E`\x80\x01Q\x8F`\xA0\x01Q\x8F\x8Fa\x19\xBDV[\x99PPPPPPPPPP[\x95\x94PPPPPV[``\x815` \x83\x015`\0a\x17ta\x17o`@\x87\x01\x87a,\xE1V[a\x1A\xA0V[\x90P`\0a\x17\x88a\x17o``\x88\x01\x88a,\xE1V[\x90P`\x80\x86\x015`\xA0\x87\x015`\xC0\x88\x015`\xE0\x89\x015a\x01\0\x8A\x015`\0a\x17\xB7a\x17oa\x01 \x8E\x01\x8Ea,\xE1V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x9C\x90\x9C\x16` \x8D\x01R\x8B\x81\x01\x9A\x90\x9AR``\x8B\x01\x98\x90\x98RP`\x80\x89\x01\x95\x90\x95R`\xA0\x88\x01\x93\x90\x93R`\xC0\x87\x01\x91\x90\x91R`\xE0\x86\x01Ra\x01\0\x85\x01Ra\x01 \x84\x01Ra\x01@\x80\x84\x01\x91\x90\x91R\x81Q\x80\x84\x03\x90\x91\x01\x81Ra\x01`\x90\x92\x01\x90R\x92\x91PPV[`@\x80Q\x7F\x9BI=\"!\x05\xFE\xE7\xDF\x16:\xB5\xD5\x7F\x0B\xF1\xFF\xD2\xDA\x04\xDD_\xAF\xBE\x10\xB5LA\xC1\xAD\xC6W` \x82\x01R\x90\x81\x01\x82\x90R`\0\x90``\x01a\t4V[``\x83Q\x82\x81\x11a\x18qW\x80\x92P[\x83\x81\x11a\x18|W\x80\x93P[P\x81\x83\x10\x15a\x05rWP`@Q\x82\x82\x03\x80\x82R\x93\x83\x01\x93`\x1F\x19`\x1F\x82\x01\x81\x16[\x86\x81\x01Q\x84\x82\x01R\x81\x01\x80a\x18\x9DWP`\0\x83\x83\x01` \x01R`?\x90\x91\x01\x16\x81\x01`@R\x93\x92PPPV[``\x83Q\x80\x15a\x08\x14W`\x03`\x02\x82\x01\x04`\x02\x1B`@Q\x92P\x7FABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`\x1FRa\x06p\x85\x15\x02\x7Fghijklmnopqrstuvwxyz0123456789-_\x18`?R` \x83\x01\x81\x81\x01\x83\x88` \x01\x01\x80Q`\0\x82R[`\x03\x8A\x01\x99P\x89Q`?\x81`\x12\x1C\x16Q`\0S`?\x81`\x0C\x1C\x16Q`\x01S`?\x81`\x06\x1C\x16Q`\x02S`?\x81\x16Q`\x03SP`\0Q\x84R`\x04\x84\x01\x93P\x82\x84\x10a\x19DW\x90R` \x01`@Ra==`\xF0\x1B`\x03\x84\x06`\x02\x04\x80\x83\x03\x91\x90\x91R`\0\x86\x15\x15\x90\x91\x02\x91\x82\x90\x03R\x90\x03\x82RP\x93\x92PPPV[`\0\x84\x15\x80a\x19\xDAWP`\0\x80Q` a1\xEF\x839\x81Q\x91R\x85\x10\x15[\x80a\x19\xE3WP\x83\x15[\x80a\x19\xFCWP`\0\x80Q` a1\xEF\x839\x81Q\x91R\x84\x10\x15[\x15a\x1A\tWP`\0a\x17KV[a\x1A\x13\x83\x83a\x1A\xB3V[a\x1A\x1FWP`\0a\x17KV[`\0a\x1A*\x85a\x1B\xADV[\x90P`\0`\0\x80Q` a1\xEF\x839\x81Q\x91R\x82\x89\t\x90P`\0`\0\x80Q` a1\xEF\x839\x81Q\x91R\x83\x89\t\x90P`\0a\x1Af\x87\x87\x85\x85a\x1C\x1FV[\x90P`\0\x80Q` a1\xEF\x839\x81Q\x91Ra\x1A\x8F\x8A`\0\x80Q` a1\xEF\x839\x81Q\x91Ra1\xDBV[\x82\x08\x15\x9A\x99PPPPPPPPPPV[`\0`@Q\x82\x80\x85\x837\x90 \x93\x92PPPV[`\0\x82\x15\x80\x15a\x1A\xC1WP\x81\x15[\x80a\x1A\xD9WP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x14[\x80a\x1A\xF1WP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x14[\x15a\x1A\xFEWP`\0a\x05\x01V[`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x90P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x7F\xFF\xFF\xFF\xFF\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x87\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\t\x08\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x7FZ\xC65\xD8\xAA:\x93\xE7\xB3\xEB\xBDUv\x98\x86\xBCe\x1D\x06\xB0\xCCS\xB0\xF6;\xCE<>'\xD2`K\x82\x08\x91\x90\x91\x14\x94\x93PPPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R\x7F\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\xE6\xFA\xAD\xA7\x17\x9E\x84\xF3\xB9\xCA\xC2\xFCc%O`\x80\x82\x01R`\0\x80Q` a1\xEF\x839\x81Q\x91R`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C\x18W`\0\x80\xFD[Q\x92\x91PPV[`\0\x80\x80\x80`\xFF\x81\x80\x88\x15\x80\x15a\x1C4WP\x87\x15[\x15a\x1CHW`\0\x96PPPPPPPa\"\xE1V[a\x1C\x94\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x8D\x8Da\"\xE9V[\x90\x92P\x90P\x81\x15\x80\x15a\x1C\xA5WP\x80\x15[\x15a\x1C\xD3W`\0\x80Q` a1\xEF\x839\x81Q\x91R\x88`\0\x80Q` a1\xEF\x839\x81Q\x91R\x03\x8A\x08\x98P`\0\x97P[`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01[\x80a\x1D\x06W`\x01\x84\x03\x93P`\x01\x8A\x85\x1C\x16`\x01\x8A\x86\x1C\x16`\x01\x1B\x01\x90Pa\x1C\xE4V[P`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01\x95P`\x01\x86\x03a\x1DhW\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x96P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x93P[`\x02\x86\x03a\x1DwW\x8A\x96P\x89\x93P[`\x03\x86\x03a\x1D\x86W\x81\x96P\x80\x93P[`\x01\x83\x03\x92P`\x01\x95P`\x01\x94P[\x82`\0\x19\x11\x15a\"jW`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x02\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8A\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x84\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x8D\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08\t`\x03\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x85\t\x98P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x84\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x08\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\x82\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x87\t\x08\x97P`\x01\x8D\x88\x1C\x16`\x01\x8D\x89\x1C\x16`\x01\x1B\x01\x90P\x80a\x1F\x12W\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x97PPPPPa\"_V[`\x01\x81\x03a\x1FaW\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x93P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x92P[`\x02\x81\x03a\x1FpW\x8E\x93P\x8D\x92P[`\x03\x81\x03a\x1F\x7FW\x85\x93P\x84\x92P[\x89a\x1F\x98WP\x91\x98P`\x01\x97P\x87\x96P\x94Pa\"_\x90PV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x86\t\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x88\t\x08\x93P\x80a!QW\x83a!QW`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x86\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8D\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x86\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x8F\x08\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81`\x03\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x86\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x85\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x08\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8D`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x85\x08\x83\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8A\x87\t\x85\x08\x98PPPPPPa\"_V[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x83\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8D\t\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8C\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8E\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87\x88\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83\x8D\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x86\x08\t\x08\x9APPPP\x80\x9APPPPP[`\x01\x83\x03\x92Pa\x1D\x95V[`@Q\x86``\x82\x01R` \x81R` \x80\x82\x01R` `@\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\"\xC4W`\0\x80\xFD[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81Q\x89\t\x97PPPPPPPP[\x94\x93PPPPV[`\0\x80\x80\x80\x86a#\0W\x85\x85\x93P\x93PPPa#nV[\x84a#\x12W\x87\x87\x93P\x93PPPa#nV[\x85\x88\x14\x80\x15a# WP\x84\x87\x14[\x15a#AWa#2\x88\x88`\x01\x80a#wV[\x92\x9AP\x90\x98P\x92P\x90Pa#[V[a#P\x88\x88`\x01\x80\x8A\x8Aa$\xD2V[\x92\x9AP\x90\x98P\x92P\x90P[a#g\x88\x88\x84\x84a&VV[\x93P\x93PPP[\x94P\x94\x92PPPV[`\0\x80`\0\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x02\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x83\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x8B\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8C\x08\t`\x03\t\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x89\t\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x83\x08\x87\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x84\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x88\x85\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x89\x08\x92P\x94P\x94P\x94P\x94\x90PV[`\0\x80`\0\x80\x88`\0\x03a$\xF1WP\x84\x92P\x83\x91P`\x01\x90P\x80a&IV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x98\x89\x03\x98\x89\x81\x89\x88\t\x08\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x89\t\x08\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x87\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x89\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x88\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8B\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84\x8B\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\t\x08\x92P[\x96P\x96P\x96P\x96\x92PPPV[`\0\x80`\0a&d\x84a&\xC3V[\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x87\t\x91P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x87\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x93PPP\x94P\x94\x92PPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C\x18W`\0\x80\xFD[P\x80Ta'+\x90a.\x06V[`\0\x82U\x80`\x1F\x10a';WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x05<\x91\x90[\x80\x82\x11\x15a\t\xADW`\0\x81U`\x01\x01a'UV[`\0\x80`@\x83\x85\x03\x12\x15a'|W`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a'\xA2W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a'\xB9W`\0\x80\xFD[a\x05r\x82a'\x8BV[`\0\x80\x83`\x1F\x84\x01\x12a'\xD4W`\0\x80\xFD[P\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a'\xEBW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a(\x03W`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0`@\x84\x86\x03\x12\x15a(\x1FW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a(W`\0\x80\xFD[Pa\x01\x82a\x02M6`\x04a'iV[a\x05\xB4V[a\x01\x82a\x02`6`\x04a)\xB8V[a\x05\xDDV[a\x02xa\x02s6`\x04a*\x12V[a\x06\xE1V[`@Q\x90\x81R` \x01a\x01\xB0V[a\x01\x82a\x02\x946`\x04a*_V[a\x08\x1CV[4\x80\x15a\x02\xA5W`\0\x80\xFD[Pa\x02xa\x02\xB46`\x04a*\x98V[a\t\0V[4\x80\x15a\x02\xC5W`\0\x80\xFD[Pa\x02xa\tQV[4\x80\x15a\x02\xDAW`\0\x80\xFD[P\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xB0V[a\x01\x82a\x03$6`\x04a)\xB8V[a\t\xB1V[4\x80\x15a\x035W`\0\x80\xFD[Pa\x01\x82a\x03D6`\x04a*\xCCV[a\t\xF1V[4\x80\x15a\x03UW`\0\x80\xFD[Pa\x03^a\n\xDEV[`@Qa\x01\xB0\x97\x96\x95\x94\x93\x92\x91\x90a+5V[4\x80\x15a\x03}W`\0\x80\xFD[Pa\x02xa!\x05\x81V[4\x80\x15a\x03\x93W`\0\x80\xFD[Pa\x03\xA7a\x03\xA26`\x04a*\xCCV[a\x0B\x05V[`@Qa\x01\xB0\x91\x90a+\xCEV[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xA4a\x03\xCF6`\x04a+\xE1V[a\x0B\xC6V[4\x80\x15a\x03\xE0W`\0\x80\xFD[Pa\x01\xA4a\x03\xEF6`\x04a'\xA7V[a\x0CBV[4\x80\x15a\x04\0W`\0\x80\xFD[Ps_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89a\x02\xFEV[a\x01\x82a\x04)6`\x04a,\x0BV[a\x0C\x88V[a\x01\x82a\x04<6`\x04a,dV[a\x0C\xECV[4\x80\x15a\x04MW`\0\x80\xFD[Pa\x02xa\x04\\6`\x04a*\xCCV[a\r\xADV[4\x80\x15a\x04mW`\0\x80\xFD[P`\0\x80Q` a2\x0F\x839\x81Q\x91RTa\x02xV[4\x80\x15a\x04\x8FW`\0\x80\xFD[Pa\x02xa\r\xB8V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x04\xEB\x91a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P[\x92\x91PPV[a\x05\x0Fa\x0E>V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x05<\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0EpV[PV[`\0a\x05Ta\x05M\x85a\r\xADV[\x84\x84a\x0E\x9BV[\x15a\x05gWPc\x0B\x13]?`\xE1\x1Ba\x05rV[P`\x01`\x01`\xE0\x1B\x03\x19[\x93\x92PPPV[`\0`\0\x80Q` a2\x0F\x839\x81Q\x91R`\x02\x01\x82`@Qa\x05\x9B\x91\x90a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x05\xBCa\x0E>V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x05\xD9\x90``\x01a\x05(V[PPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x06\0Wa\x06\0a\x0E>V[`\0[\x81\x81\x10\x15a\x06\xDCWa\x06\xD4\x83\x83\x83\x81\x81\x10a\x06 Wa\x06 a,\xB5V[\x90P` \x02\x81\x01\x90a\x062\x91\x90a,\xCBV[a\x06@\x90` \x81\x01\x90a'\xA7V[\x84\x84\x84\x81\x81\x10a\x06RWa\x06Ra,\xB5V[\x90P` \x02\x81\x01\x90a\x06d\x91\x90a,\xCBV[` \x015\x85\x85\x85\x81\x81\x10a\x06zWa\x06za,\xB5V[\x90P` \x02\x81\x01\x90a\x06\x8C\x91\x90a,\xCBV[a\x06\x9A\x90`@\x81\x01\x90a,\xE1V[\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\x0F\xB0\x92PPPV[`\x01\x01a\x06\x03V[PPPV[`\x003s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x07\x16W`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81` \x85\x015`@\x1C`\x04a\x07.``\x88\x01\x88a,\xE1V[\x90P\x10\x15\x80\x15a\x07rWPa\x07F``\x87\x01\x87a,\xE1V[a\x07U\x91`\x04\x91`\0\x91a-'V[a\x07^\x91a-QV[`\x01`\x01`\xE0\x1B\x03\x19\x16c\xBFk\xA1\xFC`\xE0\x1B\x14[\x15a\x07\xB1Wa\x07\x80\x86a\t\0V[\x94Pa!\x05\x81\x14a\x07\xACW`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x07\xD6V[a!\x05\x81\x03a\x07\xD6W`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x07\xA3V[a\x07\xED\x85a\x07\xE8a\x01@\x89\x01\x89a,\xE1V[a\x0E\x9BV[\x15a\x07\xFCW`\0\x92PPa\x08\x02V[`\x01\x92PP[\x80\x15a\x08\x14W`\08`\08\x843Z\xF1P[P\x93\x92PPPV[\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\x000\x81\x03a\x08RWc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[a\x08[\x84a\x10 V[\x83``\x1B``\x1C\x93PcR\xD1\x90-`\x01R\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80` `\x01`\x04`\x1D\x89Z\xFAQ\x14a\x08\xADWcU)\x9BI`\x01R`\x04`\x1D\xFD[\x84\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`\08\xA2\x84\x90U\x81\x15a\x08\xFAW`@Q\x82\x84\x827`\08\x84\x83\x88Z\xF4a\x08\xF8W=`\0\x82>=\x81\xFD[P[PPPPV[`\0a\t\x0B\x82a\x10(V[`@\x80Q` \x81\x01\x92\x90\x92Rs_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x90\x82\x01R``\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\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\x000\x81\x14a\t\x89Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x91P[P\x90V[`\0\x80Q` a2\x0F\x839\x81Q\x91RT\x15a\t\xDFW`@Qc\x02\xEDT=`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05\xD9a\t\xEC\x82\x84a-\x81V[a\x10AV[a\t\xF9a\x0E>V[`\0a\n\x04\x82a\x0B\x05V[\x90P\x80Q`\0\x03a\n+W`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x07\xA3V[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\n[\x90\x83\x90a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\n\x87`\0\x80Q` a2\x0F\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\n\xA2\x91a'\x1FV[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\n\xD2\x91\x90a+\xCEV[`@Q\x80\x91\x03\x90\xA2PPV[`\x0F`\xF8\x1B``\x80`\0\x80\x80\x83a\n\xF3a\x11\x93V[\x97\x98\x90\x97\x96PF\x95P0\x94P\x91\x92P\x90V[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x0BA\x90a.\x06V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x0Bm\x90a.\x06V[\x80\x15a\x0B\xBAW\x80`\x1F\x10a\x0B\x8FWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x0B\xBAV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x0B\x9DW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c)V^;`\xE0\x1B\x14\x80a\x0B\xF7WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\x03\xC3\xCF\xC9`\xE2\x1B\x14[\x80a\x0C\x12WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c9o\x1D\xAD`\xE1\x1B\x14[\x80a\x0C-WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c'\x8FyC`\xE1\x1B\x14[\x15a\x0C:WP`\x01\x91\x90PV[P`\0\x91\x90PV[`\0`\0\x80Q` a2\x0F\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x05\x9B\x91a,\x99V[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x0C\xABWa\x0C\xABa\x0E>V[a\x08\xFA\x84\x84\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\x91RPa\x0F\xB0\x92PPPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\r\x1FW`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\r.`\x04\x82\x84\x86a-'V[a\r7\x91a-QV[\x90Pa\rB\x81a\x0B\xC6V[a\rkW`@Qc\x1D\x83p\xA3`\xE1\x1B\x81R`\x01`\x01`\xE0\x1B\x03\x19\x82\x16`\x04\x82\x01R`$\x01a\x07\xA3V[a\x06\xDC0`\0\x85\x85\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\x0F\xB0\x92PPPV[`\0a\x05\x01\x82a\x11\xDAV[`\0\x80`\0a\r\xC5a\x11\x93V[\x81Q` \x80\x84\x01\x91\x90\x91 \x82Q\x82\x84\x01 `@\x80Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x94\x81\x01\x94\x90\x94R\x83\x01\x91\x90\x91R``\x82\x01RF`\x80\x82\x01R0`\xA0\x82\x01R\x91\x93P\x91P`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x90V[a\x0EG3a\x0CBV[\x80a\x0EQWP30\x14[\x15a\x0EXWV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05<\x81`\0\x80Q` a2\x0F\x839\x81Q\x91R[\x80T\x90`\0a\x0E\x92\x83a.PV[\x91\x90PUa\x12\x10V[`\0\x80a\x0E\xAA\x83\x85\x01\x85a.iV[\x90P`\0a\x0E\xBB\x82`\0\x01Qa\x0B\x05V[\x90P\x80Q` \x03a\x0F\x1AW`\x01`\x01`\xA0\x1B\x03a\x0E\xD7\x82a.\xF5V[\x11\x15a\x0E\xF8W\x80`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[`\0` \x82\x01Q\x90Pa\x0F\x10\x81\x88\x85` \x01Qa\x12\xDFV[\x93PPPPa\x05rV[\x80Q`@\x03a\x0F\x95W`\0\x80\x82\x80` \x01\x90Q\x81\x01\x90a\x0F:\x91\x90a/\x19V[\x91P\x91P`\0\x84` \x01Q\x80` \x01\x90Q\x81\x01\x90a\x0FX\x91\x90a/\x82V[\x90Pa\x0F\x89\x89`@Q` \x01a\x0Fp\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0\x83\x86\x86a\x13\xE4V[\x95PPPPPPa\x05rV[\x80`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[`\0\x80\x84`\x01`\x01`\xA0\x1B\x03\x16\x84\x84`@Qa\x0F\xCC\x91\x90a,\x99V[`\0`@Q\x80\x83\x03\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a\x10\tW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x10\x0EV[``\x91P[P\x91P\x91P\x81a\x08\xF8W\x80Q` \x82\x01\xFD[a\x05V[`\0a\x103\x82a\x17TV[\x80Q\x90` \x01 \x90P\x91\x90PV[`\0[\x81Q\x81\x10\x15a\x05\xD9W\x81\x81\x81Q\x81\x10a\x10_Wa\x10_a,\xB5V[` \x02` \x01\x01QQ` \x14\x15\x80\x15a\x10\x93WP\x81\x81\x81Q\x81\x10a\x10\x85Wa\x10\x85a,\xB5V[` \x02` \x01\x01QQ`@\x14\x15[\x15a\x10\xCCW\x81\x81\x81Q\x81\x10a\x10\xAAWa\x10\xAAa,\xB5V[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[\x81\x81\x81Q\x81\x10a\x10\xDEWa\x10\xDEa,\xB5V[` \x02` \x01\x01QQ` \x14\x80\x15a\x11 WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10a\x11\rWa\x11\ra,\xB5V[` \x02` \x01\x01Qa\x11\x1E\x90a.\xF5V[\x11[\x15a\x11YW\x81\x81\x81Q\x81\x10a\x117Wa\x117a,\xB5V[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[a\x11\x8B\x82\x82\x81Q\x81\x10a\x11nWa\x11na,\xB5V[` \x02` \x01\x01Qa\x0E\x84`\0\x80Q` a2\x0F\x839\x81Q\x91R\x90V[`\x01\x01a\x10DV[`@\x80Q\x80\x82\x01\x82R`\x15\x81Rt\x10\xDB\xDA[\x98\x98\\\xD9H\x14\xDBX\\\x9D\x08\x15\xD8[\x1B\x19]`Z\x1B` \x80\x83\x01\x91\x90\x91R\x82Q\x80\x84\x01\x90\x93R`\x01\x83R`1`\xF8\x1B\x90\x83\x01R\x91V[`\0a\x11\xE4a\r\xB8V[a\x11\xED\x83a\x18'V[`@Qa\x19\x01`\xF0\x1B` \x82\x01R`\"\x81\x01\x92\x90\x92R`B\x82\x01R`b\x01a\t4V[a\x12\x19\x82a\x05yV[\x15a\x129W\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x07\xA3\x91\x90a+\xCEV[`\x01`\0\x80Q` a2\x0F\x839\x81Q\x91R`\x02\x01\x83`@Qa\x12[\x91\x90a,\x99V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x12\x91`\0\x80Q` a2\x0F\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x12\xAE\x90\x82a0\x8DV[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\n\xD2\x91\x90a+\xCEV[`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91`\0\x83\x15a\x05rW`@Q\x83`\0R` \x83\x01Q`@R`@\x83Q\x03a\x13OW`@\x83\x01Q`\x1B\x81`\xFF\x1C\x01` R\x80`\x01\x1B`\x01\x1C``RP` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13MWP`\0``R`@RP`\x01a\x05rV[P[`A\x83Q\x03a\x13\x95W``\x83\x01Q`\0\x1A` R`@\x83\x01Q``R` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13\x93WP`\0``R`@RP`\x01a\x05rV[P[`\0``R\x80`@Rc\x16&\xBA~`\xE0\x1B\x80\x82R\x84`\x04\x83\x01R`$\x82\x01`@\x81R\x84Q` \x01\x80`D\x85\x01\x82\x88`\x04Z\xFAPP` \x81`D=\x01\x85\x8AZ\xFA\x90Q\x90\x91\x14\x16\x91PP\x93\x92PPPV[`\0\x7F\x7F\xFF\xFF\xFF\x80\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDEs}V\xD3\x8B\xCFBy\xDC\xE5a~1\x92\xA8\x84`\xA0\x01Q\x11\x15a\x14\x1AWP`\0a\x17KV[``\x84\x01Q`\0\x90a\x14=\x90a\x141\x81`\x15a1LV[` \x88\x01Q\x91\x90a\x18bV[\x90P\x7F\xFF\x1A*\x91v\xD6P\xE4\xA9\x9D\xED\xB5\x8F\x17\x93\095\x13\x05y\xFE\x17\xB5\xA3\xF6\x98\xAC[\0\xE64\x81\x80Q\x90` \x01 \x14a\x14wW`\0\x91PPa\x17KV[`\0a\x14\x85\x88`\x01\x80a\x18\xC8V[`@Q` \x01a\x14\x95\x91\x90a1_V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0a\x14\xCD\x87`@\x01Q\x83Q\x89`@\x01Qa\x14\xC1\x91\x90a1LV[` \x8A\x01Q\x91\x90a\x18bV[\x90P\x81\x80Q\x90` \x01 \x81\x80Q\x90` \x01 \x14a\x14\xF0W`\0\x93PPPPa\x17KV[\x86Q\x80Q`\x01`\xF8\x1B\x91\x82\x91` \x90\x81\x10a\x15\rWa\x15\ra,\xB5V[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14a\x15.W`\0\x93PPPPa\x17KV[\x87\x80\x15a\x15fWP\x86Q\x80Q`\x01`\xFA\x1B\x91\x82\x91` \x90\x81\x10a\x15SWa\x15Sa,\xB5V[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14\x15[\x15a\x15wW`\0\x93PPPPa\x17KV[`\0`\x02\x88` \x01Q`@Qa\x15\x8D\x91\x90a,\x99V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x15\xAAW=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x15\xCD\x91\x90a1\xA0V[\x90P`\0`\x02\x89`\0\x01Q\x83`@Q` \x01a\x15\xEA\x92\x91\x90a1\xB9V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x16\x04\x91a,\x99V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x16!W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16D\x91\x90a1\xA0V[`\x80\x80\x8B\x01Q`\xA0\x80\x8D\x01Q`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x93\x90\x93R``\x83\x01R\x91\x81\x01\x8B\x90R\x90\x81\x01\x89\x90R\x90\x91P`\0\x90`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x01\0`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\x16\xAA\x91\x90a,\x99V[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\x16\xE5W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x16\xEAV[``\x91P[P\x80Q\x91\x93P\x91P\x15\x15\x82\x80\x15a\x16\xFEWP\x80[\x15a\x17*W\x81\x80` \x01\x90Q\x81\x01\x90a\x17\x17\x91\x90a1\xA0V[`\x01\x14\x99PPPPPPPPPPa\x17KV[a\x17?\x85\x8E`\x80\x01Q\x8F`\xA0\x01Q\x8F\x8Fa\x19\xBDV[\x99PPPPPPPPPP[\x95\x94PPPPPV[``\x815` \x83\x015`\0a\x17ta\x17o`@\x87\x01\x87a,\xE1V[a\x1A\xA0V[\x90P`\0a\x17\x88a\x17o``\x88\x01\x88a,\xE1V[\x90P`\x80\x86\x015`\xA0\x87\x015`\xC0\x88\x015`\xE0\x89\x015a\x01\0\x8A\x015`\0a\x17\xB7a\x17oa\x01 \x8E\x01\x8Ea,\xE1V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x9C\x90\x9C\x16` \x8D\x01R\x8B\x81\x01\x9A\x90\x9AR``\x8B\x01\x98\x90\x98RP`\x80\x89\x01\x95\x90\x95R`\xA0\x88\x01\x93\x90\x93R`\xC0\x87\x01\x91\x90\x91R`\xE0\x86\x01Ra\x01\0\x85\x01Ra\x01 \x84\x01Ra\x01@\x80\x84\x01\x91\x90\x91R\x81Q\x80\x84\x03\x90\x91\x01\x81Ra\x01`\x90\x92\x01\x90R\x92\x91PPV[`@\x80Q\x7F\x9BI=\"!\x05\xFE\xE7\xDF\x16:\xB5\xD5\x7F\x0B\xF1\xFF\xD2\xDA\x04\xDD_\xAF\xBE\x10\xB5LA\xC1\xAD\xC6W` \x82\x01R\x90\x81\x01\x82\x90R`\0\x90``\x01a\t4V[``\x83Q\x82\x81\x11a\x18qW\x80\x92P[\x83\x81\x11a\x18|W\x80\x93P[P\x81\x83\x10\x15a\x05rWP`@Q\x82\x82\x03\x80\x82R\x93\x83\x01\x93`\x1F\x19`\x1F\x82\x01\x81\x16[\x86\x81\x01Q\x84\x82\x01R\x81\x01\x80a\x18\x9DWP`\0\x83\x83\x01` \x01R`?\x90\x91\x01\x16\x81\x01`@R\x93\x92PPPV[``\x83Q\x80\x15a\x08\x14W`\x03`\x02\x82\x01\x04`\x02\x1B`@Q\x92P\x7FABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`\x1FRa\x06p\x85\x15\x02\x7Fghijklmnopqrstuvwxyz0123456789-_\x18`?R` \x83\x01\x81\x81\x01\x83\x88` \x01\x01\x80Q`\0\x82R[`\x03\x8A\x01\x99P\x89Q`?\x81`\x12\x1C\x16Q`\0S`?\x81`\x0C\x1C\x16Q`\x01S`?\x81`\x06\x1C\x16Q`\x02S`?\x81\x16Q`\x03SP`\0Q\x84R`\x04\x84\x01\x93P\x82\x84\x10a\x19DW\x90R` \x01`@Ra==`\xF0\x1B`\x03\x84\x06`\x02\x04\x80\x83\x03\x91\x90\x91R`\0\x86\x15\x15\x90\x91\x02\x91\x82\x90\x03R\x90\x03\x82RP\x93\x92PPPV[`\0\x84\x15\x80a\x19\xDAWP`\0\x80Q` a1\xEF\x839\x81Q\x91R\x85\x10\x15[\x80a\x19\xE3WP\x83\x15[\x80a\x19\xFCWP`\0\x80Q` a1\xEF\x839\x81Q\x91R\x84\x10\x15[\x15a\x1A\tWP`\0a\x17KV[a\x1A\x13\x83\x83a\x1A\xB3V[a\x1A\x1FWP`\0a\x17KV[`\0a\x1A*\x85a\x1B\xADV[\x90P`\0`\0\x80Q` a1\xEF\x839\x81Q\x91R\x82\x89\t\x90P`\0`\0\x80Q` a1\xEF\x839\x81Q\x91R\x83\x89\t\x90P`\0a\x1Af\x87\x87\x85\x85a\x1C\x1FV[\x90P`\0\x80Q` a1\xEF\x839\x81Q\x91Ra\x1A\x8F\x8A`\0\x80Q` a1\xEF\x839\x81Q\x91Ra1\xDBV[\x82\x08\x15\x9A\x99PPPPPPPPPPV[`\0`@Q\x82\x80\x85\x837\x90 \x93\x92PPPV[`\0\x82\x15\x80\x15a\x1A\xC1WP\x81\x15[\x80a\x1A\xD9WP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x14[\x80a\x1A\xF1WP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x14[\x15a\x1A\xFEWP`\0a\x05\x01V[`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x90P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x7F\xFF\xFF\xFF\xFF\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x87\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\t\x08\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x7FZ\xC65\xD8\xAA:\x93\xE7\xB3\xEB\xBDUv\x98\x86\xBCe\x1D\x06\xB0\xCCS\xB0\xF6;\xCE<>'\xD2`K\x82\x08\x91\x90\x91\x14\x94\x93PPPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R\x7F\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\xE6\xFA\xAD\xA7\x17\x9E\x84\xF3\xB9\xCA\xC2\xFCc%O`\x80\x82\x01R`\0\x80Q` a1\xEF\x839\x81Q\x91R`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C\x18W`\0\x80\xFD[Q\x92\x91PPV[`\0\x80\x80\x80`\xFF\x81\x80\x88\x15\x80\x15a\x1C4WP\x87\x15[\x15a\x1CHW`\0\x96PPPPPPPa\"\xE1V[a\x1C\x94\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x8D\x8Da\"\xE9V[\x90\x92P\x90P\x81\x15\x80\x15a\x1C\xA5WP\x80\x15[\x15a\x1C\xD3W`\0\x80Q` a1\xEF\x839\x81Q\x91R\x88`\0\x80Q` a1\xEF\x839\x81Q\x91R\x03\x8A\x08\x98P`\0\x97P[`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01[\x80a\x1D\x06W`\x01\x84\x03\x93P`\x01\x8A\x85\x1C\x16`\x01\x8A\x86\x1C\x16`\x01\x1B\x01\x90Pa\x1C\xE4V[P`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01\x95P`\x01\x86\x03a\x1DhW\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x96P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x93P[`\x02\x86\x03a\x1DwW\x8A\x96P\x89\x93P[`\x03\x86\x03a\x1D\x86W\x81\x96P\x80\x93P[`\x01\x83\x03\x92P`\x01\x95P`\x01\x94P[\x82`\0\x19\x11\x15a\"jW`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x02\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8A\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x84\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x8D\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08\t`\x03\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x85\t\x98P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x84\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x08\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\x82\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x87\t\x08\x97P`\x01\x8D\x88\x1C\x16`\x01\x8D\x89\x1C\x16`\x01\x1B\x01\x90P\x80a\x1F\x12W\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x97PPPPPa\"_V[`\x01\x81\x03a\x1FaW\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x93P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x92P[`\x02\x81\x03a\x1FpW\x8E\x93P\x8D\x92P[`\x03\x81\x03a\x1F\x7FW\x85\x93P\x84\x92P[\x89a\x1F\x98WP\x91\x98P`\x01\x97P\x87\x96P\x94Pa\"_\x90PV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x86\t\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x88\t\x08\x93P\x80a!QW\x83a!QW`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x86\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8D\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x86\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x8F\x08\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81`\x03\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x86\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x85\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x08\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8D`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x85\x08\x83\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8A\x87\t\x85\x08\x98PPPPPPa\"_V[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x83\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8D\t\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8C\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8E\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87\x88\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83\x8D\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x86\x08\t\x08\x9APPPP\x80\x9APPPPP[`\x01\x83\x03\x92Pa\x1D\x95V[`@Q\x86``\x82\x01R` \x81R` \x80\x82\x01R` `@\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\"\xC4W`\0\x80\xFD[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81Q\x89\t\x97PPPPPPPP[\x94\x93PPPPV[`\0\x80\x80\x80\x86a#\0W\x85\x85\x93P\x93PPPa#nV[\x84a#\x12W\x87\x87\x93P\x93PPPa#nV[\x85\x88\x14\x80\x15a# WP\x84\x87\x14[\x15a#AWa#2\x88\x88`\x01\x80a#wV[\x92\x9AP\x90\x98P\x92P\x90Pa#[V[a#P\x88\x88`\x01\x80\x8A\x8Aa$\xD2V[\x92\x9AP\x90\x98P\x92P\x90P[a#g\x88\x88\x84\x84a&VV[\x93P\x93PPP[\x94P\x94\x92PPPV[`\0\x80`\0\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x02\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x83\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x8B\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8C\x08\t`\x03\t\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x89\t\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x83\x08\x87\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x84\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x88\x85\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x89\x08\x92P\x94P\x94P\x94P\x94\x90PV[`\0\x80`\0\x80\x88`\0\x03a$\xF1WP\x84\x92P\x83\x91P`\x01\x90P\x80a&IV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x98\x89\x03\x98\x89\x81\x89\x88\t\x08\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x89\t\x08\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x87\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x89\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x88\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8B\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84\x8B\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\t\x08\x92P[\x96P\x96P\x96P\x96\x92PPPV[`\0\x80`\0a&d\x84a&\xC3V[\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x87\t\x91P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x87\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x93PPP\x94P\x94\x92PPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C\x18W`\0\x80\xFD[P\x80Ta'+\x90a.\x06V[`\0\x82U\x80`\x1F\x10a';WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x05<\x91\x90[\x80\x82\x11\x15a\t\xADW`\0\x81U`\x01\x01a'UV[`\0\x80`@\x83\x85\x03\x12\x15a'|W`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a'\xA2W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a'\xB9W`\0\x80\xFD[a\x05r\x82a'\x8BV[`\0\x80\x83`\x1F\x84\x01\x12a'\xD4W`\0\x80\xFD[P\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a'\xEBW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a(\x03W`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0`@\x84\x86\x03\x12\x15a(\x1FW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a((::ethers::contract::Contract); + impl ::core::clone::Clone for CoinbaseSmartWallet { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for CoinbaseSmartWallet { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for CoinbaseSmartWallet { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for CoinbaseSmartWallet { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(CoinbaseSmartWallet)) + .field(&self.address()) + .finish() + } + } + impl CoinbaseSmartWallet { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + COINBASESMARTWALLET_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + COINBASESMARTWALLET_ABI.clone(), + COINBASESMARTWALLET_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `REPLAYABLE_NONCE_KEY` (0x88ce4c7c) function + pub fn replayable_nonce_key( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([136, 206, 76, 124], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `addOwnerAddress` (0x0f0f3f24) function + pub fn add_owner_address( + &self, + owner: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([15, 15, 63, 36], owner) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `addOwnerPublicKey` (0x29565e3b) function + pub fn add_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([41, 86, 94, 59], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `canSkipChainIdValidation` (0x9f9bcb34) function + pub fn can_skip_chain_id_validation( + &self, + function_selector: [u8; 4], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([159, 155, 203, 52], function_selector) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `domainSeparator` (0xf698da25) function + pub fn domain_separator(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([246, 152, 218, 37], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `eip712Domain` (0x84b0196e) function + pub fn eip_712_domain( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + [u8; 1], + ::std::string::String, + ::std::string::String, + ::ethers::core::types::U256, + ::ethers::core::types::Address, + [u8; 32], + ::std::vec::Vec<::ethers::core::types::U256>, + ), + > { + self.0 + .method_hash([132, 176, 25, 110], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `entryPoint` (0xb0d691fe) function + pub fn entry_point( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([176, 214, 145, 254], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `execute` (0xb61d27f6) function + pub fn execute( + &self, + target: ::ethers::core::types::Address, + value: ::ethers::core::types::U256, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([182, 29, 39, 246], (target, value, data)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `executeBatch` (0x34fcd5be) function + pub fn execute_batch( + &self, + calls: ::std::vec::Vec, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([52, 252, 213, 190], calls) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `executeWithoutChainIdValidation` (0xbf6ba1fc) function + pub fn execute_without_chain_id_validation( + &self, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([191, 107, 161, 252], data) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getUserOpHashWithoutChainId` (0x4f6e7f22) function + pub fn get_user_op_hash_without_chain_id( + &self, + user_op: UserOperation, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 110, 127, 34], (user_op,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `implementation` (0x5c60da1b) function + pub fn implementation( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([92, 96, 218, 27], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `initialize` (0x6f2de70e) function + pub fn initialize( + &self, + owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([111, 45, 231, 14], owners) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerAddress` (0xa2e1a8d8) function + pub fn is_owner_address( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([162, 225, 168, 216], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerBytes` (0x1ca5393f) function + pub fn is_owner_bytes( + &self, + account: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 165, 57, 63], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerPublicKey` (0x066a1eb7) function + pub fn is_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([6, 106, 30, 183], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isValidSignature` (0x1626ba7e) function + pub fn is_valid_signature( + &self, + hash: [u8; 32], + signature: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([22, 38, 186, 126], (hash, signature)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextOwnerIndex` (0xd948fd2e) function + pub fn next_owner_index( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([217, 72, 253, 46], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `ownerAtIndex` (0x8ea69029) function + pub fn owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 166, 144, 41], index) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `proxiableUUID` (0x52d1902d) function + pub fn proxiable_uuid(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([82, 209, 144, 45], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `removeOwnerAtIndex` (0x72de3b5a) function + pub fn remove_owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([114, 222, 59, 90], index) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `replaySafeHash` (0xce1506be) function + pub fn replay_safe_hash( + &self, + hash: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([206, 21, 6, 190], hash) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `upgradeToAndCall` (0x4f1ef286) function + pub fn upgrade_to_and_call( + &self, + new_implementation: ::ethers::core::types::Address, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 30, 242, 134], (new_implementation, data)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `validateUserOp` (0x3a871cdd) function + pub fn validate_user_op( + &self, + user_op: UserOperation, + user_op_hash: [u8; 32], + missing_account_funds: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [58, 135, 28, 221], + (user_op, user_op_hash, missing_account_funds), + ) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `AddOwner` event + pub fn add_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AddOwnerFilter> { + self.0.event() + } + ///Gets the contract's `RemoveOwner` event + pub fn remove_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, RemoveOwnerFilter> + { + self.0.event() + } + ///Gets the contract's `Upgraded` event + pub fn upgraded_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, UpgradedFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, CoinbaseSmartWalletEvents> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> + for CoinbaseSmartWallet + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `AlreadyOwner` with signature `AlreadyOwner(bytes)` and selector `0x8d16255a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "AlreadyOwner", abi = "AlreadyOwner(bytes)")] + pub struct AlreadyOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `Initialized` with signature `Initialized()` and selector `0x5daa87a0` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "Initialized", abi = "Initialized()")] + pub struct Initialized; + ///Custom Error type `InvalidEthereumAddressOwner` with signature `InvalidEthereumAddressOwner(bytes)` and selector `0xbff1ac65` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidEthereumAddressOwner", + abi = "InvalidEthereumAddressOwner(bytes)" + )] + pub struct InvalidEthereumAddressOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `InvalidNonceKey` with signature `InvalidNonceKey(uint256)` and selector `0x2ef37813` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "InvalidNonceKey", abi = "InvalidNonceKey(uint256)")] + pub struct InvalidNonceKey { + pub key: ::ethers::core::types::U256, + } + ///Custom Error type `InvalidOwnerBytesLength` with signature `InvalidOwnerBytesLength(bytes)` and selector `0x4eeab722` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidOwnerBytesLength", + abi = "InvalidOwnerBytesLength(bytes)" + )] + pub struct InvalidOwnerBytesLength { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `NoOwnerAtIndex` with signature `NoOwnerAtIndex(uint256)` and selector `0x68188e7a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "NoOwnerAtIndex", abi = "NoOwnerAtIndex(uint256)")] + pub struct NoOwnerAtIndex { + pub index: ::ethers::core::types::U256, + } + ///Custom Error type `SelectorNotAllowed` with signature `SelectorNotAllowed(bytes4)` and selector `0x3b06e146` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "SelectorNotAllowed", abi = "SelectorNotAllowed(bytes4)")] + pub struct SelectorNotAllowed { + pub selector: [u8; 4], + } + ///Custom Error type `Unauthorized` with signature `Unauthorized()` and selector `0x82b42900` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "Unauthorized", abi = "Unauthorized()")] + pub struct Unauthorized; + ///Custom Error type `UnauthorizedCallContext` with signature `UnauthorizedCallContext()` and selector `0x9f03a026` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UnauthorizedCallContext", abi = "UnauthorizedCallContext()")] + pub struct UnauthorizedCallContext; + ///Custom Error type `UpgradeFailed` with signature `UpgradeFailed()` and selector `0x55299b49` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UpgradeFailed", abi = "UpgradeFailed()")] + pub struct UpgradeFailed; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum CoinbaseSmartWalletErrors { + AlreadyOwner(AlreadyOwner), + Initialized(Initialized), + InvalidEthereumAddressOwner(InvalidEthereumAddressOwner), + InvalidNonceKey(InvalidNonceKey), + InvalidOwnerBytesLength(InvalidOwnerBytesLength), + NoOwnerAtIndex(NoOwnerAtIndex), + SelectorNotAllowed(SelectorNotAllowed), + Unauthorized(Unauthorized), + UnauthorizedCallContext(UnauthorizedCallContext), + UpgradeFailed(UpgradeFailed), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for CoinbaseSmartWalletErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::AlreadyOwner(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Initialized(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidEthereumAddressOwner(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::InvalidNonceKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidOwnerBytesLength(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::NoOwnerAtIndex(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SelectorNotAllowed(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Unauthorized(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UnauthorizedCallContext(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::UpgradeFailed(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for CoinbaseSmartWalletErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::AlreadyOwner(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Initialized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::InvalidEthereumAddressOwner(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::InvalidNonceKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::InvalidOwnerBytesLength(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NoOwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SelectorNotAllowed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Unauthorized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UnauthorizedCallContext(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpgradeFailed(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for CoinbaseSmartWalletErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector == ::selector() => true, + _ if selector == ::selector() => true, + _ if selector + == ::selector( + ) => + { + true + } + _ if selector == ::selector() => { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => true, + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for CoinbaseSmartWalletErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AlreadyOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::Initialized(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidEthereumAddressOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidNonceKey(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidOwnerBytesLength(element) => ::core::fmt::Display::fmt(element, f), + Self::NoOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::SelectorNotAllowed(element) => ::core::fmt::Display::fmt(element, f), + Self::Unauthorized(element) => ::core::fmt::Display::fmt(element, f), + Self::UnauthorizedCallContext(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for CoinbaseSmartWalletErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: AlreadyOwner) -> Self { + Self::AlreadyOwner(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: Initialized) -> Self { + Self::Initialized(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: InvalidEthereumAddressOwner) -> Self { + Self::InvalidEthereumAddressOwner(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: InvalidNonceKey) -> Self { + Self::InvalidNonceKey(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: InvalidOwnerBytesLength) -> Self { + Self::InvalidOwnerBytesLength(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: NoOwnerAtIndex) -> Self { + Self::NoOwnerAtIndex(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: SelectorNotAllowed) -> Self { + Self::SelectorNotAllowed(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: Unauthorized) -> Self { + Self::Unauthorized(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: UnauthorizedCallContext) -> Self { + Self::UnauthorizedCallContext(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletErrors { + fn from(value: UpgradeFailed) -> Self { + Self::UpgradeFailed(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "AddOwner", abi = "AddOwner(uint256,bytes)")] + pub struct AddOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "RemoveOwner", abi = "RemoveOwner(uint256,bytes)")] + pub struct RemoveOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Upgraded", abi = "Upgraded(address)")] + pub struct UpgradedFilter { + #[ethevent(indexed)] + pub implementation: ::ethers::core::types::Address, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum CoinbaseSmartWalletEvents { + AddOwnerFilter(AddOwnerFilter), + RemoveOwnerFilter(RemoveOwnerFilter), + UpgradedFilter(UpgradedFilter), + } + impl ::ethers::contract::EthLogDecode for CoinbaseSmartWalletEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = AddOwnerFilter::decode_log(log) { + return Ok(CoinbaseSmartWalletEvents::AddOwnerFilter(decoded)); + } + if let Ok(decoded) = RemoveOwnerFilter::decode_log(log) { + return Ok(CoinbaseSmartWalletEvents::RemoveOwnerFilter(decoded)); + } + if let Ok(decoded) = UpgradedFilter::decode_log(log) { + return Ok(CoinbaseSmartWalletEvents::UpgradedFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for CoinbaseSmartWalletEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradedFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for CoinbaseSmartWalletEvents { + fn from(value: AddOwnerFilter) -> Self { + Self::AddOwnerFilter(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletEvents { + fn from(value: RemoveOwnerFilter) -> Self { + Self::RemoveOwnerFilter(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletEvents { + fn from(value: UpgradedFilter) -> Self { + Self::UpgradedFilter(value) + } + } + ///Container type for all input parameters for the `REPLAYABLE_NONCE_KEY` function with signature `REPLAYABLE_NONCE_KEY()` and selector `0x88ce4c7c` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "REPLAYABLE_NONCE_KEY", abi = "REPLAYABLE_NONCE_KEY()")] + pub struct ReplayableNonceKeyCall; + ///Container type for all input parameters for the `addOwnerAddress` function with signature `addOwnerAddress(address)` and selector `0x0f0f3f24` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerAddress", abi = "addOwnerAddress(address)")] + pub struct AddOwnerAddressCall { + pub owner: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `addOwnerPublicKey` function with signature `addOwnerPublicKey(bytes32,bytes32)` and selector `0x29565e3b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerPublicKey", abi = "addOwnerPublicKey(bytes32,bytes32)")] + pub struct AddOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `canSkipChainIdValidation` function with signature `canSkipChainIdValidation(bytes4)` and selector `0x9f9bcb34` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "canSkipChainIdValidation", + abi = "canSkipChainIdValidation(bytes4)" + )] + pub struct CanSkipChainIdValidationCall { + pub function_selector: [u8; 4], + } + ///Container type for all input parameters for the `domainSeparator` function with signature `domainSeparator()` and selector `0xf698da25` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "domainSeparator", abi = "domainSeparator()")] + pub struct DomainSeparatorCall; + ///Container type for all input parameters for the `eip712Domain` function with signature `eip712Domain()` and selector `0x84b0196e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "eip712Domain", abi = "eip712Domain()")] + pub struct Eip712DomainCall; + ///Container type for all input parameters for the `entryPoint` function with signature `entryPoint()` and selector `0xb0d691fe` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "entryPoint", abi = "entryPoint()")] + pub struct EntryPointCall; + ///Container type for all input parameters for the `execute` function with signature `execute(address,uint256,bytes)` and selector `0xb61d27f6` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "execute", abi = "execute(address,uint256,bytes)")] + pub struct ExecuteCall { + pub target: ::ethers::core::types::Address, + pub value: ::ethers::core::types::U256, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `executeBatch` function with signature `executeBatch((address,uint256,bytes)[])` and selector `0x34fcd5be` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "executeBatch", abi = "executeBatch((address,uint256,bytes)[])")] + pub struct ExecuteBatchCall { + pub calls: ::std::vec::Vec, + } + ///Container type for all input parameters for the `executeWithoutChainIdValidation` function with signature `executeWithoutChainIdValidation(bytes)` and selector `0xbf6ba1fc` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "executeWithoutChainIdValidation", + abi = "executeWithoutChainIdValidation(bytes)" + )] + pub struct ExecuteWithoutChainIdValidationCall { + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `getUserOpHashWithoutChainId` function with signature `getUserOpHashWithoutChainId((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0x4f6e7f22` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "getUserOpHashWithoutChainId", + abi = "getUserOpHashWithoutChainId((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))" + )] + pub struct GetUserOpHashWithoutChainIdCall { + pub user_op: UserOperation, + } + ///Container type for all input parameters for the `implementation` function with signature `implementation()` and selector `0x5c60da1b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "implementation", abi = "implementation()")] + pub struct ImplementationCall; + ///Container type for all input parameters for the `initialize` function with signature `initialize(bytes[])` and selector `0x6f2de70e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "initialize", abi = "initialize(bytes[])")] + pub struct InitializeCall { + pub owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + } + ///Container type for all input parameters for the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerAddress", abi = "isOwnerAddress(address)")] + pub struct IsOwnerAddressCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerBytes", abi = "isOwnerBytes(bytes)")] + pub struct IsOwnerBytesCall { + pub account: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerPublicKey", abi = "isOwnerPublicKey(bytes32,bytes32)")] + pub struct IsOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isValidSignature", abi = "isValidSignature(bytes32,bytes)")] + pub struct IsValidSignatureCall { + pub hash: [u8; 32], + pub signature: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextOwnerIndex", abi = "nextOwnerIndex()")] + pub struct NextOwnerIndexCall; + ///Container type for all input parameters for the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "ownerAtIndex", abi = "ownerAtIndex(uint256)")] + pub struct OwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "proxiableUUID", abi = "proxiableUUID()")] + pub struct ProxiableUUIDCall; + ///Container type for all input parameters for the `removeOwnerAtIndex` function with signature `removeOwnerAtIndex(uint256)` and selector `0x72de3b5a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "removeOwnerAtIndex", abi = "removeOwnerAtIndex(uint256)")] + pub struct RemoveOwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `replaySafeHash` function with signature `replaySafeHash(bytes32)` and selector `0xce1506be` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "replaySafeHash", abi = "replaySafeHash(bytes32)")] + pub struct ReplaySafeHashCall { + pub hash: [u8; 32], + } + ///Container type for all input parameters for the `upgradeToAndCall` function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "upgradeToAndCall", abi = "upgradeToAndCall(address,bytes)")] + pub struct UpgradeToAndCallCall { + pub new_implementation: ::ethers::core::types::Address, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `validateUserOp` function with signature `validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)` and selector `0x3a871cdd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "validateUserOp", + abi = "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)" + )] + pub struct ValidateUserOpCall { + pub user_op: UserOperation, + pub user_op_hash: [u8; 32], + pub missing_account_funds: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum CoinbaseSmartWalletCalls { + ReplayableNonceKey(ReplayableNonceKeyCall), + AddOwnerAddress(AddOwnerAddressCall), + AddOwnerPublicKey(AddOwnerPublicKeyCall), + CanSkipChainIdValidation(CanSkipChainIdValidationCall), + DomainSeparator(DomainSeparatorCall), + Eip712Domain(Eip712DomainCall), + EntryPoint(EntryPointCall), + Execute(ExecuteCall), + ExecuteBatch(ExecuteBatchCall), + ExecuteWithoutChainIdValidation(ExecuteWithoutChainIdValidationCall), + GetUserOpHashWithoutChainId(GetUserOpHashWithoutChainIdCall), + Implementation(ImplementationCall), + Initialize(InitializeCall), + IsOwnerAddress(IsOwnerAddressCall), + IsOwnerBytes(IsOwnerBytesCall), + IsOwnerPublicKey(IsOwnerPublicKeyCall), + IsValidSignature(IsValidSignatureCall), + NextOwnerIndex(NextOwnerIndexCall), + OwnerAtIndex(OwnerAtIndexCall), + ProxiableUUID(ProxiableUUIDCall), + RemoveOwnerAtIndex(RemoveOwnerAtIndexCall), + ReplaySafeHash(ReplaySafeHashCall), + UpgradeToAndCall(UpgradeToAndCallCall), + ValidateUserOp(ValidateUserOpCall), + } + impl ::ethers::core::abi::AbiDecode for CoinbaseSmartWalletCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ReplayableNonceKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerAddress(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerPublicKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CanSkipChainIdValidation(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::DomainSeparator(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::Eip712Domain(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::EntryPoint(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Execute(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ExecuteBatch(decoded)); + } + if let Ok(decoded) = + ::decode( + data, + ) + { + return Ok(Self::ExecuteWithoutChainIdValidation(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::GetUserOpHashWithoutChainId(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::Implementation(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Initialize(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerAddress(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::IsOwnerBytes(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerPublicKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsValidSignature(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextOwnerIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::OwnerAtIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ProxiableUUID(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::RemoveOwnerAtIndex(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ReplaySafeHash(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UpgradeToAndCall(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ValidateUserOp(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for CoinbaseSmartWalletCalls { + fn encode(self) -> Vec { + match self { + Self::ReplayableNonceKey(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::AddOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::AddOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::CanSkipChainIdValidation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::DomainSeparator(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Eip712Domain(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::EntryPoint(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Execute(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ExecuteBatch(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ExecuteWithoutChainIdValidation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::GetUserOpHashWithoutChainId(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Implementation(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Initialize(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerBytes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsValidSignature(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextOwnerIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::OwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ProxiableUUID(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RemoveOwnerAtIndex(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ReplaySafeHash(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UpgradeToAndCall(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ValidateUserOp(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for CoinbaseSmartWalletCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ReplayableNonceKey(element) => ::core::fmt::Display::fmt(element, f), + Self::AddOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::AddOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::CanSkipChainIdValidation(element) => ::core::fmt::Display::fmt(element, f), + Self::DomainSeparator(element) => ::core::fmt::Display::fmt(element, f), + Self::Eip712Domain(element) => ::core::fmt::Display::fmt(element, f), + Self::EntryPoint(element) => ::core::fmt::Display::fmt(element, f), + Self::Execute(element) => ::core::fmt::Display::fmt(element, f), + Self::ExecuteBatch(element) => ::core::fmt::Display::fmt(element, f), + Self::ExecuteWithoutChainIdValidation(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::GetUserOpHashWithoutChainId(element) => ::core::fmt::Display::fmt(element, f), + Self::Implementation(element) => ::core::fmt::Display::fmt(element, f), + Self::Initialize(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerBytes(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::IsValidSignature(element) => ::core::fmt::Display::fmt(element, f), + Self::NextOwnerIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::ProxiableUUID(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::ReplaySafeHash(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeToAndCall(element) => ::core::fmt::Display::fmt(element, f), + Self::ValidateUserOp(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ReplayableNonceKeyCall) -> Self { + Self::ReplayableNonceKey(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: AddOwnerAddressCall) -> Self { + Self::AddOwnerAddress(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: AddOwnerPublicKeyCall) -> Self { + Self::AddOwnerPublicKey(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: CanSkipChainIdValidationCall) -> Self { + Self::CanSkipChainIdValidation(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: DomainSeparatorCall) -> Self { + Self::DomainSeparator(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: Eip712DomainCall) -> Self { + Self::Eip712Domain(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: EntryPointCall) -> Self { + Self::EntryPoint(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ExecuteCall) -> Self { + Self::Execute(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ExecuteBatchCall) -> Self { + Self::ExecuteBatch(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ExecuteWithoutChainIdValidationCall) -> Self { + Self::ExecuteWithoutChainIdValidation(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: GetUserOpHashWithoutChainIdCall) -> Self { + Self::GetUserOpHashWithoutChainId(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ImplementationCall) -> Self { + Self::Implementation(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: InitializeCall) -> Self { + Self::Initialize(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: IsOwnerAddressCall) -> Self { + Self::IsOwnerAddress(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: IsOwnerBytesCall) -> Self { + Self::IsOwnerBytes(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: IsOwnerPublicKeyCall) -> Self { + Self::IsOwnerPublicKey(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: IsValidSignatureCall) -> Self { + Self::IsValidSignature(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: NextOwnerIndexCall) -> Self { + Self::NextOwnerIndex(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: OwnerAtIndexCall) -> Self { + Self::OwnerAtIndex(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ProxiableUUIDCall) -> Self { + Self::ProxiableUUID(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: RemoveOwnerAtIndexCall) -> Self { + Self::RemoveOwnerAtIndex(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ReplaySafeHashCall) -> Self { + Self::ReplaySafeHash(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: UpgradeToAndCallCall) -> Self { + Self::UpgradeToAndCall(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletCalls { + fn from(value: ValidateUserOpCall) -> Self { + Self::ValidateUserOp(value) + } + } + ///Container type for all return fields from the `REPLAYABLE_NONCE_KEY` function with signature `REPLAYABLE_NONCE_KEY()` and selector `0x88ce4c7c` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ReplayableNonceKeyReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `canSkipChainIdValidation` function with signature `canSkipChainIdValidation(bytes4)` and selector `0x9f9bcb34` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CanSkipChainIdValidationReturn(pub bool); + ///Container type for all return fields from the `domainSeparator` function with signature `domainSeparator()` and selector `0xf698da25` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct DomainSeparatorReturn(pub [u8; 32]); + ///Container type for all return fields from the `eip712Domain` function with signature `eip712Domain()` and selector `0x84b0196e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct Eip712DomainReturn { + pub fields: [u8; 1], + pub name: ::std::string::String, + pub version: ::std::string::String, + pub chain_id: ::ethers::core::types::U256, + pub verifying_contract: ::ethers::core::types::Address, + pub salt: [u8; 32], + pub extensions: ::std::vec::Vec<::ethers::core::types::U256>, + } + ///Container type for all return fields from the `entryPoint` function with signature `entryPoint()` and selector `0xb0d691fe` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct EntryPointReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `getUserOpHashWithoutChainId` function with signature `getUserOpHashWithoutChainId((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0x4f6e7f22` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetUserOpHashWithoutChainIdReturn { + pub user_op_hash: [u8; 32], + } + ///Container type for all return fields from the `implementation` function with signature `implementation()` and selector `0x5c60da1b` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ImplementationReturn { + pub address: ::ethers::core::types::Address, + } + ///Container type for all return fields from the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerAddressReturn(pub bool); + ///Container type for all return fields from the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerBytesReturn(pub bool); + ///Container type for all return fields from the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerPublicKeyReturn(pub bool); + ///Container type for all return fields from the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsValidSignatureReturn { + pub result: [u8; 4], + } + ///Container type for all return fields from the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextOwnerIndexReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct OwnerAtIndexReturn(pub ::ethers::core::types::Bytes); + ///Container type for all return fields from the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ProxiableUUIDReturn(pub [u8; 32]); + ///Container type for all return fields from the `replaySafeHash` function with signature `replaySafeHash(bytes32)` and selector `0xce1506be` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ReplaySafeHashReturn(pub [u8; 32]); + ///Container type for all return fields from the `validateUserOp` function with signature `validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)` and selector `0x3a871cdd` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ValidateUserOpReturn { + pub validation_data: ::ethers::core::types::U256, + } +} diff --git a/xmtp_id/src/bindings/coinbase_smart_wallet_factory.rs b/xmtp_id/src/bindings/coinbase_smart_wallet_factory.rs new file mode 100644 index 000000000..e04ba2c94 --- /dev/null +++ b/xmtp_id/src/bindings/coinbase_smart_wallet_factory.rs @@ -0,0 +1,496 @@ +pub use coinbase_smart_wallet_factory::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod coinbase_smart_wallet_factory { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::Some(::ethers::core::abi::ethabi::Constructor { + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("erc4337"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some(::std::borrow::ToOwned::to_owned( + "address" + ),), + },], + }), + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("createAccount"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("createAccount"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owners"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes[]"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("nonce"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract CoinbaseSmartWallet",), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getAddress"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owners"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes[]"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("nonce"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("predicted"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("implementation"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("implementation"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("initCodeHash"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("initCodeHash"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("result"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::core::convert::From::from([( + ::std::borrow::ToOwned::to_owned("OwnerRequired"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("OwnerRequired"), + inputs: ::std::vec![], + },], + )]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static COINBASESMARTWALLETFACTORY_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\xA0`@R`@Qa\x05\xEB8\x03\x80a\x05\xEB\x839\x81\x01`@\x81\x90Ra\0\"\x91a\x003V[`\x01`\x01`\xA0\x1B\x03\x16`\x80Ra\0cV[`\0` \x82\x84\x03\x12\x15a\0EW`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\\W`\0\x80\xFD[\x93\x92PPPV[`\x80Qa\x05`a\0\x8B`\09`\0\x81\x81`\xA6\x01R\x81\x81a\x01<\x01Ra\x02;\x01Ra\x05``\0\xF3\xFE`\x80`@R`\x046\x10a\0?W`\x005`\xE0\x1C\x80c%\x0B\x1BA\x14a\0DW\x80c?\xFB\xA3o\x14a\0\x81W\x80c\\`\xDA\x1B\x14a\0\x94W\x80c\xDBLT^\x14a\0\xC8W[`\0\x80\xFD[4\x80\x15a\0PW`\0\x80\xFD[Pa\0da\0_6`\x04a\x03\xB7V[a\0\xEBV[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0da\0\x8F6`\x04a\x03\xB7V[a\x01\x11V[4\x80\x15a\0\xA0W`\0\x80\xFD[Pa\0d\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[4\x80\x15a\0\xD4W`\0\x80\xFD[Pa\0\xDDa\x01\xE6V[`@Q\x90\x81R` \x01a\0xV[`\0a\x01\ta\0\xF8a\x01\xE6V[a\x01\x03\x86\x86\x86a\x02{V[0a\x02\xB1V[\x94\x93PPPPV[`\0\x82\x81\x03a\x013W`@Qc=`\0\xFD[PPPP[PP\x93\x92PPPV[`@\x80Q\x7F\xCC75\xA9 \xA3\xCAP]8+\xBCTZ\xF4=`\0\x80>`8W=`\0\xFD[=`\0\xF3``\x90\x81R\x7FQU\xF36==7==6=\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\x83Ra`\t` R\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`\x1ERh`==\x81`\"=9s`\nR`_`! \x91\x90\x92R`\0\x90\x91R\x90V[`\0\x83\x83\x83`@Q` \x01a\x02\x92\x93\x92\x91\x90a\x05\x06V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x93\x92PPPV[`\0`\xFF`\0SP`5\x92\x83R``\x1B`\x01R`\x15R`U`\0\x90\x81 \x91R\x90V[`\0\x80`@Q\x7F\xCC75\xA9 \xA3\xCAP]8+\xBCTZ\xF4=`\0\x80>`8W=`\0\xFD[=`\0\xF3``R\x7FQU\xF36==7==6=\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v`@Ra`\t` R\x84`\x1ERh`==\x81`\"=9s`\nR`_`! `5\x82\x01R0`X\x1B\x81R`\xFF\x81S\x83`\x15\x82\x01R`U\x81 \x91P\x81;a\x03\x7FW\x83`_`!\x88\xF5\x91P\x81a\x03zWc0\x11d%`\0R`\x04`\x1C\xFD[a\x03\xA5V[`\x01\x92P\x85\x15a\x03\xA5W`\08`\08\x89\x86Z\xF1a\x03\xA5Wc\xB1-\x13\xEB`\0R`\x04`\x1C\xFD[\x80`@RP`\0``R\x93P\x93\x91PPV[`\0\x80`\0`@\x84\x86\x03\x12\x15a\x03\xCCW`\0\x80\xFD[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x03\xE4W`\0\x80\xFD[\x81\x86\x01\x91P\x86`\x1F\x83\x01\x12a\x03\xF8W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x04\x07W`\0\x80\xFD[\x87` \x82`\x05\x1B\x85\x01\x01\x11\x15a\x04\x1CW`\0\x80\xFD[` \x92\x83\x01\x98\x90\x97P\x95\x90\x91\x015\x94\x93PPPPV[\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[`\0\x83\x83\x85R` \x80\x86\x01\x95P` \x85`\x05\x1B\x83\x01\x01\x84`\0[\x87\x81\x10\x15a\x04\xE5W\x84\x83\x03`\x1F\x19\x01\x89R\x8156\x88\x90\x03`\x1E\x19\x01\x81\x12a\x04\x9BW`\0\x80\xFD[\x87\x01\x84\x81\x01\x905g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x04\xB7W`\0\x80\xFD[\x806\x03\x82\x13\x15a\x04\xC6W`\0\x80\xFD[a\x04\xD1\x85\x82\x84a\x042V[\x9A\x86\x01\x9A\x94PPP\x90\x83\x01\x90`\x01\x01a\x04uV[P\x90\x97\x96PPPPPPPV[` \x81R`\0a\x01\t` \x83\x01\x84\x86a\x04[V[`@\x81R`\0a\x05\x1A`@\x83\x01\x85\x87a\x04[V[\x90P\x82` \x83\x01R\x94\x93PPPPV\xFE\xA2dipfsX\"\x12 \x98\xBA\xE6Nb\x85\x9A\xC8\xD5\xED\x01\xC4\x92~_\xCE@oc+Q|\x86\xF08\xF0o\xEF\x83U\xDB\xA1dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static COINBASESMARTWALLETFACTORY_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\0?W`\x005`\xE0\x1C\x80c%\x0B\x1BA\x14a\0DW\x80c?\xFB\xA3o\x14a\0\x81W\x80c\\`\xDA\x1B\x14a\0\x94W\x80c\xDBLT^\x14a\0\xC8W[`\0\x80\xFD[4\x80\x15a\0PW`\0\x80\xFD[Pa\0da\0_6`\x04a\x03\xB7V[a\0\xEBV[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0da\0\x8F6`\x04a\x03\xB7V[a\x01\x11V[4\x80\x15a\0\xA0W`\0\x80\xFD[Pa\0d\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[4\x80\x15a\0\xD4W`\0\x80\xFD[Pa\0\xDDa\x01\xE6V[`@Q\x90\x81R` \x01a\0xV[`\0a\x01\ta\0\xF8a\x01\xE6V[a\x01\x03\x86\x86\x86a\x02{V[0a\x02\xB1V[\x94\x93PPPPV[`\0\x82\x81\x03a\x013W`@Qc=`\0\xFD[PPPP[PP\x93\x92PPPV[`@\x80Q\x7F\xCC75\xA9 \xA3\xCAP]8+\xBCTZ\xF4=`\0\x80>`8W=`\0\xFD[=`\0\xF3``\x90\x81R\x7FQU\xF36==7==6=\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\x83Ra`\t` R\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`\x1ERh`==\x81`\"=9s`\nR`_`! \x91\x90\x92R`\0\x90\x91R\x90V[`\0\x83\x83\x83`@Q` \x01a\x02\x92\x93\x92\x91\x90a\x05\x06V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x93\x92PPPV[`\0`\xFF`\0SP`5\x92\x83R``\x1B`\x01R`\x15R`U`\0\x90\x81 \x91R\x90V[`\0\x80`@Q\x7F\xCC75\xA9 \xA3\xCAP]8+\xBCTZ\xF4=`\0\x80>`8W=`\0\xFD[=`\0\xF3``R\x7FQU\xF36==7==6=\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v`@Ra`\t` R\x84`\x1ERh`==\x81`\"=9s`\nR`_`! `5\x82\x01R0`X\x1B\x81R`\xFF\x81S\x83`\x15\x82\x01R`U\x81 \x91P\x81;a\x03\x7FW\x83`_`!\x88\xF5\x91P\x81a\x03zWc0\x11d%`\0R`\x04`\x1C\xFD[a\x03\xA5V[`\x01\x92P\x85\x15a\x03\xA5W`\08`\08\x89\x86Z\xF1a\x03\xA5Wc\xB1-\x13\xEB`\0R`\x04`\x1C\xFD[\x80`@RP`\0``R\x93P\x93\x91PPV[`\0\x80`\0`@\x84\x86\x03\x12\x15a\x03\xCCW`\0\x80\xFD[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x03\xE4W`\0\x80\xFD[\x81\x86\x01\x91P\x86`\x1F\x83\x01\x12a\x03\xF8W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x04\x07W`\0\x80\xFD[\x87` \x82`\x05\x1B\x85\x01\x01\x11\x15a\x04\x1CW`\0\x80\xFD[` \x92\x83\x01\x98\x90\x97P\x95\x90\x91\x015\x94\x93PPPPV[\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[`\0\x83\x83\x85R` \x80\x86\x01\x95P` \x85`\x05\x1B\x83\x01\x01\x84`\0[\x87\x81\x10\x15a\x04\xE5W\x84\x83\x03`\x1F\x19\x01\x89R\x8156\x88\x90\x03`\x1E\x19\x01\x81\x12a\x04\x9BW`\0\x80\xFD[\x87\x01\x84\x81\x01\x905g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x04\xB7W`\0\x80\xFD[\x806\x03\x82\x13\x15a\x04\xC6W`\0\x80\xFD[a\x04\xD1\x85\x82\x84a\x042V[\x9A\x86\x01\x9A\x94PPP\x90\x83\x01\x90`\x01\x01a\x04uV[P\x90\x97\x96PPPPPPPV[` \x81R`\0a\x01\t` \x83\x01\x84\x86a\x04[V[`@\x81R`\0a\x05\x1A`@\x83\x01\x85\x87a\x04[V[\x90P\x82` \x83\x01R\x94\x93PPPPV\xFE\xA2dipfsX\"\x12 \x98\xBA\xE6Nb\x85\x9A\xC8\xD5\xED\x01\xC4\x92~_\xCE@oc+Q|\x86\xF08\xF0o\xEF\x83U\xDB\xA1dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static COINBASESMARTWALLETFACTORY_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct CoinbaseSmartWalletFactory(::ethers::contract::Contract); + impl ::core::clone::Clone for CoinbaseSmartWalletFactory { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for CoinbaseSmartWalletFactory { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for CoinbaseSmartWalletFactory { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for CoinbaseSmartWalletFactory { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(CoinbaseSmartWalletFactory)) + .field(&self.address()) + .finish() + } + } + impl CoinbaseSmartWalletFactory { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + COINBASESMARTWALLETFACTORY_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + COINBASESMARTWALLETFACTORY_ABI.clone(), + COINBASESMARTWALLETFACTORY_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `createAccount` (0x3ffba36f) function + pub fn create_account( + &self, + owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + nonce: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([63, 251, 163, 111], (owners, nonce)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getAddress` (0x250b1b41) function + pub fn get_address( + &self, + owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + nonce: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([37, 11, 27, 65], (owners, nonce)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `implementation` (0x5c60da1b) function + pub fn implementation( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([92, 96, 218, 27], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `initCodeHash` (0xdb4c545e) function + pub fn init_code_hash(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([219, 76, 84, 94], ()) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> + for CoinbaseSmartWalletFactory + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `OwnerRequired` with signature `OwnerRequired()` and selector `0x3c776be1` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "OwnerRequired", abi = "OwnerRequired()")] + pub struct OwnerRequired; + ///Container type for all input parameters for the `createAccount` function with signature `createAccount(bytes[],uint256)` and selector `0x3ffba36f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "createAccount", abi = "createAccount(bytes[],uint256)")] + pub struct CreateAccountCall { + pub owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + pub nonce: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `getAddress` function with signature `getAddress(bytes[],uint256)` and selector `0x250b1b41` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getAddress", abi = "getAddress(bytes[],uint256)")] + pub struct GetAddressCall { + pub owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + pub nonce: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `implementation` function with signature `implementation()` and selector `0x5c60da1b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "implementation", abi = "implementation()")] + pub struct ImplementationCall; + ///Container type for all input parameters for the `initCodeHash` function with signature `initCodeHash()` and selector `0xdb4c545e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "initCodeHash", abi = "initCodeHash()")] + pub struct InitCodeHashCall; + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum CoinbaseSmartWalletFactoryCalls { + CreateAccount(CreateAccountCall), + GetAddress(GetAddressCall), + Implementation(ImplementationCall), + InitCodeHash(InitCodeHashCall), + } + impl ::ethers::core::abi::AbiDecode for CoinbaseSmartWalletFactoryCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::CreateAccount(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetAddress(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::Implementation(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::InitCodeHash(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for CoinbaseSmartWalletFactoryCalls { + fn encode(self) -> Vec { + match self { + Self::CreateAccount(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Implementation(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::InitCodeHash(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for CoinbaseSmartWalletFactoryCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::CreateAccount(element) => ::core::fmt::Display::fmt(element, f), + Self::GetAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::Implementation(element) => ::core::fmt::Display::fmt(element, f), + Self::InitCodeHash(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for CoinbaseSmartWalletFactoryCalls { + fn from(value: CreateAccountCall) -> Self { + Self::CreateAccount(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletFactoryCalls { + fn from(value: GetAddressCall) -> Self { + Self::GetAddress(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletFactoryCalls { + fn from(value: ImplementationCall) -> Self { + Self::Implementation(value) + } + } + impl ::core::convert::From for CoinbaseSmartWalletFactoryCalls { + fn from(value: InitCodeHashCall) -> Self { + Self::InitCodeHash(value) + } + } + ///Container type for all return fields from the `createAccount` function with signature `createAccount(bytes[],uint256)` and selector `0x3ffba36f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CreateAccountReturn { + pub account: ::ethers::core::types::Address, + } + ///Container type for all return fields from the `getAddress` function with signature `getAddress(bytes[],uint256)` and selector `0x250b1b41` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetAddressReturn { + pub predicted: ::ethers::core::types::Address, + } + ///Container type for all return fields from the `implementation` function with signature `implementation()` and selector `0x5c60da1b` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ImplementationReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `initCodeHash` function with signature `initCodeHash()` and selector `0xdb4c545e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct InitCodeHashReturn { + pub result: [u8; 32], + } +} diff --git a/xmtp_id/src/bindings/dummy.rs b/xmtp_id/src/bindings/dummy.rs new file mode 100644 index 000000000..4d978770c --- /dev/null +++ b/xmtp_id/src/bindings/dummy.rs @@ -0,0 +1,576 @@ +pub use dummy::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod dummy { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("dummy"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("dummy"), + inputs: ::std::vec![], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("proxiableUUID"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("proxiableUUID"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("newImplementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("Done"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Done"), + inputs: ::std::vec![], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Upgraded"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Upgraded"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("implementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + },], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static DUMMY_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\xA0`@R0`\x80R4\x80\x15a\0\x14W`\0\x80\xFD[P`\x80Qa\x02\xB6a\x006`\09`\0\x81\x81`\xB7\x01Ra\x01\x94\x01Ra\x02\xB6`\0\xF3\xFE`\x80`@R`\x046\x10a\x004W`\x005`\xE0\x1C\x80c2\xE4:\x11\x14a\09W\x80cO\x1E\xF2\x86\x14a\0PW\x80cR\xD1\x90-\x14a\0cW[`\0\x80\xFD[4\x80\x15a\0EW`\0\x80\xFD[Pa\0Na\0\x8AV[\0[a\0Na\0^6`\x04a\x01\xEFV[a\0\xB5V[4\x80\x15a\0oW`\0\x80\xFD[Pa\0xa\x01\x90V[`@Q\x90\x81R` \x01`@Q\x80\x91\x03\x90\xF3[`@Q\x7F\x9F\x9F\xB44WGI\xB7DX\xE0\xDD\xC3\xCF_\xD5\xBD\xB1\xB0\t\xC8a^\x82V\x06\xB57$Wo5\x90`\0\x90\xA1V[\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\x000\x81\x03a\0\xEBWc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x83``\x1B``\x1C\x93PcR\xD1\x90-`\x01R\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80` `\x01`\x04`\x1D\x89Z\xFAQ\x14a\x01=WcU)\x9BI`\x01R`\x04`\x1D\xFD[\x84\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`\08\xA2\x84\x90U\x81\x15a\x01\x8AW`@Q\x82\x84\x827`\08\x84\x83\x88Z\xF4a\x01\x88W=`\0\x82>=\x81\xFD[P[PPPPV[`\0\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\x000\x81\x14a\x01\xC8Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x91PP\x90V[`\0\x80`\0`@\x84\x86\x03\x12\x15a\x02\x04W`\0\x80\xFD[\x835`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x02\x1BW`\0\x80\xFD[\x92P` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x028W`\0\x80\xFD[\x81\x86\x01\x91P\x86`\x1F\x83\x01\x12a\x02LW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x02[W`\0\x80\xFD[\x87` \x82\x85\x01\x01\x11\x15a\x02mW`\0\x80\xFD[` \x83\x01\x94P\x80\x93PPPP\x92P\x92P\x92V\xFE\xA2dipfsX\"\x12 \xC0_GN:KSv\n\n\x1Fs\x98xg\xACN\xD4\x98\xFDh\x9E\x93\x88h?\x84r\xA9{i/dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static DUMMY_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\x004W`\x005`\xE0\x1C\x80c2\xE4:\x11\x14a\09W\x80cO\x1E\xF2\x86\x14a\0PW\x80cR\xD1\x90-\x14a\0cW[`\0\x80\xFD[4\x80\x15a\0EW`\0\x80\xFD[Pa\0Na\0\x8AV[\0[a\0Na\0^6`\x04a\x01\xEFV[a\0\xB5V[4\x80\x15a\0oW`\0\x80\xFD[Pa\0xa\x01\x90V[`@Q\x90\x81R` \x01`@Q\x80\x91\x03\x90\xF3[`@Q\x7F\x9F\x9F\xB44WGI\xB7DX\xE0\xDD\xC3\xCF_\xD5\xBD\xB1\xB0\t\xC8a^\x82V\x06\xB57$Wo5\x90`\0\x90\xA1V[\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\x000\x81\x03a\0\xEBWc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x83``\x1B``\x1C\x93PcR\xD1\x90-`\x01R\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80` `\x01`\x04`\x1D\x89Z\xFAQ\x14a\x01=WcU)\x9BI`\x01R`\x04`\x1D\xFD[\x84\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`\08\xA2\x84\x90U\x81\x15a\x01\x8AW`@Q\x82\x84\x827`\08\x84\x83\x88Z\xF4a\x01\x88W=`\0\x82>=\x81\xFD[P[PPPPV[`\0\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\x000\x81\x14a\x01\xC8Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x91PP\x90V[`\0\x80`\0`@\x84\x86\x03\x12\x15a\x02\x04W`\0\x80\xFD[\x835`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x02\x1BW`\0\x80\xFD[\x92P` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x028W`\0\x80\xFD[\x81\x86\x01\x91P\x86`\x1F\x83\x01\x12a\x02LW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x02[W`\0\x80\xFD[\x87` \x82\x85\x01\x01\x11\x15a\x02mW`\0\x80\xFD[` \x83\x01\x94P\x80\x93PPPP\x92P\x92P\x92V\xFE\xA2dipfsX\"\x12 \xC0_GN:KSv\n\n\x1Fs\x98xg\xACN\xD4\x98\xFDh\x9E\x93\x88h?\x84r\xA9{i/dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static DUMMY_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct Dummy(::ethers::contract::Contract); + impl ::core::clone::Clone for Dummy { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for Dummy { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for Dummy { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for Dummy { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(Dummy)) + .field(&self.address()) + .finish() + } + } + impl Dummy { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + DUMMY_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + DUMMY_ABI.clone(), + DUMMY_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `dummy` (0x32e43a11) function + pub fn dummy(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([50, 228, 58, 17], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `proxiableUUID` (0x52d1902d) function + pub fn proxiable_uuid(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([82, 209, 144, 45], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `upgradeToAndCall` (0x4f1ef286) function + pub fn upgrade_to_and_call( + &self, + new_implementation: ::ethers::core::types::Address, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 30, 242, 134], (new_implementation, data)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `Done` event + pub fn done_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, DoneFilter> { + self.0.event() + } + ///Gets the contract's `Upgraded` event + pub fn upgraded_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, UpgradedFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, DummyEvents> { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> for Dummy { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `UnauthorizedCallContext` with signature `UnauthorizedCallContext()` and selector `0x9f03a026` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UnauthorizedCallContext", abi = "UnauthorizedCallContext()")] + pub struct UnauthorizedCallContext; + ///Custom Error type `UpgradeFailed` with signature `UpgradeFailed()` and selector `0x55299b49` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UpgradeFailed", abi = "UpgradeFailed()")] + pub struct UpgradeFailed; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum DummyErrors { + UnauthorizedCallContext(UnauthorizedCallContext), + UpgradeFailed(UpgradeFailed), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for DummyErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UnauthorizedCallContext(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::UpgradeFailed(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for DummyErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::UnauthorizedCallContext(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpgradeFailed(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for DummyErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for DummyErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::UnauthorizedCallContext(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for DummyErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for DummyErrors { + fn from(value: UnauthorizedCallContext) -> Self { + Self::UnauthorizedCallContext(value) + } + } + impl ::core::convert::From for DummyErrors { + fn from(value: UpgradeFailed) -> Self { + Self::UpgradeFailed(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Done", abi = "Done()")] + pub struct DoneFilter; + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Upgraded", abi = "Upgraded(address)")] + pub struct UpgradedFilter { + #[ethevent(indexed)] + pub implementation: ::ethers::core::types::Address, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum DummyEvents { + DoneFilter(DoneFilter), + UpgradedFilter(UpgradedFilter), + } + impl ::ethers::contract::EthLogDecode for DummyEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = DoneFilter::decode_log(log) { + return Ok(DummyEvents::DoneFilter(decoded)); + } + if let Ok(decoded) = UpgradedFilter::decode_log(log) { + return Ok(DummyEvents::UpgradedFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for DummyEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::DoneFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradedFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for DummyEvents { + fn from(value: DoneFilter) -> Self { + Self::DoneFilter(value) + } + } + impl ::core::convert::From for DummyEvents { + fn from(value: UpgradedFilter) -> Self { + Self::UpgradedFilter(value) + } + } + ///Container type for all input parameters for the `dummy` function with signature `dummy()` and selector `0x32e43a11` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "dummy", abi = "dummy()")] + pub struct DummyCall; + ///Container type for all input parameters for the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "proxiableUUID", abi = "proxiableUUID()")] + pub struct ProxiableUUIDCall; + ///Container type for all input parameters for the `upgradeToAndCall` function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "upgradeToAndCall", abi = "upgradeToAndCall(address,bytes)")] + pub struct UpgradeToAndCallCall { + pub new_implementation: ::ethers::core::types::Address, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum DummyCalls { + Dummy(DummyCall), + ProxiableUUID(ProxiableUUIDCall), + UpgradeToAndCall(UpgradeToAndCallCall), + } + impl ::ethers::core::abi::AbiDecode for DummyCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Dummy(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ProxiableUUID(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UpgradeToAndCall(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for DummyCalls { + fn encode(self) -> Vec { + match self { + Self::Dummy(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ProxiableUUID(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UpgradeToAndCall(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for DummyCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::Dummy(element) => ::core::fmt::Display::fmt(element, f), + Self::ProxiableUUID(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeToAndCall(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for DummyCalls { + fn from(value: DummyCall) -> Self { + Self::Dummy(value) + } + } + impl ::core::convert::From for DummyCalls { + fn from(value: ProxiableUUIDCall) -> Self { + Self::ProxiableUUID(value) + } + } + impl ::core::convert::From for DummyCalls { + fn from(value: UpgradeToAndCallCall) -> Self { + Self::UpgradeToAndCall(value) + } + } + ///Container type for all return fields from the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ProxiableUUIDReturn(pub [u8; 32]); +} diff --git a/xmtp_id/src/bindings/erc1271.rs b/xmtp_id/src/bindings/erc1271.rs new file mode 100644 index 000000000..1ef23f45c --- /dev/null +++ b/xmtp_id/src/bindings/erc1271.rs @@ -0,0 +1,463 @@ +pub use erc1271::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod erc1271 { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("domainSeparator"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("domainSeparator"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("eip712Domain"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("eip712Domain"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("fields"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(1usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes1"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("name"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("chainId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("verifyingContract"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("salt"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("extensions"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256[]"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isValidSignature"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isValidSignature"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("signature"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("result"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("replaySafeHash"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("replaySafeHash"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static ERC1271_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct ERC1271(::ethers::contract::Contract); + impl ::core::clone::Clone for ERC1271 { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for ERC1271 { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for ERC1271 { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for ERC1271 { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(ERC1271)) + .field(&self.address()) + .finish() + } + } + impl ERC1271 { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + ERC1271_ABI.clone(), + client, + )) + } + ///Calls the contract's `domainSeparator` (0xf698da25) function + pub fn domain_separator(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([246, 152, 218, 37], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `eip712Domain` (0x84b0196e) function + pub fn eip_712_domain( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + [u8; 1], + ::std::string::String, + ::std::string::String, + ::ethers::core::types::U256, + ::ethers::core::types::Address, + [u8; 32], + ::std::vec::Vec<::ethers::core::types::U256>, + ), + > { + self.0 + .method_hash([132, 176, 25, 110], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isValidSignature` (0x1626ba7e) function + pub fn is_valid_signature( + &self, + hash: [u8; 32], + signature: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([22, 38, 186, 126], (hash, signature)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `replaySafeHash` (0xce1506be) function + pub fn replay_safe_hash( + &self, + hash: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([206, 21, 6, 190], hash) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> for ERC1271 { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `domainSeparator` function with signature `domainSeparator()` and selector `0xf698da25` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "domainSeparator", abi = "domainSeparator()")] + pub struct DomainSeparatorCall; + ///Container type for all input parameters for the `eip712Domain` function with signature `eip712Domain()` and selector `0x84b0196e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "eip712Domain", abi = "eip712Domain()")] + pub struct Eip712DomainCall; + ///Container type for all input parameters for the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isValidSignature", abi = "isValidSignature(bytes32,bytes)")] + pub struct IsValidSignatureCall { + pub hash: [u8; 32], + pub signature: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `replaySafeHash` function with signature `replaySafeHash(bytes32)` and selector `0xce1506be` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "replaySafeHash", abi = "replaySafeHash(bytes32)")] + pub struct ReplaySafeHashCall { + pub hash: [u8; 32], + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum ERC1271Calls { + DomainSeparator(DomainSeparatorCall), + Eip712Domain(Eip712DomainCall), + IsValidSignature(IsValidSignatureCall), + ReplaySafeHash(ReplaySafeHashCall), + } + impl ::ethers::core::abi::AbiDecode for ERC1271Calls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::DomainSeparator(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::Eip712Domain(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsValidSignature(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ReplaySafeHash(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for ERC1271Calls { + fn encode(self) -> Vec { + match self { + Self::DomainSeparator(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Eip712Domain(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsValidSignature(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ReplaySafeHash(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for ERC1271Calls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::DomainSeparator(element) => ::core::fmt::Display::fmt(element, f), + Self::Eip712Domain(element) => ::core::fmt::Display::fmt(element, f), + Self::IsValidSignature(element) => ::core::fmt::Display::fmt(element, f), + Self::ReplaySafeHash(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for ERC1271Calls { + fn from(value: DomainSeparatorCall) -> Self { + Self::DomainSeparator(value) + } + } + impl ::core::convert::From for ERC1271Calls { + fn from(value: Eip712DomainCall) -> Self { + Self::Eip712Domain(value) + } + } + impl ::core::convert::From for ERC1271Calls { + fn from(value: IsValidSignatureCall) -> Self { + Self::IsValidSignature(value) + } + } + impl ::core::convert::From for ERC1271Calls { + fn from(value: ReplaySafeHashCall) -> Self { + Self::ReplaySafeHash(value) + } + } + ///Container type for all return fields from the `domainSeparator` function with signature `domainSeparator()` and selector `0xf698da25` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct DomainSeparatorReturn(pub [u8; 32]); + ///Container type for all return fields from the `eip712Domain` function with signature `eip712Domain()` and selector `0x84b0196e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct Eip712DomainReturn { + pub fields: [u8; 1], + pub name: ::std::string::String, + pub version: ::std::string::String, + pub chain_id: ::ethers::core::types::U256, + pub verifying_contract: ::ethers::core::types::Address, + pub salt: [u8; 32], + pub extensions: ::std::vec::Vec<::ethers::core::types::U256>, + } + ///Container type for all return fields from the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsValidSignatureReturn { + pub result: [u8; 4], + } + ///Container type for all return fields from the `replaySafeHash` function with signature `replaySafeHash(bytes32)` and selector `0xce1506be` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ReplaySafeHashReturn(pub [u8; 32]); +} diff --git a/xmtp_id/src/bindings/erc1271_input_generator.rs b/xmtp_id/src/bindings/erc1271_input_generator.rs new file mode 100644 index 000000000..c592e1146 --- /dev/null +++ b/xmtp_id/src/bindings/erc1271_input_generator.rs @@ -0,0 +1,316 @@ +pub use erc1271_input_generator::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod erc1271_input_generator { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::Some(::ethers::core::abi::ethabi::Constructor { + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract CoinbaseSmartWallet",), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("accountFactory"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("factoryCalldata"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + }), + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AccountDeploymentFailed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("AccountDeploymentFailed",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ReturnedAddressDoesNotMatchAccount"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ReturnedAddressDoesNotMatchAccount", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("returned"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static ERC1271INPUTGENERATOR_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x03\xAB8\x03\x80a\x03\xAB\x839\x81\x01`@\x81\x90Ra\0/\x91a\x02tV[`\0a\0=\x85\x85\x85\x85a\0IV[\x90P\x80`\x80R` `\x80\xF3[`\0`\x01`\x01`\xA0\x1B\x03\x85\x16;\x15a\0\xCBW`@Qcg\n\x83_`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x86\x16\x90c\xCE\x15\x06\xBE\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\0\xA0W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\0\xC4\x91\x90a\x03QV[\x90Pa\x02\x1AV[`\0\x80\x84`\x01`\x01`\xA0\x1B\x03\x16\x84`@Qa\0\xE6\x91\x90a\x03jV[`\0`@Q\x80\x83\x03\x81`\0\x86Z\xF1\x91PP=\x80`\0\x81\x14a\x01#W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x01(V[``\x91P[P\x91P\x91P\x81a\x01JW`@Qb\x94UU`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x81\x80` \x01\x90Q\x81\x01\x90a\x01`\x91\x90a\x03\x86V[\x90P\x87`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14a\x01\xABW`@Qc\xC8bC\x83`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x80\x8A\x16`\x04\x83\x01R\x82\x16`$\x82\x01R`D\x01`@Q\x80\x91\x03\x90\xFD[`@Qcg\n\x83_`\xE1\x1B\x81R`\x04\x81\x01\x88\x90R`\x01`\x01`\xA0\x1B\x03\x89\x16\x90c\xCE\x15\x06\xBE\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x01\xF0W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x02\x14\x91\x90a\x03QV[\x93PPPP[\x94\x93PPPPV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x027W`\0\x80\xFD[PV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0[\x83\x81\x10\x15a\x02kW\x81\x81\x01Q\x83\x82\x01R` \x01a\x02SV[PP`\0\x91\x01RV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x02\x8AW`\0\x80\xFD[\x84Qa\x02\x95\x81a\x02\"V[` \x86\x01Q`@\x87\x01Q\x91\x95P\x93Pa\x02\xAD\x81a\x02\"V[``\x86\x01Q\x90\x92P`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x02\xCAW`\0\x80\xFD[\x81\x87\x01\x91P\x87`\x1F\x83\x01\x12a\x02\xDEW`\0\x80\xFD[\x81Q\x81\x81\x11\x15a\x02\xF0Wa\x02\xF0a\x02:V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x03\x18Wa\x03\x18a\x02:V[\x81`@R\x82\x81R\x8A` \x84\x87\x01\x01\x11\x15a\x031W`\0\x80\xFD[a\x03B\x83` \x83\x01` \x88\x01a\x02PV[\x97\x9A\x96\x99P\x94\x97PPPPPPV[`\0` \x82\x84\x03\x12\x15a\x03cW`\0\x80\xFD[PQ\x91\x90PV[`\0\x82Qa\x03|\x81\x84` \x87\x01a\x02PV[\x91\x90\x91\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x03\x98W`\0\x80\xFD[\x81Qa\x03\xA3\x81a\x02\"V[\x93\x92PPPV\xFE"; + /// The bytecode of the contract. + pub static ERC1271INPUTGENERATOR_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \x86\x8Dv\xF4p\xB7z\x1B/?\x11U\xB1\xCF\x83\xC7\xDA\x8A\xA4\x93\xAF\x03\xF9\x84;\xE8\x86\xD5\xCC\xFAC\x10dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static ERC1271INPUTGENERATOR_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct ERC1271InputGenerator(::ethers::contract::Contract); + impl ::core::clone::Clone for ERC1271InputGenerator { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for ERC1271InputGenerator { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for ERC1271InputGenerator { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for ERC1271InputGenerator { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(ERC1271InputGenerator)) + .field(&self.address()) + .finish() + } + } + impl ERC1271InputGenerator { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + ERC1271INPUTGENERATOR_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + ERC1271INPUTGENERATOR_ABI.clone(), + ERC1271INPUTGENERATOR_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> + for ERC1271InputGenerator + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `AccountDeploymentFailed` with signature `AccountDeploymentFailed()` and selector `0x128aaaa0` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "AccountDeploymentFailed", abi = "AccountDeploymentFailed()")] + pub struct AccountDeploymentFailed; + ///Custom Error type `ReturnedAddressDoesNotMatchAccount` with signature `ReturnedAddressDoesNotMatchAccount(address,address)` and selector `0xc8624383` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ReturnedAddressDoesNotMatchAccount", + abi = "ReturnedAddressDoesNotMatchAccount(address,address)" + )] + pub struct ReturnedAddressDoesNotMatchAccount { + pub account: ::ethers::core::types::Address, + pub returned: ::ethers::core::types::Address, + } + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum ERC1271InputGeneratorErrors { + AccountDeploymentFailed(AccountDeploymentFailed), + ReturnedAddressDoesNotMatchAccount(ReturnedAddressDoesNotMatchAccount), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for ERC1271InputGeneratorErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AccountDeploymentFailed(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ReturnedAddressDoesNotMatchAccount(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for ERC1271InputGeneratorErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::AccountDeploymentFailed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ReturnedAddressDoesNotMatchAccount(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for ERC1271InputGeneratorErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for ERC1271InputGeneratorErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AccountDeploymentFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::ReturnedAddressDoesNotMatchAccount(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for ERC1271InputGeneratorErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for ERC1271InputGeneratorErrors { + fn from(value: AccountDeploymentFailed) -> Self { + Self::AccountDeploymentFailed(value) + } + } + impl ::core::convert::From for ERC1271InputGeneratorErrors { + fn from(value: ReturnedAddressDoesNotMatchAccount) -> Self { + Self::ReturnedAddressDoesNotMatchAccount(value) + } + } +} diff --git a/xmtp_id/src/bindings/fcl_ecdsa.rs b/xmtp_id/src/bindings/fcl_ecdsa.rs new file mode 100644 index 000000000..e999c8acc --- /dev/null +++ b/xmtp_id/src/bindings/fcl_ecdsa.rs @@ -0,0 +1,119 @@ +pub use fcl_ecdsa::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod fcl_ecdsa { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static FCL_ECDSA_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xA4E\x8B\xE3\0\xB4|\xB4\x0FK\x1F\xEF\xCB\xC7\x1AO\xB6\x13\"\t\xE7\x1954d\xB9\xF0\xFA\xE4_d&dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static FCL_ECDSA_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xA4E\x8B\xE3\0\xB4|\xB4\x0FK\x1F\xEF\xCB\xC7\x1AO\xB6\x13\"\t\xE7\x1954d\xB9\xF0\xFA\xE4_d&dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static FCL_ECDSA_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct FCL_ecdsa(::ethers::contract::Contract); + impl ::core::clone::Clone for FCL_ecdsa { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for FCL_ecdsa { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for FCL_ecdsa { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for FCL_ecdsa { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(FCL_ecdsa)) + .field(&self.address()) + .finish() + } + } + impl FCL_ecdsa { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + FCL_ECDSA_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + FCL_ECDSA_ABI.clone(), + FCL_ECDSA_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> for FCL_ecdsa { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/fcl_elliptic_zz.rs b/xmtp_id/src/bindings/fcl_elliptic_zz.rs new file mode 100644 index 000000000..17bf6501d --- /dev/null +++ b/xmtp_id/src/bindings/fcl_elliptic_zz.rs @@ -0,0 +1,121 @@ +pub use fcl_elliptic_zz::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod fcl_elliptic_zz { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static FCL_ELLIPTIC_ZZ_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xEF\x9E\x9EP\x8F\x1E\xE66\x0F\xCC\xC9\x19\x81\xA97u\xADD\xFCPbe\xDF#=\xC0|\xD7\x9A\x1D'VdsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static FCL_ELLIPTIC_ZZ_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xEF\x9E\x9EP\x8F\x1E\xE66\x0F\xCC\xC9\x19\x81\xA97u\xADD\xFCPbe\xDF#=\xC0|\xD7\x9A\x1D'VdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static FCL_ELLIPTIC_ZZ_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct FCL_Elliptic_ZZ(::ethers::contract::Contract); + impl ::core::clone::Clone for FCL_Elliptic_ZZ { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for FCL_Elliptic_ZZ { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for FCL_Elliptic_ZZ { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for FCL_Elliptic_ZZ { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(FCL_Elliptic_ZZ)) + .field(&self.address()) + .finish() + } + } + impl FCL_Elliptic_ZZ { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + FCL_ELLIPTIC_ZZ_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + FCL_ELLIPTIC_ZZ_ABI.clone(), + FCL_ELLIPTIC_ZZ_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> + for FCL_Elliptic_ZZ + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/helpers.rs b/xmtp_id/src/bindings/helpers.rs new file mode 100644 index 000000000..9b1f08d06 --- /dev/null +++ b/xmtp_id/src/bindings/helpers.rs @@ -0,0 +1,70 @@ +pub use helpers::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod helpers { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static HELPERS_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct Helpers(::ethers::contract::Contract); + impl ::core::clone::Clone for Helpers { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for Helpers { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for Helpers { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for Helpers { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(Helpers)) + .field(&self.address()) + .finish() + } + } + impl Helpers { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + HELPERS_ABI.clone(), + client, + )) + } + } + impl From<::ethers::contract::Contract> for Helpers { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/i_aggregator.rs b/xmtp_id/src/bindings/i_aggregator.rs new file mode 100644 index 000000000..14186a7fb --- /dev/null +++ b/xmtp_id/src/bindings/i_aggregator.rs @@ -0,0 +1,384 @@ +pub use i_aggregator::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod i_aggregator { + pub use super::super::shared_types::*; + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("aggregateSignatures"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("aggregateSignatures",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOps"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation[]"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("aggregatedSignature",), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("validateSignatures"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("validateSignatures"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOps"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation[]"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("signature"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("validateUserOpSignature"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("validateUserOpSignature",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sigForUserOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static IAGGREGATOR_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct IAggregator(::ethers::contract::Contract); + impl ::core::clone::Clone for IAggregator { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for IAggregator { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for IAggregator { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for IAggregator { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IAggregator)) + .field(&self.address()) + .finish() + } + } + impl IAggregator { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + IAGGREGATOR_ABI.clone(), + client, + )) + } + ///Calls the contract's `aggregateSignatures` (0x275e2d79) function + pub fn aggregate_signatures( + &self, + user_ops: ::std::vec::Vec, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([39, 94, 45, 121], user_ops) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `validateSignatures` (0xe3563a4f) function + pub fn validate_signatures( + &self, + user_ops: ::std::vec::Vec, + signature: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([227, 86, 58, 79], (user_ops, signature)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `validateUserOpSignature` (0x64c530cd) function + pub fn validate_user_op_signature( + &self, + user_op: UserOperation, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([100, 197, 48, 205], (user_op,)) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> for IAggregator { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `aggregateSignatures` function with signature `aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])` and selector `0x275e2d79` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "aggregateSignatures", + abi = "aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])" + )] + pub struct AggregateSignaturesCall { + pub user_ops: ::std::vec::Vec, + } + ///Container type for all input parameters for the `validateSignatures` function with signature `validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)` and selector `0xe3563a4f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "validateSignatures", + abi = "validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)" + )] + pub struct ValidateSignaturesCall { + pub user_ops: ::std::vec::Vec, + pub signature: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `validateUserOpSignature` function with signature `validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0x64c530cd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "validateUserOpSignature", + abi = "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))" + )] + pub struct ValidateUserOpSignatureCall { + pub user_op: UserOperation, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum IAggregatorCalls { + AggregateSignatures(AggregateSignaturesCall), + ValidateSignatures(ValidateSignaturesCall), + ValidateUserOpSignature(ValidateUserOpSignatureCall), + } + impl ::ethers::core::abi::AbiDecode for IAggregatorCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AggregateSignatures(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ValidateSignatures(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ValidateUserOpSignature(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IAggregatorCalls { + fn encode(self) -> Vec { + match self { + Self::AggregateSignatures(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ValidateSignatures(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ValidateUserOpSignature(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + } + } + } + impl ::core::fmt::Display for IAggregatorCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AggregateSignatures(element) => ::core::fmt::Display::fmt(element, f), + Self::ValidateSignatures(element) => ::core::fmt::Display::fmt(element, f), + Self::ValidateUserOpSignature(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IAggregatorCalls { + fn from(value: AggregateSignaturesCall) -> Self { + Self::AggregateSignatures(value) + } + } + impl ::core::convert::From for IAggregatorCalls { + fn from(value: ValidateSignaturesCall) -> Self { + Self::ValidateSignatures(value) + } + } + impl ::core::convert::From for IAggregatorCalls { + fn from(value: ValidateUserOpSignatureCall) -> Self { + Self::ValidateUserOpSignature(value) + } + } + ///Container type for all return fields from the `aggregateSignatures` function with signature `aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])` and selector `0x275e2d79` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct AggregateSignaturesReturn { + pub aggregated_signature: ::ethers::core::types::Bytes, + } + ///Container type for all return fields from the `validateUserOpSignature` function with signature `validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0x64c530cd` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ValidateUserOpSignatureReturn { + pub sig_for_user_op: ::ethers::core::types::Bytes, + } +} diff --git a/xmtp_id/src/bindings/i_entry_point.rs b/xmtp_id/src/bindings/i_entry_point.rs new file mode 100644 index 000000000..0d1866279 --- /dev/null +++ b/xmtp_id/src/bindings/i_entry_point.rs @@ -0,0 +1,2546 @@ +pub use i_entry_point::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod i_entry_point { + pub use super::super::shared_types::*; + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("addStake"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addStake"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_unstakeDelaySec"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(32usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint32"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("balanceOf"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("balanceOf"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("depositTo"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("depositTo"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("getDepositInfo"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getDepositInfo"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("info"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(112usize), + ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::Uint(112usize), + ::ethers::core::abi::ethabi::ParamType::Uint(32usize), + ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.DepositInfo", + ), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("getNonce"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getNonce"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("key"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 192usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint192"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("nonce"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("getSenderAddress"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getSenderAddress"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("initCode"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("getUserOpHash"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getUserOpHash"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("handleAggregatedOps"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "handleAggregatedOps", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("opsPerAggregator"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + ), + ), + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IEntryPoint.UserOpsPerAggregator[]", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("beneficiary"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address payable"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("handleOps"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("handleOps"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("ops"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation[]"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("beneficiary"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address payable"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("incrementNonce"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("incrementNonce"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("key"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 192usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint192"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("simulateHandleOp"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("simulateHandleOp"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("op"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("target"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("targetCallData"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("simulateValidation"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("simulateValidation"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("unlockStake"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("unlockStake"), + inputs: ::std::vec![], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("withdrawStake"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("withdrawStake"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address payable"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("withdrawTo"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("withdrawTo"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address payable"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("withdrawAmount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AccountDeployed"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("AccountDeployed"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("factory"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("paymaster"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("BeforeExecution"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("BeforeExecution"), + inputs: ::std::vec![], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("Deposited"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Deposited"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("totalDeposit"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("SignatureAggregatorChanged"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned( + "SignatureAggregatorChanged", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("aggregator"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("StakeLocked"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("StakeLocked"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("totalStaked"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("unstakeDelaySec"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("StakeUnlocked"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("StakeUnlocked"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("withdrawTime"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("StakeWithdrawn"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("StakeWithdrawn"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("UserOperationEvent"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("UserOperationEvent"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("paymaster"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("nonce"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("success"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("actualGasCost"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("actualGasUsed"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("UserOperationRevertReason"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned( + "UserOperationRevertReason", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("nonce"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("revertReason"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("Withdrawn"), + ::std::vec![ + ::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Withdrawn"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + indexed: false, + }, + ], + anonymous: false, + }, + ], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ExecutionResult"), + ::std::vec![ + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ExecutionResult"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("preOpGas"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("paid"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("validAfter"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint48"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("validUntil"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint48"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("targetSuccess"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("targetResult"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("FailedOp"), + ::std::vec![ + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("FailedOp"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("opIndex"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("reason"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("SenderAddressResult"), + ::std::vec![ + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "SenderAddressResult", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("SignatureValidationFailed"), + ::std::vec![ + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "SignatureValidationFailed", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("aggregator"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("ValidationResult"), + ::std::vec![ + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ValidationResult"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("returnInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IEntryPoint.ReturnInfo", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("senderInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.StakeInfo", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("factoryInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.StakeInfo", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("paymasterInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.StakeInfo", + ), + ), + }, + ], + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("ValidationResultWithAggregation"), + ::std::vec![ + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ValidationResultWithAggregation", + ), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("returnInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IEntryPoint.ReturnInfo", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("senderInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.StakeInfo", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("factoryInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.StakeInfo", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("paymasterInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.StakeInfo", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("aggregatorInfo"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ], + ), + ], + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IEntryPoint.AggregatorStakeInfo", + ), + ), + }, + ], + }, + ], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static IENTRYPOINT_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct IEntryPoint(::ethers::contract::Contract); + impl ::core::clone::Clone for IEntryPoint { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for IEntryPoint { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for IEntryPoint { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for IEntryPoint { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IEntryPoint)) + .field(&self.address()) + .finish() + } + } + impl IEntryPoint { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + IENTRYPOINT_ABI.clone(), + client, + )) + } + ///Calls the contract's `addStake` (0x0396cb60) function + pub fn add_stake( + &self, + unstake_delay_sec: u32, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([3, 150, 203, 96], unstake_delay_sec) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `balanceOf` (0x70a08231) function + pub fn balance_of( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([112, 160, 130, 49], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `depositTo` (0xb760faf9) function + pub fn deposit_to( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([183, 96, 250, 249], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getDepositInfo` (0x5287ce12) function + pub fn get_deposit_info( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([82, 135, 206, 18], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getNonce` (0x35567e1a) function + pub fn get_nonce( + &self, + sender: ::ethers::core::types::Address, + key: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([53, 86, 126, 26], (sender, key)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getSenderAddress` (0x9b249f69) function + pub fn get_sender_address( + &self, + init_code: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([155, 36, 159, 105], init_code) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getUserOpHash` (0xa6193531) function + pub fn get_user_op_hash( + &self, + user_op: UserOperation, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([166, 25, 53, 49], (user_op,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `handleAggregatedOps` (0x4b1d7cf5) function + pub fn handle_aggregated_ops( + &self, + ops_per_aggregator: ::std::vec::Vec, + beneficiary: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([75, 29, 124, 245], (ops_per_aggregator, beneficiary)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `handleOps` (0x1fad948c) function + pub fn handle_ops( + &self, + ops: ::std::vec::Vec, + beneficiary: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([31, 173, 148, 140], (ops, beneficiary)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `incrementNonce` (0x0bd28e3b) function + pub fn increment_nonce( + &self, + key: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([11, 210, 142, 59], key) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `simulateHandleOp` (0xd6383f94) function + pub fn simulate_handle_op( + &self, + op: UserOperation, + target: ::ethers::core::types::Address, + target_call_data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([214, 56, 63, 148], (op, target, target_call_data)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `simulateValidation` (0xee219423) function + pub fn simulate_validation( + &self, + user_op: UserOperation, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([238, 33, 148, 35], (user_op,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `unlockStake` (0xbb9fe6bf) function + pub fn unlock_stake(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([187, 159, 230, 191], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `withdrawStake` (0xc23a5cea) function + pub fn withdraw_stake( + &self, + withdraw_address: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([194, 58, 92, 234], withdraw_address) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `withdrawTo` (0x205c2878) function + pub fn withdraw_to( + &self, + withdraw_address: ::ethers::core::types::Address, + withdraw_amount: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 92, 40, 120], (withdraw_address, withdraw_amount)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `AccountDeployed` event + pub fn account_deployed_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AccountDeployedFilter> + { + self.0.event() + } + ///Gets the contract's `BeforeExecution` event + pub fn before_execution_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, BeforeExecutionFilter> + { + self.0.event() + } + ///Gets the contract's `Deposited` event + pub fn deposited_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, DepositedFilter> { + self.0.event() + } + ///Gets the contract's `SignatureAggregatorChanged` event + pub fn signature_aggregator_changed_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + SignatureAggregatorChangedFilter, + > { + self.0.event() + } + ///Gets the contract's `StakeLocked` event + pub fn stake_locked_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StakeLockedFilter> + { + self.0.event() + } + ///Gets the contract's `StakeUnlocked` event + pub fn stake_unlocked_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StakeUnlockedFilter> + { + self.0.event() + } + ///Gets the contract's `StakeWithdrawn` event + pub fn stake_withdrawn_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StakeWithdrawnFilter> + { + self.0.event() + } + ///Gets the contract's `UserOperationEvent` event + pub fn user_operation_event_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, UserOperationEventFilter> + { + self.0.event() + } + ///Gets the contract's `UserOperationRevertReason` event + pub fn user_operation_revert_reason_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + UserOperationRevertReasonFilter, + > { + self.0.event() + } + ///Gets the contract's `Withdrawn` event + pub fn withdrawn_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, WithdrawnFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, IEntryPointEvents> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> for IEntryPoint { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `ExecutionResult` with signature `ExecutionResult(uint256,uint256,uint48,uint48,bool,bytes)` and selector `0x8b7ac980` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ExecutionResult", + abi = "ExecutionResult(uint256,uint256,uint48,uint48,bool,bytes)" + )] + pub struct ExecutionResult { + pub pre_op_gas: ::ethers::core::types::U256, + pub paid: ::ethers::core::types::U256, + pub valid_after: u64, + pub valid_until: u64, + pub target_success: bool, + pub target_result: ::ethers::core::types::Bytes, + } + ///Custom Error type `FailedOp` with signature `FailedOp(uint256,string)` and selector `0x220266b6` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "FailedOp", abi = "FailedOp(uint256,string)")] + pub struct FailedOp { + pub op_index: ::ethers::core::types::U256, + pub reason: ::std::string::String, + } + ///Custom Error type `SenderAddressResult` with signature `SenderAddressResult(address)` and selector `0x6ca7b806` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "SenderAddressResult", abi = "SenderAddressResult(address)")] + pub struct SenderAddressResult { + pub sender: ::ethers::core::types::Address, + } + ///Custom Error type `SignatureValidationFailed` with signature `SignatureValidationFailed(address)` and selector `0x86a9f750` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "SignatureValidationFailed", + abi = "SignatureValidationFailed(address)" + )] + pub struct SignatureValidationFailed { + pub aggregator: ::ethers::core::types::Address, + } + ///Custom Error type `ValidationResult` with signature `ValidationResult((uint256,uint256,bool,uint48,uint48,bytes),(uint256,uint256),(uint256,uint256),(uint256,uint256))` and selector `0xe0cff05f` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ValidationResult", + abi = "ValidationResult((uint256,uint256,bool,uint48,uint48,bytes),(uint256,uint256),(uint256,uint256),(uint256,uint256))" + )] + pub struct ValidationResult { + pub return_info: ( + ::ethers::core::types::U256, + ::ethers::core::types::U256, + bool, + u64, + u64, + ::ethers::core::types::Bytes, + ), + pub sender_info: (::ethers::core::types::U256, ::ethers::core::types::U256), + pub factory_info: (::ethers::core::types::U256, ::ethers::core::types::U256), + pub paymaster_info: (::ethers::core::types::U256, ::ethers::core::types::U256), + } + ///Custom Error type `ValidationResultWithAggregation` with signature `ValidationResultWithAggregation((uint256,uint256,bool,uint48,uint48,bytes),(uint256,uint256),(uint256,uint256),(uint256,uint256),(address,(uint256,uint256)))` and selector `0xfaecb4e4` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ValidationResultWithAggregation", + abi = "ValidationResultWithAggregation((uint256,uint256,bool,uint48,uint48,bytes),(uint256,uint256),(uint256,uint256),(uint256,uint256),(address,(uint256,uint256)))" + )] + pub struct ValidationResultWithAggregation { + pub return_info: ( + ::ethers::core::types::U256, + ::ethers::core::types::U256, + bool, + u64, + u64, + ::ethers::core::types::Bytes, + ), + pub sender_info: (::ethers::core::types::U256, ::ethers::core::types::U256), + pub factory_info: (::ethers::core::types::U256, ::ethers::core::types::U256), + pub paymaster_info: (::ethers::core::types::U256, ::ethers::core::types::U256), + pub aggregator_info: ( + ::ethers::core::types::Address, + (::ethers::core::types::U256, ::ethers::core::types::U256), + ), + } + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum IEntryPointErrors { + ExecutionResult(ExecutionResult), + FailedOp(FailedOp), + SenderAddressResult(SenderAddressResult), + SignatureValidationFailed(SignatureValidationFailed), + ValidationResult(ValidationResult), + ValidationResultWithAggregation(ValidationResultWithAggregation), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for IEntryPointErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ExecutionResult(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::FailedOp(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SenderAddressResult(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SignatureValidationFailed(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ValidationResult(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ValidationResultWithAggregation(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IEntryPointErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::ExecutionResult(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::FailedOp(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SenderAddressResult(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::SignatureValidationFailed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ValidationResult(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ValidationResultWithAggregation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for IEntryPointErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => true, + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for IEntryPointErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ExecutionResult(element) => ::core::fmt::Display::fmt(element, f), + Self::FailedOp(element) => ::core::fmt::Display::fmt(element, f), + Self::SenderAddressResult(element) => ::core::fmt::Display::fmt(element, f), + Self::SignatureValidationFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::ValidationResult(element) => ::core::fmt::Display::fmt(element, f), + Self::ValidationResultWithAggregation(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for IEntryPointErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for IEntryPointErrors { + fn from(value: ExecutionResult) -> Self { + Self::ExecutionResult(value) + } + } + impl ::core::convert::From for IEntryPointErrors { + fn from(value: FailedOp) -> Self { + Self::FailedOp(value) + } + } + impl ::core::convert::From for IEntryPointErrors { + fn from(value: SenderAddressResult) -> Self { + Self::SenderAddressResult(value) + } + } + impl ::core::convert::From for IEntryPointErrors { + fn from(value: SignatureValidationFailed) -> Self { + Self::SignatureValidationFailed(value) + } + } + impl ::core::convert::From for IEntryPointErrors { + fn from(value: ValidationResult) -> Self { + Self::ValidationResult(value) + } + } + impl ::core::convert::From for IEntryPointErrors { + fn from(value: ValidationResultWithAggregation) -> Self { + Self::ValidationResultWithAggregation(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "AccountDeployed", + abi = "AccountDeployed(bytes32,address,address,address)" + )] + pub struct AccountDeployedFilter { + #[ethevent(indexed)] + pub user_op_hash: [u8; 32], + #[ethevent(indexed)] + pub sender: ::ethers::core::types::Address, + pub factory: ::ethers::core::types::Address, + pub paymaster: ::ethers::core::types::Address, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "BeforeExecution", abi = "BeforeExecution()")] + pub struct BeforeExecutionFilter; + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Deposited", abi = "Deposited(address,uint256)")] + pub struct DepositedFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub total_deposit: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "SignatureAggregatorChanged", + abi = "SignatureAggregatorChanged(address)" + )] + pub struct SignatureAggregatorChangedFilter { + #[ethevent(indexed)] + pub aggregator: ::ethers::core::types::Address, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "StakeLocked", abi = "StakeLocked(address,uint256,uint256)")] + pub struct StakeLockedFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub total_staked: ::ethers::core::types::U256, + pub unstake_delay_sec: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "StakeUnlocked", abi = "StakeUnlocked(address,uint256)")] + pub struct StakeUnlockedFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub withdraw_time: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "StakeWithdrawn", + abi = "StakeWithdrawn(address,address,uint256)" + )] + pub struct StakeWithdrawnFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub withdraw_address: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "UserOperationEvent", + abi = "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)" + )] + pub struct UserOperationEventFilter { + #[ethevent(indexed)] + pub user_op_hash: [u8; 32], + #[ethevent(indexed)] + pub sender: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub paymaster: ::ethers::core::types::Address, + pub nonce: ::ethers::core::types::U256, + pub success: bool, + pub actual_gas_cost: ::ethers::core::types::U256, + pub actual_gas_used: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "UserOperationRevertReason", + abi = "UserOperationRevertReason(bytes32,address,uint256,bytes)" + )] + pub struct UserOperationRevertReasonFilter { + #[ethevent(indexed)] + pub user_op_hash: [u8; 32], + #[ethevent(indexed)] + pub sender: ::ethers::core::types::Address, + pub nonce: ::ethers::core::types::U256, + pub revert_reason: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Withdrawn", abi = "Withdrawn(address,address,uint256)")] + pub struct WithdrawnFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub withdraw_address: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum IEntryPointEvents { + AccountDeployedFilter(AccountDeployedFilter), + BeforeExecutionFilter(BeforeExecutionFilter), + DepositedFilter(DepositedFilter), + SignatureAggregatorChangedFilter(SignatureAggregatorChangedFilter), + StakeLockedFilter(StakeLockedFilter), + StakeUnlockedFilter(StakeUnlockedFilter), + StakeWithdrawnFilter(StakeWithdrawnFilter), + UserOperationEventFilter(UserOperationEventFilter), + UserOperationRevertReasonFilter(UserOperationRevertReasonFilter), + WithdrawnFilter(WithdrawnFilter), + } + impl ::ethers::contract::EthLogDecode for IEntryPointEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = AccountDeployedFilter::decode_log(log) { + return Ok(IEntryPointEvents::AccountDeployedFilter(decoded)); + } + if let Ok(decoded) = BeforeExecutionFilter::decode_log(log) { + return Ok(IEntryPointEvents::BeforeExecutionFilter(decoded)); + } + if let Ok(decoded) = DepositedFilter::decode_log(log) { + return Ok(IEntryPointEvents::DepositedFilter(decoded)); + } + if let Ok(decoded) = SignatureAggregatorChangedFilter::decode_log(log) { + return Ok(IEntryPointEvents::SignatureAggregatorChangedFilter(decoded)); + } + if let Ok(decoded) = StakeLockedFilter::decode_log(log) { + return Ok(IEntryPointEvents::StakeLockedFilter(decoded)); + } + if let Ok(decoded) = StakeUnlockedFilter::decode_log(log) { + return Ok(IEntryPointEvents::StakeUnlockedFilter(decoded)); + } + if let Ok(decoded) = StakeWithdrawnFilter::decode_log(log) { + return Ok(IEntryPointEvents::StakeWithdrawnFilter(decoded)); + } + if let Ok(decoded) = UserOperationEventFilter::decode_log(log) { + return Ok(IEntryPointEvents::UserOperationEventFilter(decoded)); + } + if let Ok(decoded) = UserOperationRevertReasonFilter::decode_log(log) { + return Ok(IEntryPointEvents::UserOperationRevertReasonFilter(decoded)); + } + if let Ok(decoded) = WithdrawnFilter::decode_log(log) { + return Ok(IEntryPointEvents::WithdrawnFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for IEntryPointEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AccountDeployedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::BeforeExecutionFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::DepositedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::SignatureAggregatorChangedFilter(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::StakeLockedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::StakeUnlockedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::StakeWithdrawnFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::UserOperationEventFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::UserOperationRevertReasonFilter(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::WithdrawnFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: AccountDeployedFilter) -> Self { + Self::AccountDeployedFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: BeforeExecutionFilter) -> Self { + Self::BeforeExecutionFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: DepositedFilter) -> Self { + Self::DepositedFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: SignatureAggregatorChangedFilter) -> Self { + Self::SignatureAggregatorChangedFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: StakeLockedFilter) -> Self { + Self::StakeLockedFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: StakeUnlockedFilter) -> Self { + Self::StakeUnlockedFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: StakeWithdrawnFilter) -> Self { + Self::StakeWithdrawnFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: UserOperationEventFilter) -> Self { + Self::UserOperationEventFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: UserOperationRevertReasonFilter) -> Self { + Self::UserOperationRevertReasonFilter(value) + } + } + impl ::core::convert::From for IEntryPointEvents { + fn from(value: WithdrawnFilter) -> Self { + Self::WithdrawnFilter(value) + } + } + ///Container type for all input parameters for the `addStake` function with signature `addStake(uint32)` and selector `0x0396cb60` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addStake", abi = "addStake(uint32)")] + pub struct AddStakeCall { + pub unstake_delay_sec: u32, + } + ///Container type for all input parameters for the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(address)")] + pub struct BalanceOfCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `depositTo` function with signature `depositTo(address)` and selector `0xb760faf9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "depositTo", abi = "depositTo(address)")] + pub struct DepositToCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `getDepositInfo` function with signature `getDepositInfo(address)` and selector `0x5287ce12` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getDepositInfo", abi = "getDepositInfo(address)")] + pub struct GetDepositInfoCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `getNonce` function with signature `getNonce(address,uint192)` and selector `0x35567e1a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getNonce", abi = "getNonce(address,uint192)")] + pub struct GetNonceCall { + pub sender: ::ethers::core::types::Address, + pub key: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `getSenderAddress` function with signature `getSenderAddress(bytes)` and selector `0x9b249f69` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getSenderAddress", abi = "getSenderAddress(bytes)")] + pub struct GetSenderAddressCall { + pub init_code: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `getUserOpHash` function with signature `getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0xa6193531` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "getUserOpHash", + abi = "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))" + )] + pub struct GetUserOpHashCall { + pub user_op: UserOperation, + } + ///Container type for all input parameters for the `handleAggregatedOps` function with signature `handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)` and selector `0x4b1d7cf5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "handleAggregatedOps", + abi = "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)" + )] + pub struct HandleAggregatedOpsCall { + pub ops_per_aggregator: ::std::vec::Vec, + pub beneficiary: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `handleOps` function with signature `handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)` and selector `0x1fad948c` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "handleOps", + abi = "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)" + )] + pub struct HandleOpsCall { + pub ops: ::std::vec::Vec, + pub beneficiary: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `incrementNonce` function with signature `incrementNonce(uint192)` and selector `0x0bd28e3b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "incrementNonce", abi = "incrementNonce(uint192)")] + pub struct IncrementNonceCall { + pub key: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `simulateHandleOp` function with signature `simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)` and selector `0xd6383f94` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "simulateHandleOp", + abi = "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)" + )] + pub struct SimulateHandleOpCall { + pub op: UserOperation, + pub target: ::ethers::core::types::Address, + pub target_call_data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `simulateValidation` function with signature `simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0xee219423` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "simulateValidation", + abi = "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))" + )] + pub struct SimulateValidationCall { + pub user_op: UserOperation, + } + ///Container type for all input parameters for the `unlockStake` function with signature `unlockStake()` and selector `0xbb9fe6bf` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "unlockStake", abi = "unlockStake()")] + pub struct UnlockStakeCall; + ///Container type for all input parameters for the `withdrawStake` function with signature `withdrawStake(address)` and selector `0xc23a5cea` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "withdrawStake", abi = "withdrawStake(address)")] + pub struct WithdrawStakeCall { + pub withdraw_address: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `withdrawTo` function with signature `withdrawTo(address,uint256)` and selector `0x205c2878` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "withdrawTo", abi = "withdrawTo(address,uint256)")] + pub struct WithdrawToCall { + pub withdraw_address: ::ethers::core::types::Address, + pub withdraw_amount: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum IEntryPointCalls { + AddStake(AddStakeCall), + BalanceOf(BalanceOfCall), + DepositTo(DepositToCall), + GetDepositInfo(GetDepositInfoCall), + GetNonce(GetNonceCall), + GetSenderAddress(GetSenderAddressCall), + GetUserOpHash(GetUserOpHashCall), + HandleAggregatedOps(HandleAggregatedOpsCall), + HandleOps(HandleOpsCall), + IncrementNonce(IncrementNonceCall), + SimulateHandleOp(SimulateHandleOpCall), + SimulateValidation(SimulateValidationCall), + UnlockStake(UnlockStakeCall), + WithdrawStake(WithdrawStakeCall), + WithdrawTo(WithdrawToCall), + } + impl ::ethers::core::abi::AbiDecode for IEntryPointCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) { + return Ok(Self::AddStake(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::BalanceOf(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::DepositTo(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::GetDepositInfo(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetNonce(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::GetSenderAddress(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::GetUserOpHash(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::HandleAggregatedOps(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::HandleOps(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IncrementNonce(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SimulateHandleOp(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SimulateValidation(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::UnlockStake(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::WithdrawStake(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::WithdrawTo(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IEntryPointCalls { + fn encode(self) -> Vec { + match self { + Self::AddStake(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::BalanceOf(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::DepositTo(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetDepositInfo(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetNonce(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetSenderAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetUserOpHash(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::HandleAggregatedOps(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::HandleOps(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IncrementNonce(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SimulateHandleOp(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SimulateValidation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UnlockStake(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::WithdrawStake(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::WithdrawTo(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for IEntryPointCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddStake(element) => ::core::fmt::Display::fmt(element, f), + Self::BalanceOf(element) => ::core::fmt::Display::fmt(element, f), + Self::DepositTo(element) => ::core::fmt::Display::fmt(element, f), + Self::GetDepositInfo(element) => ::core::fmt::Display::fmt(element, f), + Self::GetNonce(element) => ::core::fmt::Display::fmt(element, f), + Self::GetSenderAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::GetUserOpHash(element) => ::core::fmt::Display::fmt(element, f), + Self::HandleAggregatedOps(element) => ::core::fmt::Display::fmt(element, f), + Self::HandleOps(element) => ::core::fmt::Display::fmt(element, f), + Self::IncrementNonce(element) => ::core::fmt::Display::fmt(element, f), + Self::SimulateHandleOp(element) => ::core::fmt::Display::fmt(element, f), + Self::SimulateValidation(element) => ::core::fmt::Display::fmt(element, f), + Self::UnlockStake(element) => ::core::fmt::Display::fmt(element, f), + Self::WithdrawStake(element) => ::core::fmt::Display::fmt(element, f), + Self::WithdrawTo(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: AddStakeCall) -> Self { + Self::AddStake(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: BalanceOfCall) -> Self { + Self::BalanceOf(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: DepositToCall) -> Self { + Self::DepositTo(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: GetDepositInfoCall) -> Self { + Self::GetDepositInfo(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: GetNonceCall) -> Self { + Self::GetNonce(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: GetSenderAddressCall) -> Self { + Self::GetSenderAddress(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: GetUserOpHashCall) -> Self { + Self::GetUserOpHash(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: HandleAggregatedOpsCall) -> Self { + Self::HandleAggregatedOps(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: HandleOpsCall) -> Self { + Self::HandleOps(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: IncrementNonceCall) -> Self { + Self::IncrementNonce(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: SimulateHandleOpCall) -> Self { + Self::SimulateHandleOp(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: SimulateValidationCall) -> Self { + Self::SimulateValidation(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: UnlockStakeCall) -> Self { + Self::UnlockStake(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: WithdrawStakeCall) -> Self { + Self::WithdrawStake(value) + } + } + impl ::core::convert::From for IEntryPointCalls { + fn from(value: WithdrawToCall) -> Self { + Self::WithdrawTo(value) + } + } + ///Container type for all return fields from the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct BalanceOfReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `getDepositInfo` function with signature `getDepositInfo(address)` and selector `0x5287ce12` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetDepositInfoReturn { + pub info: DepositInfo, + } + ///Container type for all return fields from the `getNonce` function with signature `getNonce(address,uint192)` and selector `0x35567e1a` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetNonceReturn { + pub nonce: ::ethers::core::types::U256, + } + ///Container type for all return fields from the `getUserOpHash` function with signature `getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0xa6193531` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetUserOpHashReturn(pub [u8; 32]); + ///`UserOpsPerAggregator((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct UserOpsPerAggregator { + pub user_ops: ::std::vec::Vec, + pub aggregator: ::ethers::core::types::Address, + pub signature: ::ethers::core::types::Bytes, + } +} diff --git a/xmtp_id/src/bindings/i_nonce_manager.rs b/xmtp_id/src/bindings/i_nonce_manager.rs new file mode 100644 index 000000000..03108d458 --- /dev/null +++ b/xmtp_id/src/bindings/i_nonce_manager.rs @@ -0,0 +1,247 @@ +pub use i_nonce_manager::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod i_nonce_manager { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("getNonce"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getNonce"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("key"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(192usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint192"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("nonce"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("incrementNonce"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("incrementNonce"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("key"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(192usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint192"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static INONCEMANAGER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct INonceManager(::ethers::contract::Contract); + impl ::core::clone::Clone for INonceManager { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for INonceManager { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for INonceManager { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for INonceManager { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(INonceManager)) + .field(&self.address()) + .finish() + } + } + impl INonceManager { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + INONCEMANAGER_ABI.clone(), + client, + )) + } + ///Calls the contract's `getNonce` (0x35567e1a) function + pub fn get_nonce( + &self, + sender: ::ethers::core::types::Address, + key: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([53, 86, 126, 26], (sender, key)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `incrementNonce` (0x0bd28e3b) function + pub fn increment_nonce( + &self, + key: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([11, 210, 142, 59], key) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> + for INonceManager + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `getNonce` function with signature `getNonce(address,uint192)` and selector `0x35567e1a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getNonce", abi = "getNonce(address,uint192)")] + pub struct GetNonceCall { + pub sender: ::ethers::core::types::Address, + pub key: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `incrementNonce` function with signature `incrementNonce(uint192)` and selector `0x0bd28e3b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "incrementNonce", abi = "incrementNonce(uint192)")] + pub struct IncrementNonceCall { + pub key: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum INonceManagerCalls { + GetNonce(GetNonceCall), + IncrementNonce(IncrementNonceCall), + } + impl ::ethers::core::abi::AbiDecode for INonceManagerCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetNonce(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IncrementNonce(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for INonceManagerCalls { + fn encode(self) -> Vec { + match self { + Self::GetNonce(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IncrementNonce(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for INonceManagerCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::GetNonce(element) => ::core::fmt::Display::fmt(element, f), + Self::IncrementNonce(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for INonceManagerCalls { + fn from(value: GetNonceCall) -> Self { + Self::GetNonce(value) + } + } + impl ::core::convert::From for INonceManagerCalls { + fn from(value: IncrementNonceCall) -> Self { + Self::IncrementNonce(value) + } + } + ///Container type for all return fields from the `getNonce` function with signature `getNonce(address,uint192)` and selector `0x35567e1a` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetNonceReturn { + pub nonce: ::ethers::core::types::U256, + } +} diff --git a/xmtp_id/src/bindings/i_stake_manager.rs b/xmtp_id/src/bindings/i_stake_manager.rs new file mode 100644 index 000000000..c9552c1eb --- /dev/null +++ b/xmtp_id/src/bindings/i_stake_manager.rs @@ -0,0 +1,855 @@ +pub use i_stake_manager::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod i_stake_manager { + pub use super::super::shared_types::*; + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("addStake"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addStake"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_unstakeDelaySec"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(32usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint32"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("balanceOf"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("balanceOf"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("depositTo"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("depositTo"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getDepositInfo"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getDepositInfo"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("info"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(112usize), + ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::Uint(112usize), + ::ethers::core::abi::ethabi::ParamType::Uint(32usize), + ::ethers::core::abi::ethabi::ParamType::Uint(48usize), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IStakeManager.DepositInfo", + ), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("unlockStake"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("unlockStake"), + inputs: ::std::vec![], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("withdrawStake"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("withdrawStake"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address payable"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("withdrawTo"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("withdrawTo"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address payable"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("withdrawAmount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("Deposited"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Deposited"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("totalDeposit"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("StakeLocked"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("StakeLocked"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("totalStaked"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("unstakeDelaySec"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("StakeUnlocked"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("StakeUnlocked"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("withdrawTime"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("StakeWithdrawn"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("StakeWithdrawn"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Withdrawn"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Withdrawn"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("withdrawAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static ISTAKEMANAGER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct IStakeManager(::ethers::contract::Contract); + impl ::core::clone::Clone for IStakeManager { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for IStakeManager { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for IStakeManager { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for IStakeManager { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IStakeManager)) + .field(&self.address()) + .finish() + } + } + impl IStakeManager { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + ISTAKEMANAGER_ABI.clone(), + client, + )) + } + ///Calls the contract's `addStake` (0x0396cb60) function + pub fn add_stake( + &self, + unstake_delay_sec: u32, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([3, 150, 203, 96], unstake_delay_sec) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `balanceOf` (0x70a08231) function + pub fn balance_of( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([112, 160, 130, 49], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `depositTo` (0xb760faf9) function + pub fn deposit_to( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([183, 96, 250, 249], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getDepositInfo` (0x5287ce12) function + pub fn get_deposit_info( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([82, 135, 206, 18], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `unlockStake` (0xbb9fe6bf) function + pub fn unlock_stake(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([187, 159, 230, 191], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `withdrawStake` (0xc23a5cea) function + pub fn withdraw_stake( + &self, + withdraw_address: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([194, 58, 92, 234], withdraw_address) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `withdrawTo` (0x205c2878) function + pub fn withdraw_to( + &self, + withdraw_address: ::ethers::core::types::Address, + withdraw_amount: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 92, 40, 120], (withdraw_address, withdraw_amount)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `Deposited` event + pub fn deposited_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, DepositedFilter> { + self.0.event() + } + ///Gets the contract's `StakeLocked` event + pub fn stake_locked_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StakeLockedFilter> + { + self.0.event() + } + ///Gets the contract's `StakeUnlocked` event + pub fn stake_unlocked_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StakeUnlockedFilter> + { + self.0.event() + } + ///Gets the contract's `StakeWithdrawn` event + pub fn stake_withdrawn_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StakeWithdrawnFilter> + { + self.0.event() + } + ///Gets the contract's `Withdrawn` event + pub fn withdrawn_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, WithdrawnFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, IStakeManagerEvents> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> + for IStakeManager + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Deposited", abi = "Deposited(address,uint256)")] + pub struct DepositedFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub total_deposit: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "StakeLocked", abi = "StakeLocked(address,uint256,uint256)")] + pub struct StakeLockedFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub total_staked: ::ethers::core::types::U256, + pub unstake_delay_sec: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "StakeUnlocked", abi = "StakeUnlocked(address,uint256)")] + pub struct StakeUnlockedFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub withdraw_time: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "StakeWithdrawn", + abi = "StakeWithdrawn(address,address,uint256)" + )] + pub struct StakeWithdrawnFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub withdraw_address: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Withdrawn", abi = "Withdrawn(address,address,uint256)")] + pub struct WithdrawnFilter { + #[ethevent(indexed)] + pub account: ::ethers::core::types::Address, + pub withdraw_address: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum IStakeManagerEvents { + DepositedFilter(DepositedFilter), + StakeLockedFilter(StakeLockedFilter), + StakeUnlockedFilter(StakeUnlockedFilter), + StakeWithdrawnFilter(StakeWithdrawnFilter), + WithdrawnFilter(WithdrawnFilter), + } + impl ::ethers::contract::EthLogDecode for IStakeManagerEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = DepositedFilter::decode_log(log) { + return Ok(IStakeManagerEvents::DepositedFilter(decoded)); + } + if let Ok(decoded) = StakeLockedFilter::decode_log(log) { + return Ok(IStakeManagerEvents::StakeLockedFilter(decoded)); + } + if let Ok(decoded) = StakeUnlockedFilter::decode_log(log) { + return Ok(IStakeManagerEvents::StakeUnlockedFilter(decoded)); + } + if let Ok(decoded) = StakeWithdrawnFilter::decode_log(log) { + return Ok(IStakeManagerEvents::StakeWithdrawnFilter(decoded)); + } + if let Ok(decoded) = WithdrawnFilter::decode_log(log) { + return Ok(IStakeManagerEvents::WithdrawnFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for IStakeManagerEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::DepositedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::StakeLockedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::StakeUnlockedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::StakeWithdrawnFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::WithdrawnFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IStakeManagerEvents { + fn from(value: DepositedFilter) -> Self { + Self::DepositedFilter(value) + } + } + impl ::core::convert::From for IStakeManagerEvents { + fn from(value: StakeLockedFilter) -> Self { + Self::StakeLockedFilter(value) + } + } + impl ::core::convert::From for IStakeManagerEvents { + fn from(value: StakeUnlockedFilter) -> Self { + Self::StakeUnlockedFilter(value) + } + } + impl ::core::convert::From for IStakeManagerEvents { + fn from(value: StakeWithdrawnFilter) -> Self { + Self::StakeWithdrawnFilter(value) + } + } + impl ::core::convert::From for IStakeManagerEvents { + fn from(value: WithdrawnFilter) -> Self { + Self::WithdrawnFilter(value) + } + } + ///Container type for all input parameters for the `addStake` function with signature `addStake(uint32)` and selector `0x0396cb60` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addStake", abi = "addStake(uint32)")] + pub struct AddStakeCall { + pub unstake_delay_sec: u32, + } + ///Container type for all input parameters for the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(address)")] + pub struct BalanceOfCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `depositTo` function with signature `depositTo(address)` and selector `0xb760faf9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "depositTo", abi = "depositTo(address)")] + pub struct DepositToCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `getDepositInfo` function with signature `getDepositInfo(address)` and selector `0x5287ce12` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getDepositInfo", abi = "getDepositInfo(address)")] + pub struct GetDepositInfoCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `unlockStake` function with signature `unlockStake()` and selector `0xbb9fe6bf` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "unlockStake", abi = "unlockStake()")] + pub struct UnlockStakeCall; + ///Container type for all input parameters for the `withdrawStake` function with signature `withdrawStake(address)` and selector `0xc23a5cea` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "withdrawStake", abi = "withdrawStake(address)")] + pub struct WithdrawStakeCall { + pub withdraw_address: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `withdrawTo` function with signature `withdrawTo(address,uint256)` and selector `0x205c2878` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "withdrawTo", abi = "withdrawTo(address,uint256)")] + pub struct WithdrawToCall { + pub withdraw_address: ::ethers::core::types::Address, + pub withdraw_amount: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum IStakeManagerCalls { + AddStake(AddStakeCall), + BalanceOf(BalanceOfCall), + DepositTo(DepositToCall), + GetDepositInfo(GetDepositInfoCall), + UnlockStake(UnlockStakeCall), + WithdrawStake(WithdrawStakeCall), + WithdrawTo(WithdrawToCall), + } + impl ::ethers::core::abi::AbiDecode for IStakeManagerCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) { + return Ok(Self::AddStake(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::BalanceOf(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::DepositTo(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::GetDepositInfo(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::UnlockStake(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::WithdrawStake(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::WithdrawTo(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IStakeManagerCalls { + fn encode(self) -> Vec { + match self { + Self::AddStake(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::BalanceOf(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::DepositTo(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetDepositInfo(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UnlockStake(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::WithdrawStake(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::WithdrawTo(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for IStakeManagerCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddStake(element) => ::core::fmt::Display::fmt(element, f), + Self::BalanceOf(element) => ::core::fmt::Display::fmt(element, f), + Self::DepositTo(element) => ::core::fmt::Display::fmt(element, f), + Self::GetDepositInfo(element) => ::core::fmt::Display::fmt(element, f), + Self::UnlockStake(element) => ::core::fmt::Display::fmt(element, f), + Self::WithdrawStake(element) => ::core::fmt::Display::fmt(element, f), + Self::WithdrawTo(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IStakeManagerCalls { + fn from(value: AddStakeCall) -> Self { + Self::AddStake(value) + } + } + impl ::core::convert::From for IStakeManagerCalls { + fn from(value: BalanceOfCall) -> Self { + Self::BalanceOf(value) + } + } + impl ::core::convert::From for IStakeManagerCalls { + fn from(value: DepositToCall) -> Self { + Self::DepositTo(value) + } + } + impl ::core::convert::From for IStakeManagerCalls { + fn from(value: GetDepositInfoCall) -> Self { + Self::GetDepositInfo(value) + } + } + impl ::core::convert::From for IStakeManagerCalls { + fn from(value: UnlockStakeCall) -> Self { + Self::UnlockStake(value) + } + } + impl ::core::convert::From for IStakeManagerCalls { + fn from(value: WithdrawStakeCall) -> Self { + Self::WithdrawStake(value) + } + } + impl ::core::convert::From for IStakeManagerCalls { + fn from(value: WithdrawToCall) -> Self { + Self::WithdrawTo(value) + } + } + ///Container type for all return fields from the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct BalanceOfReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `getDepositInfo` function with signature `getDepositInfo(address)` and selector `0x5287ce12` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetDepositInfoReturn { + pub info: DepositInfo, + } +} diff --git a/xmtp_id/src/bindings/ierc721_token_receiver.rs b/xmtp_id/src/bindings/ierc721_token_receiver.rs new file mode 100644 index 000000000..5be56a4b6 --- /dev/null +++ b/xmtp_id/src/bindings/ierc721_token_receiver.rs @@ -0,0 +1,165 @@ +pub use ierc721_token_receiver::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod ierc721_token_receiver { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([( + ::std::borrow::ToOwned::to_owned("onERC721Received"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("onERC721Received"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + )]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static IERC721TOKENRECEIVER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct IERC721TokenReceiver(::ethers::contract::Contract); + impl ::core::clone::Clone for IERC721TokenReceiver { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for IERC721TokenReceiver { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for IERC721TokenReceiver { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for IERC721TokenReceiver { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IERC721TokenReceiver)) + .field(&self.address()) + .finish() + } + } + impl IERC721TokenReceiver { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + IERC721TOKENRECEIVER_ABI.clone(), + client, + )) + } + ///Calls the contract's `onERC721Received` (0x150b7a02) function + pub fn on_erc721_received( + &self, + p0: ::ethers::core::types::Address, + p1: ::ethers::core::types::Address, + p2: ::ethers::core::types::U256, + p3: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([21, 11, 122, 2], (p0, p1, p2, p3)) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> + for IERC721TokenReceiver + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `onERC721Received` function with signature `onERC721Received(address,address,uint256,bytes)` and selector `0x150b7a02` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "onERC721Received", + abi = "onERC721Received(address,address,uint256,bytes)" + )] + pub struct OnERC721ReceivedCall( + pub ::ethers::core::types::Address, + pub ::ethers::core::types::Address, + pub ::ethers::core::types::U256, + pub ::ethers::core::types::Bytes, + ); + ///Container type for all return fields from the `onERC721Received` function with signature `onERC721Received(address,address,uint256,bytes)` and selector `0x150b7a02` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct OnERC721ReceivedReturn(pub [u8; 4]); +} diff --git a/xmtp_id/src/bindings/lib_clone.rs b/xmtp_id/src/bindings/lib_clone.rs new file mode 100644 index 000000000..df0f5892b --- /dev/null +++ b/xmtp_id/src/bindings/lib_clone.rs @@ -0,0 +1,294 @@ +pub use lib_clone::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod lib_clone { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("DeploymentFailed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("DeploymentFailed"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ETHTransferFailed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ETHTransferFailed"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("SaltDoesNotStartWith"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("SaltDoesNotStartWith",), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static LIBCLONE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 +\xDE\xA0\xC2\x9C\x15\xB7e\x0E\xEC\xDA\xEA1=\xE6\x98\x87\xD5\x10\xF2\xB5$\x03Q\xEB\xF7\t\xB7B0\xB5ldsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static LIBCLONE_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 +\xDE\xA0\xC2\x9C\x15\xB7e\x0E\xEC\xDA\xEA1=\xE6\x98\x87\xD5\x10\xF2\xB5$\x03Q\xEB\xF7\t\xB7B0\xB5ldsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static LIBCLONE_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct LibClone(::ethers::contract::Contract); + impl ::core::clone::Clone for LibClone { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for LibClone { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for LibClone { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for LibClone { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(LibClone)) + .field(&self.address()) + .finish() + } + } + impl LibClone { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + LIBCLONE_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + LIBCLONE_ABI.clone(), + LIBCLONE_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> for LibClone { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `DeploymentFailed` with signature `DeploymentFailed()` and selector `0x30116425` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "DeploymentFailed", abi = "DeploymentFailed()")] + pub struct DeploymentFailed; + ///Custom Error type `ETHTransferFailed` with signature `ETHTransferFailed()` and selector `0xb12d13eb` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ETHTransferFailed", abi = "ETHTransferFailed()")] + pub struct ETHTransferFailed; + ///Custom Error type `SaltDoesNotStartWith` with signature `SaltDoesNotStartWith()` and selector `0x0c4549ef` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "SaltDoesNotStartWith", abi = "SaltDoesNotStartWith()")] + pub struct SaltDoesNotStartWith; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum LibCloneErrors { + DeploymentFailed(DeploymentFailed), + ETHTransferFailed(ETHTransferFailed), + SaltDoesNotStartWith(SaltDoesNotStartWith), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for LibCloneErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::DeploymentFailed(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ETHTransferFailed(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SaltDoesNotStartWith(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for LibCloneErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::DeploymentFailed(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ETHTransferFailed(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SaltDoesNotStartWith(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for LibCloneErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector == ::selector() => { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for LibCloneErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::DeploymentFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::ETHTransferFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::SaltDoesNotStartWith(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for LibCloneErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for LibCloneErrors { + fn from(value: DeploymentFailed) -> Self { + Self::DeploymentFailed(value) + } + } + impl ::core::convert::From for LibCloneErrors { + fn from(value: ETHTransferFailed) -> Self { + Self::ETHTransferFailed(value) + } + } + impl ::core::convert::From for LibCloneErrors { + fn from(value: SaltDoesNotStartWith) -> Self { + Self::SaltDoesNotStartWith(value) + } + } +} diff --git a/xmtp_id/src/bindings/lib_string.rs b/xmtp_id/src/bindings/lib_string.rs new file mode 100644 index 000000000..75c86f646 --- /dev/null +++ b/xmtp_id/src/bindings/lib_string.rs @@ -0,0 +1,260 @@ +pub use lib_string::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod lib_string { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("HexLengthInsufficient"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("HexLengthInsufficient",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("TooBigForSmallString"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("TooBigForSmallString",), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static LIBSTRING_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 T\xF2H\x14\x86f*0e6]?\x16&\xBE{o\x9F\x86a\x0E\x1C$_\x1Cx1a\xE2\xC3b\xE7dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static LIBSTRING_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 T\xF2H\x14\x86f*0e6]?\x16&\xBE{o\x9F\x86a\x0E\x1C$_\x1Cx1a\xE2\xC3b\xE7dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static LIBSTRING_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct LibString(::ethers::contract::Contract); + impl ::core::clone::Clone for LibString { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for LibString { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for LibString { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for LibString { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(LibString)) + .field(&self.address()) + .finish() + } + } + impl LibString { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + LIBSTRING_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + LIBSTRING_ABI.clone(), + LIBSTRING_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> for LibString { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `HexLengthInsufficient` with signature `HexLengthInsufficient()` and selector `0x2194895a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "HexLengthInsufficient", abi = "HexLengthInsufficient()")] + pub struct HexLengthInsufficient; + ///Custom Error type `TooBigForSmallString` with signature `TooBigForSmallString()` and selector `0xec92f9a3` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "TooBigForSmallString", abi = "TooBigForSmallString()")] + pub struct TooBigForSmallString; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum LibStringErrors { + HexLengthInsufficient(HexLengthInsufficient), + TooBigForSmallString(TooBigForSmallString), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for LibStringErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::HexLengthInsufficient(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::TooBigForSmallString(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for LibStringErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::HexLengthInsufficient(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::TooBigForSmallString(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for LibStringErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for LibStringErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::HexLengthInsufficient(element) => ::core::fmt::Display::fmt(element, f), + Self::TooBigForSmallString(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for LibStringErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for LibStringErrors { + fn from(value: HexLengthInsufficient) -> Self { + Self::HexLengthInsufficient(value) + } + } + impl ::core::convert::From for LibStringErrors { + fn from(value: TooBigForSmallString) -> Self { + Self::TooBigForSmallString(value) + } + } +} diff --git a/xmtp_id/src/bindings/mock_coinbase_smart_wallet.rs b/xmtp_id/src/bindings/mock_coinbase_smart_wallet.rs new file mode 100644 index 000000000..e93d52b6c --- /dev/null +++ b/xmtp_id/src/bindings/mock_coinbase_smart_wallet.rs @@ -0,0 +1,2710 @@ +pub use mock_coinbase_smart_wallet::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod mock_coinbase_smart_wallet { + pub use super::super::shared_types::*; + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::Some(::ethers::core::abi::ethabi::Constructor { + inputs: ::std::vec![], + }), + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("REPLAYABLE_NONCE_KEY"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("REPLAYABLE_NONCE_KEY",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("canSkipChainIdValidation"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("canSkipChainIdValidation",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("functionSelector"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("domainSeparator"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("domainSeparator"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("eip712Domain"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("eip712Domain"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("fields"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(1usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes1"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("name"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("chainId"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("verifyingContract"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("salt"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("extensions"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256[]"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("entryPoint"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("entryPoint"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("execute"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("execute"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("target"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("value"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("executeBatch"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("executeBatch"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("calls"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct CoinbaseSmartWallet.Call[]", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("executeBatch"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("filler"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("calls"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint( + 256usize + ), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct CoinbaseSmartWallet.Call[]", + ), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("executeWithoutChainIdValidation"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("executeWithoutChainIdValidation",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getUserOpHashWithoutChainId"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getUserOpHashWithoutChainId",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("implementation"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("implementation"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("$"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("initialize"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("initialize"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owners"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes[]"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isValidSignature"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isValidSignature"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("signature"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("result"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("proxiableUUID"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("proxiableUUID"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("replaySafeHash"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("replaySafeHash"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("hash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("newImplementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("validateUserOp"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("validateUserOp"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("missingAccountFunds",), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("validationData"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AddOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("AddOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("RemoveOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("RemoveOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Upgraded"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Upgraded"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("implementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + },], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Initialized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("Initialized"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidNonceKey"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidNonceKey"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("key"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("SelectorNotAllowed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("SelectorNotAllowed"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("selector"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Unauthorized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("Unauthorized"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + inputs: ::std::vec![], + },], + ), + ]), + receive: true, + fallback: true, + } + } + ///The parsed JSON ABI of the contract. + pub static MOCKCOINBASESMARTWALLET_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\xA0`@R0`\x80R4\x80\x15b\0\0\x15W`\0\x80\xFD[P`@\x80Q`\x01\x80\x82R\x81\x83\x01\x90\x92R`\0\x91\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81b\0\0-W\x90PP`@\x80Q`\0` \x82\x01R\x91\x92P\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x81`\0\x81Q\x81\x10b\0\0wWb\0\0wb\0\x03\x8DV[` \x90\x81\x02\x91\x90\x91\x01\x01Rb\0\0\x8D\x81b\0\0\xA7V[P`\0`\0\x80Q` b\08\xEE\x839\x81Q\x91RUb\0\x05\xC3V[`\0[\x81Q\x81\x10\x15b\0\x029W\x81\x81\x81Q\x81\x10b\0\0\xC9Wb\0\0\xC9b\0\x03\x8DV[` \x02` \x01\x01QQ` \x14\x15\x80\x15b\0\x01\x01WP\x81\x81\x81Q\x81\x10b\0\0\xF3Wb\0\0\xF3b\0\x03\x8DV[` \x02` \x01\x01QQ`@\x14\x15[\x15b\0\x01IW\x81\x81\x81Q\x81\x10b\0\x01\x1CWb\0\x01\x1Cb\0\x03\x8DV[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01b\0\x01@\x91\x90b\0\x03\xC9V[`@Q\x80\x91\x03\x90\xFD[\x81\x81\x81Q\x81\x10b\0\x01^Wb\0\x01^b\0\x03\x8DV[` \x02` \x01\x01QQ` \x14\x80\x15b\0\x01\xA6WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10b\0\x01\x91Wb\0\x01\x91b\0\x03\x8DV[` \x02` \x01\x01Qb\0\x01\xA4\x90b\0\x03\xFEV[\x11[\x15b\0\x01\xE5W\x81\x81\x81Q\x81\x10b\0\x01\xC1Wb\0\x01\xC1b\0\x03\x8DV[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01b\0\x01@\x91\x90b\0\x03\xC9V[b\0\x020\x82\x82\x81Q\x81\x10b\0\x01\xFEWb\0\x01\xFEb\0\x03\x8DV[` \x02` \x01\x01Qb\0\x02\x16b\0\x02=` \x1B` \x1CV[\x80T\x90`\0b\0\x02&\x83b\0\x04&V[\x90\x91UPb\0\x02PV[`\x01\x01b\0\0\xAAV[PPV[`\0\x80Q` b\08\xEE\x839\x81Q\x91R\x90V[b\0\x02[\x82b\0\x039V[\x15b\0\x02~W\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01b\0\x01@\x91\x90b\0\x03\xC9V[`\x01`\0\x80Q` b\08\xEE\x839\x81Q\x91R`\x02\x01\x83`@Qb\0\x02\xA3\x91\x90b\0\x04NV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81b\0\x02\xDB`\0\x80Q` b\08\xEE\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90b\0\x02\xFA\x90\x82b\0\x04\xF7V[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qb\0\x03-\x91\x90b\0\x03\xC9V[`@Q\x80\x91\x03\x90\xA2PPV[`\0`\0\x80Q` b\08\xEE\x839\x81Q\x91R`\x02\x01\x82`@Qb\0\x03^\x91\x90b\0\x04NV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0[\x83\x81\x10\x15b\0\x03\xC0W\x81\x81\x01Q\x83\x82\x01R` \x01b\0\x03\xA6V[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Rb\0\x03\xEA\x81`@\x85\x01` \x87\x01b\0\x03\xA3V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15b\0\x04 W`\0\x19\x81` \x03`\x03\x1B\x1B\x82\x16\x91P[P\x91\x90PV[`\0`\x01\x82\x01b\0\x04GWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[P`\x01\x01\x90V[`\0\x82Qb\0\x04b\x81\x84` \x87\x01b\0\x03\xA3V[\x91\x90\x91\x01\x92\x91PPV[`\x01\x81\x81\x1C\x90\x82\x16\x80b\0\x04\x81W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03b\0\x04 WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[`\x1F\x82\x11\x15b\0\x04\xF2W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15b\0\x04\xCDWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15b\0\x04\xEEW\x82\x81U`\x01\x01b\0\x04\xD9V[PPP[PPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15b\0\x05\x13Wb\0\x05\x13b\0\x03wV[b\0\x05+\x81b\0\x05$\x84Tb\0\x04lV[\x84b\0\x04\xA2V[` \x80`\x1F\x83\x11`\x01\x81\x14b\0\x05cW`\0\x84\x15b\0\x05JWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ub\0\x04\xEEV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15b\0\x05\x94W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01b\0\x05sV[P\x85\x82\x10\x15b\0\x05\xB3W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[`\x80Qa3\x08b\0\x05\xE6`\09`\0\x81\x81a\x08L\x01Ra\t\x83\x01Ra3\x08`\0\xF3\xFE`\x80`@R`\x046\x10a\x01jW`\x005`\xE0\x1C\x80co-\xE7\x0E\x11a\0\xD1W\x80c\xA2\xE1\xA8\xD8\x11a\0\x8AW\x80c\xBFk\xA1\xFC\x11a\0dW\x80c\xBFk\xA1\xFC\x14a\x04\\W\x80c\xCE\x15\x06\xBE\x14a\x04oW\x80c\xD9H\xFD.\x14a\x04\x8FW\x80c\xF6\x98\xDA%\x14a\x04\xB1Wa\x01qV[\x80c\xA2\xE1\xA8\xD8\x14a\x04\x02W\x80c\xB0\xD6\x91\xFE\x14a\x04\"W\x80c\xB6\x1D'\xF6\x14a\x04IWa\x01qV[\x80co-\xE7\x0E\x14a\x03DW\x80cr\xDE;Z\x14a\x03WW\x80c\x84\xB0\x19n\x14a\x03wW\x80c\x88\xCEL|\x14a\x03\x9FW\x80c\x8E\xA6\x90)\x14a\x03\xB5W\x80c\x9F\x9B\xCB4\x14a\x03\xE2Wa\x01qV[\x80c:\x87\x1C\xDD\x11a\x01#W\x80c:\x87\x1C\xDD\x14a\x02\x80W\x80cO\x1E\xF2\x86\x14a\x02\xA1W\x80cOn\x7F\"\x14a\x02\xB4W\x80cR\xD1\x90-\x14a\x02\xD4W\x80cW\x7F<\xBF\x14a\x02\xE9W\x80c\\`\xDA\x1B\x14a\x02\xFCWa\x01qV[\x80c\x06j\x1E\xB7\x14a\x01\x9FW\x80c\x0F\x0F?$\x14a\x01\xD4W\x80c\x16&\xBA~\x14a\x01\xF4W\x80c\x1C\xA59?\x14a\x02-W\x80c)V^;\x14a\x02MW\x80c4\xFC\xD5\xBE\x14a\x02mWa\x01qV[6a\x01qW\0[`\x005`\xE0\x1Cc\xBC\x19|\x81\x81\x14c\xF2:na\x82\x14\x17c\x15\x0Bz\x02\x82\x14\x17\x15a\x01\x9DW\x80` R` `<\xF3[\0[4\x80\x15a\x01\xABW`\0\x80\xFD[Pa\x01\xBFa\x01\xBA6`\x04a'\xCFV[a\x04\xC6V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xE0W`\0\x80\xFD[Pa\x01\x9Da\x01\xEF6`\x04a(\rV[a\x055V[4\x80\x15a\x02\0W`\0\x80\xFD[Pa\x02\x14a\x02\x0F6`\x04a(pV[a\x05mV[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01\xCBV[4\x80\x15a\x029W`\0\x80\xFD[Pa\x01\xBFa\x02H6`\x04a)\xA6V[a\x05\xA7V[4\x80\x15a\x02YW`\0\x80\xFD[Pa\x01\x9Da\x02h6`\x04a'\xCFV[a\x05\xE2V[a\x01\x9Da\x02{6`\x04a*\x1EV[a\x06\x0BV[a\x02\x93a\x02\x8E6`\x04a*xV[a\x07\x0FV[`@Q\x90\x81R` \x01a\x01\xCBV[a\x01\x9Da\x02\xAF6`\x04a*\xC5V[a\x08JV[4\x80\x15a\x02\xC0W`\0\x80\xFD[Pa\x02\x93a\x02\xCF6`\x04a*\xFEV[a\t.V[4\x80\x15a\x02\xE0W`\0\x80\xFD[Pa\x02\x93a\t\x7FV[a\x01\x9Da\x02\xF76`\x04a+2V[a\t\xDFV[4\x80\x15a\x03\x08W`\0\x80\xFD[P\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xCBV[a\x01\x9Da\x03R6`\x04a*\x1EV[a\n\x17V[4\x80\x15a\x03cW`\0\x80\xFD[Pa\x01\x9Da\x03r6`\x04a+pV[a\nWV[4\x80\x15a\x03\x83W`\0\x80\xFD[Pa\x03\x8Ca\x0BDV[`@Qa\x01\xCB\x97\x96\x95\x94\x93\x92\x91\x90a+\xD9V[4\x80\x15a\x03\xABW`\0\x80\xFD[Pa\x02\x93a!\x05\x81V[4\x80\x15a\x03\xC1W`\0\x80\xFD[Pa\x03\xD5a\x03\xD06`\x04a+pV[a\x0BkV[`@Qa\x01\xCB\x91\x90a,rV[4\x80\x15a\x03\xEEW`\0\x80\xFD[Pa\x01\xBFa\x03\xFD6`\x04a,\x85V[a\x0C,V[4\x80\x15a\x04\x0EW`\0\x80\xFD[Pa\x01\xBFa\x04\x1D6`\x04a(\rV[a\x0C\xA8V[4\x80\x15a\x04.W`\0\x80\xFD[Ps_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89a\x03,V[a\x01\x9Da\x04W6`\x04a,\xAFV[a\x0C\xEEV[a\x01\x9Da\x04j6`\x04a-\x08V[a\rRV[4\x80\x15a\x04{W`\0\x80\xFD[Pa\x02\x93a\x04\x8A6`\x04a+pV[a\x0E\x13V[4\x80\x15a\x04\x9BW`\0\x80\xFD[P`\0\x80Q` a2\xB3\x839\x81Q\x91RTa\x02\x93V[4\x80\x15a\x04\xBDW`\0\x80\xFD[Pa\x02\x93a\x0E\x1EV[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x05\x19\x91a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P[\x92\x91PPV[a\x05=a\x0E\xA4V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x05j\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0E\xD6V[PV[`\0a\x05\x82a\x05{\x85a\x0E\x13V[\x84\x84a\x0F\x01V[\x15a\x05\x95WPc\x0B\x13]?`\xE1\x1Ba\x05\xA0V[P`\x01`\x01`\xE0\x1B\x03\x19[\x93\x92PPPV[`\0`\0\x80Q` a2\xB3\x839\x81Q\x91R`\x02\x01\x82`@Qa\x05\xC9\x91\x90a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x05\xEAa\x0E\xA4V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x06\x07\x90``\x01a\x05VV[PPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x06.Wa\x06.a\x0E\xA4V[`\0[\x81\x81\x10\x15a\x07\nWa\x07\x02\x83\x83\x83\x81\x81\x10a\x06NWa\x06Na-YV[\x90P` \x02\x81\x01\x90a\x06`\x91\x90a-oV[a\x06n\x90` \x81\x01\x90a(\rV[\x84\x84\x84\x81\x81\x10a\x06\x80Wa\x06\x80a-YV[\x90P` \x02\x81\x01\x90a\x06\x92\x91\x90a-oV[` \x015\x85\x85\x85\x81\x81\x10a\x06\xA8Wa\x06\xA8a-YV[\x90P` \x02\x81\x01\x90a\x06\xBA\x91\x90a-oV[a\x06\xC8\x90`@\x81\x01\x90a-\x85V[\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\x10\x16\x92PPPV[`\x01\x01a\x061V[PPPV[`\x003s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x07DW`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81` \x85\x015`@\x1C`\x04a\x07\\``\x88\x01\x88a-\x85V[\x90P\x10\x15\x80\x15a\x07\xA0WPa\x07t``\x87\x01\x87a-\x85V[a\x07\x83\x91`\x04\x91`\0\x91a-\xCBV[a\x07\x8C\x91a-\xF5V[`\x01`\x01`\xE0\x1B\x03\x19\x16c\xBFk\xA1\xFC`\xE0\x1B\x14[\x15a\x07\xDFWa\x07\xAE\x86a\t.V[\x94Pa!\x05\x81\x14a\x07\xDAW`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x08\x04V[a!\x05\x81\x03a\x08\x04W`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x07\xD1V[a\x08\x1B\x85a\x08\x16a\x01@\x89\x01\x89a-\x85V[a\x0F\x01V[\x15a\x08*W`\0\x92PPa\x080V[`\x01\x92PP[\x80\x15a\x08BW`\08`\08\x843Z\xF1P[P\x93\x92PPPV[\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\x000\x81\x03a\x08\x80Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[a\x08\x89\x84a\x10\x86V[\x83``\x1B``\x1C\x93PcR\xD1\x90-`\x01R\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80` `\x01`\x04`\x1D\x89Z\xFAQ\x14a\x08\xDBWcU)\x9BI`\x01R`\x04`\x1D\xFD[\x84\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`\08\xA2\x84\x90U\x81\x15a\t(W`@Q\x82\x84\x827`\08\x84\x83\x88Z\xF4a\t&W=`\0\x82>=\x81\xFD[P[PPPPV[`\0a\t9\x82a\x10\x8EV[`@\x80Q` \x81\x01\x92\x90\x92Rs_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x90\x82\x01R``\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\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\x000\x81\x14a\t\xB7Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x91P[P\x90V[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\n\x02Wa\n\x02a\x0E\xA4V[`@\x83\x06`@Q\x01`@Ra\x07\n\x82\x82a\x06\x0BV[`\0\x80Q` a2\xB3\x839\x81Q\x91RT\x15a\nEW`@Qc\x02\xEDT=`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x06\x07a\nR\x82\x84a.%V[a\x10\xA7V[a\n_a\x0E\xA4V[`\0a\nj\x82a\x0BkV[\x90P\x80Q`\0\x03a\n\x91W`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x07\xD1V[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\n\xC1\x90\x83\x90a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\n\xED`\0\x80Q` a2\xB3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\x0B\x08\x91a'\x85V[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\x0B8\x91\x90a,rV[`@Q\x80\x91\x03\x90\xA2PPV[`\x0F`\xF8\x1B``\x80`\0\x80\x80\x83a\x0BYa\x11\xF9V[\x97\x98\x90\x97\x96PF\x95P0\x94P\x91\x92P\x90V[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x0B\xA7\x90a.\xAAV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x0B\xD3\x90a.\xAAV[\x80\x15a\x0C W\x80`\x1F\x10a\x0B\xF5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x0C V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x0C\x03W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c)V^;`\xE0\x1B\x14\x80a\x0C]WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\x03\xC3\xCF\xC9`\xE2\x1B\x14[\x80a\x0CxWP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c9o\x1D\xAD`\xE1\x1B\x14[\x80a\x0C\x93WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c'\x8FyC`\xE1\x1B\x14[\x15a\x0C\xA0WP`\x01\x91\x90PV[P`\0\x91\x90PV[`\0`\0\x80Q` a2\xB3\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x05\xC9\x91a-=V[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\r\x11Wa\r\x11a\x0E\xA4V[a\t(\x84\x84\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\x91RPa\x10\x16\x92PPPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\r\x85W`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\r\x94`\x04\x82\x84\x86a-\xCBV[a\r\x9D\x91a-\xF5V[\x90Pa\r\xA8\x81a\x0C,V[a\r\xD1W`@Qc\x1D\x83p\xA3`\xE1\x1B\x81R`\x01`\x01`\xE0\x1B\x03\x19\x82\x16`\x04\x82\x01R`$\x01a\x07\xD1V[a\x07\n0`\0\x85\x85\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\x10\x16\x92PPPV[`\0a\x05/\x82a\x12@V[`\0\x80`\0a\x0E+a\x11\xF9V[\x81Q` \x80\x84\x01\x91\x90\x91 \x82Q\x82\x84\x01 `@\x80Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x94\x81\x01\x94\x90\x94R\x83\x01\x91\x90\x91R``\x82\x01RF`\x80\x82\x01R0`\xA0\x82\x01R\x91\x93P\x91P`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x90V[a\x0E\xAD3a\x0C\xA8V[\x80a\x0E\xB7WP30\x14[\x15a\x0E\xBEWV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05j\x81`\0\x80Q` a2\xB3\x839\x81Q\x91R[\x80T\x90`\0a\x0E\xF8\x83a.\xF4V[\x91\x90PUa\x12vV[`\0\x80a\x0F\x10\x83\x85\x01\x85a/\rV[\x90P`\0a\x0F!\x82`\0\x01Qa\x0BkV[\x90P\x80Q` \x03a\x0F\x80W`\x01`\x01`\xA0\x1B\x03a\x0F=\x82a/\x99V[\x11\x15a\x0F^W\x80`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[`\0` \x82\x01Q\x90Pa\x0Fv\x81\x88\x85` \x01Qa\x13EV[\x93PPPPa\x05\xA0V[\x80Q`@\x03a\x0F\xFBW`\0\x80\x82\x80` \x01\x90Q\x81\x01\x90a\x0F\xA0\x91\x90a/\xBDV[\x91P\x91P`\0\x84` \x01Q\x80` \x01\x90Q\x81\x01\x90a\x0F\xBE\x91\x90a0&V[\x90Pa\x0F\xEF\x89`@Q` \x01a\x0F\xD6\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0\x83\x86\x86a\x14JV[\x95PPPPPPa\x05\xA0V[\x80`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[`\0\x80\x84`\x01`\x01`\xA0\x1B\x03\x16\x84\x84`@Qa\x102\x91\x90a-=V[`\0`@Q\x80\x83\x03\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a\x10oW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x10tV[``\x91P[P\x91P\x91P\x81a\t&W\x80Q` \x82\x01\xFD[a\x05ja\x0E\xA4V[`\0a\x10\x99\x82a\x17\xBAV[\x80Q\x90` \x01 \x90P\x91\x90PV[`\0[\x81Q\x81\x10\x15a\x06\x07W\x81\x81\x81Q\x81\x10a\x10\xC5Wa\x10\xC5a-YV[` \x02` \x01\x01QQ` \x14\x15\x80\x15a\x10\xF9WP\x81\x81\x81Q\x81\x10a\x10\xEBWa\x10\xEBa-YV[` \x02` \x01\x01QQ`@\x14\x15[\x15a\x112W\x81\x81\x81Q\x81\x10a\x11\x10Wa\x11\x10a-YV[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[\x81\x81\x81Q\x81\x10a\x11DWa\x11Da-YV[` \x02` \x01\x01QQ` \x14\x80\x15a\x11\x86WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10a\x11sWa\x11sa-YV[` \x02` \x01\x01Qa\x11\x84\x90a/\x99V[\x11[\x15a\x11\xBFW\x81\x81\x81Q\x81\x10a\x11\x9DWa\x11\x9Da-YV[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[a\x11\xF1\x82\x82\x81Q\x81\x10a\x11\xD4Wa\x11\xD4a-YV[` \x02` \x01\x01Qa\x0E\xEA`\0\x80Q` a2\xB3\x839\x81Q\x91R\x90V[`\x01\x01a\x10\xAAV[`@\x80Q\x80\x82\x01\x82R`\x15\x81Rt\x10\xDB\xDA[\x98\x98\\\xD9H\x14\xDBX\\\x9D\x08\x15\xD8[\x1B\x19]`Z\x1B` \x80\x83\x01\x91\x90\x91R\x82Q\x80\x84\x01\x90\x93R`\x01\x83R`1`\xF8\x1B\x90\x83\x01R\x91V[`\0a\x12Ja\x0E\x1EV[a\x12S\x83a\x18\x8DV[`@Qa\x19\x01`\xF0\x1B` \x82\x01R`\"\x81\x01\x92\x90\x92R`B\x82\x01R`b\x01a\tbV[a\x12\x7F\x82a\x05\xA7V[\x15a\x12\x9FW\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[`\x01`\0\x80Q` a2\xB3\x839\x81Q\x91R`\x02\x01\x83`@Qa\x12\xC1\x91\x90a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x12\xF7`\0\x80Q` a2\xB3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x13\x14\x90\x82a11V[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\x0B8\x91\x90a,rV[`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91`\0\x83\x15a\x05\xA0W`@Q\x83`\0R` \x83\x01Q`@R`@\x83Q\x03a\x13\xB5W`@\x83\x01Q`\x1B\x81`\xFF\x1C\x01` R\x80`\x01\x1B`\x01\x1C``RP` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13\xB3WP`\0``R`@RP`\x01a\x05\xA0V[P[`A\x83Q\x03a\x13\xFBW``\x83\x01Q`\0\x1A` R`@\x83\x01Q``R` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13\xF9WP`\0``R`@RP`\x01a\x05\xA0V[P[`\0``R\x80`@Rc\x16&\xBA~`\xE0\x1B\x80\x82R\x84`\x04\x83\x01R`$\x82\x01`@\x81R\x84Q` \x01\x80`D\x85\x01\x82\x88`\x04Z\xFAPP` \x81`D=\x01\x85\x8AZ\xFA\x90Q\x90\x91\x14\x16\x91PP\x93\x92PPPV[`\0\x7F\x7F\xFF\xFF\xFF\x80\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDEs}V\xD3\x8B\xCFBy\xDC\xE5a~1\x92\xA8\x84`\xA0\x01Q\x11\x15a\x14\x80WP`\0a\x17\xB1V[``\x84\x01Q`\0\x90a\x14\xA3\x90a\x14\x97\x81`\x15a1\xF0V[` \x88\x01Q\x91\x90a\x18\xC8V[\x90P\x7F\xFF\x1A*\x91v\xD6P\xE4\xA9\x9D\xED\xB5\x8F\x17\x93\095\x13\x05y\xFE\x17\xB5\xA3\xF6\x98\xAC[\0\xE64\x81\x80Q\x90` \x01 \x14a\x14\xDDW`\0\x91PPa\x17\xB1V[`\0a\x14\xEB\x88`\x01\x80a\x19.V[`@Q` \x01a\x14\xFB\x91\x90a2\x03V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0a\x153\x87`@\x01Q\x83Q\x89`@\x01Qa\x15'\x91\x90a1\xF0V[` \x8A\x01Q\x91\x90a\x18\xC8V[\x90P\x81\x80Q\x90` \x01 \x81\x80Q\x90` \x01 \x14a\x15VW`\0\x93PPPPa\x17\xB1V[\x86Q\x80Q`\x01`\xF8\x1B\x91\x82\x91` \x90\x81\x10a\x15sWa\x15sa-YV[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14a\x15\x94W`\0\x93PPPPa\x17\xB1V[\x87\x80\x15a\x15\xCCWP\x86Q\x80Q`\x01`\xFA\x1B\x91\x82\x91` \x90\x81\x10a\x15\xB9Wa\x15\xB9a-YV[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14\x15[\x15a\x15\xDDW`\0\x93PPPPa\x17\xB1V[`\0`\x02\x88` \x01Q`@Qa\x15\xF3\x91\x90a-=V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x16\x10W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x163\x91\x90a2DV[\x90P`\0`\x02\x89`\0\x01Q\x83`@Q` \x01a\x16P\x92\x91\x90a2]V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x16j\x91a-=V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x16\x87W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16\xAA\x91\x90a2DV[`\x80\x80\x8B\x01Q`\xA0\x80\x8D\x01Q`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x93\x90\x93R``\x83\x01R\x91\x81\x01\x8B\x90R\x90\x81\x01\x89\x90R\x90\x91P`\0\x90`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x01\0`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\x17\x10\x91\x90a-=V[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\x17KW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x17PV[``\x91P[P\x80Q\x91\x93P\x91P\x15\x15\x82\x80\x15a\x17dWP\x80[\x15a\x17\x90W\x81\x80` \x01\x90Q\x81\x01\x90a\x17}\x91\x90a2DV[`\x01\x14\x99PPPPPPPPPPa\x17\xB1V[a\x17\xA5\x85\x8E`\x80\x01Q\x8F`\xA0\x01Q\x8F\x8Fa\x1A#V[\x99PPPPPPPPPP[\x95\x94PPPPPV[``\x815` \x83\x015`\0a\x17\xDAa\x17\xD5`@\x87\x01\x87a-\x85V[a\x1B\x06V[\x90P`\0a\x17\xEEa\x17\xD5``\x88\x01\x88a-\x85V[\x90P`\x80\x86\x015`\xA0\x87\x015`\xC0\x88\x015`\xE0\x89\x015a\x01\0\x8A\x015`\0a\x18\x1Da\x17\xD5a\x01 \x8E\x01\x8Ea-\x85V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x9C\x90\x9C\x16` \x8D\x01R\x8B\x81\x01\x9A\x90\x9AR``\x8B\x01\x98\x90\x98RP`\x80\x89\x01\x95\x90\x95R`\xA0\x88\x01\x93\x90\x93R`\xC0\x87\x01\x91\x90\x91R`\xE0\x86\x01Ra\x01\0\x85\x01Ra\x01 \x84\x01Ra\x01@\x80\x84\x01\x91\x90\x91R\x81Q\x80\x84\x03\x90\x91\x01\x81Ra\x01`\x90\x92\x01\x90R\x92\x91PPV[`@\x80Q\x7F\x9BI=\"!\x05\xFE\xE7\xDF\x16:\xB5\xD5\x7F\x0B\xF1\xFF\xD2\xDA\x04\xDD_\xAF\xBE\x10\xB5LA\xC1\xAD\xC6W` \x82\x01R\x90\x81\x01\x82\x90R`\0\x90``\x01a\tbV[``\x83Q\x82\x81\x11a\x18\xD7W\x80\x92P[\x83\x81\x11a\x18\xE2W\x80\x93P[P\x81\x83\x10\x15a\x05\xA0WP`@Q\x82\x82\x03\x80\x82R\x93\x83\x01\x93`\x1F\x19`\x1F\x82\x01\x81\x16[\x86\x81\x01Q\x84\x82\x01R\x81\x01\x80a\x19\x03WP`\0\x83\x83\x01` \x01R`?\x90\x91\x01\x16\x81\x01`@R\x93\x92PPPV[``\x83Q\x80\x15a\x08BW`\x03`\x02\x82\x01\x04`\x02\x1B`@Q\x92P\x7FABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`\x1FRa\x06p\x85\x15\x02\x7Fghijklmnopqrstuvwxyz0123456789-_\x18`?R` \x83\x01\x81\x81\x01\x83\x88` \x01\x01\x80Q`\0\x82R[`\x03\x8A\x01\x99P\x89Q`?\x81`\x12\x1C\x16Q`\0S`?\x81`\x0C\x1C\x16Q`\x01S`?\x81`\x06\x1C\x16Q`\x02S`?\x81\x16Q`\x03SP`\0Q\x84R`\x04\x84\x01\x93P\x82\x84\x10a\x19\xAAW\x90R` \x01`@Ra==`\xF0\x1B`\x03\x84\x06`\x02\x04\x80\x83\x03\x91\x90\x91R`\0\x86\x15\x15\x90\x91\x02\x91\x82\x90\x03R\x90\x03\x82RP\x93\x92PPPV[`\0\x84\x15\x80a\x1A@WP`\0\x80Q` a2\x93\x839\x81Q\x91R\x85\x10\x15[\x80a\x1AIWP\x83\x15[\x80a\x1AbWP`\0\x80Q` a2\x93\x839\x81Q\x91R\x84\x10\x15[\x15a\x1AoWP`\0a\x17\xB1V[a\x1Ay\x83\x83a\x1B\x19V[a\x1A\x85WP`\0a\x17\xB1V[`\0a\x1A\x90\x85a\x1C\x13V[\x90P`\0`\0\x80Q` a2\x93\x839\x81Q\x91R\x82\x89\t\x90P`\0`\0\x80Q` a2\x93\x839\x81Q\x91R\x83\x89\t\x90P`\0a\x1A\xCC\x87\x87\x85\x85a\x1C\x85V[\x90P`\0\x80Q` a2\x93\x839\x81Q\x91Ra\x1A\xF5\x8A`\0\x80Q` a2\x93\x839\x81Q\x91Ra2\x7FV[\x82\x08\x15\x9A\x99PPPPPPPPPPV[`\0`@Q\x82\x80\x85\x837\x90 \x93\x92PPPV[`\0\x82\x15\x80\x15a\x1B'WP\x81\x15[\x80a\x1B?WP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x14[\x80a\x1BWWP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x14[\x15a\x1BdWP`\0a\x05/V[`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x90P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x7F\xFF\xFF\xFF\xFF\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x87\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\t\x08\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x7FZ\xC65\xD8\xAA:\x93\xE7\xB3\xEB\xBDUv\x98\x86\xBCe\x1D\x06\xB0\xCCS\xB0\xF6;\xCE<>'\xD2`K\x82\x08\x91\x90\x91\x14\x94\x93PPPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R\x7F\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\xE6\xFA\xAD\xA7\x17\x9E\x84\xF3\xB9\xCA\xC2\xFCc%O`\x80\x82\x01R`\0\x80Q` a2\x93\x839\x81Q\x91R`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C~W`\0\x80\xFD[Q\x92\x91PPV[`\0\x80\x80\x80`\xFF\x81\x80\x88\x15\x80\x15a\x1C\x9AWP\x87\x15[\x15a\x1C\xAEW`\0\x96PPPPPPPa#GV[a\x1C\xFA\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x8D\x8Da#OV[\x90\x92P\x90P\x81\x15\x80\x15a\x1D\x0BWP\x80\x15[\x15a\x1D9W`\0\x80Q` a2\x93\x839\x81Q\x91R\x88`\0\x80Q` a2\x93\x839\x81Q\x91R\x03\x8A\x08\x98P`\0\x97P[`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01[\x80a\x1DlW`\x01\x84\x03\x93P`\x01\x8A\x85\x1C\x16`\x01\x8A\x86\x1C\x16`\x01\x1B\x01\x90Pa\x1DJV[P`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01\x95P`\x01\x86\x03a\x1D\xCEW\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x96P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x93P[`\x02\x86\x03a\x1D\xDDW\x8A\x96P\x89\x93P[`\x03\x86\x03a\x1D\xECW\x81\x96P\x80\x93P[`\x01\x83\x03\x92P`\x01\x95P`\x01\x94P[\x82`\0\x19\x11\x15a\"\xD0W`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x02\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8A\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x84\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x8D\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08\t`\x03\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x85\t\x98P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x84\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x08\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\x82\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x87\t\x08\x97P`\x01\x8D\x88\x1C\x16`\x01\x8D\x89\x1C\x16`\x01\x1B\x01\x90P\x80a\x1FxW\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x97PPPPPa\"\xC5V[`\x01\x81\x03a\x1F\xC7W\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x93P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x92P[`\x02\x81\x03a\x1F\xD6W\x8E\x93P\x8D\x92P[`\x03\x81\x03a\x1F\xE5W\x85\x93P\x84\x92P[\x89a\x1F\xFEWP\x91\x98P`\x01\x97P\x87\x96P\x94Pa\"\xC5\x90PV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x86\t\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x88\t\x08\x93P\x80a!\xB7W\x83a!\xB7W`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x86\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8D\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x86\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x8F\x08\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81`\x03\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x86\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x85\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x08\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8D`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x85\x08\x83\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8A\x87\t\x85\x08\x98PPPPPPa\"\xC5V[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x83\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8D\t\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8C\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8E\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87\x88\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83\x8D\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x86\x08\t\x08\x9APPPP\x80\x9APPPPP[`\x01\x83\x03\x92Pa\x1D\xFBV[`@Q\x86``\x82\x01R` \x81R` \x80\x82\x01R` `@\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa#*W`\0\x80\xFD[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81Q\x89\t\x97PPPPPPPP[\x94\x93PPPPV[`\0\x80\x80\x80\x86a#fW\x85\x85\x93P\x93PPPa#\xD4V[\x84a#xW\x87\x87\x93P\x93PPPa#\xD4V[\x85\x88\x14\x80\x15a#\x86WP\x84\x87\x14[\x15a#\xA7Wa#\x98\x88\x88`\x01\x80a#\xDDV[\x92\x9AP\x90\x98P\x92P\x90Pa#\xC1V[a#\xB6\x88\x88`\x01\x80\x8A\x8Aa%8V[\x92\x9AP\x90\x98P\x92P\x90P[a#\xCD\x88\x88\x84\x84a&\xBCV[\x93P\x93PPP[\x94P\x94\x92PPPV[`\0\x80`\0\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x02\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x83\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x8B\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8C\x08\t`\x03\t\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x89\t\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x83\x08\x87\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x84\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x88\x85\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x89\x08\x92P\x94P\x94P\x94P\x94\x90PV[`\0\x80`\0\x80\x88`\0\x03a%WWP\x84\x92P\x83\x91P`\x01\x90P\x80a&\xAFV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x98\x89\x03\x98\x89\x81\x89\x88\t\x08\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x89\t\x08\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x87\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x89\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x88\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8B\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84\x8B\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\t\x08\x92P[\x96P\x96P\x96P\x96\x92PPPV[`\0\x80`\0a&\xCA\x84a')V[\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x87\t\x91P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x87\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x93PPP\x94P\x94\x92PPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C~W`\0\x80\xFD[P\x80Ta'\x91\x90a.\xAAV[`\0\x82U\x80`\x1F\x10a'\xA1WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x05j\x91\x90[\x80\x82\x11\x15a\t\xDBW`\0\x81U`\x01\x01a'\xBBV[`\0\x80`@\x83\x85\x03\x12\x15a'\xE2W`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a(\x08W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a(\x1FW`\0\x80\xFD[a\x05\xA0\x82a'\xF1V[`\0\x80\x83`\x1F\x84\x01\x12a(:W`\0\x80\xFD[P\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a(QW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a(iW`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0`@\x84\x86\x03\x12\x15a(\x85W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a(\xA2W`\0\x80\xFD[a(\xAE\x86\x82\x87\x01a((V[\x94\x97\x90\x96P\x93\x94PPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a(\xF3Wa(\xF3a(\xBBV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a)!Wa)!a(\xBBV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a)BWa)Ba(\xBBV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a)aW`\0\x80\xFD[\x815a)ta)o\x82a))V[a(\xF9V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a)\x89W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a)\xB8W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a)\xCEW`\0\x80\xFD[a#G\x84\x82\x85\x01a)PV[`\0\x80\x83`\x1F\x84\x01\x12a)\xECW`\0\x80\xFD[P\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x03W`\0\x80\xFD[` \x83\x01\x91P\x83` \x82`\x05\x1B\x85\x01\x01\x11\x15a(iW`\0\x80\xFD[`\0\x80` \x83\x85\x03\x12\x15a*1W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a*GW`\0\x80\xFD[a*S\x85\x82\x86\x01a)\xDAV[\x90\x96\x90\x95P\x93PPPPV[`\0a\x01`\x82\x84\x03\x12\x15a*rW`\0\x80\xFD[P\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a*\x8DW`\0\x80\xFD[\x835`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xA3W`\0\x80\xFD[a*\xAF\x86\x82\x87\x01a*_V[\x96` \x86\x015\x96P`@\x90\x95\x015\x94\x93PPPPV[`\0\x80`\0`@\x84\x86\x03\x12\x15a*\xDAW`\0\x80\xFD[a*\xE3\x84a'\xF1V[\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a(\xA2W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a+\x10W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a+&W`\0\x80\xFD[a#G\x84\x82\x85\x01a*_V[`\0\x80`\0`@\x84\x86\x03\x12\x15a+GW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+dW`\0\x80\xFD[a(\xAE\x86\x82\x87\x01a)\xDAV[`\0` \x82\x84\x03\x12\x15a+\x82W`\0\x80\xFD[P5\x91\x90PV[`\0[\x83\x81\x10\x15a+\xA4W\x81\x81\x01Q\x83\x82\x01R` \x01a+\x8CV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra+\xC5\x81` \x86\x01` \x86\x01a+\x89V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`\xFF`\xF8\x1B\x88\x16\x81R`\0` `\xE0` \x84\x01Ra+\xFA`\xE0\x84\x01\x8Aa+\xADV[\x83\x81\x03`@\x85\x01Ra,\x0C\x81\x8Aa+\xADV[``\x85\x01\x89\x90R`\x01`\x01`\xA0\x1B\x03\x88\x16`\x80\x86\x01R`\xA0\x85\x01\x87\x90R\x84\x81\x03`\xC0\x86\x01R\x85Q\x80\x82R` \x80\x88\x01\x93P\x90\x91\x01\x90`\0[\x81\x81\x10\x15a,`W\x83Q\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a,DV[P\x90\x9C\x9BPPPPPPPPPPPPV[` \x81R`\0a\x05\xA0` \x83\x01\x84a+\xADV[`\0` \x82\x84\x03\x12\x15a,\x97W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x05\xA0W`\0\x80\xFD[`\0\x80`\0\x80``\x85\x87\x03\x12\x15a,\xC5W`\0\x80\xFD[a,\xCE\x85a'\xF1V[\x93P` \x85\x015\x92P`@\x85\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xF0W`\0\x80\xFD[a,\xFC\x87\x82\x88\x01a((V[\x95\x98\x94\x97P\x95PPPPV[`\0\x80` \x83\x85\x03\x12\x15a-\x1BW`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a-1W`\0\x80\xFD[a*S\x85\x82\x86\x01a((V[`\0\x82Qa-O\x81\x84` \x87\x01a+\x89V[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x825`^\x19\x836\x03\x01\x81\x12a-OW`\0\x80\xFD[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a-\x9CW`\0\x80\xFD[\x83\x01\x805\x91P`\x01`\x01`@\x1B\x03\x82\x11\x15a-\xB6W`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a(iW`\0\x80\xFD[`\0\x80\x85\x85\x11\x15a-\xDBW`\0\x80\xFD[\x83\x86\x11\x15a-\xE8W`\0\x80\xFD[PP\x82\x01\x93\x91\x90\x92\x03\x91PV[`\x01`\x01`\xE0\x1B\x03\x19\x815\x81\x81\x16\x91`\x04\x85\x10\x15a.\x1DW\x80\x81\x86`\x04\x03`\x03\x1B\x1B\x83\x16\x16\x92P[PP\x92\x91PPV[`\0`\x01`\x01`@\x1B\x03\x80\x84\x11\x15a.?Wa.?a(\xBBV[\x83`\x05\x1B` a.Q` \x83\x01a(\xF9V[\x86\x81R\x91\x85\x01\x91` \x81\x01\x906\x84\x11\x15a.jW`\0\x80\xFD[\x86[\x84\x81\x10\x15a.\x9EW\x805\x86\x81\x11\x15a.\x84W`\0\x80\x81\xFD[a.\x906\x82\x8B\x01a)PV[\x84RP\x91\x83\x01\x91\x83\x01a.lV[P\x97\x96PPPPPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a.\xBEW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a*rWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a/\x06Wa/\x06a.\xDEV[P`\x01\x01\x90V[`\0` \x82\x84\x03\x12\x15a/\x1FW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a/6W`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a/JW`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10\x83\x82\x11\x17\x15a/eWa/ea(\xBBV[`@R\x825\x81R` \x83\x015\x82\x81\x11\x15a/~W`\0\x80\xFD[a/\x8A\x87\x82\x86\x01a)PV[` \x83\x01RP\x95\x94PPPPPV[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15a*rW`\0\x19` \x91\x90\x91\x03`\x03\x1B\x1B\x16\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a/\xD0W`\0\x80\xFD[PP\x80Q` \x90\x91\x01Q\x90\x92\x90\x91PV[`\0\x82`\x1F\x83\x01\x12a/\xF2W`\0\x80\xFD[\x81Qa0\0a)o\x82a))V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a0\x15W`\0\x80\xFD[a#G\x82` \x83\x01` \x87\x01a+\x89V[`\0` \x82\x84\x03\x12\x15a08W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a0OW`\0\x80\xFD[\x90\x83\x01\x90`\xC0\x82\x86\x03\x12\x15a0cW`\0\x80\xFD[a0ka(\xD1V[\x82Q\x82\x81\x11\x15a0zW`\0\x80\xFD[a0\x86\x87\x82\x86\x01a/\xE1V[\x82RP` \x83\x01Q\x82\x81\x11\x15a0\x9BW`\0\x80\xFD[a0\xA7\x87\x82\x86\x01a/\xE1V[` \x83\x01RP`@\x83\x01Q`@\x82\x01R``\x83\x01Q``\x82\x01R`\x80\x83\x01Q`\x80\x82\x01R`\xA0\x83\x01Q`\xA0\x82\x01R\x80\x93PPPP\x92\x91PPV[`\x1F\x82\x11\x15a\x07\nW`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a1\nWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a1)W\x82\x81U`\x01\x01a1\x16V[PPPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a1JWa1Ja(\xBBV[a1^\x81a1X\x84Ta.\xAAV[\x84a0\xE1V[` \x80`\x1F\x83\x11`\x01\x81\x14a1\x93W`\0\x84\x15a1{WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua1)V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a1\xC2W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a1\xA3V[P\x85\x82\x10\x15a1\xE0W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[\x80\x82\x01\x80\x82\x11\x15a\x05/Wa\x05/a.\xDEV[l\x111\xB40\xB662\xB73\xB2\x91\x1D\x11`\x99\x1B\x81R\x81Q`\0\x90a2,\x81`\r\x85\x01` \x87\x01a+\x89V[`\x11`\xF9\x1B`\r\x93\x90\x91\x01\x92\x83\x01RP`\x0E\x01\x91\x90PV[`\0` \x82\x84\x03\x12\x15a2VW`\0\x80\xFD[PQ\x91\x90PV[`\0\x83Qa2o\x81\x84` \x88\x01a+\x89V[\x91\x90\x91\x01\x91\x82RP` \x01\x91\x90PV[\x81\x81\x03\x81\x81\x11\x15a\x05/Wa\x05/a.\xDEV\xFE\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\xE6\xFA\xAD\xA7\x17\x9E\x84\xF3\xB9\xCA\xC2\xFCc%Q\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\0\xA2dipfsX\"\x12 v\xB8R\xC4N\x04\xB7(<\xDC\\\xE0:a\xAFh%I\x82*%\xC9\xCD\x17 \xCFHp\xE5B\xBD\xDDdsolcC\0\x08\x17\x003\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\0"; + /// The bytecode of the contract. + pub static MOCKCOINBASESMARTWALLET_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\x01jW`\x005`\xE0\x1C\x80co-\xE7\x0E\x11a\0\xD1W\x80c\xA2\xE1\xA8\xD8\x11a\0\x8AW\x80c\xBFk\xA1\xFC\x11a\0dW\x80c\xBFk\xA1\xFC\x14a\x04\\W\x80c\xCE\x15\x06\xBE\x14a\x04oW\x80c\xD9H\xFD.\x14a\x04\x8FW\x80c\xF6\x98\xDA%\x14a\x04\xB1Wa\x01qV[\x80c\xA2\xE1\xA8\xD8\x14a\x04\x02W\x80c\xB0\xD6\x91\xFE\x14a\x04\"W\x80c\xB6\x1D'\xF6\x14a\x04IWa\x01qV[\x80co-\xE7\x0E\x14a\x03DW\x80cr\xDE;Z\x14a\x03WW\x80c\x84\xB0\x19n\x14a\x03wW\x80c\x88\xCEL|\x14a\x03\x9FW\x80c\x8E\xA6\x90)\x14a\x03\xB5W\x80c\x9F\x9B\xCB4\x14a\x03\xE2Wa\x01qV[\x80c:\x87\x1C\xDD\x11a\x01#W\x80c:\x87\x1C\xDD\x14a\x02\x80W\x80cO\x1E\xF2\x86\x14a\x02\xA1W\x80cOn\x7F\"\x14a\x02\xB4W\x80cR\xD1\x90-\x14a\x02\xD4W\x80cW\x7F<\xBF\x14a\x02\xE9W\x80c\\`\xDA\x1B\x14a\x02\xFCWa\x01qV[\x80c\x06j\x1E\xB7\x14a\x01\x9FW\x80c\x0F\x0F?$\x14a\x01\xD4W\x80c\x16&\xBA~\x14a\x01\xF4W\x80c\x1C\xA59?\x14a\x02-W\x80c)V^;\x14a\x02MW\x80c4\xFC\xD5\xBE\x14a\x02mWa\x01qV[6a\x01qW\0[`\x005`\xE0\x1Cc\xBC\x19|\x81\x81\x14c\xF2:na\x82\x14\x17c\x15\x0Bz\x02\x82\x14\x17\x15a\x01\x9DW\x80` R` `<\xF3[\0[4\x80\x15a\x01\xABW`\0\x80\xFD[Pa\x01\xBFa\x01\xBA6`\x04a'\xCFV[a\x04\xC6V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xE0W`\0\x80\xFD[Pa\x01\x9Da\x01\xEF6`\x04a(\rV[a\x055V[4\x80\x15a\x02\0W`\0\x80\xFD[Pa\x02\x14a\x02\x0F6`\x04a(pV[a\x05mV[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01\xCBV[4\x80\x15a\x029W`\0\x80\xFD[Pa\x01\xBFa\x02H6`\x04a)\xA6V[a\x05\xA7V[4\x80\x15a\x02YW`\0\x80\xFD[Pa\x01\x9Da\x02h6`\x04a'\xCFV[a\x05\xE2V[a\x01\x9Da\x02{6`\x04a*\x1EV[a\x06\x0BV[a\x02\x93a\x02\x8E6`\x04a*xV[a\x07\x0FV[`@Q\x90\x81R` \x01a\x01\xCBV[a\x01\x9Da\x02\xAF6`\x04a*\xC5V[a\x08JV[4\x80\x15a\x02\xC0W`\0\x80\xFD[Pa\x02\x93a\x02\xCF6`\x04a*\xFEV[a\t.V[4\x80\x15a\x02\xE0W`\0\x80\xFD[Pa\x02\x93a\t\x7FV[a\x01\x9Da\x02\xF76`\x04a+2V[a\t\xDFV[4\x80\x15a\x03\x08W`\0\x80\xFD[P\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xCBV[a\x01\x9Da\x03R6`\x04a*\x1EV[a\n\x17V[4\x80\x15a\x03cW`\0\x80\xFD[Pa\x01\x9Da\x03r6`\x04a+pV[a\nWV[4\x80\x15a\x03\x83W`\0\x80\xFD[Pa\x03\x8Ca\x0BDV[`@Qa\x01\xCB\x97\x96\x95\x94\x93\x92\x91\x90a+\xD9V[4\x80\x15a\x03\xABW`\0\x80\xFD[Pa\x02\x93a!\x05\x81V[4\x80\x15a\x03\xC1W`\0\x80\xFD[Pa\x03\xD5a\x03\xD06`\x04a+pV[a\x0BkV[`@Qa\x01\xCB\x91\x90a,rV[4\x80\x15a\x03\xEEW`\0\x80\xFD[Pa\x01\xBFa\x03\xFD6`\x04a,\x85V[a\x0C,V[4\x80\x15a\x04\x0EW`\0\x80\xFD[Pa\x01\xBFa\x04\x1D6`\x04a(\rV[a\x0C\xA8V[4\x80\x15a\x04.W`\0\x80\xFD[Ps_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89a\x03,V[a\x01\x9Da\x04W6`\x04a,\xAFV[a\x0C\xEEV[a\x01\x9Da\x04j6`\x04a-\x08V[a\rRV[4\x80\x15a\x04{W`\0\x80\xFD[Pa\x02\x93a\x04\x8A6`\x04a+pV[a\x0E\x13V[4\x80\x15a\x04\x9BW`\0\x80\xFD[P`\0\x80Q` a2\xB3\x839\x81Q\x91RTa\x02\x93V[4\x80\x15a\x04\xBDW`\0\x80\xFD[Pa\x02\x93a\x0E\x1EV[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x05\x19\x91a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P[\x92\x91PPV[a\x05=a\x0E\xA4V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x05j\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0E\xD6V[PV[`\0a\x05\x82a\x05{\x85a\x0E\x13V[\x84\x84a\x0F\x01V[\x15a\x05\x95WPc\x0B\x13]?`\xE1\x1Ba\x05\xA0V[P`\x01`\x01`\xE0\x1B\x03\x19[\x93\x92PPPV[`\0`\0\x80Q` a2\xB3\x839\x81Q\x91R`\x02\x01\x82`@Qa\x05\xC9\x91\x90a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x05\xEAa\x0E\xA4V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x06\x07\x90``\x01a\x05VV[PPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x06.Wa\x06.a\x0E\xA4V[`\0[\x81\x81\x10\x15a\x07\nWa\x07\x02\x83\x83\x83\x81\x81\x10a\x06NWa\x06Na-YV[\x90P` \x02\x81\x01\x90a\x06`\x91\x90a-oV[a\x06n\x90` \x81\x01\x90a(\rV[\x84\x84\x84\x81\x81\x10a\x06\x80Wa\x06\x80a-YV[\x90P` \x02\x81\x01\x90a\x06\x92\x91\x90a-oV[` \x015\x85\x85\x85\x81\x81\x10a\x06\xA8Wa\x06\xA8a-YV[\x90P` \x02\x81\x01\x90a\x06\xBA\x91\x90a-oV[a\x06\xC8\x90`@\x81\x01\x90a-\x85V[\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\x10\x16\x92PPPV[`\x01\x01a\x061V[PPPV[`\x003s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\x07DW`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81` \x85\x015`@\x1C`\x04a\x07\\``\x88\x01\x88a-\x85V[\x90P\x10\x15\x80\x15a\x07\xA0WPa\x07t``\x87\x01\x87a-\x85V[a\x07\x83\x91`\x04\x91`\0\x91a-\xCBV[a\x07\x8C\x91a-\xF5V[`\x01`\x01`\xE0\x1B\x03\x19\x16c\xBFk\xA1\xFC`\xE0\x1B\x14[\x15a\x07\xDFWa\x07\xAE\x86a\t.V[\x94Pa!\x05\x81\x14a\x07\xDAW`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x08\x04V[a!\x05\x81\x03a\x08\x04W`@Qc.\xF3x\x13`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x07\xD1V[a\x08\x1B\x85a\x08\x16a\x01@\x89\x01\x89a-\x85V[a\x0F\x01V[\x15a\x08*W`\0\x92PPa\x080V[`\x01\x92PP[\x80\x15a\x08BW`\08`\08\x843Z\xF1P[P\x93\x92PPPV[\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\x000\x81\x03a\x08\x80Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[a\x08\x89\x84a\x10\x86V[\x83``\x1B``\x1C\x93PcR\xD1\x90-`\x01R\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80` `\x01`\x04`\x1D\x89Z\xFAQ\x14a\x08\xDBWcU)\x9BI`\x01R`\x04`\x1D\xFD[\x84\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`\08\xA2\x84\x90U\x81\x15a\t(W`@Q\x82\x84\x827`\08\x84\x83\x88Z\xF4a\t&W=`\0\x82>=\x81\xFD[P[PPPPV[`\0a\t9\x82a\x10\x8EV[`@\x80Q` \x81\x01\x92\x90\x92Rs_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x90\x82\x01R``\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\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\x000\x81\x14a\t\xB7Wc\x9F\x03\xA0&`\0R`\x04`\x1C\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x91P[P\x90V[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\n\x02Wa\n\x02a\x0E\xA4V[`@\x83\x06`@Q\x01`@Ra\x07\n\x82\x82a\x06\x0BV[`\0\x80Q` a2\xB3\x839\x81Q\x91RT\x15a\nEW`@Qc\x02\xEDT=`\xE5\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x06\x07a\nR\x82\x84a.%V[a\x10\xA7V[a\n_a\x0E\xA4V[`\0a\nj\x82a\x0BkV[\x90P\x80Q`\0\x03a\n\x91W`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01a\x07\xD1V[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\n\xC1\x90\x83\x90a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\n\xED`\0\x80Q` a2\xB3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\x0B\x08\x91a'\x85V[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\x0B8\x91\x90a,rV[`@Q\x80\x91\x03\x90\xA2PPV[`\x0F`\xF8\x1B``\x80`\0\x80\x80\x83a\x0BYa\x11\xF9V[\x97\x98\x90\x97\x96PF\x95P0\x94P\x91\x92P\x90V[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x0B\xA7\x90a.\xAAV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x0B\xD3\x90a.\xAAV[\x80\x15a\x0C W\x80`\x1F\x10a\x0B\xF5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x0C V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x0C\x03W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c)V^;`\xE0\x1B\x14\x80a\x0C]WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\x03\xC3\xCF\xC9`\xE2\x1B\x14[\x80a\x0CxWP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c9o\x1D\xAD`\xE1\x1B\x14[\x80a\x0C\x93WP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c'\x8FyC`\xE1\x1B\x14[\x15a\x0C\xA0WP`\x01\x91\x90PV[P`\0\x91\x90PV[`\0`\0\x80Q` a2\xB3\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x05\xC9\x91a-=V[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\r\x11Wa\r\x11a\x0E\xA4V[a\t(\x84\x84\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\x91RPa\x10\x16\x92PPPV[3s_\xF17\xD4\xB0\xFD\xCDI\xDC\xA3\x0C|\xF5~W\x8A\x02m'\x89\x14a\r\x85W`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\r\x94`\x04\x82\x84\x86a-\xCBV[a\r\x9D\x91a-\xF5V[\x90Pa\r\xA8\x81a\x0C,V[a\r\xD1W`@Qc\x1D\x83p\xA3`\xE1\x1B\x81R`\x01`\x01`\xE0\x1B\x03\x19\x82\x16`\x04\x82\x01R`$\x01a\x07\xD1V[a\x07\n0`\0\x85\x85\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\x10\x16\x92PPPV[`\0a\x05/\x82a\x12@V[`\0\x80`\0a\x0E+a\x11\xF9V[\x81Q` \x80\x84\x01\x91\x90\x91 \x82Q\x82\x84\x01 `@\x80Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x94\x81\x01\x94\x90\x94R\x83\x01\x91\x90\x91R``\x82\x01RF`\x80\x82\x01R0`\xA0\x82\x01R\x91\x93P\x91P`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x90V[a\x0E\xAD3a\x0C\xA8V[\x80a\x0E\xB7WP30\x14[\x15a\x0E\xBEWV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05j\x81`\0\x80Q` a2\xB3\x839\x81Q\x91R[\x80T\x90`\0a\x0E\xF8\x83a.\xF4V[\x91\x90PUa\x12vV[`\0\x80a\x0F\x10\x83\x85\x01\x85a/\rV[\x90P`\0a\x0F!\x82`\0\x01Qa\x0BkV[\x90P\x80Q` \x03a\x0F\x80W`\x01`\x01`\xA0\x1B\x03a\x0F=\x82a/\x99V[\x11\x15a\x0F^W\x80`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[`\0` \x82\x01Q\x90Pa\x0Fv\x81\x88\x85` \x01Qa\x13EV[\x93PPPPa\x05\xA0V[\x80Q`@\x03a\x0F\xFBW`\0\x80\x82\x80` \x01\x90Q\x81\x01\x90a\x0F\xA0\x91\x90a/\xBDV[\x91P\x91P`\0\x84` \x01Q\x80` \x01\x90Q\x81\x01\x90a\x0F\xBE\x91\x90a0&V[\x90Pa\x0F\xEF\x89`@Q` \x01a\x0F\xD6\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0\x83\x86\x86a\x14JV[\x95PPPPPPa\x05\xA0V[\x80`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[`\0\x80\x84`\x01`\x01`\xA0\x1B\x03\x16\x84\x84`@Qa\x102\x91\x90a-=V[`\0`@Q\x80\x83\x03\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a\x10oW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x10tV[``\x91P[P\x91P\x91P\x81a\t&W\x80Q` \x82\x01\xFD[a\x05ja\x0E\xA4V[`\0a\x10\x99\x82a\x17\xBAV[\x80Q\x90` \x01 \x90P\x91\x90PV[`\0[\x81Q\x81\x10\x15a\x06\x07W\x81\x81\x81Q\x81\x10a\x10\xC5Wa\x10\xC5a-YV[` \x02` \x01\x01QQ` \x14\x15\x80\x15a\x10\xF9WP\x81\x81\x81Q\x81\x10a\x10\xEBWa\x10\xEBa-YV[` \x02` \x01\x01QQ`@\x14\x15[\x15a\x112W\x81\x81\x81Q\x81\x10a\x11\x10Wa\x11\x10a-YV[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[\x81\x81\x81Q\x81\x10a\x11DWa\x11Da-YV[` \x02` \x01\x01QQ` \x14\x80\x15a\x11\x86WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10a\x11sWa\x11sa-YV[` \x02` \x01\x01Qa\x11\x84\x90a/\x99V[\x11[\x15a\x11\xBFW\x81\x81\x81Q\x81\x10a\x11\x9DWa\x11\x9Da-YV[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[a\x11\xF1\x82\x82\x81Q\x81\x10a\x11\xD4Wa\x11\xD4a-YV[` \x02` \x01\x01Qa\x0E\xEA`\0\x80Q` a2\xB3\x839\x81Q\x91R\x90V[`\x01\x01a\x10\xAAV[`@\x80Q\x80\x82\x01\x82R`\x15\x81Rt\x10\xDB\xDA[\x98\x98\\\xD9H\x14\xDBX\\\x9D\x08\x15\xD8[\x1B\x19]`Z\x1B` \x80\x83\x01\x91\x90\x91R\x82Q\x80\x84\x01\x90\x93R`\x01\x83R`1`\xF8\x1B\x90\x83\x01R\x91V[`\0a\x12Ja\x0E\x1EV[a\x12S\x83a\x18\x8DV[`@Qa\x19\x01`\xF0\x1B` \x82\x01R`\"\x81\x01\x92\x90\x92R`B\x82\x01R`b\x01a\tbV[a\x12\x7F\x82a\x05\xA7V[\x15a\x12\x9FW\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x07\xD1\x91\x90a,rV[`\x01`\0\x80Q` a2\xB3\x839\x81Q\x91R`\x02\x01\x83`@Qa\x12\xC1\x91\x90a-=V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x12\xF7`\0\x80Q` a2\xB3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x13\x14\x90\x82a11V[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\x0B8\x91\x90a,rV[`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91`\0\x83\x15a\x05\xA0W`@Q\x83`\0R` \x83\x01Q`@R`@\x83Q\x03a\x13\xB5W`@\x83\x01Q`\x1B\x81`\xFF\x1C\x01` R\x80`\x01\x1B`\x01\x1C``RP` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13\xB3WP`\0``R`@RP`\x01a\x05\xA0V[P[`A\x83Q\x03a\x13\xFBW``\x83\x01Q`\0\x1A` R`@\x83\x01Q``R` `\x01`\x80`\0`\x01Z\xFA\x80Q\x86\x18=\x15\x17a\x13\xF9WP`\0``R`@RP`\x01a\x05\xA0V[P[`\0``R\x80`@Rc\x16&\xBA~`\xE0\x1B\x80\x82R\x84`\x04\x83\x01R`$\x82\x01`@\x81R\x84Q` \x01\x80`D\x85\x01\x82\x88`\x04Z\xFAPP` \x81`D=\x01\x85\x8AZ\xFA\x90Q\x90\x91\x14\x16\x91PP\x93\x92PPPV[`\0\x7F\x7F\xFF\xFF\xFF\x80\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDEs}V\xD3\x8B\xCFBy\xDC\xE5a~1\x92\xA8\x84`\xA0\x01Q\x11\x15a\x14\x80WP`\0a\x17\xB1V[``\x84\x01Q`\0\x90a\x14\xA3\x90a\x14\x97\x81`\x15a1\xF0V[` \x88\x01Q\x91\x90a\x18\xC8V[\x90P\x7F\xFF\x1A*\x91v\xD6P\xE4\xA9\x9D\xED\xB5\x8F\x17\x93\095\x13\x05y\xFE\x17\xB5\xA3\xF6\x98\xAC[\0\xE64\x81\x80Q\x90` \x01 \x14a\x14\xDDW`\0\x91PPa\x17\xB1V[`\0a\x14\xEB\x88`\x01\x80a\x19.V[`@Q` \x01a\x14\xFB\x91\x90a2\x03V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0a\x153\x87`@\x01Q\x83Q\x89`@\x01Qa\x15'\x91\x90a1\xF0V[` \x8A\x01Q\x91\x90a\x18\xC8V[\x90P\x81\x80Q\x90` \x01 \x81\x80Q\x90` \x01 \x14a\x15VW`\0\x93PPPPa\x17\xB1V[\x86Q\x80Q`\x01`\xF8\x1B\x91\x82\x91` \x90\x81\x10a\x15sWa\x15sa-YV[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14a\x15\x94W`\0\x93PPPPa\x17\xB1V[\x87\x80\x15a\x15\xCCWP\x86Q\x80Q`\x01`\xFA\x1B\x91\x82\x91` \x90\x81\x10a\x15\xB9Wa\x15\xB9a-YV[\x01` \x01Q\x16`\x01`\x01`\xF8\x1B\x03\x19\x16\x14\x15[\x15a\x15\xDDW`\0\x93PPPPa\x17\xB1V[`\0`\x02\x88` \x01Q`@Qa\x15\xF3\x91\x90a-=V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x16\x10W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x163\x91\x90a2DV[\x90P`\0`\x02\x89`\0\x01Q\x83`@Q` \x01a\x16P\x92\x91\x90a2]V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x16j\x91a-=V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x16\x87W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16\xAA\x91\x90a2DV[`\x80\x80\x8B\x01Q`\xA0\x80\x8D\x01Q`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x93\x90\x93R``\x83\x01R\x91\x81\x01\x8B\x90R\x90\x81\x01\x89\x90R\x90\x91P`\0\x90`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x01\0`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\x17\x10\x91\x90a-=V[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\x17KW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x17PV[``\x91P[P\x80Q\x91\x93P\x91P\x15\x15\x82\x80\x15a\x17dWP\x80[\x15a\x17\x90W\x81\x80` \x01\x90Q\x81\x01\x90a\x17}\x91\x90a2DV[`\x01\x14\x99PPPPPPPPPPa\x17\xB1V[a\x17\xA5\x85\x8E`\x80\x01Q\x8F`\xA0\x01Q\x8F\x8Fa\x1A#V[\x99PPPPPPPPPP[\x95\x94PPPPPV[``\x815` \x83\x015`\0a\x17\xDAa\x17\xD5`@\x87\x01\x87a-\x85V[a\x1B\x06V[\x90P`\0a\x17\xEEa\x17\xD5``\x88\x01\x88a-\x85V[\x90P`\x80\x86\x015`\xA0\x87\x015`\xC0\x88\x015`\xE0\x89\x015a\x01\0\x8A\x015`\0a\x18\x1Da\x17\xD5a\x01 \x8E\x01\x8Ea-\x85V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x9C\x90\x9C\x16` \x8D\x01R\x8B\x81\x01\x9A\x90\x9AR``\x8B\x01\x98\x90\x98RP`\x80\x89\x01\x95\x90\x95R`\xA0\x88\x01\x93\x90\x93R`\xC0\x87\x01\x91\x90\x91R`\xE0\x86\x01Ra\x01\0\x85\x01Ra\x01 \x84\x01Ra\x01@\x80\x84\x01\x91\x90\x91R\x81Q\x80\x84\x03\x90\x91\x01\x81Ra\x01`\x90\x92\x01\x90R\x92\x91PPV[`@\x80Q\x7F\x9BI=\"!\x05\xFE\xE7\xDF\x16:\xB5\xD5\x7F\x0B\xF1\xFF\xD2\xDA\x04\xDD_\xAF\xBE\x10\xB5LA\xC1\xAD\xC6W` \x82\x01R\x90\x81\x01\x82\x90R`\0\x90``\x01a\tbV[``\x83Q\x82\x81\x11a\x18\xD7W\x80\x92P[\x83\x81\x11a\x18\xE2W\x80\x93P[P\x81\x83\x10\x15a\x05\xA0WP`@Q\x82\x82\x03\x80\x82R\x93\x83\x01\x93`\x1F\x19`\x1F\x82\x01\x81\x16[\x86\x81\x01Q\x84\x82\x01R\x81\x01\x80a\x19\x03WP`\0\x83\x83\x01` \x01R`?\x90\x91\x01\x16\x81\x01`@R\x93\x92PPPV[``\x83Q\x80\x15a\x08BW`\x03`\x02\x82\x01\x04`\x02\x1B`@Q\x92P\x7FABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`\x1FRa\x06p\x85\x15\x02\x7Fghijklmnopqrstuvwxyz0123456789-_\x18`?R` \x83\x01\x81\x81\x01\x83\x88` \x01\x01\x80Q`\0\x82R[`\x03\x8A\x01\x99P\x89Q`?\x81`\x12\x1C\x16Q`\0S`?\x81`\x0C\x1C\x16Q`\x01S`?\x81`\x06\x1C\x16Q`\x02S`?\x81\x16Q`\x03SP`\0Q\x84R`\x04\x84\x01\x93P\x82\x84\x10a\x19\xAAW\x90R` \x01`@Ra==`\xF0\x1B`\x03\x84\x06`\x02\x04\x80\x83\x03\x91\x90\x91R`\0\x86\x15\x15\x90\x91\x02\x91\x82\x90\x03R\x90\x03\x82RP\x93\x92PPPV[`\0\x84\x15\x80a\x1A@WP`\0\x80Q` a2\x93\x839\x81Q\x91R\x85\x10\x15[\x80a\x1AIWP\x83\x15[\x80a\x1AbWP`\0\x80Q` a2\x93\x839\x81Q\x91R\x84\x10\x15[\x15a\x1AoWP`\0a\x17\xB1V[a\x1Ay\x83\x83a\x1B\x19V[a\x1A\x85WP`\0a\x17\xB1V[`\0a\x1A\x90\x85a\x1C\x13V[\x90P`\0`\0\x80Q` a2\x93\x839\x81Q\x91R\x82\x89\t\x90P`\0`\0\x80Q` a2\x93\x839\x81Q\x91R\x83\x89\t\x90P`\0a\x1A\xCC\x87\x87\x85\x85a\x1C\x85V[\x90P`\0\x80Q` a2\x93\x839\x81Q\x91Ra\x1A\xF5\x8A`\0\x80Q` a2\x93\x839\x81Q\x91Ra2\x7FV[\x82\x08\x15\x9A\x99PPPPPPPPPPV[`\0`@Q\x82\x80\x85\x837\x90 \x93\x92PPPV[`\0\x82\x15\x80\x15a\x1B'WP\x81\x15[\x80a\x1B?WP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x14[\x80a\x1BWWP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x14[\x15a\x1BdWP`\0a\x05/V[`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x90P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x7F\xFF\xFF\xFF\xFF\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x87\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\t\x08\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x7FZ\xC65\xD8\xAA:\x93\xE7\xB3\xEB\xBDUv\x98\x86\xBCe\x1D\x06\xB0\xCCS\xB0\xF6;\xCE<>'\xD2`K\x82\x08\x91\x90\x91\x14\x94\x93PPPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R\x7F\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\xE6\xFA\xAD\xA7\x17\x9E\x84\xF3\xB9\xCA\xC2\xFCc%O`\x80\x82\x01R`\0\x80Q` a2\x93\x839\x81Q\x91R`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C~W`\0\x80\xFD[Q\x92\x91PPV[`\0\x80\x80\x80`\xFF\x81\x80\x88\x15\x80\x15a\x1C\x9AWP\x87\x15[\x15a\x1C\xAEW`\0\x96PPPPPPPa#GV[a\x1C\xFA\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x8D\x8Da#OV[\x90\x92P\x90P\x81\x15\x80\x15a\x1D\x0BWP\x80\x15[\x15a\x1D9W`\0\x80Q` a2\x93\x839\x81Q\x91R\x88`\0\x80Q` a2\x93\x839\x81Q\x91R\x03\x8A\x08\x98P`\0\x97P[`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01[\x80a\x1DlW`\x01\x84\x03\x93P`\x01\x8A\x85\x1C\x16`\x01\x8A\x86\x1C\x16`\x01\x1B\x01\x90Pa\x1DJV[P`\x01\x89\x84\x1C\x16`\x01\x89\x85\x1C\x16`\x01\x1B\x01\x95P`\x01\x86\x03a\x1D\xCEW\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x96P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x93P[`\x02\x86\x03a\x1D\xDDW\x8A\x96P\x89\x93P[`\x03\x86\x03a\x1D\xECW\x81\x96P\x80\x93P[`\x01\x83\x03\x92P`\x01\x95P`\x01\x94P[\x82`\0\x19\x11\x15a\"\xD0W`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x02\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8A\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x84\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x8D\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08\t`\x03\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x85\t\x98P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x84\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x84\t\x08\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\x82\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x87\t\x08\x97P`\x01\x8D\x88\x1C\x16`\x01\x8D\x89\x1C\x16`\x01\x1B\x01\x90P\x80a\x1FxW\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x97PPPPPa\"\xC5V[`\x01\x81\x03a\x1F\xC7W\x7Fk\x17\xD1\xF2\xE1,BG\xF8\xBC\xE6\xE5c\xA4@\xF2w\x03}\x81-\xEB3\xA0\xF4\xA19E\xD8\x98\xC2\x96\x93P\x7FO\xE3B\xE2\xFE\x1A\x7F\x9B\x8E\xE7\xEBJ|\x0F\x9E\x16+\xCE3Wk1^\xCE\xCB\xB6@h7\xBFQ\xF5\x92P[`\x02\x81\x03a\x1F\xD6W\x8E\x93P\x8D\x92P[`\x03\x81\x03a\x1F\xE5W\x85\x93P\x84\x92P[\x89a\x1F\xFEWP\x91\x98P`\x01\x97P\x87\x96P\x94Pa\"\xC5\x90PV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x86\t\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x88\t\x08\x93P\x80a!\xB7W\x83a!\xB7W`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x86\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8D\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x86\t\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8C`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8E\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8D\x8F\x08\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81`\x03\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x86\t\x99P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8B\x85\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x08\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8D`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x85\x08\x83\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x8A\x87\t\x85\x08\x98PPPPPPa\"\xC5V[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x83\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8D\t\x9BP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x8C\t\x9AP`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x8E\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87\x88\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x83\x8D\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x86\x08\t\x08\x9APPPP\x80\x9APPPPP[`\x01\x83\x03\x92Pa\x1D\xFBV[`@Q\x86``\x82\x01R` \x81R` \x80\x82\x01R` `@\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa#*W`\0\x80\xFD[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81Q\x89\t\x97PPPPPPPP[\x94\x93PPPPV[`\0\x80\x80\x80\x86a#fW\x85\x85\x93P\x93PPPa#\xD4V[\x84a#xW\x87\x87\x93P\x93PPPa#\xD4V[\x85\x88\x14\x80\x15a#\x86WP\x84\x87\x14[\x15a#\xA7Wa#\x98\x88\x88`\x01\x80a#\xDDV[\x92\x9AP\x90\x98P\x92P\x90Pa#\xC1V[a#\xB6\x88\x88`\x01\x80\x8A\x8Aa%8V[\x92\x9AP\x90\x98P\x92P\x90P[a#\xCD\x88\x88\x84\x84a&\xBCV[\x93P\x93PPP[\x94P\x94\x92PPPV[`\0\x80`\0\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x02\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x85\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x83\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x8B\x08`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8C\x08\t`\x03\t\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x82`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88\x89\t\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x83\x08\x87\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85\x84\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x88\x85\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x89\x08\x92P\x94P\x94P\x94P\x94\x90PV[`\0\x80`\0\x80\x88`\0\x03a%WWP\x84\x92P\x83\x91P`\x01\x90P\x80a&\xAFV[`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x98\x89\x03\x98\x89\x81\x89\x88\t\x08\x94P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x8A\x89\t\x08\x95P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x87\t\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x86\x85\t\x92P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x89\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x83\x88\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x84\x8B\t\x97P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x89`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x85`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x89\x8A\t\x08\x08\x93P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x80\x84\x8B\t`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x87`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x88`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x03\x8D\x08\t\x08\x92P[\x96P\x96P\x96P\x96\x92PPPV[`\0\x80`\0a&\xCA\x84a')V[\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x87\t\x91P`\0`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x87\t\x90P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x81\x82\t\x91P`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19\x82\x89\t\x93PPP\x94P\x94\x92PPPV[`\0`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R`\x02`\x01``\x1B\x03c\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\x80\x82\x01R`\x01``\x1Bc\xFF\xFF\xFF\xFF`\xC0\x1B\x03\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa\x1C~W`\0\x80\xFD[P\x80Ta'\x91\x90a.\xAAV[`\0\x82U\x80`\x1F\x10a'\xA1WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x05j\x91\x90[\x80\x82\x11\x15a\t\xDBW`\0\x81U`\x01\x01a'\xBBV[`\0\x80`@\x83\x85\x03\x12\x15a'\xE2W`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a(\x08W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a(\x1FW`\0\x80\xFD[a\x05\xA0\x82a'\xF1V[`\0\x80\x83`\x1F\x84\x01\x12a(:W`\0\x80\xFD[P\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a(QW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a(iW`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0`@\x84\x86\x03\x12\x15a(\x85W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a(\xA2W`\0\x80\xFD[a(\xAE\x86\x82\x87\x01a((V[\x94\x97\x90\x96P\x93\x94PPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a(\xF3Wa(\xF3a(\xBBV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a)!Wa)!a(\xBBV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a)BWa)Ba(\xBBV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a)aW`\0\x80\xFD[\x815a)ta)o\x82a))V[a(\xF9V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a)\x89W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a)\xB8W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a)\xCEW`\0\x80\xFD[a#G\x84\x82\x85\x01a)PV[`\0\x80\x83`\x1F\x84\x01\x12a)\xECW`\0\x80\xFD[P\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x03W`\0\x80\xFD[` \x83\x01\x91P\x83` \x82`\x05\x1B\x85\x01\x01\x11\x15a(iW`\0\x80\xFD[`\0\x80` \x83\x85\x03\x12\x15a*1W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a*GW`\0\x80\xFD[a*S\x85\x82\x86\x01a)\xDAV[\x90\x96\x90\x95P\x93PPPPV[`\0a\x01`\x82\x84\x03\x12\x15a*rW`\0\x80\xFD[P\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a*\x8DW`\0\x80\xFD[\x835`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xA3W`\0\x80\xFD[a*\xAF\x86\x82\x87\x01a*_V[\x96` \x86\x015\x96P`@\x90\x95\x015\x94\x93PPPPV[`\0\x80`\0`@\x84\x86\x03\x12\x15a*\xDAW`\0\x80\xFD[a*\xE3\x84a'\xF1V[\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a(\xA2W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a+\x10W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a+&W`\0\x80\xFD[a#G\x84\x82\x85\x01a*_V[`\0\x80`\0`@\x84\x86\x03\x12\x15a+GW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+dW`\0\x80\xFD[a(\xAE\x86\x82\x87\x01a)\xDAV[`\0` \x82\x84\x03\x12\x15a+\x82W`\0\x80\xFD[P5\x91\x90PV[`\0[\x83\x81\x10\x15a+\xA4W\x81\x81\x01Q\x83\x82\x01R` \x01a+\x8CV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra+\xC5\x81` \x86\x01` \x86\x01a+\x89V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`\xFF`\xF8\x1B\x88\x16\x81R`\0` `\xE0` \x84\x01Ra+\xFA`\xE0\x84\x01\x8Aa+\xADV[\x83\x81\x03`@\x85\x01Ra,\x0C\x81\x8Aa+\xADV[``\x85\x01\x89\x90R`\x01`\x01`\xA0\x1B\x03\x88\x16`\x80\x86\x01R`\xA0\x85\x01\x87\x90R\x84\x81\x03`\xC0\x86\x01R\x85Q\x80\x82R` \x80\x88\x01\x93P\x90\x91\x01\x90`\0[\x81\x81\x10\x15a,`W\x83Q\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a,DV[P\x90\x9C\x9BPPPPPPPPPPPPV[` \x81R`\0a\x05\xA0` \x83\x01\x84a+\xADV[`\0` \x82\x84\x03\x12\x15a,\x97W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x05\xA0W`\0\x80\xFD[`\0\x80`\0\x80``\x85\x87\x03\x12\x15a,\xC5W`\0\x80\xFD[a,\xCE\x85a'\xF1V[\x93P` \x85\x015\x92P`@\x85\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xF0W`\0\x80\xFD[a,\xFC\x87\x82\x88\x01a((V[\x95\x98\x94\x97P\x95PPPPV[`\0\x80` \x83\x85\x03\x12\x15a-\x1BW`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a-1W`\0\x80\xFD[a*S\x85\x82\x86\x01a((V[`\0\x82Qa-O\x81\x84` \x87\x01a+\x89V[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x825`^\x19\x836\x03\x01\x81\x12a-OW`\0\x80\xFD[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a-\x9CW`\0\x80\xFD[\x83\x01\x805\x91P`\x01`\x01`@\x1B\x03\x82\x11\x15a-\xB6W`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a(iW`\0\x80\xFD[`\0\x80\x85\x85\x11\x15a-\xDBW`\0\x80\xFD[\x83\x86\x11\x15a-\xE8W`\0\x80\xFD[PP\x82\x01\x93\x91\x90\x92\x03\x91PV[`\x01`\x01`\xE0\x1B\x03\x19\x815\x81\x81\x16\x91`\x04\x85\x10\x15a.\x1DW\x80\x81\x86`\x04\x03`\x03\x1B\x1B\x83\x16\x16\x92P[PP\x92\x91PPV[`\0`\x01`\x01`@\x1B\x03\x80\x84\x11\x15a.?Wa.?a(\xBBV[\x83`\x05\x1B` a.Q` \x83\x01a(\xF9V[\x86\x81R\x91\x85\x01\x91` \x81\x01\x906\x84\x11\x15a.jW`\0\x80\xFD[\x86[\x84\x81\x10\x15a.\x9EW\x805\x86\x81\x11\x15a.\x84W`\0\x80\x81\xFD[a.\x906\x82\x8B\x01a)PV[\x84RP\x91\x83\x01\x91\x83\x01a.lV[P\x97\x96PPPPPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a.\xBEW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a*rWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a/\x06Wa/\x06a.\xDEV[P`\x01\x01\x90V[`\0` \x82\x84\x03\x12\x15a/\x1FW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a/6W`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a/JW`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10\x83\x82\x11\x17\x15a/eWa/ea(\xBBV[`@R\x825\x81R` \x83\x015\x82\x81\x11\x15a/~W`\0\x80\xFD[a/\x8A\x87\x82\x86\x01a)PV[` \x83\x01RP\x95\x94PPPPPV[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15a*rW`\0\x19` \x91\x90\x91\x03`\x03\x1B\x1B\x16\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a/\xD0W`\0\x80\xFD[PP\x80Q` \x90\x91\x01Q\x90\x92\x90\x91PV[`\0\x82`\x1F\x83\x01\x12a/\xF2W`\0\x80\xFD[\x81Qa0\0a)o\x82a))V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a0\x15W`\0\x80\xFD[a#G\x82` \x83\x01` \x87\x01a+\x89V[`\0` \x82\x84\x03\x12\x15a08W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a0OW`\0\x80\xFD[\x90\x83\x01\x90`\xC0\x82\x86\x03\x12\x15a0cW`\0\x80\xFD[a0ka(\xD1V[\x82Q\x82\x81\x11\x15a0zW`\0\x80\xFD[a0\x86\x87\x82\x86\x01a/\xE1V[\x82RP` \x83\x01Q\x82\x81\x11\x15a0\x9BW`\0\x80\xFD[a0\xA7\x87\x82\x86\x01a/\xE1V[` \x83\x01RP`@\x83\x01Q`@\x82\x01R``\x83\x01Q``\x82\x01R`\x80\x83\x01Q`\x80\x82\x01R`\xA0\x83\x01Q`\xA0\x82\x01R\x80\x93PPPP\x92\x91PPV[`\x1F\x82\x11\x15a\x07\nW`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a1\nWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a1)W\x82\x81U`\x01\x01a1\x16V[PPPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a1JWa1Ja(\xBBV[a1^\x81a1X\x84Ta.\xAAV[\x84a0\xE1V[` \x80`\x1F\x83\x11`\x01\x81\x14a1\x93W`\0\x84\x15a1{WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua1)V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a1\xC2W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a1\xA3V[P\x85\x82\x10\x15a1\xE0W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[\x80\x82\x01\x80\x82\x11\x15a\x05/Wa\x05/a.\xDEV[l\x111\xB40\xB662\xB73\xB2\x91\x1D\x11`\x99\x1B\x81R\x81Q`\0\x90a2,\x81`\r\x85\x01` \x87\x01a+\x89V[`\x11`\xF9\x1B`\r\x93\x90\x91\x01\x92\x83\x01RP`\x0E\x01\x91\x90PV[`\0` \x82\x84\x03\x12\x15a2VW`\0\x80\xFD[PQ\x91\x90PV[`\0\x83Qa2o\x81\x84` \x88\x01a+\x89V[\x91\x90\x91\x01\x91\x82RP` \x01\x91\x90PV[\x81\x81\x03\x81\x81\x11\x15a\x05/Wa\x05/a.\xDEV\xFE\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\xE6\xFA\xAD\xA7\x17\x9E\x84\xF3\xB9\xCA\xC2\xFCc%Q\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\0\xA2dipfsX\"\x12 v\xB8R\xC4N\x04\xB7(<\xDC\\\xE0:a\xAFh%I\x82*%\xC9\xCD\x17 \xCFHp\xE5B\xBD\xDDdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static MOCKCOINBASESMARTWALLET_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct MockCoinbaseSmartWallet(::ethers::contract::Contract); + impl ::core::clone::Clone for MockCoinbaseSmartWallet { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for MockCoinbaseSmartWallet { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for MockCoinbaseSmartWallet { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for MockCoinbaseSmartWallet { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(MockCoinbaseSmartWallet)) + .field(&self.address()) + .finish() + } + } + impl MockCoinbaseSmartWallet { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + MOCKCOINBASESMARTWALLET_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + MOCKCOINBASESMARTWALLET_ABI.clone(), + MOCKCOINBASESMARTWALLET_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `REPLAYABLE_NONCE_KEY` (0x88ce4c7c) function + pub fn replayable_nonce_key( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([136, 206, 76, 124], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `addOwnerAddress` (0x0f0f3f24) function + pub fn add_owner_address( + &self, + owner: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([15, 15, 63, 36], owner) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `addOwnerPublicKey` (0x29565e3b) function + pub fn add_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([41, 86, 94, 59], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `canSkipChainIdValidation` (0x9f9bcb34) function + pub fn can_skip_chain_id_validation( + &self, + function_selector: [u8; 4], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([159, 155, 203, 52], function_selector) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `domainSeparator` (0xf698da25) function + pub fn domain_separator(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([246, 152, 218, 37], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `eip712Domain` (0x84b0196e) function + pub fn eip_712_domain( + &self, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + [u8; 1], + ::std::string::String, + ::std::string::String, + ::ethers::core::types::U256, + ::ethers::core::types::Address, + [u8; 32], + ::std::vec::Vec<::ethers::core::types::U256>, + ), + > { + self.0 + .method_hash([132, 176, 25, 110], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `entryPoint` (0xb0d691fe) function + pub fn entry_point( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([176, 214, 145, 254], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `execute` (0xb61d27f6) function + pub fn execute( + &self, + target: ::ethers::core::types::Address, + value: ::ethers::core::types::U256, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([182, 29, 39, 246], (target, value, data)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `executeBatch` (0x34fcd5be) function + pub fn execute_batch( + &self, + calls: ::std::vec::Vec, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([52, 252, 213, 190], calls) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `executeBatch` (0x577f3cbf) function + pub fn execute_batch_with_filler( + &self, + filler: ::ethers::core::types::U256, + calls: ::std::vec::Vec, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([87, 127, 60, 191], (filler, calls)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `executeWithoutChainIdValidation` (0xbf6ba1fc) function + pub fn execute_without_chain_id_validation( + &self, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([191, 107, 161, 252], data) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getUserOpHashWithoutChainId` (0x4f6e7f22) function + pub fn get_user_op_hash_without_chain_id( + &self, + user_op: UserOperation, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 110, 127, 34], (user_op,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `implementation` (0x5c60da1b) function + pub fn implementation( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([92, 96, 218, 27], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `initialize` (0x6f2de70e) function + pub fn initialize( + &self, + owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([111, 45, 231, 14], owners) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerAddress` (0xa2e1a8d8) function + pub fn is_owner_address( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([162, 225, 168, 216], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerBytes` (0x1ca5393f) function + pub fn is_owner_bytes( + &self, + account: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 165, 57, 63], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerPublicKey` (0x066a1eb7) function + pub fn is_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([6, 106, 30, 183], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isValidSignature` (0x1626ba7e) function + pub fn is_valid_signature( + &self, + hash: [u8; 32], + signature: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([22, 38, 186, 126], (hash, signature)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextOwnerIndex` (0xd948fd2e) function + pub fn next_owner_index( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([217, 72, 253, 46], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `ownerAtIndex` (0x8ea69029) function + pub fn owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 166, 144, 41], index) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `proxiableUUID` (0x52d1902d) function + pub fn proxiable_uuid(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([82, 209, 144, 45], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `removeOwnerAtIndex` (0x72de3b5a) function + pub fn remove_owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([114, 222, 59, 90], index) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `replaySafeHash` (0xce1506be) function + pub fn replay_safe_hash( + &self, + hash: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([206, 21, 6, 190], hash) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `upgradeToAndCall` (0x4f1ef286) function + pub fn upgrade_to_and_call( + &self, + new_implementation: ::ethers::core::types::Address, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 30, 242, 134], (new_implementation, data)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `validateUserOp` (0x3a871cdd) function + pub fn validate_user_op( + &self, + user_op: UserOperation, + user_op_hash: [u8; 32], + missing_account_funds: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [58, 135, 28, 221], + (user_op, user_op_hash, missing_account_funds), + ) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `AddOwner` event + pub fn add_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AddOwnerFilter> { + self.0.event() + } + ///Gets the contract's `RemoveOwner` event + pub fn remove_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, RemoveOwnerFilter> + { + self.0.event() + } + ///Gets the contract's `Upgraded` event + pub fn upgraded_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, UpgradedFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + MockCoinbaseSmartWalletEvents, + > { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> + for MockCoinbaseSmartWallet + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `AlreadyOwner` with signature `AlreadyOwner(bytes)` and selector `0x8d16255a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "AlreadyOwner", abi = "AlreadyOwner(bytes)")] + pub struct AlreadyOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `Initialized` with signature `Initialized()` and selector `0x5daa87a0` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "Initialized", abi = "Initialized()")] + pub struct Initialized; + ///Custom Error type `InvalidEthereumAddressOwner` with signature `InvalidEthereumAddressOwner(bytes)` and selector `0xbff1ac65` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidEthereumAddressOwner", + abi = "InvalidEthereumAddressOwner(bytes)" + )] + pub struct InvalidEthereumAddressOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `InvalidNonceKey` with signature `InvalidNonceKey(uint256)` and selector `0x2ef37813` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "InvalidNonceKey", abi = "InvalidNonceKey(uint256)")] + pub struct InvalidNonceKey { + pub key: ::ethers::core::types::U256, + } + ///Custom Error type `InvalidOwnerBytesLength` with signature `InvalidOwnerBytesLength(bytes)` and selector `0x4eeab722` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidOwnerBytesLength", + abi = "InvalidOwnerBytesLength(bytes)" + )] + pub struct InvalidOwnerBytesLength { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `NoOwnerAtIndex` with signature `NoOwnerAtIndex(uint256)` and selector `0x68188e7a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "NoOwnerAtIndex", abi = "NoOwnerAtIndex(uint256)")] + pub struct NoOwnerAtIndex { + pub index: ::ethers::core::types::U256, + } + ///Custom Error type `SelectorNotAllowed` with signature `SelectorNotAllowed(bytes4)` and selector `0x3b06e146` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "SelectorNotAllowed", abi = "SelectorNotAllowed(bytes4)")] + pub struct SelectorNotAllowed { + pub selector: [u8; 4], + } + ///Custom Error type `Unauthorized` with signature `Unauthorized()` and selector `0x82b42900` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "Unauthorized", abi = "Unauthorized()")] + pub struct Unauthorized; + ///Custom Error type `UnauthorizedCallContext` with signature `UnauthorizedCallContext()` and selector `0x9f03a026` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UnauthorizedCallContext", abi = "UnauthorizedCallContext()")] + pub struct UnauthorizedCallContext; + ///Custom Error type `UpgradeFailed` with signature `UpgradeFailed()` and selector `0x55299b49` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UpgradeFailed", abi = "UpgradeFailed()")] + pub struct UpgradeFailed; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockCoinbaseSmartWalletErrors { + AlreadyOwner(AlreadyOwner), + Initialized(Initialized), + InvalidEthereumAddressOwner(InvalidEthereumAddressOwner), + InvalidNonceKey(InvalidNonceKey), + InvalidOwnerBytesLength(InvalidOwnerBytesLength), + NoOwnerAtIndex(NoOwnerAtIndex), + SelectorNotAllowed(SelectorNotAllowed), + Unauthorized(Unauthorized), + UnauthorizedCallContext(UnauthorizedCallContext), + UpgradeFailed(UpgradeFailed), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for MockCoinbaseSmartWalletErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::AlreadyOwner(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Initialized(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidEthereumAddressOwner(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::InvalidNonceKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidOwnerBytesLength(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::NoOwnerAtIndex(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SelectorNotAllowed(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Unauthorized(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UnauthorizedCallContext(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::UpgradeFailed(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockCoinbaseSmartWalletErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::AlreadyOwner(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Initialized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::InvalidEthereumAddressOwner(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::InvalidNonceKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::InvalidOwnerBytesLength(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NoOwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SelectorNotAllowed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Unauthorized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UnauthorizedCallContext(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpgradeFailed(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for MockCoinbaseSmartWalletErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector == ::selector() => true, + _ if selector == ::selector() => true, + _ if selector + == ::selector( + ) => + { + true + } + _ if selector == ::selector() => { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => true, + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for MockCoinbaseSmartWalletErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AlreadyOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::Initialized(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidEthereumAddressOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidNonceKey(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidOwnerBytesLength(element) => ::core::fmt::Display::fmt(element, f), + Self::NoOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::SelectorNotAllowed(element) => ::core::fmt::Display::fmt(element, f), + Self::Unauthorized(element) => ::core::fmt::Display::fmt(element, f), + Self::UnauthorizedCallContext(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for MockCoinbaseSmartWalletErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: AlreadyOwner) -> Self { + Self::AlreadyOwner(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: Initialized) -> Self { + Self::Initialized(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: InvalidEthereumAddressOwner) -> Self { + Self::InvalidEthereumAddressOwner(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: InvalidNonceKey) -> Self { + Self::InvalidNonceKey(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: InvalidOwnerBytesLength) -> Self { + Self::InvalidOwnerBytesLength(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: NoOwnerAtIndex) -> Self { + Self::NoOwnerAtIndex(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: SelectorNotAllowed) -> Self { + Self::SelectorNotAllowed(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: Unauthorized) -> Self { + Self::Unauthorized(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: UnauthorizedCallContext) -> Self { + Self::UnauthorizedCallContext(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletErrors { + fn from(value: UpgradeFailed) -> Self { + Self::UpgradeFailed(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "AddOwner", abi = "AddOwner(uint256,bytes)")] + pub struct AddOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "RemoveOwner", abi = "RemoveOwner(uint256,bytes)")] + pub struct RemoveOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Upgraded", abi = "Upgraded(address)")] + pub struct UpgradedFilter { + #[ethevent(indexed)] + pub implementation: ::ethers::core::types::Address, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockCoinbaseSmartWalletEvents { + AddOwnerFilter(AddOwnerFilter), + RemoveOwnerFilter(RemoveOwnerFilter), + UpgradedFilter(UpgradedFilter), + } + impl ::ethers::contract::EthLogDecode for MockCoinbaseSmartWalletEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = AddOwnerFilter::decode_log(log) { + return Ok(MockCoinbaseSmartWalletEvents::AddOwnerFilter(decoded)); + } + if let Ok(decoded) = RemoveOwnerFilter::decode_log(log) { + return Ok(MockCoinbaseSmartWalletEvents::RemoveOwnerFilter(decoded)); + } + if let Ok(decoded) = UpgradedFilter::decode_log(log) { + return Ok(MockCoinbaseSmartWalletEvents::UpgradedFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for MockCoinbaseSmartWalletEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradedFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletEvents { + fn from(value: AddOwnerFilter) -> Self { + Self::AddOwnerFilter(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletEvents { + fn from(value: RemoveOwnerFilter) -> Self { + Self::RemoveOwnerFilter(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletEvents { + fn from(value: UpgradedFilter) -> Self { + Self::UpgradedFilter(value) + } + } + ///Container type for all input parameters for the `REPLAYABLE_NONCE_KEY` function with signature `REPLAYABLE_NONCE_KEY()` and selector `0x88ce4c7c` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "REPLAYABLE_NONCE_KEY", abi = "REPLAYABLE_NONCE_KEY()")] + pub struct ReplayableNonceKeyCall; + ///Container type for all input parameters for the `addOwnerAddress` function with signature `addOwnerAddress(address)` and selector `0x0f0f3f24` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerAddress", abi = "addOwnerAddress(address)")] + pub struct AddOwnerAddressCall { + pub owner: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `addOwnerPublicKey` function with signature `addOwnerPublicKey(bytes32,bytes32)` and selector `0x29565e3b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerPublicKey", abi = "addOwnerPublicKey(bytes32,bytes32)")] + pub struct AddOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `canSkipChainIdValidation` function with signature `canSkipChainIdValidation(bytes4)` and selector `0x9f9bcb34` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "canSkipChainIdValidation", + abi = "canSkipChainIdValidation(bytes4)" + )] + pub struct CanSkipChainIdValidationCall { + pub function_selector: [u8; 4], + } + ///Container type for all input parameters for the `domainSeparator` function with signature `domainSeparator()` and selector `0xf698da25` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "domainSeparator", abi = "domainSeparator()")] + pub struct DomainSeparatorCall; + ///Container type for all input parameters for the `eip712Domain` function with signature `eip712Domain()` and selector `0x84b0196e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "eip712Domain", abi = "eip712Domain()")] + pub struct Eip712DomainCall; + ///Container type for all input parameters for the `entryPoint` function with signature `entryPoint()` and selector `0xb0d691fe` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "entryPoint", abi = "entryPoint()")] + pub struct EntryPointCall; + ///Container type for all input parameters for the `execute` function with signature `execute(address,uint256,bytes)` and selector `0xb61d27f6` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "execute", abi = "execute(address,uint256,bytes)")] + pub struct ExecuteCall { + pub target: ::ethers::core::types::Address, + pub value: ::ethers::core::types::U256, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `executeBatch` function with signature `executeBatch((address,uint256,bytes)[])` and selector `0x34fcd5be` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "executeBatch", abi = "executeBatch((address,uint256,bytes)[])")] + pub struct ExecuteBatchCall { + pub calls: ::std::vec::Vec, + } + ///Container type for all input parameters for the `executeBatch` function with signature `executeBatch(uint256,(address,uint256,bytes)[])` and selector `0x577f3cbf` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "executeBatch", + abi = "executeBatch(uint256,(address,uint256,bytes)[])" + )] + pub struct ExecuteBatchWithFillerCall { + pub filler: ::ethers::core::types::U256, + pub calls: ::std::vec::Vec, + } + ///Container type for all input parameters for the `executeWithoutChainIdValidation` function with signature `executeWithoutChainIdValidation(bytes)` and selector `0xbf6ba1fc` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "executeWithoutChainIdValidation", + abi = "executeWithoutChainIdValidation(bytes)" + )] + pub struct ExecuteWithoutChainIdValidationCall { + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `getUserOpHashWithoutChainId` function with signature `getUserOpHashWithoutChainId((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0x4f6e7f22` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "getUserOpHashWithoutChainId", + abi = "getUserOpHashWithoutChainId((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))" + )] + pub struct GetUserOpHashWithoutChainIdCall { + pub user_op: UserOperation, + } + ///Container type for all input parameters for the `implementation` function with signature `implementation()` and selector `0x5c60da1b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "implementation", abi = "implementation()")] + pub struct ImplementationCall; + ///Container type for all input parameters for the `initialize` function with signature `initialize(bytes[])` and selector `0x6f2de70e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "initialize", abi = "initialize(bytes[])")] + pub struct InitializeCall { + pub owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + } + ///Container type for all input parameters for the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerAddress", abi = "isOwnerAddress(address)")] + pub struct IsOwnerAddressCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerBytes", abi = "isOwnerBytes(bytes)")] + pub struct IsOwnerBytesCall { + pub account: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerPublicKey", abi = "isOwnerPublicKey(bytes32,bytes32)")] + pub struct IsOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isValidSignature", abi = "isValidSignature(bytes32,bytes)")] + pub struct IsValidSignatureCall { + pub hash: [u8; 32], + pub signature: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextOwnerIndex", abi = "nextOwnerIndex()")] + pub struct NextOwnerIndexCall; + ///Container type for all input parameters for the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "ownerAtIndex", abi = "ownerAtIndex(uint256)")] + pub struct OwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "proxiableUUID", abi = "proxiableUUID()")] + pub struct ProxiableUUIDCall; + ///Container type for all input parameters for the `removeOwnerAtIndex` function with signature `removeOwnerAtIndex(uint256)` and selector `0x72de3b5a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "removeOwnerAtIndex", abi = "removeOwnerAtIndex(uint256)")] + pub struct RemoveOwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `replaySafeHash` function with signature `replaySafeHash(bytes32)` and selector `0xce1506be` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "replaySafeHash", abi = "replaySafeHash(bytes32)")] + pub struct ReplaySafeHashCall { + pub hash: [u8; 32], + } + ///Container type for all input parameters for the `upgradeToAndCall` function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "upgradeToAndCall", abi = "upgradeToAndCall(address,bytes)")] + pub struct UpgradeToAndCallCall { + pub new_implementation: ::ethers::core::types::Address, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `validateUserOp` function with signature `validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)` and selector `0x3a871cdd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "validateUserOp", + abi = "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)" + )] + pub struct ValidateUserOpCall { + pub user_op: UserOperation, + pub user_op_hash: [u8; 32], + pub missing_account_funds: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockCoinbaseSmartWalletCalls { + ReplayableNonceKey(ReplayableNonceKeyCall), + AddOwnerAddress(AddOwnerAddressCall), + AddOwnerPublicKey(AddOwnerPublicKeyCall), + CanSkipChainIdValidation(CanSkipChainIdValidationCall), + DomainSeparator(DomainSeparatorCall), + Eip712Domain(Eip712DomainCall), + EntryPoint(EntryPointCall), + Execute(ExecuteCall), + ExecuteBatch(ExecuteBatchCall), + ExecuteBatchWithFiller(ExecuteBatchWithFillerCall), + ExecuteWithoutChainIdValidation(ExecuteWithoutChainIdValidationCall), + GetUserOpHashWithoutChainId(GetUserOpHashWithoutChainIdCall), + Implementation(ImplementationCall), + Initialize(InitializeCall), + IsOwnerAddress(IsOwnerAddressCall), + IsOwnerBytes(IsOwnerBytesCall), + IsOwnerPublicKey(IsOwnerPublicKeyCall), + IsValidSignature(IsValidSignatureCall), + NextOwnerIndex(NextOwnerIndexCall), + OwnerAtIndex(OwnerAtIndexCall), + ProxiableUUID(ProxiableUUIDCall), + RemoveOwnerAtIndex(RemoveOwnerAtIndexCall), + ReplaySafeHash(ReplaySafeHashCall), + UpgradeToAndCall(UpgradeToAndCallCall), + ValidateUserOp(ValidateUserOpCall), + } + impl ::ethers::core::abi::AbiDecode for MockCoinbaseSmartWalletCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ReplayableNonceKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerAddress(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerPublicKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CanSkipChainIdValidation(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::DomainSeparator(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::Eip712Domain(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::EntryPoint(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Execute(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ExecuteBatch(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ExecuteBatchWithFiller(decoded)); + } + if let Ok(decoded) = + ::decode( + data, + ) + { + return Ok(Self::ExecuteWithoutChainIdValidation(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::GetUserOpHashWithoutChainId(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::Implementation(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Initialize(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerAddress(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::IsOwnerBytes(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerPublicKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsValidSignature(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextOwnerIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::OwnerAtIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ProxiableUUID(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::RemoveOwnerAtIndex(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ReplaySafeHash(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UpgradeToAndCall(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ValidateUserOp(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockCoinbaseSmartWalletCalls { + fn encode(self) -> Vec { + match self { + Self::ReplayableNonceKey(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::AddOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::AddOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::CanSkipChainIdValidation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::DomainSeparator(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Eip712Domain(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::EntryPoint(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Execute(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ExecuteBatch(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ExecuteBatchWithFiller(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ExecuteWithoutChainIdValidation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::GetUserOpHashWithoutChainId(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Implementation(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Initialize(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerBytes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsValidSignature(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextOwnerIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::OwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ProxiableUUID(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RemoveOwnerAtIndex(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ReplaySafeHash(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UpgradeToAndCall(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ValidateUserOp(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for MockCoinbaseSmartWalletCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ReplayableNonceKey(element) => ::core::fmt::Display::fmt(element, f), + Self::AddOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::AddOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::CanSkipChainIdValidation(element) => ::core::fmt::Display::fmt(element, f), + Self::DomainSeparator(element) => ::core::fmt::Display::fmt(element, f), + Self::Eip712Domain(element) => ::core::fmt::Display::fmt(element, f), + Self::EntryPoint(element) => ::core::fmt::Display::fmt(element, f), + Self::Execute(element) => ::core::fmt::Display::fmt(element, f), + Self::ExecuteBatch(element) => ::core::fmt::Display::fmt(element, f), + Self::ExecuteBatchWithFiller(element) => ::core::fmt::Display::fmt(element, f), + Self::ExecuteWithoutChainIdValidation(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::GetUserOpHashWithoutChainId(element) => ::core::fmt::Display::fmt(element, f), + Self::Implementation(element) => ::core::fmt::Display::fmt(element, f), + Self::Initialize(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerBytes(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::IsValidSignature(element) => ::core::fmt::Display::fmt(element, f), + Self::NextOwnerIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::ProxiableUUID(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::ReplaySafeHash(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeToAndCall(element) => ::core::fmt::Display::fmt(element, f), + Self::ValidateUserOp(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ReplayableNonceKeyCall) -> Self { + Self::ReplayableNonceKey(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: AddOwnerAddressCall) -> Self { + Self::AddOwnerAddress(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: AddOwnerPublicKeyCall) -> Self { + Self::AddOwnerPublicKey(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: CanSkipChainIdValidationCall) -> Self { + Self::CanSkipChainIdValidation(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: DomainSeparatorCall) -> Self { + Self::DomainSeparator(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: Eip712DomainCall) -> Self { + Self::Eip712Domain(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: EntryPointCall) -> Self { + Self::EntryPoint(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ExecuteCall) -> Self { + Self::Execute(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ExecuteBatchCall) -> Self { + Self::ExecuteBatch(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ExecuteBatchWithFillerCall) -> Self { + Self::ExecuteBatchWithFiller(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ExecuteWithoutChainIdValidationCall) -> Self { + Self::ExecuteWithoutChainIdValidation(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: GetUserOpHashWithoutChainIdCall) -> Self { + Self::GetUserOpHashWithoutChainId(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ImplementationCall) -> Self { + Self::Implementation(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: InitializeCall) -> Self { + Self::Initialize(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: IsOwnerAddressCall) -> Self { + Self::IsOwnerAddress(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: IsOwnerBytesCall) -> Self { + Self::IsOwnerBytes(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: IsOwnerPublicKeyCall) -> Self { + Self::IsOwnerPublicKey(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: IsValidSignatureCall) -> Self { + Self::IsValidSignature(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: NextOwnerIndexCall) -> Self { + Self::NextOwnerIndex(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: OwnerAtIndexCall) -> Self { + Self::OwnerAtIndex(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ProxiableUUIDCall) -> Self { + Self::ProxiableUUID(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: RemoveOwnerAtIndexCall) -> Self { + Self::RemoveOwnerAtIndex(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ReplaySafeHashCall) -> Self { + Self::ReplaySafeHash(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: UpgradeToAndCallCall) -> Self { + Self::UpgradeToAndCall(value) + } + } + impl ::core::convert::From for MockCoinbaseSmartWalletCalls { + fn from(value: ValidateUserOpCall) -> Self { + Self::ValidateUserOp(value) + } + } + ///Container type for all return fields from the `REPLAYABLE_NONCE_KEY` function with signature `REPLAYABLE_NONCE_KEY()` and selector `0x88ce4c7c` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ReplayableNonceKeyReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `canSkipChainIdValidation` function with signature `canSkipChainIdValidation(bytes4)` and selector `0x9f9bcb34` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CanSkipChainIdValidationReturn(pub bool); + ///Container type for all return fields from the `domainSeparator` function with signature `domainSeparator()` and selector `0xf698da25` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct DomainSeparatorReturn(pub [u8; 32]); + ///Container type for all return fields from the `eip712Domain` function with signature `eip712Domain()` and selector `0x84b0196e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct Eip712DomainReturn { + pub fields: [u8; 1], + pub name: ::std::string::String, + pub version: ::std::string::String, + pub chain_id: ::ethers::core::types::U256, + pub verifying_contract: ::ethers::core::types::Address, + pub salt: [u8; 32], + pub extensions: ::std::vec::Vec<::ethers::core::types::U256>, + } + ///Container type for all return fields from the `entryPoint` function with signature `entryPoint()` and selector `0xb0d691fe` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct EntryPointReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `getUserOpHashWithoutChainId` function with signature `getUserOpHashWithoutChainId((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))` and selector `0x4f6e7f22` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetUserOpHashWithoutChainIdReturn { + pub user_op_hash: [u8; 32], + } + ///Container type for all return fields from the `implementation` function with signature `implementation()` and selector `0x5c60da1b` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ImplementationReturn { + pub address: ::ethers::core::types::Address, + } + ///Container type for all return fields from the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerAddressReturn(pub bool); + ///Container type for all return fields from the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerBytesReturn(pub bool); + ///Container type for all return fields from the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerPublicKeyReturn(pub bool); + ///Container type for all return fields from the `isValidSignature` function with signature `isValidSignature(bytes32,bytes)` and selector `0x1626ba7e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsValidSignatureReturn { + pub result: [u8; 4], + } + ///Container type for all return fields from the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextOwnerIndexReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct OwnerAtIndexReturn(pub ::ethers::core::types::Bytes); + ///Container type for all return fields from the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ProxiableUUIDReturn(pub [u8; 32]); + ///Container type for all return fields from the `replaySafeHash` function with signature `replaySafeHash(bytes32)` and selector `0xce1506be` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ReplaySafeHashReturn(pub [u8; 32]); + ///Container type for all return fields from the `validateUserOp` function with signature `validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)` and selector `0x3a871cdd` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ValidateUserOpReturn { + pub validation_data: ::ethers::core::types::U256, + } +} diff --git a/xmtp_id/src/bindings/mock_entry_point.rs b/xmtp_id/src/bindings/mock_entry_point.rs new file mode 100644 index 000000000..c5d5cbd42 --- /dev/null +++ b/xmtp_id/src/bindings/mock_entry_point.rs @@ -0,0 +1,468 @@ +pub use mock_entry_point::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod mock_entry_point { + pub use super::super::shared_types::*; + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("balanceOf"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("balanceOf"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("depositTo"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("depositTo"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("validateUserOp"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("validateUserOp"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOp"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Address, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct UserOperation"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("userOpHash"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("missingAccountFunds",), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("validationData"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("withdrawTo"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("withdrawTo"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: true, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static MOCKENTRYPOINT_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa\x06O\x80a\0 `\09`\0\xF3\xFE`\x80`@R`\x046\x10a\0CW`\x005`\xE0\x1C\x80c \\(x\x14a\0XW\x80cp\xA0\x821\x14a\0kW\x80c\xA1\x9D\x19\xD5\x14a\0\xAAW\x80c\xB7`\xFA\xF9\x14a\0\xBDW`\0\x80\xFD[6a\0SWa\0Q3a\0\xCBV[\0[`\0\x80\xFD[a\0Qa\0f6`\x04a\x02\x1DV[a\0\xFBV[4\x80\x15a\0wW`\0\x80\xFD[Pa\0\x98a\0\x866`\x04a\x02GV[`\0` \x81\x90R\x90\x81R`@\x90 T\x81V[`@Q\x90\x81R` \x01`@Q\x80\x91\x03\x90\xF3[a\0\x98a\0\xB86`\x04a\x036V[a\x01\x82V[a\0Qa\0\xCB6`\x04a\x02GV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R` \x81\x90R`@\x81 \x80T4\x92\x90a\0\xF3\x90\x84\x90a\x04\x9CV[\x90\x91UPPPV[3`\0\x90\x81R` \x81\x90R`@\x81 \x80T\x83\x92\x90a\x01\x1A\x90\x84\x90a\x04\xB5V[\x90\x91UPP`@Q`\0\x90`\x01`\x01`\xA0\x1B\x03\x84\x16\x90\x83\x90\x83\x81\x81\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a\x01jW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x01oV[``\x91P[PP\x90P\x80a\x01}W`\0\x80\xFD[PPPV[`@Qc:\x87\x1C\xDD`\xE0\x1B\x81R`\0\x90`\x01`\x01`\xA0\x1B\x03\x86\x16\x90c:\x87\x1C\xDD\x90a\x01\xB5\x90\x87\x90\x87\x90\x87\x90`\x04\x01a\x05\x0EV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x01\xD4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01\xF8\x91\x90a\x06\0V[\x95\x94PPPPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x02\x18W`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x020W`\0\x80\xFD[a\x029\x83a\x02\x01V[\x94` \x93\x90\x93\x015\x93PPPV[`\0` \x82\x84\x03\x12\x15a\x02YW`\0\x80\xFD[a\x02b\x82a\x02\x01V[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Qa\x01`\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x02\xA3Wa\x02\xA3a\x02iV[`@R\x90V[`\0\x82`\x1F\x83\x01\x12a\x02\xBAW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x02\xD5Wa\x02\xD5a\x02iV[`@Q`\x1F\x83\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\x02\xFDWa\x02\xFDa\x02iV[\x81`@R\x83\x81R\x86` \x85\x88\x01\x01\x11\x15a\x03\x16W`\0\x80\xFD[\x83` \x87\x01` \x83\x017`\0` \x85\x83\x01\x01R\x80\x94PPPPP\x92\x91PPV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x03LW`\0\x80\xFD[a\x03U\x85a\x02\x01V[\x93P` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x03rW`\0\x80\xFD[\x90\x86\x01\x90a\x01`\x82\x89\x03\x12\x15a\x03\x87W`\0\x80\xFD[a\x03\x8Fa\x02\x7FV[a\x03\x98\x83a\x02\x01V[\x81R` \x83\x015` \x82\x01R`@\x83\x015\x82\x81\x11\x15a\x03\xB6W`\0\x80\xFD[a\x03\xC2\x8A\x82\x86\x01a\x02\xA9V[`@\x83\x01RP``\x83\x015\x82\x81\x11\x15a\x03\xDAW`\0\x80\xFD[a\x03\xE6\x8A\x82\x86\x01a\x02\xA9V[``\x83\x01RP`\x80\x83\x015`\x80\x82\x01R`\xA0\x83\x015`\xA0\x82\x01R`\xC0\x83\x015`\xC0\x82\x01R`\xE0\x83\x015`\xE0\x82\x01Ra\x01\0\x80\x84\x015\x81\x83\x01RPa\x01 \x80\x84\x015\x83\x81\x11\x15a\x044W`\0\x80\xFD[a\x04@\x8B\x82\x87\x01a\x02\xA9V[\x82\x84\x01RPPa\x01@\x80\x84\x015\x83\x81\x11\x15a\x04ZW`\0\x80\xFD[a\x04f\x8B\x82\x87\x01a\x02\xA9V[\x91\x83\x01\x91\x90\x91RP\x95\x98\x95\x97PPPP`@\x84\x015\x93``\x015\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x04\xAFWa\x04\xAFa\x04\x86V[\x92\x91PPV[\x81\x81\x03\x81\x81\x11\x15a\x04\xAFWa\x04\xAFa\x04\x86V[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\x04\xEEW` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\x04\xD2V[P`\0` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[``\x81Ra\x05(``\x82\x01\x85Q`\x01`\x01`\xA0\x1B\x03\x16\x90RV[` \x84\x01Q`\x80\x82\x01R`\0`@\x85\x01Qa\x01`\x80`\xA0\x85\x01Ra\x05Pa\x01\xC0\x85\x01\x83a\x04\xC8V[\x91P``\x87\x01Q`_\x19\x80\x86\x85\x03\x01`\xC0\x87\x01Ra\x05n\x84\x83a\x04\xC8V[\x93P`\x80\x89\x01Q`\xE0\x87\x01R`\xA0\x89\x01Q\x91Pa\x01\0\x82\x81\x88\x01R`\xC0\x8A\x01Q\x92Pa\x01 \x83\x81\x89\x01R`\xE0\x8B\x01Q\x93Pa\x01@\x84\x81\x8A\x01R\x82\x8C\x01Q\x86\x8A\x01R\x81\x8C\x01Q\x95P\x83\x89\x88\x03\x01a\x01\x80\x8A\x01Ra\x05\xCA\x87\x87a\x04\xC8V[\x96P\x80\x8C\x01Q\x95PPPP\x80\x86\x85\x03\x01a\x01\xA0\x87\x01RPPa\x05\xEC\x82\x82a\x04\xC8V[` \x85\x01\x96\x90\x96RPPP`@\x01R\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x06\x12W`\0\x80\xFD[PQ\x91\x90PV\xFE\xA2dipfsX\"\x12 \xF4:J\xCD\xE6\xE3\xF3\xAF\xC1\xCC\xFA\xE5\xEF~?\x1B$9n\x8FV\x92b\x02\xC8\xBC\xF9\xD3\xD8|\xAA\xBCdsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static MOCKENTRYPOINT_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\0CW`\x005`\xE0\x1C\x80c \\(x\x14a\0XW\x80cp\xA0\x821\x14a\0kW\x80c\xA1\x9D\x19\xD5\x14a\0\xAAW\x80c\xB7`\xFA\xF9\x14a\0\xBDW`\0\x80\xFD[6a\0SWa\0Q3a\0\xCBV[\0[`\0\x80\xFD[a\0Qa\0f6`\x04a\x02\x1DV[a\0\xFBV[4\x80\x15a\0wW`\0\x80\xFD[Pa\0\x98a\0\x866`\x04a\x02GV[`\0` \x81\x90R\x90\x81R`@\x90 T\x81V[`@Q\x90\x81R` \x01`@Q\x80\x91\x03\x90\xF3[a\0\x98a\0\xB86`\x04a\x036V[a\x01\x82V[a\0Qa\0\xCB6`\x04a\x02GV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R` \x81\x90R`@\x81 \x80T4\x92\x90a\0\xF3\x90\x84\x90a\x04\x9CV[\x90\x91UPPPV[3`\0\x90\x81R` \x81\x90R`@\x81 \x80T\x83\x92\x90a\x01\x1A\x90\x84\x90a\x04\xB5V[\x90\x91UPP`@Q`\0\x90`\x01`\x01`\xA0\x1B\x03\x84\x16\x90\x83\x90\x83\x81\x81\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a\x01jW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x01oV[``\x91P[PP\x90P\x80a\x01}W`\0\x80\xFD[PPPV[`@Qc:\x87\x1C\xDD`\xE0\x1B\x81R`\0\x90`\x01`\x01`\xA0\x1B\x03\x86\x16\x90c:\x87\x1C\xDD\x90a\x01\xB5\x90\x87\x90\x87\x90\x87\x90`\x04\x01a\x05\x0EV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x01\xD4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01\xF8\x91\x90a\x06\0V[\x95\x94PPPPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x02\x18W`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x020W`\0\x80\xFD[a\x029\x83a\x02\x01V[\x94` \x93\x90\x93\x015\x93PPPV[`\0` \x82\x84\x03\x12\x15a\x02YW`\0\x80\xFD[a\x02b\x82a\x02\x01V[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Qa\x01`\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x02\xA3Wa\x02\xA3a\x02iV[`@R\x90V[`\0\x82`\x1F\x83\x01\x12a\x02\xBAW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x02\xD5Wa\x02\xD5a\x02iV[`@Q`\x1F\x83\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\x02\xFDWa\x02\xFDa\x02iV[\x81`@R\x83\x81R\x86` \x85\x88\x01\x01\x11\x15a\x03\x16W`\0\x80\xFD[\x83` \x87\x01` \x83\x017`\0` \x85\x83\x01\x01R\x80\x94PPPPP\x92\x91PPV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x03LW`\0\x80\xFD[a\x03U\x85a\x02\x01V[\x93P` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x03rW`\0\x80\xFD[\x90\x86\x01\x90a\x01`\x82\x89\x03\x12\x15a\x03\x87W`\0\x80\xFD[a\x03\x8Fa\x02\x7FV[a\x03\x98\x83a\x02\x01V[\x81R` \x83\x015` \x82\x01R`@\x83\x015\x82\x81\x11\x15a\x03\xB6W`\0\x80\xFD[a\x03\xC2\x8A\x82\x86\x01a\x02\xA9V[`@\x83\x01RP``\x83\x015\x82\x81\x11\x15a\x03\xDAW`\0\x80\xFD[a\x03\xE6\x8A\x82\x86\x01a\x02\xA9V[``\x83\x01RP`\x80\x83\x015`\x80\x82\x01R`\xA0\x83\x015`\xA0\x82\x01R`\xC0\x83\x015`\xC0\x82\x01R`\xE0\x83\x015`\xE0\x82\x01Ra\x01\0\x80\x84\x015\x81\x83\x01RPa\x01 \x80\x84\x015\x83\x81\x11\x15a\x044W`\0\x80\xFD[a\x04@\x8B\x82\x87\x01a\x02\xA9V[\x82\x84\x01RPPa\x01@\x80\x84\x015\x83\x81\x11\x15a\x04ZW`\0\x80\xFD[a\x04f\x8B\x82\x87\x01a\x02\xA9V[\x91\x83\x01\x91\x90\x91RP\x95\x98\x95\x97PPPP`@\x84\x015\x93``\x015\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x04\xAFWa\x04\xAFa\x04\x86V[\x92\x91PPV[\x81\x81\x03\x81\x81\x11\x15a\x04\xAFWa\x04\xAFa\x04\x86V[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\x04\xEEW` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\x04\xD2V[P`\0` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[``\x81Ra\x05(``\x82\x01\x85Q`\x01`\x01`\xA0\x1B\x03\x16\x90RV[` \x84\x01Q`\x80\x82\x01R`\0`@\x85\x01Qa\x01`\x80`\xA0\x85\x01Ra\x05Pa\x01\xC0\x85\x01\x83a\x04\xC8V[\x91P``\x87\x01Q`_\x19\x80\x86\x85\x03\x01`\xC0\x87\x01Ra\x05n\x84\x83a\x04\xC8V[\x93P`\x80\x89\x01Q`\xE0\x87\x01R`\xA0\x89\x01Q\x91Pa\x01\0\x82\x81\x88\x01R`\xC0\x8A\x01Q\x92Pa\x01 \x83\x81\x89\x01R`\xE0\x8B\x01Q\x93Pa\x01@\x84\x81\x8A\x01R\x82\x8C\x01Q\x86\x8A\x01R\x81\x8C\x01Q\x95P\x83\x89\x88\x03\x01a\x01\x80\x8A\x01Ra\x05\xCA\x87\x87a\x04\xC8V[\x96P\x80\x8C\x01Q\x95PPPP\x80\x86\x85\x03\x01a\x01\xA0\x87\x01RPPa\x05\xEC\x82\x82a\x04\xC8V[` \x85\x01\x96\x90\x96RPPP`@\x01R\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x06\x12W`\0\x80\xFD[PQ\x91\x90PV\xFE\xA2dipfsX\"\x12 \xF4:J\xCD\xE6\xE3\xF3\xAF\xC1\xCC\xFA\xE5\xEF~?\x1B$9n\x8FV\x92b\x02\xC8\xBC\xF9\xD3\xD8|\xAA\xBCdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static MOCKENTRYPOINT_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct MockEntryPoint(::ethers::contract::Contract); + impl ::core::clone::Clone for MockEntryPoint { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for MockEntryPoint { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for MockEntryPoint { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for MockEntryPoint { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(MockEntryPoint)) + .field(&self.address()) + .finish() + } + } + impl MockEntryPoint { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + MOCKENTRYPOINT_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + MOCKENTRYPOINT_ABI.clone(), + MOCKENTRYPOINT_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `balanceOf` (0x70a08231) function + pub fn balance_of( + &self, + p0: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([112, 160, 130, 49], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `depositTo` (0xb760faf9) function + pub fn deposit_to( + &self, + to: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([183, 96, 250, 249], to) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `validateUserOp` (0xa19d19d5) function + pub fn validate_user_op( + &self, + account: ::ethers::core::types::Address, + user_op: UserOperation, + user_op_hash: [u8; 32], + missing_account_funds: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [161, 157, 25, 213], + (account, user_op, user_op_hash, missing_account_funds), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `withdrawTo` (0x205c2878) function + pub fn withdraw_to( + &self, + to: ::ethers::core::types::Address, + amount: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([32, 92, 40, 120], (to, amount)) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> + for MockEntryPoint + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(address)")] + pub struct BalanceOfCall(pub ::ethers::core::types::Address); + ///Container type for all input parameters for the `depositTo` function with signature `depositTo(address)` and selector `0xb760faf9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "depositTo", abi = "depositTo(address)")] + pub struct DepositToCall { + pub to: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `validateUserOp` function with signature `validateUserOp(address,(address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)` and selector `0xa19d19d5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "validateUserOp", + abi = "validateUserOp(address,(address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)" + )] + pub struct ValidateUserOpCall { + pub account: ::ethers::core::types::Address, + pub user_op: UserOperation, + pub user_op_hash: [u8; 32], + pub missing_account_funds: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `withdrawTo` function with signature `withdrawTo(address,uint256)` and selector `0x205c2878` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "withdrawTo", abi = "withdrawTo(address,uint256)")] + pub struct WithdrawToCall { + pub to: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockEntryPointCalls { + BalanceOf(BalanceOfCall), + DepositTo(DepositToCall), + ValidateUserOp(ValidateUserOpCall), + WithdrawTo(WithdrawToCall), + } + impl ::ethers::core::abi::AbiDecode for MockEntryPointCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) { + return Ok(Self::BalanceOf(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::DepositTo(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ValidateUserOp(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::WithdrawTo(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockEntryPointCalls { + fn encode(self) -> Vec { + match self { + Self::BalanceOf(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::DepositTo(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ValidateUserOp(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::WithdrawTo(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for MockEntryPointCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::BalanceOf(element) => ::core::fmt::Display::fmt(element, f), + Self::DepositTo(element) => ::core::fmt::Display::fmt(element, f), + Self::ValidateUserOp(element) => ::core::fmt::Display::fmt(element, f), + Self::WithdrawTo(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockEntryPointCalls { + fn from(value: BalanceOfCall) -> Self { + Self::BalanceOf(value) + } + } + impl ::core::convert::From for MockEntryPointCalls { + fn from(value: DepositToCall) -> Self { + Self::DepositTo(value) + } + } + impl ::core::convert::From for MockEntryPointCalls { + fn from(value: ValidateUserOpCall) -> Self { + Self::ValidateUserOp(value) + } + } + impl ::core::convert::From for MockEntryPointCalls { + fn from(value: WithdrawToCall) -> Self { + Self::WithdrawTo(value) + } + } + ///Container type for all return fields from the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct BalanceOfReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `validateUserOp` function with signature `validateUserOp(address,(address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)` and selector `0xa19d19d5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ValidateUserOpReturn { + pub validation_data: ::ethers::core::types::U256, + } +} diff --git a/xmtp_id/src/bindings/mock_erc20.rs b/xmtp_id/src/bindings/mock_erc20.rs new file mode 100644 index 000000000..6bc053d3a --- /dev/null +++ b/xmtp_id/src/bindings/mock_erc20.rs @@ -0,0 +1,1299 @@ +pub use mock_erc20::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod mock_erc20 { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("DOMAIN_SEPARATOR"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("DOMAIN_SEPARATOR"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("allowance"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("allowance"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("approve"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("approve"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("spender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("balanceOf"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("balanceOf"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("decimals"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("decimals"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint8"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("initialize"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("initialize"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_name"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_symbol"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_decimals"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint8"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("name"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("name"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nonces"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nonces"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("permit"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("permit"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("spender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("value"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("deadline"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("v"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint8"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("r"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("s"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("symbol"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("symbol"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("totalSupply"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("totalSupply"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("transfer"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("transfer"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("transferFrom"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("transferFrom"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("from"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("Approval"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Approval"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("spender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Transfer"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Transfer"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("from"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static MOCKERC20_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa\x0Ej\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xCFW`\x005`\xE0\x1C\x80c6D\xE5\x15\x11a\0\x8CW\x80c\x95\xD8\x9BA\x11a\0fW\x80c\x95\xD8\x9BA\x14a\x01\xBBW\x80c\xA9\x05\x9C\xBB\x14a\x01\xC3W\x80c\xD5\x05\xAC\xCF\x14a\x01\xD6W\x80c\xDDb\xED>\x14a\x01\xE9W`\0\x80\xFD[\x80c6D\xE5\x15\x14a\x01sW\x80cp\xA0\x821\x14a\x01{W\x80c~\xCE\xBE\0\x14a\x01\x9BW`\0\x80\xFD[\x80c\x06\xFD\xDE\x03\x14a\0\xD4W\x80c\t^\xA7\xB3\x14a\0\xF2W\x80c\x16$\xF6\xC6\x14a\x01\x15W\x80c\x18\x16\r\xDD\x14a\x01*W\x80c#\xB8r\xDD\x14a\x01AW\x80c1<\xE5g\x14a\x01TW[`\0\x80\xFD[a\0\xDCa\x02\x14V[`@Qa\0\xE9\x91\x90a\tmV[`@Q\x80\x91\x03\x90\xF3[a\x01\x05a\x01\x006`\x04a\t\xD8V[a\x02\xA2V[`@Q\x90\x15\x15\x81R` \x01a\0\xE9V[a\x01(a\x01#6`\x04a\n\xB6V[a\x03\x0FV[\0[a\x013`\x03T\x81V[`@Q\x90\x81R` \x01a\0\xE9V[a\x01\x05a\x01O6`\x04a\x0B*V[a\x03\xAEV[`\x02Ta\x01a\x90`\xFF\x16\x81V[`@Q`\xFF\x90\x91\x16\x81R` \x01a\0\xE9V[a\x013a\x04\xC3V[a\x013a\x01\x896`\x04a\x0BfV[`\x04` R`\0\x90\x81R`@\x90 T\x81V[a\x013a\x01\xA96`\x04a\x0BfV[`\x08` R`\0\x90\x81R`@\x90 T\x81V[a\0\xDCa\x04\xE9V[a\x01\x05a\x01\xD16`\x04a\t\xD8V[a\x04\xF6V[a\x01(a\x01\xE46`\x04a\x0B\x81V[a\x05\x8DV[a\x013a\x01\xF76`\x04a\x0B\xEBV[`\x05` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T\x81V[`\0\x80Ta\x02!\x90a\x0C\x1EV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x02M\x90a\x0C\x1EV[\x80\x15a\x02\x9AW\x80`\x1F\x10a\x02oWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\x9AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x02}W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81V[3`\0\x81\x81R`\x05` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x87\x16\x80\x85R\x92R\x80\x83 \x85\x90UQ\x91\x92\x90\x91\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x90a\x02\xFD\x90\x86\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA3P`\x01[\x92\x91PPV[`\tT`\xFF\x16\x15a\x03]W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x13`$\x82\x01Rr\x10S\x14\x91PQ\x16W\xD2S\x92U\x12PS\x12V\x91Q`j\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\0a\x03i\x84\x82a\x0C\xA9V[P`\x01a\x03v\x83\x82a\x0C\xA9V[P`\x02\x80T`\xFF\x19\x16`\xFF\x83\x16\x17\x90Ua\x03\x8Ea\x07\xEBV[`\x06Ua\x03\x99a\x08\x04V[`\x07UPP`\t\x80T`\xFF\x19\x16`\x01\x17\x90UPV[`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T`\0\x19\x81\x14a\x04\nWa\x03\xE5\x81\x84a\x08\xA7V[`\x01`\x01`\xA0\x1B\x03\x86\x16`\0\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 U[`\x01`\x01`\xA0\x1B\x03\x85\x16`\0\x90\x81R`\x04` R`@\x90 Ta\x04-\x90\x84a\x08\xA7V[`\x01`\x01`\xA0\x1B\x03\x80\x87\x16`\0\x90\x81R`\x04` R`@\x80\x82 \x93\x90\x93U\x90\x86\x16\x81R Ta\x04\\\x90\x84a\t\nV[`\x01`\x01`\xA0\x1B\x03\x80\x86\x16`\0\x81\x81R`\x04` R`@\x90\x81\x90 \x93\x90\x93U\x91Q\x90\x87\x16\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90a\x04\xB0\x90\x87\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA3P`\x01\x94\x93PPPPV[`\0`\x06Ta\x04\xD0a\x07\xEBV[\x14a\x04\xE2Wa\x04\xDDa\x08\x04V[\x90P\x90V[P`\x07T\x90V[`\x01\x80Ta\x02!\x90a\x0C\x1EV[3`\0\x90\x81R`\x04` R`@\x81 Ta\x05\x10\x90\x83a\x08\xA7V[3`\0\x90\x81R`\x04` R`@\x80\x82 \x92\x90\x92U`\x01`\x01`\xA0\x1B\x03\x85\x16\x81R Ta\x05<\x90\x83a\t\nV[`\x01`\x01`\xA0\x1B\x03\x84\x16`\0\x81\x81R`\x04` R`@\x90\x81\x90 \x92\x90\x92U\x90Q3\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90a\x02\xFD\x90\x86\x81R` \x01\x90V[B\x84\x10\x15a\x05\xDDW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FPERMIT_DEADLINE_EXPIRED\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03TV[`\0`\x01a\x05\xE9a\x04\xC3V[`\x01`\x01`\xA0\x1B\x03\x8A\x16`\0\x90\x81R`\x08` R`@\x81 \x80T\x7Fnq\xED\xAE\x12\xB1\xB9\x7FM\x1F`7\x0F\xEF\x10\x10_\xA2\xFA\xAE\x01&\x11J\x16\x9Cd\x84]a&\xC9\x92\x8D\x92\x8D\x92\x8D\x92\x90\x91\x90a\x067\x83a\r\x7FV[\x90\x91UP`@\x80Q` \x81\x01\x96\x90\x96R`\x01`\x01`\xA0\x1B\x03\x94\x85\x16\x90\x86\x01R\x92\x90\x91\x16``\x84\x01R`\x80\x83\x01R`\xA0\x82\x01R`\xC0\x81\x01\x88\x90R`\xE0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x06\xB0\x92\x91\x90a\x19\x01`\xF0\x1B\x81R`\x02\x81\x01\x92\x90\x92R`\"\x82\x01R`B\x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 `\0\x84R\x90\x83\x01\x80\x83RR`\xFF\x87\x16\x90\x82\x01R``\x81\x01\x85\x90R`\x80\x81\x01\x84\x90R`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a\x07\x0EW=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x91PP`\x01`\x01`\xA0\x1B\x03\x81\x16\x15\x80\x15\x90a\x07DWP\x87`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14[a\x07\x81W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rm$\xA7+ \xA6$\xA2/\xA9\xA4\xA3\xA7\"\xA9`\x91\x1B`D\x82\x01R`d\x01a\x03TV[`\x01`\x01`\xA0\x1B\x03\x81\x81\x16`\0\x90\x81R`\x05` \x90\x81R`@\x80\x83 \x8B\x85\x16\x80\x85R\x90\x83R\x92\x81\x90 \x8A\x90UQ\x89\x81R\x91\x92\x8B\x16\x91\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x01`@Q\x80\x91\x03\x90\xA3PPPPPPPPV[`\0a\ti\x80a\x07\xFDc\xFF\xFF\xFF\xFF\x82\x16V[\x92PPP\x90V[`\0\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F`\0`@Qa\x086\x91\x90a\r\x98V[`@Q\x80\x91\x03\x90 \x7F\xC8\x9E\xFD\xAAT\xC0\xF2\x0Cz\xDFa(\x82\xDF\tP\xF5\xA9Qc~\x03\x07\xCD\xCBLg/)\x8B\x8B\xC6a\x08ga\x07\xEBV[`@\x80Q` \x81\x01\x95\x90\x95R\x84\x01\x92\x90\x92R``\x83\x01R`\x80\x82\x01R0`\xA0\x82\x01R`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[`\0\x81\x83\x10\x15a\x08\xF9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FERC20: subtraction underflow\0\0\0\0`D\x82\x01R`d\x01a\x03TV[a\t\x03\x82\x84a\x0E\x0EV[\x93\x92PPPV[`\0\x80a\t\x17\x83\x85a\x0E!V[\x90P\x83\x81\x10\x15a\t\x03W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FERC20: addition overflow\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03TV[F\x90V[`\0` \x80\x83R\x83Q\x80` \x85\x01R`\0[\x81\x81\x10\x15a\t\x9BW\x85\x81\x01\x83\x01Q\x85\x82\x01`@\x01R\x82\x01a\t\x7FV[P`\0`@\x82\x86\x01\x01R`@`\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x92PPP\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\t\xD3W`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\t\xEBW`\0\x80\xFD[a\t\xF4\x83a\t\xBCV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x82`\x1F\x83\x01\x12a\n)W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\nDWa\nDa\n\x02V[`@Q`\x1F\x83\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\nlWa\nla\n\x02V[\x81`@R\x83\x81R\x86` \x85\x88\x01\x01\x11\x15a\n\x85W`\0\x80\xFD[\x83` \x87\x01` \x83\x017`\0` \x85\x83\x01\x01R\x80\x94PPPPP\x92\x91PPV[\x805`\xFF\x81\x16\x81\x14a\t\xD3W`\0\x80\xFD[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xCBW`\0\x80\xFD[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\n\xE3W`\0\x80\xFD[a\n\xEF\x87\x83\x88\x01a\n\x18V[\x94P` \x86\x015\x91P\x80\x82\x11\x15a\x0B\x05W`\0\x80\xFD[Pa\x0B\x12\x86\x82\x87\x01a\n\x18V[\x92PPa\x0B!`@\x85\x01a\n\xA5V[\x90P\x92P\x92P\x92V[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0B?W`\0\x80\xFD[a\x0BH\x84a\t\xBCV[\x92Pa\x0BV` \x85\x01a\t\xBCV[\x91P`@\x84\x015\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x0BxW`\0\x80\xFD[a\t\x03\x82a\t\xBCV[`\0\x80`\0\x80`\0\x80`\0`\xE0\x88\x8A\x03\x12\x15a\x0B\x9CW`\0\x80\xFD[a\x0B\xA5\x88a\t\xBCV[\x96Pa\x0B\xB3` \x89\x01a\t\xBCV[\x95P`@\x88\x015\x94P``\x88\x015\x93Pa\x0B\xCF`\x80\x89\x01a\n\xA5V[\x92P`\xA0\x88\x015\x91P`\xC0\x88\x015\x90P\x92\x95\x98\x91\x94\x97P\x92\x95PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0B\xFEW`\0\x80\xFD[a\x0C\x07\x83a\t\xBCV[\x91Pa\x0C\x15` \x84\x01a\t\xBCV[\x90P\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x0C2W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x0CRWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x0C\xA4W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x0C\x81WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x0C\xA0W\x82\x81U`\x01\x01a\x0C\x8DV[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0C\xC3Wa\x0C\xC3a\n\x02V[a\x0C\xD7\x81a\x0C\xD1\x84Ta\x0C\x1EV[\x84a\x0CXV[` \x80`\x1F\x83\x11`\x01\x81\x14a\r\x0CW`\0\x84\x15a\x0C\xF4WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x0C\xA0V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\r;W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\r\x1CV[P\x85\x82\x10\x15a\rYW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\r\x91Wa\r\x91a\riV[P`\x01\x01\x90V[`\0\x80\x83Ta\r\xA6\x81a\x0C\x1EV[`\x01\x82\x81\x16\x80\x15a\r\xBEW`\x01\x81\x14a\r\xD3Wa\x0E\x02V[`\xFF\x19\x84\x16\x87R\x82\x15\x15\x83\x02\x87\x01\x94Pa\x0E\x02V[\x87`\0R` \x80`\0 `\0[\x85\x81\x10\x15a\r\xF9W\x81T\x8A\x82\x01R\x90\x84\x01\x90\x82\x01a\r\xE0V[PPP\x82\x87\x01\x94P[P\x92\x96\x95PPPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x03\tWa\x03\ta\riV[\x80\x82\x01\x80\x82\x11\x15a\x03\tWa\x03\ta\riV\xFE\xA2dipfsX\"\x12 ~\xCC:\x08\xB5\x03l\xB5d\x08\xBEJ\x0B\0\x92\\\x99D\xA8\xD8\x92\x19}?D\xDF5-\x9D\xCE\xCF\x80dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static MOCKERC20_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xCFW`\x005`\xE0\x1C\x80c6D\xE5\x15\x11a\0\x8CW\x80c\x95\xD8\x9BA\x11a\0fW\x80c\x95\xD8\x9BA\x14a\x01\xBBW\x80c\xA9\x05\x9C\xBB\x14a\x01\xC3W\x80c\xD5\x05\xAC\xCF\x14a\x01\xD6W\x80c\xDDb\xED>\x14a\x01\xE9W`\0\x80\xFD[\x80c6D\xE5\x15\x14a\x01sW\x80cp\xA0\x821\x14a\x01{W\x80c~\xCE\xBE\0\x14a\x01\x9BW`\0\x80\xFD[\x80c\x06\xFD\xDE\x03\x14a\0\xD4W\x80c\t^\xA7\xB3\x14a\0\xF2W\x80c\x16$\xF6\xC6\x14a\x01\x15W\x80c\x18\x16\r\xDD\x14a\x01*W\x80c#\xB8r\xDD\x14a\x01AW\x80c1<\xE5g\x14a\x01TW[`\0\x80\xFD[a\0\xDCa\x02\x14V[`@Qa\0\xE9\x91\x90a\tmV[`@Q\x80\x91\x03\x90\xF3[a\x01\x05a\x01\x006`\x04a\t\xD8V[a\x02\xA2V[`@Q\x90\x15\x15\x81R` \x01a\0\xE9V[a\x01(a\x01#6`\x04a\n\xB6V[a\x03\x0FV[\0[a\x013`\x03T\x81V[`@Q\x90\x81R` \x01a\0\xE9V[a\x01\x05a\x01O6`\x04a\x0B*V[a\x03\xAEV[`\x02Ta\x01a\x90`\xFF\x16\x81V[`@Q`\xFF\x90\x91\x16\x81R` \x01a\0\xE9V[a\x013a\x04\xC3V[a\x013a\x01\x896`\x04a\x0BfV[`\x04` R`\0\x90\x81R`@\x90 T\x81V[a\x013a\x01\xA96`\x04a\x0BfV[`\x08` R`\0\x90\x81R`@\x90 T\x81V[a\0\xDCa\x04\xE9V[a\x01\x05a\x01\xD16`\x04a\t\xD8V[a\x04\xF6V[a\x01(a\x01\xE46`\x04a\x0B\x81V[a\x05\x8DV[a\x013a\x01\xF76`\x04a\x0B\xEBV[`\x05` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T\x81V[`\0\x80Ta\x02!\x90a\x0C\x1EV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x02M\x90a\x0C\x1EV[\x80\x15a\x02\x9AW\x80`\x1F\x10a\x02oWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\x9AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x02}W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81V[3`\0\x81\x81R`\x05` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x87\x16\x80\x85R\x92R\x80\x83 \x85\x90UQ\x91\x92\x90\x91\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x90a\x02\xFD\x90\x86\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA3P`\x01[\x92\x91PPV[`\tT`\xFF\x16\x15a\x03]W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x13`$\x82\x01Rr\x10S\x14\x91PQ\x16W\xD2S\x92U\x12PS\x12V\x91Q`j\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\0a\x03i\x84\x82a\x0C\xA9V[P`\x01a\x03v\x83\x82a\x0C\xA9V[P`\x02\x80T`\xFF\x19\x16`\xFF\x83\x16\x17\x90Ua\x03\x8Ea\x07\xEBV[`\x06Ua\x03\x99a\x08\x04V[`\x07UPP`\t\x80T`\xFF\x19\x16`\x01\x17\x90UPV[`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x81 T`\0\x19\x81\x14a\x04\nWa\x03\xE5\x81\x84a\x08\xA7V[`\x01`\x01`\xA0\x1B\x03\x86\x16`\0\x90\x81R`\x05` \x90\x81R`@\x80\x83 3\x84R\x90\x91R\x90 U[`\x01`\x01`\xA0\x1B\x03\x85\x16`\0\x90\x81R`\x04` R`@\x90 Ta\x04-\x90\x84a\x08\xA7V[`\x01`\x01`\xA0\x1B\x03\x80\x87\x16`\0\x90\x81R`\x04` R`@\x80\x82 \x93\x90\x93U\x90\x86\x16\x81R Ta\x04\\\x90\x84a\t\nV[`\x01`\x01`\xA0\x1B\x03\x80\x86\x16`\0\x81\x81R`\x04` R`@\x90\x81\x90 \x93\x90\x93U\x91Q\x90\x87\x16\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90a\x04\xB0\x90\x87\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA3P`\x01\x94\x93PPPPV[`\0`\x06Ta\x04\xD0a\x07\xEBV[\x14a\x04\xE2Wa\x04\xDDa\x08\x04V[\x90P\x90V[P`\x07T\x90V[`\x01\x80Ta\x02!\x90a\x0C\x1EV[3`\0\x90\x81R`\x04` R`@\x81 Ta\x05\x10\x90\x83a\x08\xA7V[3`\0\x90\x81R`\x04` R`@\x80\x82 \x92\x90\x92U`\x01`\x01`\xA0\x1B\x03\x85\x16\x81R Ta\x05<\x90\x83a\t\nV[`\x01`\x01`\xA0\x1B\x03\x84\x16`\0\x81\x81R`\x04` R`@\x90\x81\x90 \x92\x90\x92U\x90Q3\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90a\x02\xFD\x90\x86\x81R` \x01\x90V[B\x84\x10\x15a\x05\xDDW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FPERMIT_DEADLINE_EXPIRED\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03TV[`\0`\x01a\x05\xE9a\x04\xC3V[`\x01`\x01`\xA0\x1B\x03\x8A\x16`\0\x90\x81R`\x08` R`@\x81 \x80T\x7Fnq\xED\xAE\x12\xB1\xB9\x7FM\x1F`7\x0F\xEF\x10\x10_\xA2\xFA\xAE\x01&\x11J\x16\x9Cd\x84]a&\xC9\x92\x8D\x92\x8D\x92\x8D\x92\x90\x91\x90a\x067\x83a\r\x7FV[\x90\x91UP`@\x80Q` \x81\x01\x96\x90\x96R`\x01`\x01`\xA0\x1B\x03\x94\x85\x16\x90\x86\x01R\x92\x90\x91\x16``\x84\x01R`\x80\x83\x01R`\xA0\x82\x01R`\xC0\x81\x01\x88\x90R`\xE0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x06\xB0\x92\x91\x90a\x19\x01`\xF0\x1B\x81R`\x02\x81\x01\x92\x90\x92R`\"\x82\x01R`B\x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 `\0\x84R\x90\x83\x01\x80\x83RR`\xFF\x87\x16\x90\x82\x01R``\x81\x01\x85\x90R`\x80\x81\x01\x84\x90R`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a\x07\x0EW=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x91PP`\x01`\x01`\xA0\x1B\x03\x81\x16\x15\x80\x15\x90a\x07DWP\x87`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14[a\x07\x81W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rm$\xA7+ \xA6$\xA2/\xA9\xA4\xA3\xA7\"\xA9`\x91\x1B`D\x82\x01R`d\x01a\x03TV[`\x01`\x01`\xA0\x1B\x03\x81\x81\x16`\0\x90\x81R`\x05` \x90\x81R`@\x80\x83 \x8B\x85\x16\x80\x85R\x90\x83R\x92\x81\x90 \x8A\x90UQ\x89\x81R\x91\x92\x8B\x16\x91\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x01`@Q\x80\x91\x03\x90\xA3PPPPPPPPV[`\0a\ti\x80a\x07\xFDc\xFF\xFF\xFF\xFF\x82\x16V[\x92PPP\x90V[`\0\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F`\0`@Qa\x086\x91\x90a\r\x98V[`@Q\x80\x91\x03\x90 \x7F\xC8\x9E\xFD\xAAT\xC0\xF2\x0Cz\xDFa(\x82\xDF\tP\xF5\xA9Qc~\x03\x07\xCD\xCBLg/)\x8B\x8B\xC6a\x08ga\x07\xEBV[`@\x80Q` \x81\x01\x95\x90\x95R\x84\x01\x92\x90\x92R``\x83\x01R`\x80\x82\x01R0`\xA0\x82\x01R`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[`\0\x81\x83\x10\x15a\x08\xF9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FERC20: subtraction underflow\0\0\0\0`D\x82\x01R`d\x01a\x03TV[a\t\x03\x82\x84a\x0E\x0EV[\x93\x92PPPV[`\0\x80a\t\x17\x83\x85a\x0E!V[\x90P\x83\x81\x10\x15a\t\x03W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FERC20: addition overflow\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x03TV[F\x90V[`\0` \x80\x83R\x83Q\x80` \x85\x01R`\0[\x81\x81\x10\x15a\t\x9BW\x85\x81\x01\x83\x01Q\x85\x82\x01`@\x01R\x82\x01a\t\x7FV[P`\0`@\x82\x86\x01\x01R`@`\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x92PPP\x92\x91PPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\t\xD3W`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\t\xEBW`\0\x80\xFD[a\t\xF4\x83a\t\xBCV[\x94` \x93\x90\x93\x015\x93PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x82`\x1F\x83\x01\x12a\n)W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\nDWa\nDa\n\x02V[`@Q`\x1F\x83\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\nlWa\nla\n\x02V[\x81`@R\x83\x81R\x86` \x85\x88\x01\x01\x11\x15a\n\x85W`\0\x80\xFD[\x83` \x87\x01` \x83\x017`\0` \x85\x83\x01\x01R\x80\x94PPPPP\x92\x91PPV[\x805`\xFF\x81\x16\x81\x14a\t\xD3W`\0\x80\xFD[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xCBW`\0\x80\xFD[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\n\xE3W`\0\x80\xFD[a\n\xEF\x87\x83\x88\x01a\n\x18V[\x94P` \x86\x015\x91P\x80\x82\x11\x15a\x0B\x05W`\0\x80\xFD[Pa\x0B\x12\x86\x82\x87\x01a\n\x18V[\x92PPa\x0B!`@\x85\x01a\n\xA5V[\x90P\x92P\x92P\x92V[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0B?W`\0\x80\xFD[a\x0BH\x84a\t\xBCV[\x92Pa\x0BV` \x85\x01a\t\xBCV[\x91P`@\x84\x015\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x0BxW`\0\x80\xFD[a\t\x03\x82a\t\xBCV[`\0\x80`\0\x80`\0\x80`\0`\xE0\x88\x8A\x03\x12\x15a\x0B\x9CW`\0\x80\xFD[a\x0B\xA5\x88a\t\xBCV[\x96Pa\x0B\xB3` \x89\x01a\t\xBCV[\x95P`@\x88\x015\x94P``\x88\x015\x93Pa\x0B\xCF`\x80\x89\x01a\n\xA5V[\x92P`\xA0\x88\x015\x91P`\xC0\x88\x015\x90P\x92\x95\x98\x91\x94\x97P\x92\x95PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0B\xFEW`\0\x80\xFD[a\x0C\x07\x83a\t\xBCV[\x91Pa\x0C\x15` \x84\x01a\t\xBCV[\x90P\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x0C2W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x0CRWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x0C\xA4W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x0C\x81WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x0C\xA0W\x82\x81U`\x01\x01a\x0C\x8DV[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0C\xC3Wa\x0C\xC3a\n\x02V[a\x0C\xD7\x81a\x0C\xD1\x84Ta\x0C\x1EV[\x84a\x0CXV[` \x80`\x1F\x83\x11`\x01\x81\x14a\r\x0CW`\0\x84\x15a\x0C\xF4WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x0C\xA0V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\r;W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\r\x1CV[P\x85\x82\x10\x15a\rYW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\r\x91Wa\r\x91a\riV[P`\x01\x01\x90V[`\0\x80\x83Ta\r\xA6\x81a\x0C\x1EV[`\x01\x82\x81\x16\x80\x15a\r\xBEW`\x01\x81\x14a\r\xD3Wa\x0E\x02V[`\xFF\x19\x84\x16\x87R\x82\x15\x15\x83\x02\x87\x01\x94Pa\x0E\x02V[\x87`\0R` \x80`\0 `\0[\x85\x81\x10\x15a\r\xF9W\x81T\x8A\x82\x01R\x90\x84\x01\x90\x82\x01a\r\xE0V[PPP\x82\x87\x01\x94P[P\x92\x96\x95PPPPPPV[\x81\x81\x03\x81\x81\x11\x15a\x03\tWa\x03\ta\riV[\x80\x82\x01\x80\x82\x11\x15a\x03\tWa\x03\ta\riV\xFE\xA2dipfsX\"\x12 ~\xCC:\x08\xB5\x03l\xB5d\x08\xBEJ\x0B\0\x92\\\x99D\xA8\xD8\x92\x19}?D\xDF5-\x9D\xCE\xCF\x80dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static MOCKERC20_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct MockERC20(::ethers::contract::Contract); + impl ::core::clone::Clone for MockERC20 { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for MockERC20 { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for MockERC20 { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for MockERC20 { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(MockERC20)) + .field(&self.address()) + .finish() + } + } + impl MockERC20 { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + MOCKERC20_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + MOCKERC20_ABI.clone(), + MOCKERC20_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `DOMAIN_SEPARATOR` (0x3644e515) function + pub fn domain_separator(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([54, 68, 229, 21], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `allowance` (0xdd62ed3e) function + pub fn allowance( + &self, + p0: ::ethers::core::types::Address, + p1: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([221, 98, 237, 62], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `approve` (0x095ea7b3) function + pub fn approve( + &self, + spender: ::ethers::core::types::Address, + amount: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([9, 94, 167, 179], (spender, amount)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `balanceOf` (0x70a08231) function + pub fn balance_of( + &self, + p0: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([112, 160, 130, 49], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `decimals` (0x313ce567) function + pub fn decimals(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([49, 60, 229, 103], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `initialize` (0x1624f6c6) function + pub fn initialize( + &self, + name: ::std::string::String, + symbol: ::std::string::String, + decimals: u8, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([22, 36, 246, 198], (name, symbol, decimals)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `name` (0x06fdde03) function + pub fn name(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([6, 253, 222, 3], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nonces` (0x7ecebe00) function + pub fn nonces( + &self, + p0: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([126, 206, 190, 0], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `permit` (0xd505accf) function + pub fn permit( + &self, + owner: ::ethers::core::types::Address, + spender: ::ethers::core::types::Address, + value: ::ethers::core::types::U256, + deadline: ::ethers::core::types::U256, + v: u8, + r: [u8; 32], + s: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [213, 5, 172, 207], + (owner, spender, value, deadline, v, r, s), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `symbol` (0x95d89b41) function + pub fn symbol( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([149, 216, 155, 65], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `totalSupply` (0x18160ddd) function + pub fn total_supply( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([24, 22, 13, 221], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `transfer` (0xa9059cbb) function + pub fn transfer( + &self, + to: ::ethers::core::types::Address, + amount: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([169, 5, 156, 187], (to, amount)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `transferFrom` (0x23b872dd) function + pub fn transfer_from( + &self, + from: ::ethers::core::types::Address, + to: ::ethers::core::types::Address, + amount: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([35, 184, 114, 221], (from, to, amount)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `Approval` event + pub fn approval_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ApprovalFilter> { + self.0.event() + } + ///Gets the contract's `Transfer` event + pub fn transfer_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, TransferFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, MockERC20Events> { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> for MockERC20 { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Approval", abi = "Approval(address,address,uint256)")] + pub struct ApprovalFilter { + #[ethevent(indexed)] + pub owner: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub spender: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Transfer", abi = "Transfer(address,address,uint256)")] + pub struct TransferFilter { + #[ethevent(indexed)] + pub from: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub to: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockERC20Events { + ApprovalFilter(ApprovalFilter), + TransferFilter(TransferFilter), + } + impl ::ethers::contract::EthLogDecode for MockERC20Events { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = ApprovalFilter::decode_log(log) { + return Ok(MockERC20Events::ApprovalFilter(decoded)); + } + if let Ok(decoded) = TransferFilter::decode_log(log) { + return Ok(MockERC20Events::TransferFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for MockERC20Events { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ApprovalFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::TransferFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockERC20Events { + fn from(value: ApprovalFilter) -> Self { + Self::ApprovalFilter(value) + } + } + impl ::core::convert::From for MockERC20Events { + fn from(value: TransferFilter) -> Self { + Self::TransferFilter(value) + } + } + ///Container type for all input parameters for the `DOMAIN_SEPARATOR` function with signature `DOMAIN_SEPARATOR()` and selector `0x3644e515` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "DOMAIN_SEPARATOR", abi = "DOMAIN_SEPARATOR()")] + pub struct DomainSeparatorCall; + ///Container type for all input parameters for the `allowance` function with signature `allowance(address,address)` and selector `0xdd62ed3e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "allowance", abi = "allowance(address,address)")] + pub struct AllowanceCall( + pub ::ethers::core::types::Address, + pub ::ethers::core::types::Address, + ); + ///Container type for all input parameters for the `approve` function with signature `approve(address,uint256)` and selector `0x095ea7b3` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "approve", abi = "approve(address,uint256)")] + pub struct ApproveCall { + pub spender: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(address)")] + pub struct BalanceOfCall(pub ::ethers::core::types::Address); + ///Container type for all input parameters for the `decimals` function with signature `decimals()` and selector `0x313ce567` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "decimals", abi = "decimals()")] + pub struct DecimalsCall; + ///Container type for all input parameters for the `initialize` function with signature `initialize(string,string,uint8)` and selector `0x1624f6c6` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "initialize", abi = "initialize(string,string,uint8)")] + pub struct InitializeCall { + pub name: ::std::string::String, + pub symbol: ::std::string::String, + pub decimals: u8, + } + ///Container type for all input parameters for the `name` function with signature `name()` and selector `0x06fdde03` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "name", abi = "name()")] + pub struct NameCall; + ///Container type for all input parameters for the `nonces` function with signature `nonces(address)` and selector `0x7ecebe00` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nonces", abi = "nonces(address)")] + pub struct NoncesCall(pub ::ethers::core::types::Address); + ///Container type for all input parameters for the `permit` function with signature `permit(address,address,uint256,uint256,uint8,bytes32,bytes32)` and selector `0xd505accf` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "permit", + abi = "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)" + )] + pub struct PermitCall { + pub owner: ::ethers::core::types::Address, + pub spender: ::ethers::core::types::Address, + pub value: ::ethers::core::types::U256, + pub deadline: ::ethers::core::types::U256, + pub v: u8, + pub r: [u8; 32], + pub s: [u8; 32], + } + ///Container type for all input parameters for the `symbol` function with signature `symbol()` and selector `0x95d89b41` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "symbol", abi = "symbol()")] + pub struct SymbolCall; + ///Container type for all input parameters for the `totalSupply` function with signature `totalSupply()` and selector `0x18160ddd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "totalSupply", abi = "totalSupply()")] + pub struct TotalSupplyCall; + ///Container type for all input parameters for the `transfer` function with signature `transfer(address,uint256)` and selector `0xa9059cbb` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "transfer", abi = "transfer(address,uint256)")] + pub struct TransferCall { + pub to: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `transferFrom` function with signature `transferFrom(address,address,uint256)` and selector `0x23b872dd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "transferFrom", abi = "transferFrom(address,address,uint256)")] + pub struct TransferFromCall { + pub from: ::ethers::core::types::Address, + pub to: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockERC20Calls { + DomainSeparator(DomainSeparatorCall), + Allowance(AllowanceCall), + Approve(ApproveCall), + BalanceOf(BalanceOfCall), + Decimals(DecimalsCall), + Initialize(InitializeCall), + Name(NameCall), + Nonces(NoncesCall), + Permit(PermitCall), + Symbol(SymbolCall), + TotalSupply(TotalSupplyCall), + Transfer(TransferCall), + TransferFrom(TransferFromCall), + } + impl ::ethers::core::abi::AbiDecode for MockERC20Calls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::DomainSeparator(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Allowance(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Approve(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::BalanceOf(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Decimals(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Initialize(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Name(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Nonces(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Permit(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Symbol(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::TotalSupply(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Transfer(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::TransferFrom(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockERC20Calls { + fn encode(self) -> Vec { + match self { + Self::DomainSeparator(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Allowance(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Approve(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::BalanceOf(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Decimals(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Initialize(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Name(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Nonces(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Permit(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Symbol(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::TotalSupply(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Transfer(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::TransferFrom(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for MockERC20Calls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::DomainSeparator(element) => ::core::fmt::Display::fmt(element, f), + Self::Allowance(element) => ::core::fmt::Display::fmt(element, f), + Self::Approve(element) => ::core::fmt::Display::fmt(element, f), + Self::BalanceOf(element) => ::core::fmt::Display::fmt(element, f), + Self::Decimals(element) => ::core::fmt::Display::fmt(element, f), + Self::Initialize(element) => ::core::fmt::Display::fmt(element, f), + Self::Name(element) => ::core::fmt::Display::fmt(element, f), + Self::Nonces(element) => ::core::fmt::Display::fmt(element, f), + Self::Permit(element) => ::core::fmt::Display::fmt(element, f), + Self::Symbol(element) => ::core::fmt::Display::fmt(element, f), + Self::TotalSupply(element) => ::core::fmt::Display::fmt(element, f), + Self::Transfer(element) => ::core::fmt::Display::fmt(element, f), + Self::TransferFrom(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: DomainSeparatorCall) -> Self { + Self::DomainSeparator(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: AllowanceCall) -> Self { + Self::Allowance(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: ApproveCall) -> Self { + Self::Approve(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: BalanceOfCall) -> Self { + Self::BalanceOf(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: DecimalsCall) -> Self { + Self::Decimals(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: InitializeCall) -> Self { + Self::Initialize(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: NameCall) -> Self { + Self::Name(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: NoncesCall) -> Self { + Self::Nonces(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: PermitCall) -> Self { + Self::Permit(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: SymbolCall) -> Self { + Self::Symbol(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: TotalSupplyCall) -> Self { + Self::TotalSupply(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: TransferCall) -> Self { + Self::Transfer(value) + } + } + impl ::core::convert::From for MockERC20Calls { + fn from(value: TransferFromCall) -> Self { + Self::TransferFrom(value) + } + } + ///Container type for all return fields from the `DOMAIN_SEPARATOR` function with signature `DOMAIN_SEPARATOR()` and selector `0x3644e515` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct DomainSeparatorReturn(pub [u8; 32]); + ///Container type for all return fields from the `allowance` function with signature `allowance(address,address)` and selector `0xdd62ed3e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct AllowanceReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `approve` function with signature `approve(address,uint256)` and selector `0x095ea7b3` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ApproveReturn(pub bool); + ///Container type for all return fields from the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct BalanceOfReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `decimals` function with signature `decimals()` and selector `0x313ce567` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct DecimalsReturn(pub u8); + ///Container type for all return fields from the `name` function with signature `name()` and selector `0x06fdde03` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NameReturn(pub ::std::string::String); + ///Container type for all return fields from the `nonces` function with signature `nonces(address)` and selector `0x7ecebe00` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NoncesReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `symbol` function with signature `symbol()` and selector `0x95d89b41` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct SymbolReturn(pub ::std::string::String); + ///Container type for all return fields from the `totalSupply` function with signature `totalSupply()` and selector `0x18160ddd` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct TotalSupplyReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `transfer` function with signature `transfer(address,uint256)` and selector `0xa9059cbb` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct TransferReturn(pub bool); + ///Container type for all return fields from the `transferFrom` function with signature `transferFrom(address,address,uint256)` and selector `0x23b872dd` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct TransferFromReturn(pub bool); +} diff --git a/xmtp_id/src/bindings/mock_erc721.rs b/xmtp_id/src/bindings/mock_erc721.rs new file mode 100644 index 000000000..1a754d17d --- /dev/null +++ b/xmtp_id/src/bindings/mock_erc721.rs @@ -0,0 +1,1389 @@ +pub use mock_erc721::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod mock_erc721 { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("approve"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("approve"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("spender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("balanceOf"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("balanceOf"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getApproved"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getApproved"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("initialize"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("initialize"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_name"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("_symbol"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isApprovedForAll"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isApprovedForAll"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("name"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("name"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ownerOf"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("ownerOf"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("safeTransferFrom"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("safeTransferFrom"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("from"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: + ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("safeTransferFrom"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("from"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: + ::ethers::core::abi::ethabi::StateMutability::NonPayable, + }, + ], + ), + ( + ::std::borrow::ToOwned::to_owned("setApprovalForAll"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("setApprovalForAll"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("operator"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("approved"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("supportsInterface"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("supportsInterface"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("interfaceId"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(4usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes4"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("symbol"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("symbol"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("tokenURI"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("tokenURI"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("transferFrom"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("transferFrom"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("from"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("Approval"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Approval"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("spender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ApprovalForAll"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ApprovalForAll"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("operator"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("approved"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Transfer"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Transfer"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("from"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("to"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("id"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static MOCKERC721_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa\x0E\xF3\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xEAW`\x005`\xE0\x1C\x80ccR!\x1E\x11a\0\x8CW\x80c\xA2,\xB4e\x11a\0fW\x80c\xA2,\xB4e\x14a\x01\xF7W\x80c\xB8\x8DO\xDE\x14a\x02\nW\x80c\xC8{V\xDD\x14a\x02\x1DW\x80c\xE9\x85\xE9\xC5\x14a\x021W`\0\x80\xFD[\x80ccR!\x1E\x14a\x01\xBBW\x80cp\xA0\x821\x14a\x01\xCEW\x80c\x95\xD8\x9BA\x14a\x01\xEFW`\0\x80\xFD[\x80c\t^\xA7\xB3\x11a\0\xC8W\x80c\t^\xA7\xB3\x14a\x01mW\x80c#\xB8r\xDD\x14a\x01\x82W\x80cB\x84.\x0E\x14a\x01\x95W\x80cL\xD8\x8Bv\x14a\x01\xA8W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\0\xEFW\x80c\x06\xFD\xDE\x03\x14a\x01\x17W\x80c\x08\x18\x12\xFC\x14a\x01,W[`\0\x80\xFD[a\x01\x02a\0\xFD6`\x04a\t\xAAV[a\x02_V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01\x1Fa\x02\xB1V[`@Qa\x01\x0E\x91\x90a\n\x14V[a\x01Ua\x01:6`\x04a\n'V[`\x04` R`\0\x90\x81R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\x0EV[a\x01\x80a\x01{6`\x04a\nWV[a\x03?V[\0[a\x01\x80a\x01\x906`\x04a\n\x81V[a\x04&V[a\x01\x80a\x01\xA36`\x04a\n\x81V[a\x06\x1FV[a\x01\x80a\x01\xB66`\x04a\x0BiV[a\x07\x0EV[a\x01Ua\x01\xC96`\x04a\n'V[a\x07\x82V[a\x01\xE1a\x01\xDC6`\x04a\x0B\xCDV[a\x07\xD9V[`@Q\x90\x81R` \x01a\x01\x0EV[a\x01\x1Fa\x08=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xBE\x91\x90a\rSV[`\x01`\x01`\xE0\x1B\x03\x19\x16\x14[a\x07\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01Ro\x15S\x94\xD0Q\x91W\xD4\x91P\xD2T\x12QS\x95`\x82\x1B`D\x82\x01R`d\x01a\x03\xC1V[PPPV[`\x06T`\xFF\x16\x15a\x07WW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x13`$\x82\x01Rr\x10S\x14\x91PQ\x16W\xD2S\x92U\x12PS\x12V\x91Q`j\x1B`D\x82\x01R`d\x01a\x03\xC1V[`\0a\x07c\x83\x82a\r\xC0V[P`\x01a\x07p\x82\x82a\r\xC0V[PP`\x06\x80T`\xFF\x19\x16`\x01\x17\x90UPV[`\0\x81\x81R`\x02` R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x80a\x07\xD4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\n`$\x82\x01Ri\x13\x93\xD5\x17\xD3RS\x95\x11Q`\xB2\x1B`D\x82\x01R`d\x01a\x03\xC1V[\x91\x90PV[`\0`\x01`\x01`\xA0\x1B\x03\x82\x16a\x08 W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0C`$\x82\x01RkZERO_ADDRESS`\xA0\x1B`D\x82\x01R`d\x01a\x03\xC1V[P`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x03` R`@\x90 T\x90V[`\x01\x80Ta\x02\xBE\x90a\x0C\xD3V[3`\0\x81\x81R`\x05` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x87\x16\x80\x85R\x90\x83R\x92\x81\x90 \x80T`\xFF\x19\x16\x86\x15\x15\x90\x81\x17\x90\x91U\x90Q\x90\x81R\x91\x92\x91\x7F\x170~\xAB9\xABa\x07\xE8\x89\x98E\xAD=Y\xBD\x96S\xF2\0\xF2 \x92\x04\x89\xCA+Y7il1\x91\x01`@Q\x80\x91\x03\x90\xA3PPV[a\x08\xC0\x84\x84\x84a\x04&V[\x82;\x15\x80a\tLWP`@Qc\n\x85\xBD\x01`\xE1\x1B\x80\x82R\x90`\x01`\x01`\xA0\x1B\x03\x85\x16\x90c\x15\x0Bz\x02\x90a\x08\xFD\x903\x90\x89\x90\x88\x90\x88\x90`\x04\x01a\x0E\x80V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\t\x1CW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t@\x91\x90a\rSV[`\x01`\x01`\xE0\x1B\x03\x19\x16\x14[a\t\x8BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01Ro\x15S\x94\xD0Q\x91W\xD4\x91P\xD2T\x12QS\x95`\x82\x1B`D\x82\x01R`d\x01a\x03\xC1V[PPPPV[`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\t\xA7W`\0\x80\xFD[PV[`\0` \x82\x84\x03\x12\x15a\t\xBCW`\0\x80\xFD[\x815a\t\xC7\x81a\t\x91V[\x93\x92PPPV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\t\xF4W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\t\xD8V[P`\0` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R`\0a\t\xC7` \x83\x01\x84a\t\xCEV[`\0` \x82\x84\x03\x12\x15a\n9W`\0\x80\xFD[P5\x91\x90PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x07\xD4W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\njW`\0\x80\xFD[a\ns\x83a\n@V[\x94` \x93\x90\x93\x015\x93PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\x96W`\0\x80\xFD[a\n\x9F\x84a\n@V[\x92Pa\n\xAD` \x85\x01a\n@V[\x91P`@\x84\x015\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a\n\xEEWa\n\xEEa\n\xBDV[`@Q`\x1F\x85\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\x0B\x16Wa\x0B\x16a\n\xBDV[\x81`@R\x80\x93P\x85\x81R\x86\x86\x86\x01\x11\x15a\x0B/W`\0\x80\xFD[\x85\x85` \x83\x017`\0` \x87\x83\x01\x01RPPP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0BZW`\0\x80\xFD[a\t\xC7\x83\x835` \x85\x01a\n\xD3V[`\0\x80`@\x83\x85\x03\x12\x15a\x0B|W`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x0B\x94W`\0\x80\xFD[a\x0B\xA0\x86\x83\x87\x01a\x0BIV[\x93P` \x85\x015\x91P\x80\x82\x11\x15a\x0B\xB6W`\0\x80\xFD[Pa\x0B\xC3\x85\x82\x86\x01a\x0BIV[\x91PP\x92P\x92\x90PV[`\0` \x82\x84\x03\x12\x15a\x0B\xDFW`\0\x80\xFD[a\t\xC7\x82a\n@V[`\0\x80`@\x83\x85\x03\x12\x15a\x0B\xFBW`\0\x80\xFD[a\x0C\x04\x83a\n@V[\x91P` \x83\x015\x80\x15\x15\x81\x14a\x0C\x19W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x0C:W`\0\x80\xFD[a\x0CC\x85a\n@V[\x93Pa\x0CQ` \x86\x01a\n@V[\x92P`@\x85\x015\x91P``\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0CtW`\0\x80\xFD[\x85\x01`\x1F\x81\x01\x87\x13a\x0C\x85W`\0\x80\xFD[a\x0C\x94\x87\x825` \x84\x01a\n\xD3V[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0C\xB3W`\0\x80\xFD[a\x0C\xBC\x83a\n@V[\x91Pa\x0C\xCA` \x84\x01a\n@V[\x90P\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x0C\xE7W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\r\x07WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0\x81a\r2Wa\r2a\r\rV[P`\0\x19\x01\x90V[`\0`\x01\x82\x01a\rLWa\rLa\r\rV[P`\x01\x01\x90V[`\0` \x82\x84\x03\x12\x15a\reW`\0\x80\xFD[\x81Qa\t\xC7\x81a\t\x91V[`\x1F\x82\x11\x15a\x07\tW`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\r\x99WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\r\xB8W\x82\x81U`\x01\x01a\r\xA5V[PPPPPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\r\xDAWa\r\xDAa\n\xBDV[a\r\xEE\x81a\r\xE8\x84Ta\x0C\xD3V[\x84a\rpV[` \x80`\x1F\x83\x11`\x01\x81\x14a\x0E#W`\0\x84\x15a\x0E\x0BWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\r\xB8V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x0ERW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x0E3V[P\x85\x82\x10\x15a\x0EpW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[`\x01`\x01`\xA0\x1B\x03\x85\x81\x16\x82R\x84\x16` \x82\x01R`@\x81\x01\x83\x90R`\x80``\x82\x01\x81\x90R`\0\x90a\x0E\xB3\x90\x83\x01\x84a\t\xCEV[\x96\x95PPPPPPV\xFE\xA2dipfsX\"\x12 \x88\xC4\xB3~?\t\x01\x0E\x84B\x8E\xD5\x8B\xCA\x98\x02\xC6\xF9\xC1&\x18\xE7\xEF\x82\xB9E0\xACj}h\x1AdsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static MOCKERC721_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xEAW`\x005`\xE0\x1C\x80ccR!\x1E\x11a\0\x8CW\x80c\xA2,\xB4e\x11a\0fW\x80c\xA2,\xB4e\x14a\x01\xF7W\x80c\xB8\x8DO\xDE\x14a\x02\nW\x80c\xC8{V\xDD\x14a\x02\x1DW\x80c\xE9\x85\xE9\xC5\x14a\x021W`\0\x80\xFD[\x80ccR!\x1E\x14a\x01\xBBW\x80cp\xA0\x821\x14a\x01\xCEW\x80c\x95\xD8\x9BA\x14a\x01\xEFW`\0\x80\xFD[\x80c\t^\xA7\xB3\x11a\0\xC8W\x80c\t^\xA7\xB3\x14a\x01mW\x80c#\xB8r\xDD\x14a\x01\x82W\x80cB\x84.\x0E\x14a\x01\x95W\x80cL\xD8\x8Bv\x14a\x01\xA8W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\0\xEFW\x80c\x06\xFD\xDE\x03\x14a\x01\x17W\x80c\x08\x18\x12\xFC\x14a\x01,W[`\0\x80\xFD[a\x01\x02a\0\xFD6`\x04a\t\xAAV[a\x02_V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01\x1Fa\x02\xB1V[`@Qa\x01\x0E\x91\x90a\n\x14V[a\x01Ua\x01:6`\x04a\n'V[`\x04` R`\0\x90\x81R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\x0EV[a\x01\x80a\x01{6`\x04a\nWV[a\x03?V[\0[a\x01\x80a\x01\x906`\x04a\n\x81V[a\x04&V[a\x01\x80a\x01\xA36`\x04a\n\x81V[a\x06\x1FV[a\x01\x80a\x01\xB66`\x04a\x0BiV[a\x07\x0EV[a\x01Ua\x01\xC96`\x04a\n'V[a\x07\x82V[a\x01\xE1a\x01\xDC6`\x04a\x0B\xCDV[a\x07\xD9V[`@Q\x90\x81R` \x01a\x01\x0EV[a\x01\x1Fa\x08=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xBE\x91\x90a\rSV[`\x01`\x01`\xE0\x1B\x03\x19\x16\x14[a\x07\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01Ro\x15S\x94\xD0Q\x91W\xD4\x91P\xD2T\x12QS\x95`\x82\x1B`D\x82\x01R`d\x01a\x03\xC1V[PPPV[`\x06T`\xFF\x16\x15a\x07WW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x13`$\x82\x01Rr\x10S\x14\x91PQ\x16W\xD2S\x92U\x12PS\x12V\x91Q`j\x1B`D\x82\x01R`d\x01a\x03\xC1V[`\0a\x07c\x83\x82a\r\xC0V[P`\x01a\x07p\x82\x82a\r\xC0V[PP`\x06\x80T`\xFF\x19\x16`\x01\x17\x90UPV[`\0\x81\x81R`\x02` R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x80a\x07\xD4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\n`$\x82\x01Ri\x13\x93\xD5\x17\xD3RS\x95\x11Q`\xB2\x1B`D\x82\x01R`d\x01a\x03\xC1V[\x91\x90PV[`\0`\x01`\x01`\xA0\x1B\x03\x82\x16a\x08 W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0C`$\x82\x01RkZERO_ADDRESS`\xA0\x1B`D\x82\x01R`d\x01a\x03\xC1V[P`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x03` R`@\x90 T\x90V[`\x01\x80Ta\x02\xBE\x90a\x0C\xD3V[3`\0\x81\x81R`\x05` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x87\x16\x80\x85R\x90\x83R\x92\x81\x90 \x80T`\xFF\x19\x16\x86\x15\x15\x90\x81\x17\x90\x91U\x90Q\x90\x81R\x91\x92\x91\x7F\x170~\xAB9\xABa\x07\xE8\x89\x98E\xAD=Y\xBD\x96S\xF2\0\xF2 \x92\x04\x89\xCA+Y7il1\x91\x01`@Q\x80\x91\x03\x90\xA3PPV[a\x08\xC0\x84\x84\x84a\x04&V[\x82;\x15\x80a\tLWP`@Qc\n\x85\xBD\x01`\xE1\x1B\x80\x82R\x90`\x01`\x01`\xA0\x1B\x03\x85\x16\x90c\x15\x0Bz\x02\x90a\x08\xFD\x903\x90\x89\x90\x88\x90\x88\x90`\x04\x01a\x0E\x80V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\t\x1CW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t@\x91\x90a\rSV[`\x01`\x01`\xE0\x1B\x03\x19\x16\x14[a\t\x8BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01Ro\x15S\x94\xD0Q\x91W\xD4\x91P\xD2T\x12QS\x95`\x82\x1B`D\x82\x01R`d\x01a\x03\xC1V[PPPPV[`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\t\xA7W`\0\x80\xFD[PV[`\0` \x82\x84\x03\x12\x15a\t\xBCW`\0\x80\xFD[\x815a\t\xC7\x81a\t\x91V[\x93\x92PPPV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\t\xF4W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\t\xD8V[P`\0` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R`\0a\t\xC7` \x83\x01\x84a\t\xCEV[`\0` \x82\x84\x03\x12\x15a\n9W`\0\x80\xFD[P5\x91\x90PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x07\xD4W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\njW`\0\x80\xFD[a\ns\x83a\n@V[\x94` \x93\x90\x93\x015\x93PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\x96W`\0\x80\xFD[a\n\x9F\x84a\n@V[\x92Pa\n\xAD` \x85\x01a\n@V[\x91P`@\x84\x015\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a\n\xEEWa\n\xEEa\n\xBDV[`@Q`\x1F\x85\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\x0B\x16Wa\x0B\x16a\n\xBDV[\x81`@R\x80\x93P\x85\x81R\x86\x86\x86\x01\x11\x15a\x0B/W`\0\x80\xFD[\x85\x85` \x83\x017`\0` \x87\x83\x01\x01RPPP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0BZW`\0\x80\xFD[a\t\xC7\x83\x835` \x85\x01a\n\xD3V[`\0\x80`@\x83\x85\x03\x12\x15a\x0B|W`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x0B\x94W`\0\x80\xFD[a\x0B\xA0\x86\x83\x87\x01a\x0BIV[\x93P` \x85\x015\x91P\x80\x82\x11\x15a\x0B\xB6W`\0\x80\xFD[Pa\x0B\xC3\x85\x82\x86\x01a\x0BIV[\x91PP\x92P\x92\x90PV[`\0` \x82\x84\x03\x12\x15a\x0B\xDFW`\0\x80\xFD[a\t\xC7\x82a\n@V[`\0\x80`@\x83\x85\x03\x12\x15a\x0B\xFBW`\0\x80\xFD[a\x0C\x04\x83a\n@V[\x91P` \x83\x015\x80\x15\x15\x81\x14a\x0C\x19W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a\x0C:W`\0\x80\xFD[a\x0CC\x85a\n@V[\x93Pa\x0CQ` \x86\x01a\n@V[\x92P`@\x85\x015\x91P``\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0CtW`\0\x80\xFD[\x85\x01`\x1F\x81\x01\x87\x13a\x0C\x85W`\0\x80\xFD[a\x0C\x94\x87\x825` \x84\x01a\n\xD3V[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0C\xB3W`\0\x80\xFD[a\x0C\xBC\x83a\n@V[\x91Pa\x0C\xCA` \x84\x01a\n@V[\x90P\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x0C\xE7W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\r\x07WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0\x81a\r2Wa\r2a\r\rV[P`\0\x19\x01\x90V[`\0`\x01\x82\x01a\rLWa\rLa\r\rV[P`\x01\x01\x90V[`\0` \x82\x84\x03\x12\x15a\reW`\0\x80\xFD[\x81Qa\t\xC7\x81a\t\x91V[`\x1F\x82\x11\x15a\x07\tW`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\r\x99WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\r\xB8W\x82\x81U`\x01\x01a\r\xA5V[PPPPPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\r\xDAWa\r\xDAa\n\xBDV[a\r\xEE\x81a\r\xE8\x84Ta\x0C\xD3V[\x84a\rpV[` \x80`\x1F\x83\x11`\x01\x81\x14a\x0E#W`\0\x84\x15a\x0E\x0BWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\r\xB8V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x0ERW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x0E3V[P\x85\x82\x10\x15a\x0EpW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[`\x01`\x01`\xA0\x1B\x03\x85\x81\x16\x82R\x84\x16` \x82\x01R`@\x81\x01\x83\x90R`\x80``\x82\x01\x81\x90R`\0\x90a\x0E\xB3\x90\x83\x01\x84a\t\xCEV[\x96\x95PPPPPPV\xFE\xA2dipfsX\"\x12 \x88\xC4\xB3~?\t\x01\x0E\x84B\x8E\xD5\x8B\xCA\x98\x02\xC6\xF9\xC1&\x18\xE7\xEF\x82\xB9E0\xACj}h\x1AdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static MOCKERC721_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct MockERC721(::ethers::contract::Contract); + impl ::core::clone::Clone for MockERC721 { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for MockERC721 { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for MockERC721 { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for MockERC721 { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(MockERC721)) + .field(&self.address()) + .finish() + } + } + impl MockERC721 { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + MOCKERC721_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + MOCKERC721_ABI.clone(), + MOCKERC721_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `approve` (0x095ea7b3) function + pub fn approve( + &self, + spender: ::ethers::core::types::Address, + id: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([9, 94, 167, 179], (spender, id)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `balanceOf` (0x70a08231) function + pub fn balance_of( + &self, + owner: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([112, 160, 130, 49], owner) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getApproved` (0x081812fc) function + pub fn get_approved( + &self, + p0: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([8, 24, 18, 252], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `initialize` (0x4cd88b76) function + pub fn initialize( + &self, + name: ::std::string::String, + symbol: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([76, 216, 139, 118], (name, symbol)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isApprovedForAll` (0xe985e9c5) function + pub fn is_approved_for_all( + &self, + p0: ::ethers::core::types::Address, + p1: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([233, 133, 233, 197], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `name` (0x06fdde03) function + pub fn name(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([6, 253, 222, 3], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `ownerOf` (0x6352211e) function + pub fn owner_of( + &self, + id: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([99, 82, 33, 30], id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `safeTransferFrom` (0x42842e0e) function + pub fn safe_transfer_from( + &self, + from: ::ethers::core::types::Address, + to: ::ethers::core::types::Address, + id: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([66, 132, 46, 14], (from, to, id)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `safeTransferFrom` (0xb88d4fde) function + pub fn safe_transfer_from_with_from_and_to_and_data( + &self, + from: ::ethers::core::types::Address, + to: ::ethers::core::types::Address, + id: ::ethers::core::types::U256, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([184, 141, 79, 222], (from, to, id, data)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `setApprovalForAll` (0xa22cb465) function + pub fn set_approval_for_all( + &self, + operator: ::ethers::core::types::Address, + approved: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([162, 44, 180, 101], (operator, approved)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `supportsInterface` (0x01ffc9a7) function + pub fn supports_interface( + &self, + interface_id: [u8; 4], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([1, 255, 201, 167], interface_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `symbol` (0x95d89b41) function + pub fn symbol( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([149, 216, 155, 65], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `tokenURI` (0xc87b56dd) function + pub fn token_uri( + &self, + id: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([200, 123, 86, 221], id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `transferFrom` (0x23b872dd) function + pub fn transfer_from( + &self, + from: ::ethers::core::types::Address, + to: ::ethers::core::types::Address, + id: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([35, 184, 114, 221], (from, to, id)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `Approval` event + pub fn approval_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ApprovalFilter> { + self.0.event() + } + ///Gets the contract's `ApprovalForAll` event + pub fn approval_for_all_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ApprovalForAllFilter> + { + self.0.event() + } + ///Gets the contract's `Transfer` event + pub fn transfer_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, TransferFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, MockERC721Events> { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> for MockERC721 { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Approval", abi = "Approval(address,address,uint256)")] + pub struct ApprovalFilter { + #[ethevent(indexed)] + pub owner: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub spender: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub id: ::ethers::core::types::U256, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ApprovalForAll", abi = "ApprovalForAll(address,address,bool)")] + pub struct ApprovalForAllFilter { + #[ethevent(indexed)] + pub owner: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub operator: ::ethers::core::types::Address, + pub approved: bool, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Transfer", abi = "Transfer(address,address,uint256)")] + pub struct TransferFilter { + #[ethevent(indexed)] + pub from: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub to: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub id: ::ethers::core::types::U256, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockERC721Events { + ApprovalFilter(ApprovalFilter), + ApprovalForAllFilter(ApprovalForAllFilter), + TransferFilter(TransferFilter), + } + impl ::ethers::contract::EthLogDecode for MockERC721Events { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = ApprovalFilter::decode_log(log) { + return Ok(MockERC721Events::ApprovalFilter(decoded)); + } + if let Ok(decoded) = ApprovalForAllFilter::decode_log(log) { + return Ok(MockERC721Events::ApprovalForAllFilter(decoded)); + } + if let Ok(decoded) = TransferFilter::decode_log(log) { + return Ok(MockERC721Events::TransferFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for MockERC721Events { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ApprovalFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ApprovalForAllFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::TransferFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockERC721Events { + fn from(value: ApprovalFilter) -> Self { + Self::ApprovalFilter(value) + } + } + impl ::core::convert::From for MockERC721Events { + fn from(value: ApprovalForAllFilter) -> Self { + Self::ApprovalForAllFilter(value) + } + } + impl ::core::convert::From for MockERC721Events { + fn from(value: TransferFilter) -> Self { + Self::TransferFilter(value) + } + } + ///Container type for all input parameters for the `approve` function with signature `approve(address,uint256)` and selector `0x095ea7b3` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "approve", abi = "approve(address,uint256)")] + pub struct ApproveCall { + pub spender: ::ethers::core::types::Address, + pub id: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(address)")] + pub struct BalanceOfCall { + pub owner: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `getApproved` function with signature `getApproved(uint256)` and selector `0x081812fc` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getApproved", abi = "getApproved(uint256)")] + pub struct GetApprovedCall(pub ::ethers::core::types::U256); + ///Container type for all input parameters for the `initialize` function with signature `initialize(string,string)` and selector `0x4cd88b76` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "initialize", abi = "initialize(string,string)")] + pub struct InitializeCall { + pub name: ::std::string::String, + pub symbol: ::std::string::String, + } + ///Container type for all input parameters for the `isApprovedForAll` function with signature `isApprovedForAll(address,address)` and selector `0xe985e9c5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isApprovedForAll", abi = "isApprovedForAll(address,address)")] + pub struct IsApprovedForAllCall( + pub ::ethers::core::types::Address, + pub ::ethers::core::types::Address, + ); + ///Container type for all input parameters for the `name` function with signature `name()` and selector `0x06fdde03` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "name", abi = "name()")] + pub struct NameCall; + ///Container type for all input parameters for the `ownerOf` function with signature `ownerOf(uint256)` and selector `0x6352211e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "ownerOf", abi = "ownerOf(uint256)")] + pub struct OwnerOfCall { + pub id: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `safeTransferFrom` function with signature `safeTransferFrom(address,address,uint256)` and selector `0x42842e0e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "safeTransferFrom", + abi = "safeTransferFrom(address,address,uint256)" + )] + pub struct SafeTransferFromCall { + pub from: ::ethers::core::types::Address, + pub to: ::ethers::core::types::Address, + pub id: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `safeTransferFrom` function with signature `safeTransferFrom(address,address,uint256,bytes)` and selector `0xb88d4fde` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "safeTransferFrom", + abi = "safeTransferFrom(address,address,uint256,bytes)" + )] + pub struct SafeTransferFromWithFromAndToAndDataCall { + pub from: ::ethers::core::types::Address, + pub to: ::ethers::core::types::Address, + pub id: ::ethers::core::types::U256, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `setApprovalForAll` function with signature `setApprovalForAll(address,bool)` and selector `0xa22cb465` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "setApprovalForAll", abi = "setApprovalForAll(address,bool)")] + pub struct SetApprovalForAllCall { + pub operator: ::ethers::core::types::Address, + pub approved: bool, + } + ///Container type for all input parameters for the `supportsInterface` function with signature `supportsInterface(bytes4)` and selector `0x01ffc9a7` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "supportsInterface", abi = "supportsInterface(bytes4)")] + pub struct SupportsInterfaceCall { + pub interface_id: [u8; 4], + } + ///Container type for all input parameters for the `symbol` function with signature `symbol()` and selector `0x95d89b41` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "symbol", abi = "symbol()")] + pub struct SymbolCall; + ///Container type for all input parameters for the `tokenURI` function with signature `tokenURI(uint256)` and selector `0xc87b56dd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "tokenURI", abi = "tokenURI(uint256)")] + pub struct TokenURICall { + pub id: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `transferFrom` function with signature `transferFrom(address,address,uint256)` and selector `0x23b872dd` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "transferFrom", abi = "transferFrom(address,address,uint256)")] + pub struct TransferFromCall { + pub from: ::ethers::core::types::Address, + pub to: ::ethers::core::types::Address, + pub id: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockERC721Calls { + Approve(ApproveCall), + BalanceOf(BalanceOfCall), + GetApproved(GetApprovedCall), + Initialize(InitializeCall), + IsApprovedForAll(IsApprovedForAllCall), + Name(NameCall), + OwnerOf(OwnerOfCall), + SafeTransferFrom(SafeTransferFromCall), + SafeTransferFromWithFromAndToAndData(SafeTransferFromWithFromAndToAndDataCall), + SetApprovalForAll(SetApprovalForAllCall), + SupportsInterface(SupportsInterfaceCall), + Symbol(SymbolCall), + TokenURI(TokenURICall), + TransferFrom(TransferFromCall), + } + impl ::ethers::core::abi::AbiDecode for MockERC721Calls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Approve(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::BalanceOf(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetApproved(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Initialize(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsApprovedForAll(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Name(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::OwnerOf(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SafeTransferFrom(decoded)); + } + if let Ok(decoded) = + ::decode( + data, + ) + { + return Ok(Self::SafeTransferFromWithFromAndToAndData(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SetApprovalForAll(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SupportsInterface(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Symbol(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::TokenURI(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::TransferFrom(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockERC721Calls { + fn encode(self) -> Vec { + match self { + Self::Approve(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::BalanceOf(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetApproved(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Initialize(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsApprovedForAll(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Name(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::OwnerOf(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SafeTransferFrom(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SafeTransferFromWithFromAndToAndData(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::SetApprovalForAll(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SupportsInterface(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Symbol(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::TokenURI(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::TransferFrom(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for MockERC721Calls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::Approve(element) => ::core::fmt::Display::fmt(element, f), + Self::BalanceOf(element) => ::core::fmt::Display::fmt(element, f), + Self::GetApproved(element) => ::core::fmt::Display::fmt(element, f), + Self::Initialize(element) => ::core::fmt::Display::fmt(element, f), + Self::IsApprovedForAll(element) => ::core::fmt::Display::fmt(element, f), + Self::Name(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnerOf(element) => ::core::fmt::Display::fmt(element, f), + Self::SafeTransferFrom(element) => ::core::fmt::Display::fmt(element, f), + Self::SafeTransferFromWithFromAndToAndData(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::SetApprovalForAll(element) => ::core::fmt::Display::fmt(element, f), + Self::SupportsInterface(element) => ::core::fmt::Display::fmt(element, f), + Self::Symbol(element) => ::core::fmt::Display::fmt(element, f), + Self::TokenURI(element) => ::core::fmt::Display::fmt(element, f), + Self::TransferFrom(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: ApproveCall) -> Self { + Self::Approve(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: BalanceOfCall) -> Self { + Self::BalanceOf(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: GetApprovedCall) -> Self { + Self::GetApproved(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: InitializeCall) -> Self { + Self::Initialize(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: IsApprovedForAllCall) -> Self { + Self::IsApprovedForAll(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: NameCall) -> Self { + Self::Name(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: OwnerOfCall) -> Self { + Self::OwnerOf(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: SafeTransferFromCall) -> Self { + Self::SafeTransferFrom(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: SafeTransferFromWithFromAndToAndDataCall) -> Self { + Self::SafeTransferFromWithFromAndToAndData(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: SetApprovalForAllCall) -> Self { + Self::SetApprovalForAll(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: SupportsInterfaceCall) -> Self { + Self::SupportsInterface(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: SymbolCall) -> Self { + Self::Symbol(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: TokenURICall) -> Self { + Self::TokenURI(value) + } + } + impl ::core::convert::From for MockERC721Calls { + fn from(value: TransferFromCall) -> Self { + Self::TransferFrom(value) + } + } + ///Container type for all return fields from the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct BalanceOfReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `getApproved` function with signature `getApproved(uint256)` and selector `0x081812fc` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetApprovedReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `isApprovedForAll` function with signature `isApprovedForAll(address,address)` and selector `0xe985e9c5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsApprovedForAllReturn(pub bool); + ///Container type for all return fields from the `name` function with signature `name()` and selector `0x06fdde03` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NameReturn(pub ::std::string::String); + ///Container type for all return fields from the `ownerOf` function with signature `ownerOf(uint256)` and selector `0x6352211e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct OwnerOfReturn { + pub owner: ::ethers::core::types::Address, + } + ///Container type for all return fields from the `supportsInterface` function with signature `supportsInterface(bytes4)` and selector `0x01ffc9a7` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct SupportsInterfaceReturn(pub bool); + ///Container type for all return fields from the `symbol` function with signature `symbol()` and selector `0x95d89b41` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct SymbolReturn(pub ::std::string::String); + ///Container type for all return fields from the `tokenURI` function with signature `tokenURI(uint256)` and selector `0xc87b56dd` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct TokenURIReturn(pub ::std::string::String); +} diff --git a/xmtp_id/src/bindings/mock_multi_ownable.rs b/xmtp_id/src/bindings/mock_multi_ownable.rs new file mode 100644 index 000000000..2e8c40f6a --- /dev/null +++ b/xmtp_id/src/bindings/mock_multi_ownable.rs @@ -0,0 +1,1191 @@ +pub use mock_multi_ownable::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod mock_multi_ownable { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("init"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("init"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owners"), + kind: ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes[]"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AddOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("AddOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("RemoveOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("RemoveOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Unauthorized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("Unauthorized"), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static MOCKMULTIOWNABLE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa\x0C\"\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x93W`\x005`\xE0\x1C\x80cE\x9F\xB2\xAD\x11a\0fW\x80cE\x9F\xB2\xAD\x14a\0\xFBW\x80cr\xDE;Z\x14a\x01\x0EW\x80c\x8E\xA6\x90)\x14a\x01!W\x80c\xA2\xE1\xA8\xD8\x14a\x01AW\x80c\xD9H\xFD.\x14a\x01TW`\0\x80\xFD[\x80c\x06j\x1E\xB7\x14a\0\x98W\x80c\x0F\x0F?$\x14a\0\xC0W\x80c\x1C\xA59?\x14a\0\xD5W\x80c)V^;\x14a\0\xE8W[`\0\x80\xFD[a\0\xABa\0\xA66`\x04a\x07SV[a\x01rV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xD3a\0\xCE6`\x04a\x07uV[a\x01\xE0V[\0[a\0\xABa\0\xE36`\x04a\x08\\V[a\x02\x18V[a\0\xD3a\0\xF66`\x04a\x07SV[a\x02SV[a\0\xD3a\x01\t6`\x04a\x08\x99V[a\x02|V[a\0\xD3a\x01\x1C6`\x04a\t\x0EV[a\x02\x8EV[a\x014a\x01/6`\x04a\t\x0EV[a\x03\x80V[`@Qa\0\xB7\x91\x90a\tKV[a\0\xABa\x01O6`\x04a\x07uV[a\x04AV[`\0\x80Q` a\x0B\xCD\x839\x81Q\x91RT`@Q\x90\x81R` \x01a\0\xB7V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x01\xC5\x91a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P\x92\x91PPV[a\x01\xE8a\x04\x87V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x02\x15\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x04\xB9V[PV[`\0`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R`\x02\x01\x82`@Qa\x02:\x91\x90a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x02[a\x04\x87V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x02x\x90``\x01a\x02\x01V[PPV[a\x02xa\x02\x89\x82\x84a\t\x9AV[a\x04\xE4V[a\x02\x96a\x04\x87V[`\0a\x02\xA1\x82a\x03\x80V[\x90P\x80Q`\0\x03a\x02\xCDW`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\x02\xFD\x90\x83\x90a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\x03)`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\x03D\x91a\x07\x05V[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\x03t\x91\x90a\tKV[`@Q\x80\x91\x03\x90\xA2PPV[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x03\xBC\x90a\n V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\xE8\x90a\n V[\x80\x15a\x045W\x80`\x1F\x10a\x04\nWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x045V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x04\x18W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x02:\x91a\t~V[a\x04\x903a\x04AV[\x80a\x04\x9AWP30\x14[\x15a\x04\xA1WV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x02\x15\x81`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R[\x80T\x90`\0a\x04\xDB\x83a\nZV[\x91\x90PUa\x066V[`\0[\x81Q\x81\x10\x15a\x02xW\x81\x81\x81Q\x81\x10a\x05\x02Wa\x05\x02a\n\x81V[` \x02` \x01\x01QQ` \x14\x15\x80\x15a\x056WP\x81\x81\x81Q\x81\x10a\x05(Wa\x05(a\n\x81V[` \x02` \x01\x01QQ`@\x14\x15[\x15a\x05oW\x81\x81\x81Q\x81\x10a\x05MWa\x05Ma\n\x81V[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x02\xC4\x91\x90a\tKV[\x81\x81\x81Q\x81\x10a\x05\x81Wa\x05\x81a\n\x81V[` \x02` \x01\x01QQ` \x14\x80\x15a\x05\xC3WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10a\x05\xB0Wa\x05\xB0a\n\x81V[` \x02` \x01\x01Qa\x05\xC1\x90a\n\x97V[\x11[\x15a\x05\xFCW\x81\x81\x81Q\x81\x10a\x05\xDAWa\x05\xDAa\n\x81V[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x02\xC4\x91\x90a\tKV[a\x06.\x82\x82\x81Q\x81\x10a\x06\x11Wa\x06\x11a\n\x81V[` \x02` \x01\x01Qa\x04\xCD`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R\x90V[`\x01\x01a\x04\xE7V[a\x06?\x82a\x02\x18V[\x15a\x06_W\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x02\xC4\x91\x90a\tKV[`\x01`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R`\x02\x01\x83`@Qa\x06\x81\x91\x90a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x06\xB7`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x06\xD4\x90\x82a\x0B\x0CV[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\x03t\x91\x90a\tKV[P\x80Ta\x07\x11\x90a\n V[`\0\x82U\x80`\x1F\x10a\x07!WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x02\x15\x91\x90[\x80\x82\x11\x15a\x07OW`\0\x81U`\x01\x01a\x07;V[P\x90V[`\0\x80`@\x83\x85\x03\x12\x15a\x07fW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[`\0` \x82\x84\x03\x12\x15a\x07\x87W`\0\x80\xFD[\x815`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x07\x9EW`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x07\xE4Wa\x07\xE4a\x07\xA5V[`@R\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x07\xFDW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x08\x17Wa\x08\x17a\x07\xA5V[a\x08*`\x1F\x82\x01`\x1F\x19\x16` \x01a\x07\xBBV[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x08?W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x08nW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x08\x85W`\0\x80\xFD[a\x08\x91\x84\x82\x85\x01a\x07\xECV[\x94\x93PPPPV[`\0\x80` \x83\x85\x03\x12\x15a\x08\xACW`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x08\xC4W`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a\x08\xD8W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x08\xE7W`\0\x80\xFD[\x86` \x82`\x05\x1B\x85\x01\x01\x11\x15a\x08\xFCW`\0\x80\xFD[` \x92\x90\x92\x01\x96\x91\x95P\x90\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\t W`\0\x80\xFD[P5\x91\x90PV[`\0[\x83\x81\x10\x15a\tBW\x81\x81\x01Q\x83\x82\x01R` \x01a\t*V[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\tj\x81`@\x85\x01` \x87\x01a\t'V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0\x82Qa\t\x90\x81\x84` \x87\x01a\t'V[\x91\x90\x91\x01\x92\x91PPV[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a\t\xB5Wa\t\xB5a\x07\xA5V[\x83`\x05\x1B` a\t\xC7` \x83\x01a\x07\xBBV[\x86\x81R\x91\x85\x01\x91` \x81\x01\x906\x84\x11\x15a\t\xE0W`\0\x80\xFD[\x86[\x84\x81\x10\x15a\n\x14W\x805\x86\x81\x11\x15a\t\xFAW`\0\x80\x81\xFD[a\n\x066\x82\x8B\x01a\x07\xECV[\x84RP\x91\x83\x01\x91\x83\x01a\t\xE2V[P\x97\x96PPPPPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\n4W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\nTWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\0`\x01\x82\x01a\nzWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[P`\x01\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15a\nTW`\0\x19` \x91\x90\x91\x03`\x03\x1B\x1B\x16\x91\x90PV[`\x1F\x82\x11\x15a\x0B\x07W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\n\xE4WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x0B\x03W\x82\x81U`\x01\x01a\n\xF0V[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0B&Wa\x0B&a\x07\xA5V[a\x0B:\x81a\x0B4\x84Ta\n V[\x84a\n\xBBV[` \x80`\x1F\x83\x11`\x01\x81\x14a\x0BoW`\0\x84\x15a\x0BWWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x0B\x03V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x0B\x9EW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x0B\x7FV[P\x85\x82\x10\x15a\x0B\xBCW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV\xFE\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\0\xA2dipfsX\"\x12 \x8E\xA9\x13\xCA\x12^o\xAD\xA8s\xC1\xD3Y\xFF!\xEA\x04\xB3\x89\x18'\xEC\xCF\x1F\xBA\xEC\xFCL\xA7Gl?dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static MOCKMULTIOWNABLE_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x93W`\x005`\xE0\x1C\x80cE\x9F\xB2\xAD\x11a\0fW\x80cE\x9F\xB2\xAD\x14a\0\xFBW\x80cr\xDE;Z\x14a\x01\x0EW\x80c\x8E\xA6\x90)\x14a\x01!W\x80c\xA2\xE1\xA8\xD8\x14a\x01AW\x80c\xD9H\xFD.\x14a\x01TW`\0\x80\xFD[\x80c\x06j\x1E\xB7\x14a\0\x98W\x80c\x0F\x0F?$\x14a\0\xC0W\x80c\x1C\xA59?\x14a\0\xD5W\x80c)V^;\x14a\0\xE8W[`\0\x80\xFD[a\0\xABa\0\xA66`\x04a\x07SV[a\x01rV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xD3a\0\xCE6`\x04a\x07uV[a\x01\xE0V[\0[a\0\xABa\0\xE36`\x04a\x08\\V[a\x02\x18V[a\0\xD3a\0\xF66`\x04a\x07SV[a\x02SV[a\0\xD3a\x01\t6`\x04a\x08\x99V[a\x02|V[a\0\xD3a\x01\x1C6`\x04a\t\x0EV[a\x02\x8EV[a\x014a\x01/6`\x04a\t\x0EV[a\x03\x80V[`@Qa\0\xB7\x91\x90a\tKV[a\0\xABa\x01O6`\x04a\x07uV[a\x04AV[`\0\x80Q` a\x0B\xCD\x839\x81Q\x91RT`@Q\x90\x81R` \x01a\0\xB7V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x01\xC5\x91a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P\x92\x91PPV[a\x01\xE8a\x04\x87V[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x02\x15\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x04\xB9V[PV[`\0`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R`\x02\x01\x82`@Qa\x02:\x91\x90a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x02[a\x04\x87V[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x02x\x90``\x01a\x02\x01V[PPV[a\x02xa\x02\x89\x82\x84a\t\x9AV[a\x04\xE4V[a\x02\x96a\x04\x87V[`\0a\x02\xA1\x82a\x03\x80V[\x90P\x80Q`\0\x03a\x02\xCDW`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\x02\xFD\x90\x83\x90a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\x03)`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\x03D\x91a\x07\x05V[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\x03t\x91\x90a\tKV[`@Q\x80\x91\x03\x90\xA2PPV[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x03\xBC\x90a\n V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\xE8\x90a\n V[\x80\x15a\x045W\x80`\x1F\x10a\x04\nWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x045V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x04\x18W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x02:\x91a\t~V[a\x04\x903a\x04AV[\x80a\x04\x9AWP30\x14[\x15a\x04\xA1WV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x02\x15\x81`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R[\x80T\x90`\0a\x04\xDB\x83a\nZV[\x91\x90PUa\x066V[`\0[\x81Q\x81\x10\x15a\x02xW\x81\x81\x81Q\x81\x10a\x05\x02Wa\x05\x02a\n\x81V[` \x02` \x01\x01QQ` \x14\x15\x80\x15a\x056WP\x81\x81\x81Q\x81\x10a\x05(Wa\x05(a\n\x81V[` \x02` \x01\x01QQ`@\x14\x15[\x15a\x05oW\x81\x81\x81Q\x81\x10a\x05MWa\x05Ma\n\x81V[` \x02` \x01\x01Q`@Qc'u[\x91`\xE1\x1B\x81R`\x04\x01a\x02\xC4\x91\x90a\tKV[\x81\x81\x81Q\x81\x10a\x05\x81Wa\x05\x81a\n\x81V[` \x02` \x01\x01QQ` \x14\x80\x15a\x05\xC3WP`\x01`\x01`\xA0\x1B\x03\x80\x16\x82\x82\x81Q\x81\x10a\x05\xB0Wa\x05\xB0a\n\x81V[` \x02` \x01\x01Qa\x05\xC1\x90a\n\x97V[\x11[\x15a\x05\xFCW\x81\x81\x81Q\x81\x10a\x05\xDAWa\x05\xDAa\n\x81V[` \x02` \x01\x01Q`@Qc\xBF\xF1\xACe`\xE0\x1B\x81R`\x04\x01a\x02\xC4\x91\x90a\tKV[a\x06.\x82\x82\x81Q\x81\x10a\x06\x11Wa\x06\x11a\n\x81V[` \x02` \x01\x01Qa\x04\xCD`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R\x90V[`\x01\x01a\x04\xE7V[a\x06?\x82a\x02\x18V[\x15a\x06_W\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x02\xC4\x91\x90a\tKV[`\x01`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R`\x02\x01\x83`@Qa\x06\x81\x91\x90a\t~V[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x06\xB7`\0\x80Q` a\x0B\xCD\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x06\xD4\x90\x82a\x0B\x0CV[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\x03t\x91\x90a\tKV[P\x80Ta\x07\x11\x90a\n V[`\0\x82U\x80`\x1F\x10a\x07!WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x02\x15\x91\x90[\x80\x82\x11\x15a\x07OW`\0\x81U`\x01\x01a\x07;V[P\x90V[`\0\x80`@\x83\x85\x03\x12\x15a\x07fW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[`\0` \x82\x84\x03\x12\x15a\x07\x87W`\0\x80\xFD[\x815`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x07\x9EW`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x07\xE4Wa\x07\xE4a\x07\xA5V[`@R\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x07\xFDW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x08\x17Wa\x08\x17a\x07\xA5V[a\x08*`\x1F\x82\x01`\x1F\x19\x16` \x01a\x07\xBBV[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x08?W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x08nW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x08\x85W`\0\x80\xFD[a\x08\x91\x84\x82\x85\x01a\x07\xECV[\x94\x93PPPPV[`\0\x80` \x83\x85\x03\x12\x15a\x08\xACW`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x08\xC4W`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a\x08\xD8W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x08\xE7W`\0\x80\xFD[\x86` \x82`\x05\x1B\x85\x01\x01\x11\x15a\x08\xFCW`\0\x80\xFD[` \x92\x90\x92\x01\x96\x91\x95P\x90\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\t W`\0\x80\xFD[P5\x91\x90PV[`\0[\x83\x81\x10\x15a\tBW\x81\x81\x01Q\x83\x82\x01R` \x01a\t*V[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\tj\x81`@\x85\x01` \x87\x01a\t'V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0\x82Qa\t\x90\x81\x84` \x87\x01a\t'V[\x91\x90\x91\x01\x92\x91PPV[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a\t\xB5Wa\t\xB5a\x07\xA5V[\x83`\x05\x1B` a\t\xC7` \x83\x01a\x07\xBBV[\x86\x81R\x91\x85\x01\x91` \x81\x01\x906\x84\x11\x15a\t\xE0W`\0\x80\xFD[\x86[\x84\x81\x10\x15a\n\x14W\x805\x86\x81\x11\x15a\t\xFAW`\0\x80\x81\xFD[a\n\x066\x82\x8B\x01a\x07\xECV[\x84RP\x91\x83\x01\x91\x83\x01a\t\xE2V[P\x97\x96PPPPPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\n4W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\nTWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\0`\x01\x82\x01a\nzWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[P`\x01\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15a\nTW`\0\x19` \x91\x90\x91\x03`\x03\x1B\x1B\x16\x91\x90PV[`\x1F\x82\x11\x15a\x0B\x07W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\n\xE4WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x0B\x03W\x82\x81U`\x01\x01a\n\xF0V[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0B&Wa\x0B&a\x07\xA5V[a\x0B:\x81a\x0B4\x84Ta\n V[\x84a\n\xBBV[` \x80`\x1F\x83\x11`\x01\x81\x14a\x0BoW`\0\x84\x15a\x0BWWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x0B\x03V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x0B\x9EW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x0B\x7FV[P\x85\x82\x10\x15a\x0B\xBCW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV\xFE\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\0\xA2dipfsX\"\x12 \x8E\xA9\x13\xCA\x12^o\xAD\xA8s\xC1\xD3Y\xFF!\xEA\x04\xB3\x89\x18'\xEC\xCF\x1F\xBA\xEC\xFCL\xA7Gl?dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static MOCKMULTIOWNABLE_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct MockMultiOwnable(::ethers::contract::Contract); + impl ::core::clone::Clone for MockMultiOwnable { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for MockMultiOwnable { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for MockMultiOwnable { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for MockMultiOwnable { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(MockMultiOwnable)) + .field(&self.address()) + .finish() + } + } + impl MockMultiOwnable { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + MOCKMULTIOWNABLE_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + MOCKMULTIOWNABLE_ABI.clone(), + MOCKMULTIOWNABLE_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `addOwnerAddress` (0x0f0f3f24) function + pub fn add_owner_address( + &self, + owner: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([15, 15, 63, 36], owner) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `addOwnerPublicKey` (0x29565e3b) function + pub fn add_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([41, 86, 94, 59], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `init` (0x459fb2ad) function + pub fn init( + &self, + owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([69, 159, 178, 173], owners) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerAddress` (0xa2e1a8d8) function + pub fn is_owner_address( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([162, 225, 168, 216], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerBytes` (0x1ca5393f) function + pub fn is_owner_bytes( + &self, + account: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 165, 57, 63], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerPublicKey` (0x066a1eb7) function + pub fn is_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([6, 106, 30, 183], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextOwnerIndex` (0xd948fd2e) function + pub fn next_owner_index( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([217, 72, 253, 46], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `ownerAtIndex` (0x8ea69029) function + pub fn owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 166, 144, 41], index) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `removeOwnerAtIndex` (0x72de3b5a) function + pub fn remove_owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([114, 222, 59, 90], index) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `AddOwner` event + pub fn add_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AddOwnerFilter> { + self.0.event() + } + ///Gets the contract's `RemoveOwner` event + pub fn remove_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, RemoveOwnerFilter> + { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, MockMultiOwnableEvents> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> + for MockMultiOwnable + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `AlreadyOwner` with signature `AlreadyOwner(bytes)` and selector `0x8d16255a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "AlreadyOwner", abi = "AlreadyOwner(bytes)")] + pub struct AlreadyOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `InvalidEthereumAddressOwner` with signature `InvalidEthereumAddressOwner(bytes)` and selector `0xbff1ac65` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidEthereumAddressOwner", + abi = "InvalidEthereumAddressOwner(bytes)" + )] + pub struct InvalidEthereumAddressOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `InvalidOwnerBytesLength` with signature `InvalidOwnerBytesLength(bytes)` and selector `0x4eeab722` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidOwnerBytesLength", + abi = "InvalidOwnerBytesLength(bytes)" + )] + pub struct InvalidOwnerBytesLength { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `NoOwnerAtIndex` with signature `NoOwnerAtIndex(uint256)` and selector `0x68188e7a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "NoOwnerAtIndex", abi = "NoOwnerAtIndex(uint256)")] + pub struct NoOwnerAtIndex { + pub index: ::ethers::core::types::U256, + } + ///Custom Error type `Unauthorized` with signature `Unauthorized()` and selector `0x82b42900` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "Unauthorized", abi = "Unauthorized()")] + pub struct Unauthorized; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockMultiOwnableErrors { + AlreadyOwner(AlreadyOwner), + InvalidEthereumAddressOwner(InvalidEthereumAddressOwner), + InvalidOwnerBytesLength(InvalidOwnerBytesLength), + NoOwnerAtIndex(NoOwnerAtIndex), + Unauthorized(Unauthorized), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for MockMultiOwnableErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::AlreadyOwner(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidEthereumAddressOwner(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidOwnerBytesLength(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::NoOwnerAtIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Unauthorized(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockMultiOwnableErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::AlreadyOwner(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::InvalidEthereumAddressOwner(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::InvalidOwnerBytesLength(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NoOwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Unauthorized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for MockMultiOwnableErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector == ::selector() => true, + _ if selector + == ::selector( + ) => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ if selector == ::selector() => true, + _ => false, + } + } + } + impl ::core::fmt::Display for MockMultiOwnableErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AlreadyOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidEthereumAddressOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidOwnerBytesLength(element) => ::core::fmt::Display::fmt(element, f), + Self::NoOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::Unauthorized(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for MockMultiOwnableErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for MockMultiOwnableErrors { + fn from(value: AlreadyOwner) -> Self { + Self::AlreadyOwner(value) + } + } + impl ::core::convert::From for MockMultiOwnableErrors { + fn from(value: InvalidEthereumAddressOwner) -> Self { + Self::InvalidEthereumAddressOwner(value) + } + } + impl ::core::convert::From for MockMultiOwnableErrors { + fn from(value: InvalidOwnerBytesLength) -> Self { + Self::InvalidOwnerBytesLength(value) + } + } + impl ::core::convert::From for MockMultiOwnableErrors { + fn from(value: NoOwnerAtIndex) -> Self { + Self::NoOwnerAtIndex(value) + } + } + impl ::core::convert::From for MockMultiOwnableErrors { + fn from(value: Unauthorized) -> Self { + Self::Unauthorized(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "AddOwner", abi = "AddOwner(uint256,bytes)")] + pub struct AddOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "RemoveOwner", abi = "RemoveOwner(uint256,bytes)")] + pub struct RemoveOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockMultiOwnableEvents { + AddOwnerFilter(AddOwnerFilter), + RemoveOwnerFilter(RemoveOwnerFilter), + } + impl ::ethers::contract::EthLogDecode for MockMultiOwnableEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = AddOwnerFilter::decode_log(log) { + return Ok(MockMultiOwnableEvents::AddOwnerFilter(decoded)); + } + if let Ok(decoded) = RemoveOwnerFilter::decode_log(log) { + return Ok(MockMultiOwnableEvents::RemoveOwnerFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for MockMultiOwnableEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockMultiOwnableEvents { + fn from(value: AddOwnerFilter) -> Self { + Self::AddOwnerFilter(value) + } + } + impl ::core::convert::From for MockMultiOwnableEvents { + fn from(value: RemoveOwnerFilter) -> Self { + Self::RemoveOwnerFilter(value) + } + } + ///Container type for all input parameters for the `addOwnerAddress` function with signature `addOwnerAddress(address)` and selector `0x0f0f3f24` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerAddress", abi = "addOwnerAddress(address)")] + pub struct AddOwnerAddressCall { + pub owner: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `addOwnerPublicKey` function with signature `addOwnerPublicKey(bytes32,bytes32)` and selector `0x29565e3b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerPublicKey", abi = "addOwnerPublicKey(bytes32,bytes32)")] + pub struct AddOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `init` function with signature `init(bytes[])` and selector `0x459fb2ad` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "init", abi = "init(bytes[])")] + pub struct InitCall { + pub owners: ::std::vec::Vec<::ethers::core::types::Bytes>, + } + ///Container type for all input parameters for the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerAddress", abi = "isOwnerAddress(address)")] + pub struct IsOwnerAddressCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerBytes", abi = "isOwnerBytes(bytes)")] + pub struct IsOwnerBytesCall { + pub account: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerPublicKey", abi = "isOwnerPublicKey(bytes32,bytes32)")] + pub struct IsOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextOwnerIndex", abi = "nextOwnerIndex()")] + pub struct NextOwnerIndexCall; + ///Container type for all input parameters for the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "ownerAtIndex", abi = "ownerAtIndex(uint256)")] + pub struct OwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `removeOwnerAtIndex` function with signature `removeOwnerAtIndex(uint256)` and selector `0x72de3b5a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "removeOwnerAtIndex", abi = "removeOwnerAtIndex(uint256)")] + pub struct RemoveOwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockMultiOwnableCalls { + AddOwnerAddress(AddOwnerAddressCall), + AddOwnerPublicKey(AddOwnerPublicKeyCall), + Init(InitCall), + IsOwnerAddress(IsOwnerAddressCall), + IsOwnerBytes(IsOwnerBytesCall), + IsOwnerPublicKey(IsOwnerPublicKeyCall), + NextOwnerIndex(NextOwnerIndexCall), + OwnerAtIndex(OwnerAtIndexCall), + RemoveOwnerAtIndex(RemoveOwnerAtIndexCall), + } + impl ::ethers::core::abi::AbiDecode for MockMultiOwnableCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerAddress(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerPublicKey(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Init(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerAddress(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::IsOwnerBytes(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerPublicKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextOwnerIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::OwnerAtIndex(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::RemoveOwnerAtIndex(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockMultiOwnableCalls { + fn encode(self) -> Vec { + match self { + Self::AddOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::AddOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Init(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerBytes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextOwnerIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::OwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RemoveOwnerAtIndex(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + } + } + } + impl ::core::fmt::Display for MockMultiOwnableCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::AddOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::Init(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerBytes(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::NextOwnerIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: AddOwnerAddressCall) -> Self { + Self::AddOwnerAddress(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: AddOwnerPublicKeyCall) -> Self { + Self::AddOwnerPublicKey(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: InitCall) -> Self { + Self::Init(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: IsOwnerAddressCall) -> Self { + Self::IsOwnerAddress(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: IsOwnerBytesCall) -> Self { + Self::IsOwnerBytes(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: IsOwnerPublicKeyCall) -> Self { + Self::IsOwnerPublicKey(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: NextOwnerIndexCall) -> Self { + Self::NextOwnerIndex(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: OwnerAtIndexCall) -> Self { + Self::OwnerAtIndex(value) + } + } + impl ::core::convert::From for MockMultiOwnableCalls { + fn from(value: RemoveOwnerAtIndexCall) -> Self { + Self::RemoveOwnerAtIndex(value) + } + } + ///Container type for all return fields from the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerAddressReturn(pub bool); + ///Container type for all return fields from the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerBytesReturn(pub bool); + ///Container type for all return fields from the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerPublicKeyReturn(pub bool); + ///Container type for all return fields from the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextOwnerIndexReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct OwnerAtIndexReturn(pub ::ethers::core::types::Bytes); +} diff --git a/xmtp_id/src/bindings/mock_target.rs b/xmtp_id/src/bindings/mock_target.rs new file mode 100644 index 000000000..cc7b07652 --- /dev/null +++ b/xmtp_id/src/bindings/mock_target.rs @@ -0,0 +1,495 @@ +pub use mock_target::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod mock_target { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("changeOwnerSlotValue"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("changeOwnerSlotValue",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("change"), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("data"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("data"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("datahash"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("datahash"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("revertWithTargetError"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("revertWithTargetError",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data_"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("setData"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("setData"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data_"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ]), + events: ::std::collections::BTreeMap::new(), + errors: ::core::convert::From::from([( + ::std::borrow::ToOwned::to_owned("TargetError"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("TargetError"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + )]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static MOCKTARGET_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa\x04y\x80a\0 `\09`\0\xF3\xFE`\x80`@R`\x046\x10a\0JW`\x005`\xE0\x1C\x80c\x0CO`Y\x14a\0OW\x80c'k\x86\xA9\x14a\0dW\x80ca\xA3\x0B.\x14a\0\x8DW\x80cs\xD4\xA1:\x14a\0\xA0W\x80c\xABb\xF0\xE1\x14a\0\xC2W[`\0\x80\xFD[a\0ba\0]6`\x04a\x01\xCFV[a\0\xD5V[\0[4\x80\x15a\0pW`\0\x80\xFD[Pa\0z`\0T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0ba\0\x9B6`\x04a\x02\x80V[a\0\xF9V[4\x80\x15a\0\xACW`\0\x80\xFD[Pa\0\xB5a\x01\x0EV[`@Qa\0\x84\x91\x90a\x02\xA9V[a\0\xB5a\0\xD06`\x04a\x01\xCFV[a\x01\x9CV[\x80`@Qc4>\xB9q`\xE1\x1B\x81R`\x04\x01a\0\xF0\x91\x90a\x02\xA9V[`@Q\x80\x91\x03\x90\xFD[\x80\x15a\x01\x0BWb\x11\"3c\x8Bx\xC6\xD8\x19U[PV[`\x01\x80Ta\x01\x1B\x90a\x02\xF8V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01G\x90a\x02\xF8V[\x80\x15a\x01\x94W\x80`\x1F\x10a\x01iWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x01\x94V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x01wW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81V[```\x01a\x01\xAA\x83\x82a\x03\x83V[PP\x80Q` \x82\x01 `\0U\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a\x01\xE1W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x01\xF9W`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x02\rW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x02\x1FWa\x02\x1Fa\x01\xB9V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x02GWa\x02Ga\x01\xB9V[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x02`W`\0\x80\xFD[\x82` \x86\x01` \x83\x017`\0\x92\x81\x01` \x01\x92\x90\x92RP\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15a\x02\x92W`\0\x80\xFD[\x815\x80\x15\x15\x81\x14a\x02\xA2W`\0\x80\xFD[\x93\x92PPPV[`\0` \x80\x83R\x83Q\x80` \x85\x01R`\0[\x81\x81\x10\x15a\x02\xD7W\x85\x81\x01\x83\x01Q\x85\x82\x01`@\x01R\x82\x01a\x02\xBBV[P`\0`@\x82\x86\x01\x01R`@`\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x92PPP\x92\x91PPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x03\x0CW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x03,WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x03~W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x03[WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x03zW\x82\x81U`\x01\x01a\x03gV[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x03\x9DWa\x03\x9Da\x01\xB9V[a\x03\xB1\x81a\x03\xAB\x84Ta\x02\xF8V[\x84a\x032V[` \x80`\x1F\x83\x11`\x01\x81\x14a\x03\xE6W`\0\x84\x15a\x03\xCEWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x03zV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x04\x15W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x03\xF6V[P\x85\x82\x10\x15a\x043W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV\xFE\xA2dipfsX\"\x12 G\x92L\xC3U\x8F^\xDF\x01\xB8\x0B\x8Ee\x08\xB6\x8B\xBB\xE6\x12p\xFE\x0F6~\x864\xAC\xEB\xF7\"e\xBEdsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static MOCKTARGET_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\0JW`\x005`\xE0\x1C\x80c\x0CO`Y\x14a\0OW\x80c'k\x86\xA9\x14a\0dW\x80ca\xA3\x0B.\x14a\0\x8DW\x80cs\xD4\xA1:\x14a\0\xA0W\x80c\xABb\xF0\xE1\x14a\0\xC2W[`\0\x80\xFD[a\0ba\0]6`\x04a\x01\xCFV[a\0\xD5V[\0[4\x80\x15a\0pW`\0\x80\xFD[Pa\0z`\0T\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0ba\0\x9B6`\x04a\x02\x80V[a\0\xF9V[4\x80\x15a\0\xACW`\0\x80\xFD[Pa\0\xB5a\x01\x0EV[`@Qa\0\x84\x91\x90a\x02\xA9V[a\0\xB5a\0\xD06`\x04a\x01\xCFV[a\x01\x9CV[\x80`@Qc4>\xB9q`\xE1\x1B\x81R`\x04\x01a\0\xF0\x91\x90a\x02\xA9V[`@Q\x80\x91\x03\x90\xFD[\x80\x15a\x01\x0BWb\x11\"3c\x8Bx\xC6\xD8\x19U[PV[`\x01\x80Ta\x01\x1B\x90a\x02\xF8V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01G\x90a\x02\xF8V[\x80\x15a\x01\x94W\x80`\x1F\x10a\x01iWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x01\x94V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x01wW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81V[```\x01a\x01\xAA\x83\x82a\x03\x83V[PP\x80Q` \x82\x01 `\0U\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a\x01\xE1W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x01\xF9W`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x02\rW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x02\x1FWa\x02\x1Fa\x01\xB9V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x02GWa\x02Ga\x01\xB9V[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x02`W`\0\x80\xFD[\x82` \x86\x01` \x83\x017`\0\x92\x81\x01` \x01\x92\x90\x92RP\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15a\x02\x92W`\0\x80\xFD[\x815\x80\x15\x15\x81\x14a\x02\xA2W`\0\x80\xFD[\x93\x92PPPV[`\0` \x80\x83R\x83Q\x80` \x85\x01R`\0[\x81\x81\x10\x15a\x02\xD7W\x85\x81\x01\x83\x01Q\x85\x82\x01`@\x01R\x82\x01a\x02\xBBV[P`\0`@\x82\x86\x01\x01R`@`\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x92PPP\x92\x91PPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x03\x0CW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x03,WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x03~W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x03[WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x03zW\x82\x81U`\x01\x01a\x03gV[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x03\x9DWa\x03\x9Da\x01\xB9V[a\x03\xB1\x81a\x03\xAB\x84Ta\x02\xF8V[\x84a\x032V[` \x80`\x1F\x83\x11`\x01\x81\x14a\x03\xE6W`\0\x84\x15a\x03\xCEWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x03zV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x04\x15W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x03\xF6V[P\x85\x82\x10\x15a\x043W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV\xFE\xA2dipfsX\"\x12 G\x92L\xC3U\x8F^\xDF\x01\xB8\x0B\x8Ee\x08\xB6\x8B\xBB\xE6\x12p\xFE\x0F6~\x864\xAC\xEB\xF7\"e\xBEdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static MOCKTARGET_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct MockTarget(::ethers::contract::Contract); + impl ::core::clone::Clone for MockTarget { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for MockTarget { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for MockTarget { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for MockTarget { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(MockTarget)) + .field(&self.address()) + .finish() + } + } + impl MockTarget { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + MOCKTARGET_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + MOCKTARGET_ABI.clone(), + MOCKTARGET_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `changeOwnerSlotValue` (0x61a30b2e) function + pub fn change_owner_slot_value( + &self, + change: bool, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([97, 163, 11, 46], change) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `data` (0x73d4a13a) function + pub fn data( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([115, 212, 161, 58], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `datahash` (0x276b86a9) function + pub fn datahash(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([39, 107, 134, 169], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `revertWithTargetError` (0x0c4f6059) function + pub fn revert_with_target_error( + &self, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([12, 79, 96, 89], data) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `setData` (0xab62f0e1) function + pub fn set_data( + &self, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([171, 98, 240, 225], data) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> for MockTarget { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `TargetError` with signature `TargetError(bytes)` and selector `0x687d72e2` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "TargetError", abi = "TargetError(bytes)")] + pub struct TargetError { + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `changeOwnerSlotValue` function with signature `changeOwnerSlotValue(bool)` and selector `0x61a30b2e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "changeOwnerSlotValue", abi = "changeOwnerSlotValue(bool)")] + pub struct ChangeOwnerSlotValueCall { + pub change: bool, + } + ///Container type for all input parameters for the `data` function with signature `data()` and selector `0x73d4a13a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "data", abi = "data()")] + pub struct DataCall; + ///Container type for all input parameters for the `datahash` function with signature `datahash()` and selector `0x276b86a9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "datahash", abi = "datahash()")] + pub struct DatahashCall; + ///Container type for all input parameters for the `revertWithTargetError` function with signature `revertWithTargetError(bytes)` and selector `0x0c4f6059` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "revertWithTargetError", abi = "revertWithTargetError(bytes)")] + pub struct RevertWithTargetErrorCall { + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `setData` function with signature `setData(bytes)` and selector `0xab62f0e1` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "setData", abi = "setData(bytes)")] + pub struct SetDataCall { + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MockTargetCalls { + ChangeOwnerSlotValue(ChangeOwnerSlotValueCall), + Data(DataCall), + Datahash(DatahashCall), + RevertWithTargetError(RevertWithTargetErrorCall), + SetData(SetDataCall), + } + impl ::ethers::core::abi::AbiDecode for MockTargetCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChangeOwnerSlotValue(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Data(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Datahash(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::RevertWithTargetError(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::SetData(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MockTargetCalls { + fn encode(self) -> Vec { + match self { + Self::ChangeOwnerSlotValue(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Data(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Datahash(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertWithTargetError(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::SetData(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for MockTargetCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ChangeOwnerSlotValue(element) => ::core::fmt::Display::fmt(element, f), + Self::Data(element) => ::core::fmt::Display::fmt(element, f), + Self::Datahash(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertWithTargetError(element) => ::core::fmt::Display::fmt(element, f), + Self::SetData(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MockTargetCalls { + fn from(value: ChangeOwnerSlotValueCall) -> Self { + Self::ChangeOwnerSlotValue(value) + } + } + impl ::core::convert::From for MockTargetCalls { + fn from(value: DataCall) -> Self { + Self::Data(value) + } + } + impl ::core::convert::From for MockTargetCalls { + fn from(value: DatahashCall) -> Self { + Self::Datahash(value) + } + } + impl ::core::convert::From for MockTargetCalls { + fn from(value: RevertWithTargetErrorCall) -> Self { + Self::RevertWithTargetError(value) + } + } + impl ::core::convert::From for MockTargetCalls { + fn from(value: SetDataCall) -> Self { + Self::SetData(value) + } + } + ///Container type for all return fields from the `data` function with signature `data()` and selector `0x73d4a13a` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct DataReturn(pub ::ethers::core::types::Bytes); + ///Container type for all return fields from the `datahash` function with signature `datahash()` and selector `0x276b86a9` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct DatahashReturn(pub [u8; 32]); + ///Container type for all return fields from the `setData` function with signature `setData(bytes)` and selector `0xab62f0e1` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct SetDataReturn(pub ::ethers::core::types::Bytes); +} diff --git a/xmtp_id/src/bindings/mod.rs b/xmtp_id/src/bindings/mod.rs new file mode 100644 index 000000000..6dd640266 --- /dev/null +++ b/xmtp_id/src/bindings/mod.rs @@ -0,0 +1,37 @@ +#![allow(clippy::all)] +//! This module contains abigen! generated bindings for solidity contracts. +//! This is autogenerated code. +//! Do not manually edit these files. +//! These files may be overwritten by the codegen system at any time. +pub mod base_64; +pub mod base_64_url; +pub mod coinbase_smart_wallet; +pub mod coinbase_smart_wallet_factory; +pub mod dummy; +pub mod erc1271; +pub mod erc1271_input_generator; +pub mod fcl_ecdsa; +pub mod fcl_elliptic_zz; +pub mod helpers; +pub mod i_aggregator; +pub mod i_entry_point; +pub mod i_nonce_manager; +pub mod i_stake_manager; +pub mod ierc721_token_receiver; +pub mod lib_clone; +pub mod lib_string; +pub mod mock_coinbase_smart_wallet; +pub mod mock_entry_point; +pub mod mock_erc20; +pub mod mock_erc721; +pub mod mock_multi_ownable; +pub mod mock_target; +pub mod multi_ownable; +pub mod receiver; +pub mod shared_types; +pub mod signature_checker_lib; +pub mod static_; +pub mod user_operation_lib; +pub mod utils; +pub mod uups_upgradeable; +pub mod web_authn; diff --git a/xmtp_id/src/bindings/multi_ownable.rs b/xmtp_id/src/bindings/multi_ownable.rs new file mode 100644 index 000000000..a13fb3cf3 --- /dev/null +++ b/xmtp_id/src/bindings/multi_ownable.rs @@ -0,0 +1,1132 @@ +pub use multi_ownable::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod multi_ownable { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("addOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerBytes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("isOwnerPublicKey"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("x"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("y"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bool, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bool"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextOwnerIndex"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("ownerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("removeOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AddOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("AddOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("RemoveOwner"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("RemoveOwner"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: true, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("AlreadyOwner"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidEthereumAddressOwner",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("InvalidOwnerBytesLength",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("NoOwnerAtIndex"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("index"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("Unauthorized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("Unauthorized"), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static MULTIOWNABLE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa\t8\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x88W`\x005`\xE0\x1C\x80cr\xDE;Z\x11a\0[W\x80cr\xDE;Z\x14a\0\xF0W\x80c\x8E\xA6\x90)\x14a\x01\x03W\x80c\xA2\xE1\xA8\xD8\x14a\x01#W\x80c\xD9H\xFD.\x14a\x016W`\0\x80\xFD[\x80c\x06j\x1E\xB7\x14a\0\x8DW\x80c\x0F\x0F?$\x14a\0\xB5W\x80c\x1C\xA59?\x14a\0\xCAW\x80c)V^;\x14a\0\xDDW[`\0\x80\xFD[a\0\xA0a\0\x9B6`\x04a\x05\xCBV[a\x01TV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xC8a\0\xC36`\x04a\x05\xEDV[a\x01\xC2V[\0[a\0\xA0a\0\xD86`\x04a\x063V[a\x01\xFAV[a\0\xC8a\0\xEB6`\x04a\x05\xCBV[a\x025V[a\0\xC8a\0\xFE6`\x04a\x06\xE4V[a\x02^V[a\x01\x16a\x01\x116`\x04a\x06\xE4V[a\x03PV[`@Qa\0\xAC\x91\x90a\x07!V[a\0\xA0a\x0116`\x04a\x05\xEDV[a\x04\x11V[`\0\x80Q` a\x08\xE3\x839\x81Q\x91RT`@Q\x90\x81R` \x01a\0\xACV[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x01\xA7\x91a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P\x92\x91PPV[a\x01\xCAa\x04WV[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x01\xF7\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x04\x89V[PV[`\0`\0\x80Q` a\x08\xE3\x839\x81Q\x91R`\x02\x01\x82`@Qa\x02\x1C\x91\x90a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x02=a\x04WV[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x02Z\x90``\x01a\x01\xE3V[PPV[a\x02fa\x04WV[`\0a\x02q\x82a\x03PV[\x90P\x80Q`\0\x03a\x02\x9DW`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\x02\xCD\x90\x83\x90a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\x02\xF9`\0\x80Q` a\x08\xE3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\x03\x14\x91a\x05}V[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\x03D\x91\x90a\x07!V[`@Q\x80\x91\x03\x90\xA2PPV[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x03\x8C\x90a\x07pV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\xB8\x90a\x07pV[\x80\x15a\x04\x05W\x80`\x1F\x10a\x03\xDAWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x04\x05V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x03\xE8W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\0\x80Q` a\x08\xE3\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x02\x1C\x91a\x07TV[a\x04`3a\x04\x11V[\x80a\x04jWP30\x14[\x15a\x04qWV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x01\xF7\x81`\0\x80Q` a\x08\xE3\x839\x81Q\x91R\x80T\x90`\0a\x04\xAA\x83a\x07\xAAV[\x91\x90PUa\x04\xB7\x82a\x01\xFAV[\x15a\x04\xD7W\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x02\x94\x91\x90a\x07!V[`\x01`\0\x80Q` a\x08\xE3\x839\x81Q\x91R`\x02\x01\x83`@Qa\x04\xF9\x91\x90a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x05/`\0\x80Q` a\x08\xE3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x05L\x90\x82a\x08\"V[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\x03D\x91\x90a\x07!V[P\x80Ta\x05\x89\x90a\x07pV[`\0\x82U\x80`\x1F\x10a\x05\x99WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x01\xF7\x91\x90[\x80\x82\x11\x15a\x05\xC7W`\0\x81U`\x01\x01a\x05\xB3V[P\x90V[`\0\x80`@\x83\x85\x03\x12\x15a\x05\xDEW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[`\0` \x82\x84\x03\x12\x15a\x05\xFFW`\0\x80\xFD[\x815`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x06\x16W`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a\x06EW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x06]W`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x06qW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x06\x83Wa\x06\x83a\x06\x1DV[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x06\xABWa\x06\xABa\x06\x1DV[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x06\xC4W`\0\x80\xFD[\x82` \x86\x01` \x83\x017`\0\x92\x81\x01` \x01\x92\x90\x92RP\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15a\x06\xF6W`\0\x80\xFD[P5\x91\x90PV[`\0[\x83\x81\x10\x15a\x07\x18W\x81\x81\x01Q\x83\x82\x01R` \x01a\x07\0V[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x07@\x81`@\x85\x01` \x87\x01a\x06\xFDV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0\x82Qa\x07f\x81\x84` \x87\x01a\x06\xFDV[\x91\x90\x91\x01\x92\x91PPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x07\x84W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x07\xA4WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\0`\x01\x82\x01a\x07\xCAWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[P`\x01\x01\x90V[`\x1F\x82\x11\x15a\x08\x1DW`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x07\xFAWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x08\x19W\x82\x81U`\x01\x01a\x08\x06V[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x08I[gTmvF\xF0J\xDE\x10\xDD@\x17\xA7*\x8B2\xD7dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static MULTIOWNABLE_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x88W`\x005`\xE0\x1C\x80cr\xDE;Z\x11a\0[W\x80cr\xDE;Z\x14a\0\xF0W\x80c\x8E\xA6\x90)\x14a\x01\x03W\x80c\xA2\xE1\xA8\xD8\x14a\x01#W\x80c\xD9H\xFD.\x14a\x016W`\0\x80\xFD[\x80c\x06j\x1E\xB7\x14a\0\x8DW\x80c\x0F\x0F?$\x14a\0\xB5W\x80c\x1C\xA59?\x14a\0\xCAW\x80c)V^;\x14a\0\xDDW[`\0\x80\xFD[a\0\xA0a\0\x9B6`\x04a\x05\xCBV[a\x01TV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xC8a\0\xC36`\x04a\x05\xEDV[a\x01\xC2V[\0[a\0\xA0a\0\xD86`\x04a\x063V[a\x01\xFAV[a\0\xC8a\0\xEB6`\x04a\x05\xCBV[a\x025V[a\0\xC8a\0\xFE6`\x04a\x06\xE4V[a\x02^V[a\x01\x16a\x01\x116`\x04a\x06\xE4V[a\x03PV[`@Qa\0\xAC\x91\x90a\x07!V[a\0\xA0a\x0116`\x04a\x05\xEDV[a\x04\x11V[`\0\x80Q` a\x08\xE3\x839\x81Q\x91RT`@Q\x90\x81R` \x01a\0\xACV[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90R`\0\x90\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90``\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x01\xA7\x91a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x90P\x92\x91PPV[a\x01\xCAa\x04WV[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01Ra\x01\xF7\x91\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x04\x89V[PV[`\0`\0\x80Q` a\x08\xE3\x839\x81Q\x91R`\x02\x01\x82`@Qa\x02\x1C\x91\x90a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T`\xFF\x16\x92\x91PPV[a\x02=a\x04WV[`@\x80Q` \x81\x01\x84\x90R\x90\x81\x01\x82\x90Ra\x02Z\x90``\x01a\x01\xE3V[PPV[a\x02fa\x04WV[`\0a\x02q\x82a\x03PV[\x90P\x80Q`\0\x03a\x02\x9DW`@Qc4\x0CG=`\xE1\x1B\x81R`\x04\x81\x01\x83\x90R`$\x01[`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x02\x90a\x02\xCD\x90\x83\x90a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T`\xFF\x19\x16\x90Ua\x02\xF9`\0\x80Q` a\x08\xE3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x81 a\x03\x14\x91a\x05}V[\x81\x7F\xCF\x95\xBB\xFEo\x87\x0F\x8C\xC4\x04\x82\xDC=\xCC\xDA\xFD&\x8F\x0E\x9C\xE0\xA4\xF2N\xA1\xBE\xA9\xBEd\xE5\x05\xFF\x82`@Qa\x03D\x91\x90a\x07!V[`@Q\x80\x91\x03\x90\xA2PPV[`\0\x81\x81R\x7F\x97\xE2\xC6\xAA\xD4\xCE]V.\xBF\xAA\0\xDBk\x9E\x0F\xB6n\xA5\xD8\x16.\xD5\xB2C\xF5\x1A.\x03\x08o\x01` R`@\x90 \x80T``\x91\x90a\x03\x8C\x90a\x07pV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\xB8\x90a\x07pV[\x80\x15a\x04\x05W\x80`\x1F\x10a\x03\xDAWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x04\x05V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x03\xE8W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x91\x90PV[`\0`\0\x80Q` a\x08\xE3\x839\x81Q\x91R`@\x80Q`\x01`\x01`\xA0\x1B\x03\x85\x16` \x82\x01R`\x02\x92\x90\x92\x01\x91\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x02\x1C\x91a\x07TV[a\x04`3a\x04\x11V[\x80a\x04jWP30\x14[\x15a\x04qWV[`@Qb\x82\xB4)`\xE8\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x01\xF7\x81`\0\x80Q` a\x08\xE3\x839\x81Q\x91R\x80T\x90`\0a\x04\xAA\x83a\x07\xAAV[\x91\x90PUa\x04\xB7\x82a\x01\xFAV[\x15a\x04\xD7W\x81`@QcF\x8B\x12\xAD`\xE1\x1B\x81R`\x04\x01a\x02\x94\x91\x90a\x07!V[`\x01`\0\x80Q` a\x08\xE3\x839\x81Q\x91R`\x02\x01\x83`@Qa\x04\xF9\x91\x90a\x07TV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 \x80T\x91\x15\x15`\xFF\x19\x90\x92\x16\x91\x90\x91\x17\x90U\x81a\x05/`\0\x80Q` a\x08\xE3\x839\x81Q\x91R\x90V[`\0\x83\x81R`\x01\x91\x90\x91\x01` R`@\x90 \x90a\x05L\x90\x82a\x08\"V[P\x80\x7F8\x10\x9E\xDC&\xE1f\xB5W\x93R\xCEV\xA5\x08\x13\x17~\xB2R\x08\xFD\x90\xD6\x1F/7\x83\x86\"\x02 \x83`@Qa\x03D\x91\x90a\x07!V[P\x80Ta\x05\x89\x90a\x07pV[`\0\x82U\x80`\x1F\x10a\x05\x99WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x01\xF7\x91\x90[\x80\x82\x11\x15a\x05\xC7W`\0\x81U`\x01\x01a\x05\xB3V[P\x90V[`\0\x80`@\x83\x85\x03\x12\x15a\x05\xDEW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[`\0` \x82\x84\x03\x12\x15a\x05\xFFW`\0\x80\xFD[\x815`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x06\x16W`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a\x06EW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x06]W`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x06qW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x06\x83Wa\x06\x83a\x06\x1DV[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x06\xABWa\x06\xABa\x06\x1DV[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x06\xC4W`\0\x80\xFD[\x82` \x86\x01` \x83\x017`\0\x92\x81\x01` \x01\x92\x90\x92RP\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15a\x06\xF6W`\0\x80\xFD[P5\x91\x90PV[`\0[\x83\x81\x10\x15a\x07\x18W\x81\x81\x01Q\x83\x82\x01R` \x01a\x07\0V[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x07@\x81`@\x85\x01` \x87\x01a\x06\xFDV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0\x82Qa\x07f\x81\x84` \x87\x01a\x06\xFDV[\x91\x90\x91\x01\x92\x91PPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x07\x84W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x07\xA4WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\0`\x01\x82\x01a\x07\xCAWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[P`\x01\x01\x90V[`\x1F\x82\x11\x15a\x08\x1DW`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x07\xFAWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x08\x19W\x82\x81U`\x01\x01a\x08\x06V[PPP[PPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x08I[gTmvF\xF0J\xDE\x10\xDD@\x17\xA7*\x8B2\xD7dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static MULTIOWNABLE_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct MultiOwnable(::ethers::contract::Contract); + impl ::core::clone::Clone for MultiOwnable { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for MultiOwnable { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for MultiOwnable { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for MultiOwnable { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(MultiOwnable)) + .field(&self.address()) + .finish() + } + } + impl MultiOwnable { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + MULTIOWNABLE_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + MULTIOWNABLE_ABI.clone(), + MULTIOWNABLE_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `addOwnerAddress` (0x0f0f3f24) function + pub fn add_owner_address( + &self, + owner: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([15, 15, 63, 36], owner) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `addOwnerPublicKey` (0x29565e3b) function + pub fn add_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([41, 86, 94, 59], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerAddress` (0xa2e1a8d8) function + pub fn is_owner_address( + &self, + account: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([162, 225, 168, 216], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerBytes` (0x1ca5393f) function + pub fn is_owner_bytes( + &self, + account: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 165, 57, 63], account) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `isOwnerPublicKey` (0x066a1eb7) function + pub fn is_owner_public_key( + &self, + x: [u8; 32], + y: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([6, 106, 30, 183], (x, y)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextOwnerIndex` (0xd948fd2e) function + pub fn next_owner_index( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([217, 72, 253, 46], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `ownerAtIndex` (0x8ea69029) function + pub fn owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([142, 166, 144, 41], index) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `removeOwnerAtIndex` (0x72de3b5a) function + pub fn remove_owner_at_index( + &self, + index: ::ethers::core::types::U256, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([114, 222, 59, 90], index) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `AddOwner` event + pub fn add_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AddOwnerFilter> { + self.0.event() + } + ///Gets the contract's `RemoveOwner` event + pub fn remove_owner_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, RemoveOwnerFilter> + { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, MultiOwnableEvents> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> for MultiOwnable { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `AlreadyOwner` with signature `AlreadyOwner(bytes)` and selector `0x8d16255a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "AlreadyOwner", abi = "AlreadyOwner(bytes)")] + pub struct AlreadyOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `InvalidEthereumAddressOwner` with signature `InvalidEthereumAddressOwner(bytes)` and selector `0xbff1ac65` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidEthereumAddressOwner", + abi = "InvalidEthereumAddressOwner(bytes)" + )] + pub struct InvalidEthereumAddressOwner { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `InvalidOwnerBytesLength` with signature `InvalidOwnerBytesLength(bytes)` and selector `0x4eeab722` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "InvalidOwnerBytesLength", + abi = "InvalidOwnerBytesLength(bytes)" + )] + pub struct InvalidOwnerBytesLength { + pub owner: ::ethers::core::types::Bytes, + } + ///Custom Error type `NoOwnerAtIndex` with signature `NoOwnerAtIndex(uint256)` and selector `0x68188e7a` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "NoOwnerAtIndex", abi = "NoOwnerAtIndex(uint256)")] + pub struct NoOwnerAtIndex { + pub index: ::ethers::core::types::U256, + } + ///Custom Error type `Unauthorized` with signature `Unauthorized()` and selector `0x82b42900` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "Unauthorized", abi = "Unauthorized()")] + pub struct Unauthorized; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MultiOwnableErrors { + AlreadyOwner(AlreadyOwner), + InvalidEthereumAddressOwner(InvalidEthereumAddressOwner), + InvalidOwnerBytesLength(InvalidOwnerBytesLength), + NoOwnerAtIndex(NoOwnerAtIndex), + Unauthorized(Unauthorized), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for MultiOwnableErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::AlreadyOwner(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidEthereumAddressOwner(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::InvalidOwnerBytesLength(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::NoOwnerAtIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Unauthorized(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MultiOwnableErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::AlreadyOwner(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::InvalidEthereumAddressOwner(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::InvalidOwnerBytesLength(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NoOwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Unauthorized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for MultiOwnableErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector == ::selector() => true, + _ if selector + == ::selector( + ) => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ if selector == ::selector() => true, + _ => false, + } + } + } + impl ::core::fmt::Display for MultiOwnableErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AlreadyOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidEthereumAddressOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::InvalidOwnerBytesLength(element) => ::core::fmt::Display::fmt(element, f), + Self::NoOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::Unauthorized(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for MultiOwnableErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for MultiOwnableErrors { + fn from(value: AlreadyOwner) -> Self { + Self::AlreadyOwner(value) + } + } + impl ::core::convert::From for MultiOwnableErrors { + fn from(value: InvalidEthereumAddressOwner) -> Self { + Self::InvalidEthereumAddressOwner(value) + } + } + impl ::core::convert::From for MultiOwnableErrors { + fn from(value: InvalidOwnerBytesLength) -> Self { + Self::InvalidOwnerBytesLength(value) + } + } + impl ::core::convert::From for MultiOwnableErrors { + fn from(value: NoOwnerAtIndex) -> Self { + Self::NoOwnerAtIndex(value) + } + } + impl ::core::convert::From for MultiOwnableErrors { + fn from(value: Unauthorized) -> Self { + Self::Unauthorized(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "AddOwner", abi = "AddOwner(uint256,bytes)")] + pub struct AddOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "RemoveOwner", abi = "RemoveOwner(uint256,bytes)")] + pub struct RemoveOwnerFilter { + #[ethevent(indexed)] + pub index: ::ethers::core::types::U256, + pub owner: ::ethers::core::types::Bytes, + } + ///Container type for all of the contract's events + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MultiOwnableEvents { + AddOwnerFilter(AddOwnerFilter), + RemoveOwnerFilter(RemoveOwnerFilter), + } + impl ::ethers::contract::EthLogDecode for MultiOwnableEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = AddOwnerFilter::decode_log(log) { + return Ok(MultiOwnableEvents::AddOwnerFilter(decoded)); + } + if let Ok(decoded) = RemoveOwnerFilter::decode_log(log) { + return Ok(MultiOwnableEvents::RemoveOwnerFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for MultiOwnableEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MultiOwnableEvents { + fn from(value: AddOwnerFilter) -> Self { + Self::AddOwnerFilter(value) + } + } + impl ::core::convert::From for MultiOwnableEvents { + fn from(value: RemoveOwnerFilter) -> Self { + Self::RemoveOwnerFilter(value) + } + } + ///Container type for all input parameters for the `addOwnerAddress` function with signature `addOwnerAddress(address)` and selector `0x0f0f3f24` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerAddress", abi = "addOwnerAddress(address)")] + pub struct AddOwnerAddressCall { + pub owner: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `addOwnerPublicKey` function with signature `addOwnerPublicKey(bytes32,bytes32)` and selector `0x29565e3b` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "addOwnerPublicKey", abi = "addOwnerPublicKey(bytes32,bytes32)")] + pub struct AddOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerAddress", abi = "isOwnerAddress(address)")] + pub struct IsOwnerAddressCall { + pub account: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerBytes", abi = "isOwnerBytes(bytes)")] + pub struct IsOwnerBytesCall { + pub account: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "isOwnerPublicKey", abi = "isOwnerPublicKey(bytes32,bytes32)")] + pub struct IsOwnerPublicKeyCall { + pub x: [u8; 32], + pub y: [u8; 32], + } + ///Container type for all input parameters for the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextOwnerIndex", abi = "nextOwnerIndex()")] + pub struct NextOwnerIndexCall; + ///Container type for all input parameters for the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "ownerAtIndex", abi = "ownerAtIndex(uint256)")] + pub struct OwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all input parameters for the `removeOwnerAtIndex` function with signature `removeOwnerAtIndex(uint256)` and selector `0x72de3b5a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "removeOwnerAtIndex", abi = "removeOwnerAtIndex(uint256)")] + pub struct RemoveOwnerAtIndexCall { + pub index: ::ethers::core::types::U256, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum MultiOwnableCalls { + AddOwnerAddress(AddOwnerAddressCall), + AddOwnerPublicKey(AddOwnerPublicKeyCall), + IsOwnerAddress(IsOwnerAddressCall), + IsOwnerBytes(IsOwnerBytesCall), + IsOwnerPublicKey(IsOwnerPublicKeyCall), + NextOwnerIndex(NextOwnerIndexCall), + OwnerAtIndex(OwnerAtIndexCall), + RemoveOwnerAtIndex(RemoveOwnerAtIndexCall), + } + impl ::ethers::core::abi::AbiDecode for MultiOwnableCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerAddress(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddOwnerPublicKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerAddress(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::IsOwnerBytes(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::IsOwnerPublicKey(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextOwnerIndex(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::OwnerAtIndex(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::RemoveOwnerAtIndex(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for MultiOwnableCalls { + fn encode(self) -> Vec { + match self { + Self::AddOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::AddOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerBytes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::IsOwnerPublicKey(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextOwnerIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::OwnerAtIndex(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RemoveOwnerAtIndex(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + } + } + } + impl ::core::fmt::Display for MultiOwnableCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::AddOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerBytes(element) => ::core::fmt::Display::fmt(element, f), + Self::IsOwnerPublicKey(element) => ::core::fmt::Display::fmt(element, f), + Self::NextOwnerIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + Self::RemoveOwnerAtIndex(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: AddOwnerAddressCall) -> Self { + Self::AddOwnerAddress(value) + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: AddOwnerPublicKeyCall) -> Self { + Self::AddOwnerPublicKey(value) + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: IsOwnerAddressCall) -> Self { + Self::IsOwnerAddress(value) + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: IsOwnerBytesCall) -> Self { + Self::IsOwnerBytes(value) + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: IsOwnerPublicKeyCall) -> Self { + Self::IsOwnerPublicKey(value) + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: NextOwnerIndexCall) -> Self { + Self::NextOwnerIndex(value) + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: OwnerAtIndexCall) -> Self { + Self::OwnerAtIndex(value) + } + } + impl ::core::convert::From for MultiOwnableCalls { + fn from(value: RemoveOwnerAtIndexCall) -> Self { + Self::RemoveOwnerAtIndex(value) + } + } + ///Container type for all return fields from the `isOwnerAddress` function with signature `isOwnerAddress(address)` and selector `0xa2e1a8d8` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerAddressReturn(pub bool); + ///Container type for all return fields from the `isOwnerBytes` function with signature `isOwnerBytes(bytes)` and selector `0x1ca5393f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerBytesReturn(pub bool); + ///Container type for all return fields from the `isOwnerPublicKey` function with signature `isOwnerPublicKey(bytes32,bytes32)` and selector `0x066a1eb7` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct IsOwnerPublicKeyReturn(pub bool); + ///Container type for all return fields from the `nextOwnerIndex` function with signature `nextOwnerIndex()` and selector `0xd948fd2e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextOwnerIndexReturn(pub ::ethers::core::types::U256); + ///Container type for all return fields from the `ownerAtIndex` function with signature `ownerAtIndex(uint256)` and selector `0x8ea69029` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct OwnerAtIndexReturn(pub ::ethers::core::types::Bytes); +} diff --git a/xmtp_id/src/bindings/receiver.rs b/xmtp_id/src/bindings/receiver.rs new file mode 100644 index 000000000..965439608 --- /dev/null +++ b/xmtp_id/src/bindings/receiver.rs @@ -0,0 +1,70 @@ +pub use receiver::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod receiver { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: true, + fallback: true, + } + } + ///The parsed JSON ABI of the contract. + pub static RECEIVER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct Receiver(::ethers::contract::Contract); + impl ::core::clone::Clone for Receiver { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for Receiver { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for Receiver { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for Receiver { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(Receiver)) + .field(&self.address()) + .finish() + } + } + impl Receiver { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + RECEIVER_ABI.clone(), + client, + )) + } + } + impl From<::ethers::contract::Contract> for Receiver { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/shared_types.rs b/xmtp_id/src/bindings/shared_types.rs new file mode 100644 index 000000000..82d3f4866 --- /dev/null +++ b/xmtp_id/src/bindings/shared_types.rs @@ -0,0 +1,64 @@ +///`Call(address,uint256,bytes)` +#[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, +)] +pub struct Call { + pub target: ::ethers::core::types::Address, + pub value: ::ethers::core::types::U256, + pub data: ::ethers::core::types::Bytes, +} +///`DepositInfo(uint112,bool,uint112,uint32,uint48)` +#[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, +)] +pub struct DepositInfo { + pub deposit: u128, + pub staked: bool, + pub stake: u128, + pub unstake_delay_sec: u32, + pub withdraw_time: u64, +} +///`UserOperation(address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)` +#[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, +)] +pub struct UserOperation { + pub sender: ::ethers::core::types::Address, + pub nonce: ::ethers::core::types::U256, + pub init_code: ::ethers::core::types::Bytes, + pub call_data: ::ethers::core::types::Bytes, + pub call_gas_limit: ::ethers::core::types::U256, + pub verification_gas_limit: ::ethers::core::types::U256, + pub pre_verification_gas: ::ethers::core::types::U256, + pub max_fee_per_gas: ::ethers::core::types::U256, + pub max_priority_fee_per_gas: ::ethers::core::types::U256, + pub paymaster_and_data: ::ethers::core::types::Bytes, + pub signature: ::ethers::core::types::Bytes, +} diff --git a/xmtp_id/src/bindings/signature_checker_lib.rs b/xmtp_id/src/bindings/signature_checker_lib.rs new file mode 100644 index 000000000..a99f842df --- /dev/null +++ b/xmtp_id/src/bindings/signature_checker_lib.rs @@ -0,0 +1,121 @@ +pub use signature_checker_lib::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod signature_checker_lib { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static SIGNATURECHECKERLIB_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \x9C\xB1\x93U\x9D\x86\x0CS\xAA\xE6_\xDFzh$\xF7\xE5\xCE\x03\x08\x1D-\xD6\x1Cg%\x1A\x87i\x12\x88\xE4dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static SIGNATURECHECKERLIB_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \x9C\xB1\x93U\x9D\x86\x0CS\xAA\xE6_\xDFzh$\xF7\xE5\xCE\x03\x08\x1D-\xD6\x1Cg%\x1A\x87i\x12\x88\xE4dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static SIGNATURECHECKERLIB_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct SignatureCheckerLib(::ethers::contract::Contract); + impl ::core::clone::Clone for SignatureCheckerLib { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for SignatureCheckerLib { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for SignatureCheckerLib { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for SignatureCheckerLib { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(SignatureCheckerLib)) + .field(&self.address()) + .finish() + } + } + impl SignatureCheckerLib { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + SIGNATURECHECKERLIB_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + SIGNATURECHECKERLIB_ABI.clone(), + SIGNATURECHECKERLIB_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> + for SignatureCheckerLib + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/static_.rs b/xmtp_id/src/bindings/static_.rs new file mode 100644 index 000000000..a8fa29ede --- /dev/null +++ b/xmtp_id/src/bindings/static_.rs @@ -0,0 +1,119 @@ +pub use static_::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod static_ { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static STATIC_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xCA\xE6\xF2\xC3w\xFD\xE2Am\xB9\x15\xF8\x19M\xF1\x1AK |\xD1n\xCE\x1ET\ryU(+\x8D\xFF\x8FdsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static STATIC_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xCA\xE6\xF2\xC3w\xFD\xE2Am\xB9\x15\xF8\x19M\xF1\x1AK |\xD1n\xCE\x1ET\ryU(+\x8D\xFF\x8FdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static STATIC_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct Static(::ethers::contract::Contract); + impl ::core::clone::Clone for Static { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for Static { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for Static { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for Static { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(Static)) + .field(&self.address()) + .finish() + } + } + impl Static { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + STATIC_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + STATIC_ABI.clone(), + STATIC_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> for Static { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/user_operation_lib.rs b/xmtp_id/src/bindings/user_operation_lib.rs new file mode 100644 index 000000000..e73e4dbf3 --- /dev/null +++ b/xmtp_id/src/bindings/user_operation_lib.rs @@ -0,0 +1,121 @@ +pub use user_operation_lib::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod user_operation_lib { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static USEROPERATIONLIB_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xDB\xA9\xE6\xF7\x03\xF2\xD6\xEE\xB19\xF4p\x88\xA6\xA1RLBP\xA7\x18\xDE'\xAE\xD3'Digzb\x8EdsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static USEROPERATIONLIB_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xDB\xA9\xE6\xF7\x03\xF2\xD6\xEE\xB19\xF4p\x88\xA6\xA1RLBP\xA7\x18\xDE'\xAE\xD3'Digzb\x8EdsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static USEROPERATIONLIB_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct UserOperationLib(::ethers::contract::Contract); + impl ::core::clone::Clone for UserOperationLib { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for UserOperationLib { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for UserOperationLib { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for UserOperationLib { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(UserOperationLib)) + .field(&self.address()) + .finish() + } + } + impl UserOperationLib { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + USEROPERATIONLIB_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + USEROPERATIONLIB_ABI.clone(), + USEROPERATIONLIB_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> + for UserOperationLib + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/bindings/utils.rs b/xmtp_id/src/bindings/utils.rs new file mode 100644 index 000000000..aee39dba1 --- /dev/null +++ b/xmtp_id/src/bindings/utils.rs @@ -0,0 +1,202 @@ +pub use utils::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod utils { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([( + ::std::borrow::ToOwned::to_owned("getWebAuthnStruct"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getWebAuthnStruct"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("challenge"), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct WebAuthnInfo"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + )]), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static UTILS_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"a\x05\xEDa\0:`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14a\0-WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x005W`\x005`\xE0\x1C\x80c\x8F\x7FYn\x14a\0:W[`\0\x80\xFD[a\0Ma\0H6`\x04a\x03%V[a\0cV[`@Qa\0Z\x91\x90a\x03\x8EV[`@Q\x80\x91\x03\x90\xF3[`@\x80Q``\x80\x82\x01\x83R\x80\x82R` \x82\x01R`\0\x91\x81\x01\x91\x90\x91R`\0a\0\xAB\x83`@Q` \x01a\0\x97\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x01\xD4V[\x90P`\0\x81`@Q` \x01a\0\xC0\x91\x90a\x03\xDEV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R``\x83\x01\x90\x91R`%\x80\x83R\x90\x92P`\0\x91\x90a\x05S` \x83\x019\x90P`\0`\x02\x83`@Qa\0\xFC\x91\x90a\x04}V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x01\x19W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01<\x91\x90a\x04\x99V[\x90P`\0`\x02\x83\x83`@Q` \x01a\x01U\x92\x91\x90a\x04\xB2V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x01o\x91a\x04}V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x01\x8CW=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01\xAF\x91\x90a\x04\x99V[`@\x80Q``\x81\x01\x82R\x94\x85R` \x85\x01\x95\x90\x95R\x93\x83\x01\x93\x90\x93RP\x94\x93PPPPV[``\x81Q`\0\x03a\x01\xF3WPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x05x`@\x919\x90P`\0`\x03\x84Q`\x02a\x02\"\x91\x90a\x04\xEAV[a\x02,\x91\x90a\x05\x03V[a\x027\x90`\x04a\x05%V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x02OWa\x02Oa\x05V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0\x82Q``` \x84\x01Ra\x03\xAA`\x80\x84\x01\x82a\x03bV[\x90P` \x84\x01Q`\x1F\x19\x84\x83\x03\x01`@\x85\x01Ra\x03\xC7\x82\x82a\x03bV[\x91PP`@\x84\x01Q``\x84\x01R\x80\x91PP\x92\x91PPV[\x7F{\"type\":\"webauthn.get\",\"challeng\x81Rc2\x91\x1D\x11`\xE1\x1B` \x82\x01R`\0\x82Qa\x04#\x81`$\x85\x01` \x87\x01a\x03>V[\x7F\",\"origin\":\"https://sign.coinbas`$\x93\x90\x91\x01\x92\x83\x01RP\x7Fe.com\",\"crossOrigin\":false}\0\0\0\0\0`D\x82\x01R`_\x01\x91\x90PV[`\0\x82Qa\x04\x8F\x81\x84` \x87\x01a\x03>V[\x91\x90\x91\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x04\xABW`\0\x80\xFD[PQ\x91\x90PV[`\0\x83Qa\x04\xC4\x81\x84` \x88\x01a\x03>V[\x91\x90\x91\x01\x91\x82RP` \x01\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x04\xFDWa\x04\xFDa\x04\xD4V[\x92\x91PPV[`\0\x82a\x05 WcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x04\x90V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\xFDWa\x04\xFDa\x04\xD4V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD\xFEI\x96\r\xE5\x88\x0E\x8Cht4\x17\x0Fdv`[\x8F\xE4\xAE\xB9\xA2\x862\xC7\x99\\\xF3\xBA\x83\x1D\x97c\x05\0\0\0\0ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\xA2dipfsX\"\x12 \xD2\xAD\xD6\x1E\x12\xD8p\"ML\x0E\xE2\xB8-\xCCP\xFD\xCA\x0E\xC1\x13\xCCL\xF22 L\xC0\x92\x91\xB4\x10dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static UTILS_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x005W`\x005`\xE0\x1C\x80c\x8F\x7FYn\x14a\0:W[`\0\x80\xFD[a\0Ma\0H6`\x04a\x03%V[a\0cV[`@Qa\0Z\x91\x90a\x03\x8EV[`@Q\x80\x91\x03\x90\xF3[`@\x80Q``\x80\x82\x01\x83R\x80\x82R` \x82\x01R`\0\x91\x81\x01\x91\x90\x91R`\0a\0\xAB\x83`@Q` \x01a\0\x97\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x01\xD4V[\x90P`\0\x81`@Q` \x01a\0\xC0\x91\x90a\x03\xDEV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R``\x83\x01\x90\x91R`%\x80\x83R\x90\x92P`\0\x91\x90a\x05S` \x83\x019\x90P`\0`\x02\x83`@Qa\0\xFC\x91\x90a\x04}V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x01\x19W=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01<\x91\x90a\x04\x99V[\x90P`\0`\x02\x83\x83`@Q` \x01a\x01U\x92\x91\x90a\x04\xB2V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90Ra\x01o\x91a\x04}V[` `@Q\x80\x83\x03\x81\x85Z\xFA\x15\x80\x15a\x01\x8CW=`\0\x80>=`\0\xFD[PPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01\xAF\x91\x90a\x04\x99V[`@\x80Q``\x81\x01\x82R\x94\x85R` \x85\x01\x95\x90\x95R\x93\x83\x01\x93\x90\x93RP\x94\x93PPPPV[``\x81Q`\0\x03a\x01\xF3WPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x05x`@\x919\x90P`\0`\x03\x84Q`\x02a\x02\"\x91\x90a\x04\xEAV[a\x02,\x91\x90a\x05\x03V[a\x027\x90`\x04a\x05%V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x02OWa\x02Oa\x05V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0\x82Q``` \x84\x01Ra\x03\xAA`\x80\x84\x01\x82a\x03bV[\x90P` \x84\x01Q`\x1F\x19\x84\x83\x03\x01`@\x85\x01Ra\x03\xC7\x82\x82a\x03bV[\x91PP`@\x84\x01Q``\x84\x01R\x80\x91PP\x92\x91PPV[\x7F{\"type\":\"webauthn.get\",\"challeng\x81Rc2\x91\x1D\x11`\xE1\x1B` \x82\x01R`\0\x82Qa\x04#\x81`$\x85\x01` \x87\x01a\x03>V[\x7F\",\"origin\":\"https://sign.coinbas`$\x93\x90\x91\x01\x92\x83\x01RP\x7Fe.com\",\"crossOrigin\":false}\0\0\0\0\0`D\x82\x01R`_\x01\x91\x90PV[`\0\x82Qa\x04\x8F\x81\x84` \x87\x01a\x03>V[\x91\x90\x91\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x04\xABW`\0\x80\xFD[PQ\x91\x90PV[`\0\x83Qa\x04\xC4\x81\x84` \x88\x01a\x03>V[\x91\x90\x91\x01\x91\x82RP` \x01\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x04\xFDWa\x04\xFDa\x04\xD4V[\x92\x91PPV[`\0\x82a\x05 WcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x04\x90V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\xFDWa\x04\xFDa\x04\xD4V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD\xFEI\x96\r\xE5\x88\x0E\x8Cht4\x17\x0Fdv`[\x8F\xE4\xAE\xB9\xA2\x862\xC7\x99\\\xF3\xBA\x83\x1D\x97c\x05\0\0\0\0ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\xA2dipfsX\"\x12 \xD2\xAD\xD6\x1E\x12\xD8p\"ML\x0E\xE2\xB8-\xCCP\xFD\xCA\x0E\xC1\x13\xCCL\xF22 L\xC0\x92\x91\xB4\x10dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static UTILS_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct Utils(::ethers::contract::Contract); + impl ::core::clone::Clone for Utils { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for Utils { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for Utils { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for Utils { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(Utils)) + .field(&self.address()) + .finish() + } + } + impl Utils { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + UTILS_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + UTILS_ABI.clone(), + UTILS_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `getWebAuthnStruct` (0x8f7f596e) function + pub fn get_web_authn_struct( + &self, + challenge: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([143, 127, 89, 110], challenge) + .expect("method not found (this should never happen)") + } + } + impl From<::ethers::contract::Contract> for Utils { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Container type for all input parameters for the `getWebAuthnStruct` function with signature `getWebAuthnStruct(bytes32)` and selector `0x8f7f596e` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getWebAuthnStruct", abi = "getWebAuthnStruct(bytes32)")] + pub struct GetWebAuthnStructCall { + pub challenge: [u8; 32], + } + ///Container type for all return fields from the `getWebAuthnStruct` function with signature `getWebAuthnStruct(bytes32)` and selector `0x8f7f596e` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetWebAuthnStructReturn(pub WebAuthnInfo); + ///`WebAuthnInfo(bytes,string,bytes32)` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct WebAuthnInfo { + pub authenticator_data: ::ethers::core::types::Bytes, + pub client_data_json: ::std::string::String, + pub message_hash: [u8; 32], + } +} diff --git a/xmtp_id/src/bindings/uups_upgradeable.rs b/xmtp_id/src/bindings/uups_upgradeable.rs new file mode 100644 index 000000000..13d6fa87f --- /dev/null +++ b/xmtp_id/src/bindings/uups_upgradeable.rs @@ -0,0 +1,411 @@ +pub use uups_upgradeable::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod uups_upgradeable { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("proxiableUUID"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("proxiableUUID"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("upgradeToAndCall"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("newImplementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Payable, + },], + ), + ]), + events: ::core::convert::From::from([( + ::std::borrow::ToOwned::to_owned("Upgraded"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Upgraded"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("implementation"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, + },], + anonymous: false, + },], + )]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UnauthorizedCallContext",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("UpgradeFailed"), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static UUPSUPGRADEABLE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + pub struct UUPSUpgradeable(::ethers::contract::Contract); + impl ::core::clone::Clone for UUPSUpgradeable { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for UUPSUpgradeable { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for UUPSUpgradeable { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for UUPSUpgradeable { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(UUPSUpgradeable)) + .field(&self.address()) + .finish() + } + } + impl UUPSUpgradeable { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + UUPSUPGRADEABLE_ABI.clone(), + client, + )) + } + ///Calls the contract's `proxiableUUID` (0x52d1902d) function + pub fn proxiable_uuid(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([82, 209, 144, 45], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `upgradeToAndCall` (0x4f1ef286) function + pub fn upgrade_to_and_call( + &self, + new_implementation: ::ethers::core::types::Address, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([79, 30, 242, 134], (new_implementation, data)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `Upgraded` event + pub fn upgraded_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, UpgradedFilter> { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, UpgradedFilter> { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + impl From<::ethers::contract::Contract> + for UUPSUpgradeable + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `UnauthorizedCallContext` with signature `UnauthorizedCallContext()` and selector `0x9f03a026` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UnauthorizedCallContext", abi = "UnauthorizedCallContext()")] + pub struct UnauthorizedCallContext; + ///Custom Error type `UpgradeFailed` with signature `UpgradeFailed()` and selector `0x55299b49` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "UpgradeFailed", abi = "UpgradeFailed()")] + pub struct UpgradeFailed; + ///Container type for all of the contract's custom errors + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum UUPSUpgradeableErrors { + UnauthorizedCallContext(UnauthorizedCallContext), + UpgradeFailed(UpgradeFailed), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for UUPSUpgradeableErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UnauthorizedCallContext(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::UpgradeFailed(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for UUPSUpgradeableErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::UnauthorizedCallContext(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::UpgradeFailed(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for UUPSUpgradeableErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for UUPSUpgradeableErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::UnauthorizedCallContext(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeFailed(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for UUPSUpgradeableErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for UUPSUpgradeableErrors { + fn from(value: UnauthorizedCallContext) -> Self { + Self::UnauthorizedCallContext(value) + } + } + impl ::core::convert::From for UUPSUpgradeableErrors { + fn from(value: UpgradeFailed) -> Self { + Self::UpgradeFailed(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "Upgraded", abi = "Upgraded(address)")] + pub struct UpgradedFilter { + #[ethevent(indexed)] + pub implementation: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "proxiableUUID", abi = "proxiableUUID()")] + pub struct ProxiableUUIDCall; + ///Container type for all input parameters for the `upgradeToAndCall` function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "upgradeToAndCall", abi = "upgradeToAndCall(address,bytes)")] + pub struct UpgradeToAndCallCall { + pub new_implementation: ::ethers::core::types::Address, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all of the contract's call + #[derive( + Clone, + ::ethers::contract::EthAbiType, + serde::Serialize, + serde::Deserialize, + Debug, + PartialEq, + Eq, + Hash, + )] + pub enum UUPSUpgradeableCalls { + ProxiableUUID(ProxiableUUIDCall), + UpgradeToAndCall(UpgradeToAndCallCall), + } + impl ::ethers::core::abi::AbiDecode for UUPSUpgradeableCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ProxiableUUID(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::UpgradeToAndCall(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for UUPSUpgradeableCalls { + fn encode(self) -> Vec { + match self { + Self::ProxiableUUID(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UpgradeToAndCall(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for UUPSUpgradeableCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ProxiableUUID(element) => ::core::fmt::Display::fmt(element, f), + Self::UpgradeToAndCall(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for UUPSUpgradeableCalls { + fn from(value: ProxiableUUIDCall) -> Self { + Self::ProxiableUUID(value) + } + } + impl ::core::convert::From for UUPSUpgradeableCalls { + fn from(value: UpgradeToAndCallCall) -> Self { + Self::UpgradeToAndCall(value) + } + } + ///Container type for all return fields from the `proxiableUUID` function with signature `proxiableUUID()` and selector `0x52d1902d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ProxiableUUIDReturn(pub [u8; 32]); +} diff --git a/xmtp_id/src/bindings/web_authn.rs b/xmtp_id/src/bindings/web_authn.rs new file mode 100644 index 000000000..ce6082ec7 --- /dev/null +++ b/xmtp_id/src/bindings/web_authn.rs @@ -0,0 +1,119 @@ +pub use web_authn::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod web_authn { + #[allow(deprecated)] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::std::collections::BTreeMap::new(), + events: ::std::collections::BTreeMap::new(), + errors: ::std::collections::BTreeMap::new(), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + pub static WEBAUTHN_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + const __BYTECODE: &[u8] = b"`V`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xC8\x13\xB5\t\xB9\xBAVn \x03\xA7e\x86\xD4\xE4\xC2\xB2/\xD5\xE4=%yV\x01\xC1\xF3\xBE\x94\xDB\x08\xA8dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + pub static WEBAUTHN_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA2dipfsX\"\x12 \xC8\x13\xB5\t\xB9\xBAVn \x03\xA7e\x86\xD4\xE4\xC2\xB2/\xD5\xE4=%yV\x01\xC1\xF3\xBE\x94\xDB\x08\xA8dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + pub static WEBAUTHN_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + pub struct WebAuthn(::ethers::contract::Contract); + impl ::core::clone::Clone for WebAuthn { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + impl ::core::ops::Deref for WebAuthn { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl ::core::ops::DerefMut for WebAuthn { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + impl ::core::fmt::Debug for WebAuthn { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(WebAuthn)) + .field(&self.address()) + .finish() + } + } + impl WebAuthn { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + WEBAUTHN_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + WEBAUTHN_ABI.clone(), + WEBAUTHN_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + } + impl From<::ethers::contract::Contract> for WebAuthn { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } +} diff --git a/xmtp_id/src/verifier.rs b/xmtp_id/src/verifier.rs new file mode 100644 index 000000000..6f7c77fe9 --- /dev/null +++ b/xmtp_id/src/verifier.rs @@ -0,0 +1,47 @@ +use ethers::types::{Address, BlockId, Signature}; +use ethers::providers::{Http, Middleware, Provider}; +use std::convert::TryFrom; +use std::sync::Arc; +use crate::bindings::coinbase_smart_wallet::CoinbaseSmartWallet; +use anyhow::Error; + +const BASE_SEPOLIA_RPC_URL: &str = "https://sepolia.base.org"; + +pub struct ERC1271Verifier { + pub provider: Arc>, +} + +impl ERC1271Verifier { + pub fn new() -> Self { + let provider = Arc::new(Provider::::try_from(BASE_SEPOLIA_RPC_URL).unwrap()); + Self { provider } + } + + /// Verifies an ERC-1271(https://eips.ethereum.org/EIPS/eip-1271) signature. + /// + /// # Arguments + /// + /// * `hash` - Hash of the message. + /// * `signature` - generated by signing **Replay safe hash**. + /// * `wallet_address` - Address of the ERC1271 wallet. + /// * `block_id` - Block identifier. + pub async fn verify_erc1271_signature(&self, hash: [u8; 32], owner_index: u64, signature: Signature, wallet_address: Address, block_id: BlockId) -> Result { + let wallet = CoinbaseSmartWallet::new(wallet_address, self.provider.clone()); + + // Used during signature validation, tie a signature with its signer. + let signature_wrapper = ethers::abi::encode(&[ethers::abi::Token::Tuple(vec![ + ethers::abi::Token::Uint(ethers::types::U256::from(owner_index)), + ethers::abi::Token::Bytes(signature.to_vec()), + ])]); + + let res: [u8; 4] = wallet + .is_valid_signature(hash, ethers::types::Bytes::from(signature_wrapper)) + .block(block_id) + .call() + .await? + .into(); + + // check if response is magic value + Ok(res == [0x16, 0x26, 0xba, 0x7e]) + } +} \ No newline at end of file