diff --git a/.github/workflows/contracts-check.yaml b/.github/workflows/contracts-check.yaml index 1181228ef..48493d4f2 100644 --- a/.github/workflows/contracts-check.yaml +++ b/.github/workflows/contracts-check.yaml @@ -1,6 +1,6 @@ # This workflow runs our Foundry tests and contract checks on the smart contracts in both `synd-contracts/src`. # Whenever a change is made in those directories, this workflow makes sure everything still builds, passes tests, and that our Rust & Go bindings are up to date. -# This workflow also checks that the TypeScript ABI & bytecode files in create-chain are up to date. +# This workflow also checks that the TypeScript ABI & bytecode files in synd-cli are up to date. # Keeping the Rust bindings up to date makes sure your Rust code always knows how to talk to your smart contracts correctly. # https://github.com/foundry-rs/foundry diff --git a/.github/workflows/storage-layout.yaml b/.github/workflows/storage-layout.yaml new file mode 100644 index 000000000..c126598c7 --- /dev/null +++ b/.github/workflows/storage-layout.yaml @@ -0,0 +1,59 @@ +name: Storage Layout Validation + +permissions: + contents: read + +on: + pull_request: + paths: + - 'synd-contracts/src/**/*.sol' + - 'synd-contracts/foundry.toml' + - 'synd-contracts/remappings.txt' + push: + branches: [main] + paths: + - 'synd-contracts/src/**/*.sol' + - 'synd-contracts/foundry.toml' + - 'synd-contracts/remappings.txt' + +env: + FOUNDRY_PROFILE: default + FOUNDRY_DISABLE_NIGHTLY_WARNING: true + +jobs: + storage-layout-validation: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + defaults: + run: + working-directory: synd-contracts + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Install Foundry dependencies + run: forge install + + - name: Validate UUPS storage layouts + run: | + echo "🔍 Validating UUPS upgradeable contracts use namespaced storage..." + echo "" + + # Build contracts + forge build + + # Run storage validation script + chmod +x scripts/check-uups-storage.sh + ./scripts/check-uups-storage.sh + diff --git a/.gitignore b/.gitignore index 6519569f7..52332a12f 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,7 @@ synd-contracts/.claude/settings.local.json # contract bindings generated artifact synd-contracts/soljson-latest.js + ./bin *.db diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5ca6164da..76b03ae24 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -65,9 +65,17 @@ repos: language: system types: [cargo] pass_filenames: false + - id: storage-layout-update + name: Update storage layout baseline + entry: synd-contracts/scripts/storage-checks/update-baseline.sh + language: script + files: 'synd-contracts/src/.*\.sol$' + pass_filenames: false + always_run: false + stages: [pre-commit] - id: synd-cli-biome-check name: synd-cli check - entry: bash -c 'cd synd-cli && npx biome check --write --files-ignore-unknown=true --no-errors-on-unmatched' + entry: bash -c 'cd synd-cli && bun run check-write' language: system types: [text] files: "^synd-cli/.*\\.(jsx?|tsx?|c(js|ts)|m(js|ts)|d\\.(ts|cts|mts)|jsonc?|css|svelte|vue|astro|graphql|gql)$" diff --git a/shared/Makefile b/shared/Makefile index 20b2569fc..ae91bbe2c 100644 --- a/shared/Makefile +++ b/shared/Makefile @@ -10,9 +10,10 @@ create-contract-bindings-rust: --select 'GasAggregator|GasArchive|BlockHashRelayer|EmissionsCalculator|EmissionsScheduler|Refunder' \ --select 'ArbConfigManager|SyndicateSequencingChain|Rollup|IInbox|AssertionPoster' \ --select 'TeeKeyManager|TeeModule|AttestationDocVerifier' \ - --select 'IBridge|IOutbox|IRollupCore|IUpgradeExecutor' \ + --select 'IBridge|IOutbox|IRollupCore|IRollup|IUpgradeExecutor' \ --select 'ArbSys|NodeInterface|ArbGasInfo|ArbOwner' \ - --select 'IInboxBase|ISequencerInbox|IDelayedMessageProvider|ArbChainConfig' + --select 'IInboxBase|ISequencerInbox|IDelayedMessageProvider|ArbChainConfig' \ + --select 'ERC1967Proxy|GasMeter|AlwaysAllowedModule' cp -r ../synd-contracts/out/bindings/* contract-bindings/src/synd .PHONY: create-withdrawal-contract-bindings-go diff --git a/shared/contract-bindings/src/synd/always_allowed_module.rs b/shared/contract-bindings/src/synd/always_allowed_module.rs new file mode 100644 index 000000000..198386cdd --- /dev/null +++ b/shared/contract-bindings/src/synd/always_allowed_module.rs @@ -0,0 +1,580 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface AlwaysAllowedModule { + function isAllowed(address, address, bytes memory) external pure returns (bool); +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "isAllowed", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod AlwaysAllowedModule { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x6080806040523460145760e790816100198239f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c637a3979dc146023575f80fd5b34609f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112609f57605660a3565b50605d60c5565b5060443567ffffffffffffffff8111609f5736602382011215609f57806004013567ffffffffffffffff8111609f5736910160240111609f5780600160209252f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203609f57565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203609f5756 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80\x80`@R4`\x14W`\xE7\x90\x81a\0\x19\x829\xF3[_\x80\xFD\xFE`\x80\x80`@R`\x046\x10\x15`\x11W_\x80\xFD[_5`\xE0\x1Ccz9y\xDC\x14`#W_\x80\xFD[4`\x9FW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12`\x9FW`V`\xA3V[P`]`\xC5V[P`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6`#\x82\x01\x12\x15`\x9FW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6\x91\x01`$\x01\x11`\x9FW\x80`\x01` \x92R\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60808060405260043610156011575f80fd5b5f3560e01c637a3979dc146023575f80fd5b34609f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112609f57605660a3565b50605d60c5565b5060443567ffffffffffffffff8111609f5736602382011215609f57806004013567ffffffffffffffff8111609f5736910160240111609f5780600160209252f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203609f57565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203609f5756 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80\x80`@R`\x046\x10\x15`\x11W_\x80\xFD[_5`\xE0\x1Ccz9y\xDC\x14`#W_\x80\xFD[4`\x9FW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12`\x9FW`V`\xA3V[P`]`\xC5V[P`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6`#\x82\x01\x12\x15`\x9FW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6\x91\x01`$\x01\x11`\x9FW\x80`\x01` \x92R\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isAllowed(address,address,bytes)` and selector `0x7a3979dc`. +```solidity +function isAllowed(address, address, bytes memory) external pure returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedCall { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _1: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _2: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isAllowed(address,address,bytes)`](isAllowedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedCall) -> Self { + (value._0, value._1, value._2) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _0: tuple.0, + _1: tuple.1, + _2: tuple.2, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isAllowedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isAllowed(address,address,bytes)"; + const SELECTOR: [u8; 4] = [122u8, 57u8, 121u8, 220u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._0, + ), + ::tokenize( + &self._1, + ), + ::tokenize( + &self._2, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + } + }; + ///Container for all the [`AlwaysAllowedModule`](self) function calls. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum AlwaysAllowedModuleCalls { + #[allow(missing_docs)] + isAllowed(isAllowedCall), + } + impl AlwaysAllowedModuleCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[[122u8, 57u8, 121u8, 220u8]]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(isAllowed), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for AlwaysAllowedModuleCalls { + const NAME: &'static str = "AlwaysAllowedModuleCalls"; + const MIN_DATA_LENGTH: usize = 128usize; + const COUNT: usize = 1usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::isAllowed(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(AlwaysAllowedModuleCalls::isAllowed) + } + isAllowed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(AlwaysAllowedModuleCalls::isAllowed) + } + isAllowed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::isAllowed(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::isAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`AlwaysAllowedModule`](self) contract instance. + +See the [wrapper's documentation](`AlwaysAllowedModuleInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> AlwaysAllowedModuleInstance { + AlwaysAllowedModuleInstance::::new(address, __provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + AlwaysAllowedModuleInstance::::deploy(__provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(__provider: P) -> alloy_contract::RawCallBuilder { + AlwaysAllowedModuleInstance::::deploy_builder(__provider) + } + /**A [`AlwaysAllowedModule`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`AlwaysAllowedModule`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct AlwaysAllowedModuleInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for AlwaysAllowedModuleInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("AlwaysAllowedModuleInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > AlwaysAllowedModuleInstance { + /**Creates a new wrapper around an on-chain [`AlwaysAllowedModule`](self) contract instance. + +See the [wrapper's documentation](`AlwaysAllowedModuleInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> Self { + Self { + address, + provider: __provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + __provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(__provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + __provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl AlwaysAllowedModuleInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> AlwaysAllowedModuleInstance { + AlwaysAllowedModuleInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > AlwaysAllowedModuleInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`isAllowed`] function. + pub fn isAllowed( + &self, + _0: alloy::sol_types::private::Address, + _1: alloy::sol_types::private::Address, + _2: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, isAllowedCall, N> { + self.call_builder(&isAllowedCall { _0, _1, _2 }) + } + } + /// Event filters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > AlwaysAllowedModuleInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + } +} diff --git a/shared/contract-bindings/src/synd/arb_chain_config.rs b/shared/contract-bindings/src/synd/arb_chain_config.rs index b55602644..6bf64443a 100644 --- a/shared/contract-bindings/src/synd/arb_chain_config.rs +++ b/shared/contract-bindings/src/synd/arb_chain_config.rs @@ -31,6 +31,7 @@ interface ArbChainConfig { function SEQUENCING_START_BLOCK() external view returns (uint256); function SETTLEMENT_DELAY() external view returns (uint256); function SETTLEMENT_START_BLOCK() external view returns (uint256); + function VERSION() external view returns (uint256); function initialize(address _owner, uint256 chainId, uint256 sequencingChainId, address arbitrumBridgeAddress, address arbitrumInboxAddress, uint256 settlementDelay, uint256 settlementStartBlock, address sequencingContractAddress, uint256 sequencingStartBlock, address initialAppchainOwner, string memory sequencingChainWsRpcUrl, string memory appchainBlockExplorerUrl) external; function migration(uint256 _setStartBlock, uint256 _seqStartBlock, uint256 _batchAcc, uint256 _batchCount, uint256 _delayedMsgsAcc, uint256 _delayedMsgsCount, uint256 _appchainBlockHash, bytes memory _genesisConfig) external; function owner() external view returns (address); @@ -269,6 +270,19 @@ interface ArbChainConfig { ], "stateMutability": "view" }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "initialize", @@ -575,22 +589,22 @@ pub mod ArbChainConfig { /// The creation / init bytecode of the contract. /// /// ```text - ///0x6080806040523460aa575f5160206118315f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161178290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118315f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e146112e157806318b5ce81146112ae578063290803561461113f5780634b8be3f714610fbe57806357d1ba2514610fa15780636c31cc4014610f845780636edd6c0914610f5157806385e1f4d014610f345780638703b40a14610f175780638da5cb5b14610ee5578063a3c6e1e714610ec8578063a52145f214610cab578063aa6a43d814610c78578063b51646a614610c5b578063bc8ff19c14610c3e578063bf6db6f814610c0b578063bf79fd1c14610301578063c7a7609514610219578063d1f4737c146101fc578063f0ecc3c5146101ba578063f2fde38b14610154578063f8a144be146101375763f8acb81114610116575f80fd5b34610133575f600319360112610133576020600e54604051908152f35b5f80fd5b34610133575f600319360112610133576020600654604051908152f35b34610133576020600319360112610133576101b861017061144d565b61019273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b6101b373ffffffffffffffffffffffffffffffffffffffff82161515611697565b6116fc565b005b34610133575f600319360112610133576101f86040516101e4816101dd816114c6565b03826113d7565b6040519182916020835260208301906113fa565b0390f35b34610133575f600319360112610133576020600854604051908152f35b34610133575f600319360112610133576040515f600a5461023981611386565b80845290600181169081156102bf5750600114610261575b6101f8836101e4818503826113d7565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102a5575090915081016020016101e4610251565b91926001816020925483858801015201910190929161028d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101e49050610251565b34610133576101806003193601126101335761031b61144d565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036101335760843573ffffffffffffffffffffffffffffffffffffffff81168091036101335760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013357610124359173ffffffffffffffffffffffffffffffffffffffff8316809303610133576101443567ffffffffffffffff8111610133576103ca903690600401611470565b966101643567ffffffffffffffff8111610133576103ec903690600401611470565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c03575b6001149081610bf9575b159081610bf0575b50610bc8578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b73575b5073ffffffffffffffffffffffffffffffffffffffff881615610b15578015610ab7578115610a335782156109af57831561092b5784156108a7578515610823576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff8111610775576105b5816105b0600a54611386565b6115fe565b602094601f82116001146107a2576105e69293949582915f926106e3575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff8211610775576106108261060b600b54611386565b611638565b602090601f83116001146106ee5791806106429261064a95945f926106e35750505f198260011b9260031b1c19161790565b600b556116fc565b61065057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105d3565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061075d575091600193918561064a97969410610745575b505050811b01600b556116fc565b01515f1960f88460031b161c19169055858080610737565b9293602060018192878601518155019501930161071d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061080b575083600195969798106107f3575b505050811b01600a556105ea565b01515f1960f88460031b161c191690558580806107e5565b919260206001819286850151815501940192016107d0565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a610492565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c61043f565b303b159150610437565b8b915061042d565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b34610133575f600319360112610133576020601054604051908152f35b34610133575f600319360112610133576020600d54604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610133576101006003193601126101335760e43567ffffffffffffffff811161013357610cdd90369060040161141f565b610cff73ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161077557610d43601154611386565b601f8111610e6f575b505f601f8211600114610df0578190610d78935f92610de55750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610de060a082016114c6565b0390a4005b0135905083806105d3565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e5757508360019510610e3e575b505050811b01601155610d7c565b5f1960f88560031b161c19910135169055828080610e30565b90926020600181928686013581550194019101610e1e565b60115f52610eb8907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ebe575b601f0160051c01906115e8565b82610d4c565b9091508190610eab565b34610133575f600319360112610133576020600954604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610133575f600319360112610133576020600f54604051908152f35b34610133575f600319360112610133576020600554604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610133575f600319360112610133576020600c54604051908152f35b34610133575f600319360112610133576020600754604051908152f35b346101335760206003193601126101335760043567ffffffffffffffff811161013357610fef90369060040161141f565b61101173ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff81116107755761102f8161060b600b54611386565b5f91601f821160011461109f5761107c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91611094575b505f198260011b9260031b1c19161790565b600b555b61108f60405192839283611670565b0390a1005b90508301358661106a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110611127575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7951061110e575b5050600182811b01600b55611080565b5f1960f88560031b161c199083013516905583806110fe565b838601358355602095860195600190930192016110cc565b346101335760206003193601126101335760043567ffffffffffffffff81116101335761117090369060040161141f565b61119273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff8111610775576111b0816105b0600a54611386565b5f91601f821160011461120e576111fc82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f9161109457505f198260011b9260031b1c19161790565b600a5561108f60405192839283611670565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110611296575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061127d575b5050600182811b01600a55611080565b5f1960f88560031b161c1990830135169055838061126d565b8386013583556020958601956001909301920161123b565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610133575f600319360112610133576040515f600b5461130181611386565b80845290600181169081156102bf5750600114611328576101f8836101e4818503826113d7565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061136c575090915081016020016101e4610251565b919260018160209254838588010152019101909291611354565b90600182811c921680156113cd575b60208310146113a057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611395565b90601f601f19910116810190811067ffffffffffffffff82111761077557604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f840112156101335782359167ffffffffffffffff8311610133576020838186019501011161013357565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013357565b81601f820112156101335780359067ffffffffffffffff821161077557604051926114a56020601f19601f86011601856113d7565b8284526020838301011161013357815f926020809301838601378301015290565b6011545f92916114d582611386565b808252916001811690811561154957506001146114f0575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b83831061152f575060209250010190565b60018160209294939454838587010152019101919061151e565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b1561158a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b8181106115f3575050565b5f81556001016115e8565b90601f821161160b575050565b61163691600a5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b565b90601f8211611645575050565b61163691600b5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561169e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661171d811515611697565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + ///0x6080806040523460aa575f5160206118595f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b6040516117aa90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118595f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461130957806318b5ce81146112d657806329080356146111675780634b8be3f714610fe657806357d1ba2514610fc95780636c31cc4014610fac5780636edd6c0914610f7957806385e1f4d014610f5c5780638703b40a14610f3f5780638da5cb5b14610f0d578063a3c6e1e714610ef0578063a52145f214610cd3578063aa6a43d814610ca0578063b51646a614610c83578063bc8ff19c14610c66578063bf6db6f814610c33578063bf79fd1c14610329578063c7a7609514610241578063d1f4737c14610224578063f0ecc3c5146101e2578063f2fde38b1461017c578063f8a144be1461015f578063f8acb811146101425763ffa1ad7414610121575f80fd5b3461013e575f60031936011261013e576020604051620f42408152f35b5f80fd5b3461013e575f60031936011261013e576020600e54604051908152f35b3461013e575f60031936011261013e576020600654604051908152f35b3461013e57602060031936011261013e576101e0610198611475565b6101ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b6101db73ffffffffffffffffffffffffffffffffffffffff821615156116bf565b611724565b005b3461013e575f60031936011261013e5761022060405161020c81610205816114ee565b03826113ff565b604051918291602083526020830190611422565b0390f35b3461013e575f60031936011261013e576020600854604051908152f35b3461013e575f60031936011261013e576040515f600a54610261816113ae565b80845290600181169081156102e75750600114610289575b6102208361020c818503826113ff565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102cd5750909150810160200161020c610279565b9192600181602092548385880101520191019092916102b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061020c9050610279565b3461013e5761018060031936011261013e57610343611475565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff841680940361013e5760843573ffffffffffffffffffffffffffffffffffffffff811680910361013e5760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013e57610124359173ffffffffffffffffffffffffffffffffffffffff831680930361013e576101443567ffffffffffffffff811161013e576103f2903690600401611498565b966101643567ffffffffffffffff811161013e57610414903690600401611498565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c2b575b6001149081610c21575b159081610c18575b50610bf0578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b9b575b5073ffffffffffffffffffffffffffffffffffffffff881615610b3d578015610adf578115610a5b5782156109d75783156109535784156108cf57851561084b576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161079d576105dd816105d8600a546113ae565b611626565b602094601f82116001146107ca5761060e9293949582915f9261070b575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161079d5761063882610633600b546113ae565b611660565b602090601f831160011461071657918061066a9261067295945f9261070b5750505f198260011b9260031b1c19161790565b600b55611724565b61067857005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105fb565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061078557509160019391856106729796941061076d575b505050811b01600b55611724565b01515f1960f88460031b161c1916905585808061075f565b92936020600181928786015181550195019301610745565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106108335750836001959697981061081b575b505050811b01600a55610612565b01515f1960f88460031b161c1916905585808061080d565b919260206001819286850151815501940192016107f8565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6104ba565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c610467565b303b15915061045f565b8b9150610455565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b3461013e575f60031936011261013e576020601054604051908152f35b3461013e575f60031936011261013e576020600d54604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b3461013e5761010060031936011261013e5760e43567ffffffffffffffff811161013e57610d05903690600401611447565b610d2773ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161079d57610d6b6011546113ae565b601f8111610e97575b505f601f8211600114610e18578190610da0935f92610e0d5750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610e0860a082016114ee565b0390a4005b0135905083806105fb565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e7f57508360019510610e66575b505050811b01601155610da4565b5f1960f88560031b161c19910135169055828080610e58565b90926020600181928686013581550194019101610e46565b60115f52610ee0907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ee6575b601f0160051c0190611610565b82610d74565b9091508190610ed3565b3461013e575f60031936011261013e576020600954604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013e575f60031936011261013e576020600f54604051908152f35b3461013e575f60031936011261013e576020600554604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461013e575f60031936011261013e576020600c54604051908152f35b3461013e575f60031936011261013e576020600754604051908152f35b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611017903690600401611447565b61103973ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d5761105781610633600b546113ae565b5f91601f82116001146110c7576110a482807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f916110bc575b505f198260011b9260031b1c19161790565b600b555b6110b760405192839283611698565b0390a1005b905083013586611092565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061114f575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611136575b5050600182811b01600b556110a8565b5f1960f88560031b161c19908301351690558380611126565b838601358355602095860195600190930192016110f4565b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611198903690600401611447565b6111ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d576111d8816105d8600a546113ae565b5f91601f82116001146112365761122482807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f916110bc57505f198260011b9260031b1c19161790565b600a556110b760405192839283611698565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106112be575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c95106112a5575b5050600182811b01600a556110a8565b5f1960f88560031b161c19908301351690558380611295565b83860135835560209586019560019093019201611263565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013e575f60031936011261013e576040515f600b54611329816113ae565b80845290600181169081156102e75750600114611350576102208361020c818503826113ff565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b8082106113945750909150810160200161020c610279565b91926001816020925483858801015201910190929161137c565b90600182811c921680156113f5575b60208310146113c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916113bd565b90601f601f19910116810190811067ffffffffffffffff82111761079d57604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561013e5782359167ffffffffffffffff831161013e576020838186019501011161013e57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013e57565b81601f8201121561013e5780359067ffffffffffffffff821161079d57604051926114cd6020601f19601f86011601856113ff565b8284526020838301011161013e57815f926020809301838601378301015290565b6011545f92916114fd826113ae565b80825291600181169081156115715750600114611518575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b838310611557575060209250010190565b600181602092949394548385870101520191019190611546565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b156115b257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b81811061161b575050565b5f8155600101611610565b90601f8211611633575050565b61165e91600a5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b565b90601f821161166d575050565b61165e91600b5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156116c657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166117458115156116bf565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80\x80`@R4`\xAAW_Q` a\x181_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\x82\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x181_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\xE1W\x80c\x18\xB5\xCE\x81\x14a\x12\xAEW\x80c)\x08\x03V\x14a\x11?W\x80cK\x8B\xE3\xF7\x14a\x0F\xBEW\x80cW\xD1\xBA%\x14a\x0F\xA1W\x80cl1\xCC@\x14a\x0F\x84W\x80cn\xDDl\t\x14a\x0FQW\x80c\x85\xE1\xF4\xD0\x14a\x0F4W\x80c\x87\x03\xB4\n\x14a\x0F\x17W\x80c\x8D\xA5\xCB[\x14a\x0E\xE5W\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xC8W\x80c\xA5!E\xF2\x14a\x0C\xABW\x80c\xAAjC\xD8\x14a\x0CxW\x80c\xB5\x16F\xA6\x14a\x0C[W\x80c\xBC\x8F\xF1\x9C\x14a\x0C>W\x80c\xBFm\xB6\xF8\x14a\x0C\x0BW\x80c\xBFy\xFD\x1C\x14a\x03\x01W\x80c\xC7\xA7`\x95\x14a\x02\x19W\x80c\xD1\xF4s|\x14a\x01\xFCW\x80c\xF0\xEC\xC3\xC5\x14a\x01\xBAW\x80c\xF2\xFD\xE3\x8B\x14a\x01TW\x80c\xF8\xA1D\xBE\x14a\x017Wc\xF8\xAC\xB8\x11\x14a\x01\x16W_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0ET`@Q\x90\x81R\xF3[_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x06T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013Wa\x01\xB8a\x01pa\x14MV[a\x01\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[a\x01\xB3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\x97V[a\x16\xFCV[\0[4a\x013W_`\x03\x196\x01\x12a\x013Wa\x01\xF8`@Qa\x01\xE4\x81a\x01\xDD\x81a\x14\xC6V[\x03\x82a\x13\xD7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x13\xFAV[\x03\x90\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x08T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\nTa\x029\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x02aW[a\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xA5WP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x8DV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xE4\x90Pa\x02QV[4a\x013Wa\x01\x80`\x03\x196\x01\x12a\x013Wa\x03\x1Ba\x14MV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x013W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x013Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xCA\x906\x90`\x04\x01a\x14pV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xEC\x906\x90`\x04\x01a\x14pV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C\x03W[`\x01\x14\x90\x81a\x0B\xF9W[\x15\x90\x81a\x0B\xF0W[Pa\x0B\xC8W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BsW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\x15W\x80\x15a\n\xB7W\x81\x15a\n3W\x82\x15a\t\xAFW\x83\x15a\t+W\x84\x15a\x08\xA7W\x85\x15a\x08#W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x05\xB5\x81a\x05\xB0`\nTa\x13\x86V[a\x15\xFEV[` \x94`\x1F\x82\x11`\x01\x14a\x07\xA2Wa\x05\xE6\x92\x93\x94\x95\x82\x91_\x92a\x06\xE3W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uWa\x06\x10\x82a\x06\x0B`\x0BTa\x13\x86V[a\x168V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xEEW\x91\x80a\x06B\x92a\x06J\x95\x94_\x92a\x06\xE3WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x16\xFCV[a\x06PW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xD3V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07]WP\x91`\x01\x93\x91\x85a\x06J\x97\x96\x94\x10a\x07EW[PPP\x81\x1B\x01`\x0BUa\x16\xFCV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x077V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07\x1DV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x08\x0BWP\x83`\x01\x95\x96\x97\x98\x10a\x07\xF3W[PPP\x81\x1B\x01`\nUa\x05\xEAV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\xE5V[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xD0V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x92V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04?V[0;\x15\x91Pa\x047V[\x8B\x91Pa\x04-V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x10T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\rT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x013Wa\x01\0`\x03\x196\x01\x12a\x013W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0C\xDD\x906\x90`\x04\x01a\x14\x1FV[a\x0C\xFFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\rC`\x11Ta\x13\x86V[`\x1F\x81\x11a\x0EoW[P_`\x1F\x82\x11`\x01\x14a\r\xF0W\x81\x90a\rx\x93_\x92a\r\xE5WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\r\xE0`\xA0\x82\x01a\x14\xC6V[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xD3V[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0EWWP\x83`\x01\x95\x10a\x0E>W[PPP\x81\x1B\x01`\x11Ua\r|V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0E0V[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0E\x1EV[`\x11_Ra\x0E\xB8\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xBEW[`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x82a\rLV[\x90\x91P\x81\x90a\x0E\xABV[4a\x013W_`\x03\x196\x01\x12a\x013W` `\tT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0FT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x05T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0CT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x07T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0F\xEF\x906\x90`\x04\x01a\x14\x1FV[a\x10\x11s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x10/\x81a\x06\x0B`\x0BTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x10\x9FWa\x10|\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\x94W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10jV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11'WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x11\x0EW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10\xFEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xCCV[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x11p\x906\x90`\x04\x01a\x14\x1FV[a\x11\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x11\xB0\x81a\x05\xB0`\nTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x12\x0EWa\x11\xFC\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\x94WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\x96WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12}W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12mV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12;V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\x0BTa\x13\x01\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x13(Wa\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13lWP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13TV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xCDW[` \x83\x10\x14a\x13\xA0WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\x95V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07uW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x013W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x013W` \x83\x81\x86\x01\x95\x01\x01\x11a\x013WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x013WV[\x81`\x1F\x82\x01\x12\x15a\x013W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uW`@Q\x92a\x14\xA5` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xD7V[\x82\x84R` \x83\x83\x01\x01\x11a\x013W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xD5\x82a\x13\x86V[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15IWP`\x01\x14a\x14\xF0WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15/WP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15\x1EV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\x8AWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x15\xF3WPPV[_\x81U`\x01\x01a\x15\xE8V[\x90`\x1F\x82\x11a\x16\x0BWPPV[a\x166\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[V[\x90`\x1F\x82\x11a\x16EWPPV[a\x166\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\x9EWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17\x1D\x81\x15\x15a\x16\x97V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", + b"`\x80\x80`@R4`\xAAW_Q` a\x18Y_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\xAA\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x18Y_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x13\tW\x80c\x18\xB5\xCE\x81\x14a\x12\xD6W\x80c)\x08\x03V\x14a\x11gW\x80cK\x8B\xE3\xF7\x14a\x0F\xE6W\x80cW\xD1\xBA%\x14a\x0F\xC9W\x80cl1\xCC@\x14a\x0F\xACW\x80cn\xDDl\t\x14a\x0FyW\x80c\x85\xE1\xF4\xD0\x14a\x0F\\W\x80c\x87\x03\xB4\n\x14a\x0F?W\x80c\x8D\xA5\xCB[\x14a\x0F\rW\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xF0W\x80c\xA5!E\xF2\x14a\x0C\xD3W\x80c\xAAjC\xD8\x14a\x0C\xA0W\x80c\xB5\x16F\xA6\x14a\x0C\x83W\x80c\xBC\x8F\xF1\x9C\x14a\x0CfW\x80c\xBFm\xB6\xF8\x14a\x0C3W\x80c\xBFy\xFD\x1C\x14a\x03)W\x80c\xC7\xA7`\x95\x14a\x02AW\x80c\xD1\xF4s|\x14a\x02$W\x80c\xF0\xEC\xC3\xC5\x14a\x01\xE2W\x80c\xF2\xFD\xE3\x8B\x14a\x01|W\x80c\xF8\xA1D\xBE\x14a\x01_W\x80c\xF8\xAC\xB8\x11\x14a\x01BWc\xFF\xA1\xADt\x14a\x01!W_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `@Qb\x0FB@\x81R\xF3[_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0ET`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x06T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>Wa\x01\xE0a\x01\x98a\x14uV[a\x01\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[a\x01\xDBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\xBFV[a\x17$V[\0[4a\x01>W_`\x03\x196\x01\x12a\x01>Wa\x02 `@Qa\x02\x0C\x81a\x02\x05\x81a\x14\xEEV[\x03\x82a\x13\xFFV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\"V[\x03\x90\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x08T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\nTa\x02a\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x02\x89W[a\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xCDWP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\xB5V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x02\x0C\x90Pa\x02yV[4a\x01>Wa\x01\x80`\x03\x196\x01\x12a\x01>Wa\x03Ca\x14uV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x01>W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x01>Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x03\xF2\x906\x90`\x04\x01a\x14\x98V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x04\x14\x906\x90`\x04\x01a\x14\x98V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C+W[`\x01\x14\x90\x81a\x0C!W[\x15\x90\x81a\x0C\x18W[Pa\x0B\xF0W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0B\x9BW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B=W\x80\x15a\n\xDFW\x81\x15a\n[W\x82\x15a\t\xD7W\x83\x15a\tSW\x84\x15a\x08\xCFW\x85\x15a\x08KW`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x05\xDD\x81a\x05\xD8`\nTa\x13\xAEV[a\x16&V[` \x94`\x1F\x82\x11`\x01\x14a\x07\xCAWa\x06\x0E\x92\x93\x94\x95\x82\x91_\x92a\x07\x0BW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DWa\x068\x82a\x063`\x0BTa\x13\xAEV[a\x16`V[` \x90`\x1F\x83\x11`\x01\x14a\x07\x16W\x91\x80a\x06j\x92a\x06r\x95\x94_\x92a\x07\x0BWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x17$V[a\x06xW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xFBV[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x85WP\x91`\x01\x93\x91\x85a\x06r\x97\x96\x94\x10a\x07mW[PPP\x81\x1B\x01`\x0BUa\x17$V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07_V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07EV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x083WP\x83`\x01\x95\x96\x97\x98\x10a\x08\x1BW[PPP\x81\x1B\x01`\nUa\x06\x12V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x08\rV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xF8V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\xBAV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04gV[0;\x15\x91Pa\x04_V[\x8B\x91Pa\x04UV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x10T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\rT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01>Wa\x01\0`\x03\x196\x01\x12a\x01>W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\r\x05\x906\x90`\x04\x01a\x14GV[a\r's\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\rk`\x11Ta\x13\xAEV[`\x1F\x81\x11a\x0E\x97W[P_`\x1F\x82\x11`\x01\x14a\x0E\x18W\x81\x90a\r\xA0\x93_\x92a\x0E\rWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\x0E\x08`\xA0\x82\x01a\x14\xEEV[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xFBV[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0E\x7FWP\x83`\x01\x95\x10a\x0EfW[PPP\x81\x1B\x01`\x11Ua\r\xA4V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0EXV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0EFV[`\x11_Ra\x0E\xE0\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xE6W[`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x82a\rtV[\x90\x91P\x81\x90a\x0E\xD3V[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\tT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0FT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x05T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0CT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x07T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x10\x17\x906\x90`\x04\x01a\x14GV[a\x109s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x10W\x81a\x063`\x0BTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x10\xC7Wa\x10\xA4\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\xBCW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10\x92V[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11OWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x116W[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11&V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xF4V[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x11\x98\x906\x90`\x04\x01a\x14GV[a\x11\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x11\xD8\x81a\x05\xD8`\nTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x126Wa\x12$\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\xBCWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\xBEWP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12\xA5W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12\x95V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12cV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\x0BTa\x13)\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x13PWa\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13\x94WP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13|V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xF5W[` \x83\x10\x14a\x13\xC8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\xBDV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x9DW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x01>W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01>W` \x83\x81\x86\x01\x95\x01\x01\x11a\x01>WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01>WV[\x81`\x1F\x82\x01\x12\x15a\x01>W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DW`@Q\x92a\x14\xCD` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xFFV[\x82\x84R` \x83\x83\x01\x01\x11a\x01>W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xFD\x82a\x13\xAEV[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15qWP`\x01\x14a\x15\x18WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15WWP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15FV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\xB2WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x16\x1BWPPV[_\x81U`\x01\x01a\x16\x10V[\x90`\x1F\x82\x11a\x163WPPV[a\x16^\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[V[\x90`\x1F\x82\x11a\x16mWPPV[a\x16^\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\xC6WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17E\x81\x15\x15a\x16\xBFV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e146112e157806318b5ce81146112ae578063290803561461113f5780634b8be3f714610fbe57806357d1ba2514610fa15780636c31cc4014610f845780636edd6c0914610f5157806385e1f4d014610f345780638703b40a14610f175780638da5cb5b14610ee5578063a3c6e1e714610ec8578063a52145f214610cab578063aa6a43d814610c78578063b51646a614610c5b578063bc8ff19c14610c3e578063bf6db6f814610c0b578063bf79fd1c14610301578063c7a7609514610219578063d1f4737c146101fc578063f0ecc3c5146101ba578063f2fde38b14610154578063f8a144be146101375763f8acb81114610116575f80fd5b34610133575f600319360112610133576020600e54604051908152f35b5f80fd5b34610133575f600319360112610133576020600654604051908152f35b34610133576020600319360112610133576101b861017061144d565b61019273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b6101b373ffffffffffffffffffffffffffffffffffffffff82161515611697565b6116fc565b005b34610133575f600319360112610133576101f86040516101e4816101dd816114c6565b03826113d7565b6040519182916020835260208301906113fa565b0390f35b34610133575f600319360112610133576020600854604051908152f35b34610133575f600319360112610133576040515f600a5461023981611386565b80845290600181169081156102bf5750600114610261575b6101f8836101e4818503826113d7565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102a5575090915081016020016101e4610251565b91926001816020925483858801015201910190929161028d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101e49050610251565b34610133576101806003193601126101335761031b61144d565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036101335760843573ffffffffffffffffffffffffffffffffffffffff81168091036101335760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013357610124359173ffffffffffffffffffffffffffffffffffffffff8316809303610133576101443567ffffffffffffffff8111610133576103ca903690600401611470565b966101643567ffffffffffffffff8111610133576103ec903690600401611470565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c03575b6001149081610bf9575b159081610bf0575b50610bc8578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b73575b5073ffffffffffffffffffffffffffffffffffffffff881615610b15578015610ab7578115610a335782156109af57831561092b5784156108a7578515610823576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff8111610775576105b5816105b0600a54611386565b6115fe565b602094601f82116001146107a2576105e69293949582915f926106e3575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff8211610775576106108261060b600b54611386565b611638565b602090601f83116001146106ee5791806106429261064a95945f926106e35750505f198260011b9260031b1c19161790565b600b556116fc565b61065057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105d3565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061075d575091600193918561064a97969410610745575b505050811b01600b556116fc565b01515f1960f88460031b161c19169055858080610737565b9293602060018192878601518155019501930161071d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061080b575083600195969798106107f3575b505050811b01600a556105ea565b01515f1960f88460031b161c191690558580806107e5565b919260206001819286850151815501940192016107d0565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a610492565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c61043f565b303b159150610437565b8b915061042d565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b34610133575f600319360112610133576020601054604051908152f35b34610133575f600319360112610133576020600d54604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610133576101006003193601126101335760e43567ffffffffffffffff811161013357610cdd90369060040161141f565b610cff73ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161077557610d43601154611386565b601f8111610e6f575b505f601f8211600114610df0578190610d78935f92610de55750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610de060a082016114c6565b0390a4005b0135905083806105d3565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e5757508360019510610e3e575b505050811b01601155610d7c565b5f1960f88560031b161c19910135169055828080610e30565b90926020600181928686013581550194019101610e1e565b60115f52610eb8907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ebe575b601f0160051c01906115e8565b82610d4c565b9091508190610eab565b34610133575f600319360112610133576020600954604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610133575f600319360112610133576020600f54604051908152f35b34610133575f600319360112610133576020600554604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610133575f600319360112610133576020600c54604051908152f35b34610133575f600319360112610133576020600754604051908152f35b346101335760206003193601126101335760043567ffffffffffffffff811161013357610fef90369060040161141f565b61101173ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff81116107755761102f8161060b600b54611386565b5f91601f821160011461109f5761107c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91611094575b505f198260011b9260031b1c19161790565b600b555b61108f60405192839283611670565b0390a1005b90508301358661106a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110611127575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7951061110e575b5050600182811b01600b55611080565b5f1960f88560031b161c199083013516905583806110fe565b838601358355602095860195600190930192016110cc565b346101335760206003193601126101335760043567ffffffffffffffff81116101335761117090369060040161141f565b61119273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff8111610775576111b0816105b0600a54611386565b5f91601f821160011461120e576111fc82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f9161109457505f198260011b9260031b1c19161790565b600a5561108f60405192839283611670565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110611296575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061127d575b5050600182811b01600a55611080565b5f1960f88560031b161c1990830135169055838061126d565b8386013583556020958601956001909301920161123b565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610133575f600319360112610133576040515f600b5461130181611386565b80845290600181169081156102bf5750600114611328576101f8836101e4818503826113d7565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061136c575090915081016020016101e4610251565b919260018160209254838588010152019101909291611354565b90600182811c921680156113cd575b60208310146113a057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611395565b90601f601f19910116810190811067ffffffffffffffff82111761077557604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f840112156101335782359167ffffffffffffffff8311610133576020838186019501011161013357565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013357565b81601f820112156101335780359067ffffffffffffffff821161077557604051926114a56020601f19601f86011601856113d7565b8284526020838301011161013357815f926020809301838601378301015290565b6011545f92916114d582611386565b808252916001811690811561154957506001146114f0575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b83831061152f575060209250010190565b60018160209294939454838587010152019101919061151e565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b1561158a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b8181106115f3575050565b5f81556001016115e8565b90601f821161160b575050565b61163691600a5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b565b90601f8211611645575050565b61163691600b5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561169e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661171d811515611697565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356 + ///0x60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461130957806318b5ce81146112d657806329080356146111675780634b8be3f714610fe657806357d1ba2514610fc95780636c31cc4014610fac5780636edd6c0914610f7957806385e1f4d014610f5c5780638703b40a14610f3f5780638da5cb5b14610f0d578063a3c6e1e714610ef0578063a52145f214610cd3578063aa6a43d814610ca0578063b51646a614610c83578063bc8ff19c14610c66578063bf6db6f814610c33578063bf79fd1c14610329578063c7a7609514610241578063d1f4737c14610224578063f0ecc3c5146101e2578063f2fde38b1461017c578063f8a144be1461015f578063f8acb811146101425763ffa1ad7414610121575f80fd5b3461013e575f60031936011261013e576020604051620f42408152f35b5f80fd5b3461013e575f60031936011261013e576020600e54604051908152f35b3461013e575f60031936011261013e576020600654604051908152f35b3461013e57602060031936011261013e576101e0610198611475565b6101ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b6101db73ffffffffffffffffffffffffffffffffffffffff821615156116bf565b611724565b005b3461013e575f60031936011261013e5761022060405161020c81610205816114ee565b03826113ff565b604051918291602083526020830190611422565b0390f35b3461013e575f60031936011261013e576020600854604051908152f35b3461013e575f60031936011261013e576040515f600a54610261816113ae565b80845290600181169081156102e75750600114610289575b6102208361020c818503826113ff565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102cd5750909150810160200161020c610279565b9192600181602092548385880101520191019092916102b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061020c9050610279565b3461013e5761018060031936011261013e57610343611475565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff841680940361013e5760843573ffffffffffffffffffffffffffffffffffffffff811680910361013e5760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013e57610124359173ffffffffffffffffffffffffffffffffffffffff831680930361013e576101443567ffffffffffffffff811161013e576103f2903690600401611498565b966101643567ffffffffffffffff811161013e57610414903690600401611498565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c2b575b6001149081610c21575b159081610c18575b50610bf0578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b9b575b5073ffffffffffffffffffffffffffffffffffffffff881615610b3d578015610adf578115610a5b5782156109d75783156109535784156108cf57851561084b576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161079d576105dd816105d8600a546113ae565b611626565b602094601f82116001146107ca5761060e9293949582915f9261070b575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161079d5761063882610633600b546113ae565b611660565b602090601f831160011461071657918061066a9261067295945f9261070b5750505f198260011b9260031b1c19161790565b600b55611724565b61067857005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105fb565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061078557509160019391856106729796941061076d575b505050811b01600b55611724565b01515f1960f88460031b161c1916905585808061075f565b92936020600181928786015181550195019301610745565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106108335750836001959697981061081b575b505050811b01600a55610612565b01515f1960f88460031b161c1916905585808061080d565b919260206001819286850151815501940192016107f8565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6104ba565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c610467565b303b15915061045f565b8b9150610455565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b3461013e575f60031936011261013e576020601054604051908152f35b3461013e575f60031936011261013e576020600d54604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b3461013e5761010060031936011261013e5760e43567ffffffffffffffff811161013e57610d05903690600401611447565b610d2773ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161079d57610d6b6011546113ae565b601f8111610e97575b505f601f8211600114610e18578190610da0935f92610e0d5750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610e0860a082016114ee565b0390a4005b0135905083806105fb565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e7f57508360019510610e66575b505050811b01601155610da4565b5f1960f88560031b161c19910135169055828080610e58565b90926020600181928686013581550194019101610e46565b60115f52610ee0907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ee6575b601f0160051c0190611610565b82610d74565b9091508190610ed3565b3461013e575f60031936011261013e576020600954604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013e575f60031936011261013e576020600f54604051908152f35b3461013e575f60031936011261013e576020600554604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461013e575f60031936011261013e576020600c54604051908152f35b3461013e575f60031936011261013e576020600754604051908152f35b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611017903690600401611447565b61103973ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d5761105781610633600b546113ae565b5f91601f82116001146110c7576110a482807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f916110bc575b505f198260011b9260031b1c19161790565b600b555b6110b760405192839283611698565b0390a1005b905083013586611092565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061114f575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611136575b5050600182811b01600b556110a8565b5f1960f88560031b161c19908301351690558380611126565b838601358355602095860195600190930192016110f4565b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611198903690600401611447565b6111ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d576111d8816105d8600a546113ae565b5f91601f82116001146112365761122482807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f916110bc57505f198260011b9260031b1c19161790565b600a556110b760405192839283611698565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106112be575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c95106112a5575b5050600182811b01600a556110a8565b5f1960f88560031b161c19908301351690558380611295565b83860135835560209586019560019093019201611263565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013e575f60031936011261013e576040515f600b54611329816113ae565b80845290600181169081156102e75750600114611350576102208361020c818503826113ff565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b8082106113945750909150810160200161020c610279565b91926001816020925483858801015201910190929161137c565b90600182811c921680156113f5575b60208310146113c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916113bd565b90601f601f19910116810190811067ffffffffffffffff82111761079d57604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561013e5782359167ffffffffffffffff831161013e576020838186019501011161013e57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013e57565b81601f8201121561013e5780359067ffffffffffffffff821161079d57604051926114cd6020601f19601f86011601856113ff565b8284526020838301011161013e57815f926020809301838601378301015290565b6011545f92916114fd826113ae565b80825291600181169081156115715750600114611518575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b838310611557575060209250010190565b600181602092949394548385870101520191019190611546565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b156115b257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b81811061161b575050565b5f8155600101611610565b90601f8211611633575050565b61165e91600a5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b565b90601f821161166d575050565b61165e91600b5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156116c657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166117458115156116bf565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\xE1W\x80c\x18\xB5\xCE\x81\x14a\x12\xAEW\x80c)\x08\x03V\x14a\x11?W\x80cK\x8B\xE3\xF7\x14a\x0F\xBEW\x80cW\xD1\xBA%\x14a\x0F\xA1W\x80cl1\xCC@\x14a\x0F\x84W\x80cn\xDDl\t\x14a\x0FQW\x80c\x85\xE1\xF4\xD0\x14a\x0F4W\x80c\x87\x03\xB4\n\x14a\x0F\x17W\x80c\x8D\xA5\xCB[\x14a\x0E\xE5W\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xC8W\x80c\xA5!E\xF2\x14a\x0C\xABW\x80c\xAAjC\xD8\x14a\x0CxW\x80c\xB5\x16F\xA6\x14a\x0C[W\x80c\xBC\x8F\xF1\x9C\x14a\x0C>W\x80c\xBFm\xB6\xF8\x14a\x0C\x0BW\x80c\xBFy\xFD\x1C\x14a\x03\x01W\x80c\xC7\xA7`\x95\x14a\x02\x19W\x80c\xD1\xF4s|\x14a\x01\xFCW\x80c\xF0\xEC\xC3\xC5\x14a\x01\xBAW\x80c\xF2\xFD\xE3\x8B\x14a\x01TW\x80c\xF8\xA1D\xBE\x14a\x017Wc\xF8\xAC\xB8\x11\x14a\x01\x16W_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0ET`@Q\x90\x81R\xF3[_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x06T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013Wa\x01\xB8a\x01pa\x14MV[a\x01\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[a\x01\xB3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\x97V[a\x16\xFCV[\0[4a\x013W_`\x03\x196\x01\x12a\x013Wa\x01\xF8`@Qa\x01\xE4\x81a\x01\xDD\x81a\x14\xC6V[\x03\x82a\x13\xD7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x13\xFAV[\x03\x90\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x08T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\nTa\x029\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x02aW[a\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xA5WP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x8DV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xE4\x90Pa\x02QV[4a\x013Wa\x01\x80`\x03\x196\x01\x12a\x013Wa\x03\x1Ba\x14MV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x013W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x013Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xCA\x906\x90`\x04\x01a\x14pV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xEC\x906\x90`\x04\x01a\x14pV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C\x03W[`\x01\x14\x90\x81a\x0B\xF9W[\x15\x90\x81a\x0B\xF0W[Pa\x0B\xC8W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BsW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\x15W\x80\x15a\n\xB7W\x81\x15a\n3W\x82\x15a\t\xAFW\x83\x15a\t+W\x84\x15a\x08\xA7W\x85\x15a\x08#W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x05\xB5\x81a\x05\xB0`\nTa\x13\x86V[a\x15\xFEV[` \x94`\x1F\x82\x11`\x01\x14a\x07\xA2Wa\x05\xE6\x92\x93\x94\x95\x82\x91_\x92a\x06\xE3W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uWa\x06\x10\x82a\x06\x0B`\x0BTa\x13\x86V[a\x168V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xEEW\x91\x80a\x06B\x92a\x06J\x95\x94_\x92a\x06\xE3WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x16\xFCV[a\x06PW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xD3V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07]WP\x91`\x01\x93\x91\x85a\x06J\x97\x96\x94\x10a\x07EW[PPP\x81\x1B\x01`\x0BUa\x16\xFCV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x077V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07\x1DV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x08\x0BWP\x83`\x01\x95\x96\x97\x98\x10a\x07\xF3W[PPP\x81\x1B\x01`\nUa\x05\xEAV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\xE5V[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xD0V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x92V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04?V[0;\x15\x91Pa\x047V[\x8B\x91Pa\x04-V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x10T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\rT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x013Wa\x01\0`\x03\x196\x01\x12a\x013W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0C\xDD\x906\x90`\x04\x01a\x14\x1FV[a\x0C\xFFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\rC`\x11Ta\x13\x86V[`\x1F\x81\x11a\x0EoW[P_`\x1F\x82\x11`\x01\x14a\r\xF0W\x81\x90a\rx\x93_\x92a\r\xE5WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\r\xE0`\xA0\x82\x01a\x14\xC6V[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xD3V[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0EWWP\x83`\x01\x95\x10a\x0E>W[PPP\x81\x1B\x01`\x11Ua\r|V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0E0V[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0E\x1EV[`\x11_Ra\x0E\xB8\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xBEW[`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x82a\rLV[\x90\x91P\x81\x90a\x0E\xABV[4a\x013W_`\x03\x196\x01\x12a\x013W` `\tT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0FT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x05T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0CT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x07T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0F\xEF\x906\x90`\x04\x01a\x14\x1FV[a\x10\x11s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x10/\x81a\x06\x0B`\x0BTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x10\x9FWa\x10|\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\x94W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10jV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11'WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x11\x0EW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10\xFEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xCCV[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x11p\x906\x90`\x04\x01a\x14\x1FV[a\x11\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x11\xB0\x81a\x05\xB0`\nTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x12\x0EWa\x11\xFC\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\x94WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\x96WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12}W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12mV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12;V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\x0BTa\x13\x01\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x13(Wa\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13lWP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13TV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xCDW[` \x83\x10\x14a\x13\xA0WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\x95V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07uW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x013W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x013W` \x83\x81\x86\x01\x95\x01\x01\x11a\x013WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x013WV[\x81`\x1F\x82\x01\x12\x15a\x013W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uW`@Q\x92a\x14\xA5` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xD7V[\x82\x84R` \x83\x83\x01\x01\x11a\x013W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xD5\x82a\x13\x86V[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15IWP`\x01\x14a\x14\xF0WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15/WP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15\x1EV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\x8AWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x15\xF3WPPV[_\x81U`\x01\x01a\x15\xE8V[\x90`\x1F\x82\x11a\x16\x0BWPPV[a\x166\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[V[\x90`\x1F\x82\x11a\x16EWPPV[a\x166\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\x9EWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17\x1D\x81\x15\x15a\x16\x97V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x13\tW\x80c\x18\xB5\xCE\x81\x14a\x12\xD6W\x80c)\x08\x03V\x14a\x11gW\x80cK\x8B\xE3\xF7\x14a\x0F\xE6W\x80cW\xD1\xBA%\x14a\x0F\xC9W\x80cl1\xCC@\x14a\x0F\xACW\x80cn\xDDl\t\x14a\x0FyW\x80c\x85\xE1\xF4\xD0\x14a\x0F\\W\x80c\x87\x03\xB4\n\x14a\x0F?W\x80c\x8D\xA5\xCB[\x14a\x0F\rW\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xF0W\x80c\xA5!E\xF2\x14a\x0C\xD3W\x80c\xAAjC\xD8\x14a\x0C\xA0W\x80c\xB5\x16F\xA6\x14a\x0C\x83W\x80c\xBC\x8F\xF1\x9C\x14a\x0CfW\x80c\xBFm\xB6\xF8\x14a\x0C3W\x80c\xBFy\xFD\x1C\x14a\x03)W\x80c\xC7\xA7`\x95\x14a\x02AW\x80c\xD1\xF4s|\x14a\x02$W\x80c\xF0\xEC\xC3\xC5\x14a\x01\xE2W\x80c\xF2\xFD\xE3\x8B\x14a\x01|W\x80c\xF8\xA1D\xBE\x14a\x01_W\x80c\xF8\xAC\xB8\x11\x14a\x01BWc\xFF\xA1\xADt\x14a\x01!W_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `@Qb\x0FB@\x81R\xF3[_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0ET`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x06T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>Wa\x01\xE0a\x01\x98a\x14uV[a\x01\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[a\x01\xDBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\xBFV[a\x17$V[\0[4a\x01>W_`\x03\x196\x01\x12a\x01>Wa\x02 `@Qa\x02\x0C\x81a\x02\x05\x81a\x14\xEEV[\x03\x82a\x13\xFFV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\"V[\x03\x90\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x08T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\nTa\x02a\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x02\x89W[a\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xCDWP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\xB5V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x02\x0C\x90Pa\x02yV[4a\x01>Wa\x01\x80`\x03\x196\x01\x12a\x01>Wa\x03Ca\x14uV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x01>W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x01>Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x03\xF2\x906\x90`\x04\x01a\x14\x98V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x04\x14\x906\x90`\x04\x01a\x14\x98V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C+W[`\x01\x14\x90\x81a\x0C!W[\x15\x90\x81a\x0C\x18W[Pa\x0B\xF0W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0B\x9BW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B=W\x80\x15a\n\xDFW\x81\x15a\n[W\x82\x15a\t\xD7W\x83\x15a\tSW\x84\x15a\x08\xCFW\x85\x15a\x08KW`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x05\xDD\x81a\x05\xD8`\nTa\x13\xAEV[a\x16&V[` \x94`\x1F\x82\x11`\x01\x14a\x07\xCAWa\x06\x0E\x92\x93\x94\x95\x82\x91_\x92a\x07\x0BW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DWa\x068\x82a\x063`\x0BTa\x13\xAEV[a\x16`V[` \x90`\x1F\x83\x11`\x01\x14a\x07\x16W\x91\x80a\x06j\x92a\x06r\x95\x94_\x92a\x07\x0BWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x17$V[a\x06xW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xFBV[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x85WP\x91`\x01\x93\x91\x85a\x06r\x97\x96\x94\x10a\x07mW[PPP\x81\x1B\x01`\x0BUa\x17$V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07_V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07EV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x083WP\x83`\x01\x95\x96\x97\x98\x10a\x08\x1BW[PPP\x81\x1B\x01`\nUa\x06\x12V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x08\rV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xF8V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\xBAV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04gV[0;\x15\x91Pa\x04_V[\x8B\x91Pa\x04UV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x10T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\rT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01>Wa\x01\0`\x03\x196\x01\x12a\x01>W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\r\x05\x906\x90`\x04\x01a\x14GV[a\r's\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\rk`\x11Ta\x13\xAEV[`\x1F\x81\x11a\x0E\x97W[P_`\x1F\x82\x11`\x01\x14a\x0E\x18W\x81\x90a\r\xA0\x93_\x92a\x0E\rWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\x0E\x08`\xA0\x82\x01a\x14\xEEV[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xFBV[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0E\x7FWP\x83`\x01\x95\x10a\x0EfW[PPP\x81\x1B\x01`\x11Ua\r\xA4V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0EXV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0EFV[`\x11_Ra\x0E\xE0\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xE6W[`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x82a\rtV[\x90\x91P\x81\x90a\x0E\xD3V[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\tT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0FT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x05T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0CT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x07T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x10\x17\x906\x90`\x04\x01a\x14GV[a\x109s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x10W\x81a\x063`\x0BTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x10\xC7Wa\x10\xA4\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\xBCW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10\x92V[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11OWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x116W[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11&V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xF4V[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x11\x98\x906\x90`\x04\x01a\x14GV[a\x11\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x11\xD8\x81a\x05\xD8`\nTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x126Wa\x12$\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\xBCWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\xBEWP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12\xA5W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12\x95V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12cV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\x0BTa\x13)\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x13PWa\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13\x94WP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13|V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xF5W[` \x83\x10\x14a\x13\xC8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\xBDV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x9DW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x01>W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01>W` \x83\x81\x86\x01\x95\x01\x01\x11a\x01>WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01>WV[\x81`\x1F\x82\x01\x12\x15a\x01>W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DW`@Q\x92a\x14\xCD` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xFFV[\x82\x84R` \x83\x83\x01\x01\x11a\x01>W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xFD\x82a\x13\xAEV[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15qWP`\x01\x14a\x15\x18WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15WWP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15FV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\xB2WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x16\x1BWPPV[_\x81U`\x01\x01a\x16\x10V[\x90`\x1F\x82\x11a\x163WPPV[a\x16^\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[V[\x90`\x1F\x82\x11a\x16mWPPV[a\x16^\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\xC6WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17E\x81\x15\x15a\x16\xBFV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] @@ -3957,6 +3971,153 @@ function SETTLEMENT_START_BLOCK() external view returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `VERSION()` and selector `0xffa1ad74`. +```solidity +function VERSION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `initialize(address,uint256,uint256,address,address,uint256,uint256,address,uint256,address,string,string)` and selector `0xbf79fd1c`. ```solidity function initialize(address _owner, uint256 chainId, uint256 sequencingChainId, address arbitrumBridgeAddress, address arbitrumInboxAddress, uint256 settlementDelay, uint256 settlementStartBlock, address sequencingContractAddress, uint256 sequencingStartBlock, address initialAppchainOwner, string memory sequencingChainWsRpcUrl, string memory appchainBlockExplorerUrl) external; @@ -5076,6 +5237,8 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa #[allow(missing_docs)] SETTLEMENT_START_BLOCK(SETTLEMENT_START_BLOCKCall), #[allow(missing_docs)] + VERSION(VERSIONCall), + #[allow(missing_docs)] initialize(initializeCall), #[allow(missing_docs)] migration(migrationCall), @@ -5119,6 +5282,7 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa [242u8, 253u8, 227u8, 139u8], [248u8, 161u8, 68u8, 190u8], [248u8, 172u8, 184u8, 17u8], + [255u8, 161u8, 173u8, 116u8], ]; /// The names of the variants in the same order as `SELECTORS`. pub const VARIANT_NAMES: &'static [&'static str] = &[ @@ -5145,6 +5309,7 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa ::core::stringify!(transferOwnership), ::core::stringify!(SEQUENCING_CHAIN_ID), ::core::stringify!(MIGRATED_DELAYED_MSGS_ACC), + ::core::stringify!(VERSION), ]; /// The signatures in the same order as `SELECTORS`. pub const SIGNATURES: &'static [&'static str] = &[ @@ -5171,6 +5336,7 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, ]; /// Returns the signature for the given selector, if known. #[inline] @@ -5197,7 +5363,7 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa impl alloy_sol_types::SolInterface for ArbChainConfigCalls { const NAME: &'static str = "ArbChainConfigCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 23usize; + const COUNT: usize = 24usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -5250,6 +5416,7 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa Self::SETTLEMENT_START_BLOCK(_) => { ::SELECTOR } + Self::VERSION(_) => ::SELECTOR, Self::initialize(_) => { ::SELECTOR } @@ -5536,6 +5703,15 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa } MIGRATED_DELAYED_MSGS_ACC }, + { + fn VERSION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(ArbChainConfigCalls::VERSION) + } + VERSION + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -5813,6 +5989,17 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa } MIGRATED_DELAYED_MSGS_ACC }, + { + fn VERSION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ArbChainConfigCalls::VERSION) + } + VERSION + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -5910,6 +6097,9 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa inner, ) } + Self::VERSION(inner) => { + ::abi_encoded_size(inner) + } Self::initialize(inner) => { ::abi_encoded_size(inner) } @@ -6041,6 +6231,9 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa out, ) } + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } Self::initialize(inner) => { ::abi_encode_raw( inner, @@ -6723,6 +6916,10 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, SETTLEMENT_START_BLOCKCall, N> { self.call_builder(&SETTLEMENT_START_BLOCKCall) } + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } ///Creates a new call builder for the [`initialize`] function. pub fn initialize( &self, diff --git a/shared/contract-bindings/src/synd/arb_config_manager.rs b/shared/contract-bindings/src/synd/arb_config_manager.rs index a68dd8e46..6ca48c12a 100644 --- a/shared/contract-bindings/src/synd/arb_config_manager.rs +++ b/shared/contract-bindings/src/synd/arb_config_manager.rs @@ -296,12 +296,12 @@ pub mod ArbConfigManager { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a03461016b57601f61300a38819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36118518181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b03811184821017610144576040928492612b0584396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206118315f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161178290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118315f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e146112e157806318b5ce81146112ae578063290803561461113f5780634b8be3f714610fbe57806357d1ba2514610fa15780636c31cc4014610f845780636edd6c0914610f5157806385e1f4d014610f345780638703b40a14610f175780638da5cb5b14610ee5578063a3c6e1e714610ec8578063a52145f214610cab578063aa6a43d814610c78578063b51646a614610c5b578063bc8ff19c14610c3e578063bf6db6f814610c0b578063bf79fd1c14610301578063c7a7609514610219578063d1f4737c146101fc578063f0ecc3c5146101ba578063f2fde38b14610154578063f8a144be146101375763f8acb81114610116575f80fd5b34610133575f600319360112610133576020600e54604051908152f35b5f80fd5b34610133575f600319360112610133576020600654604051908152f35b34610133576020600319360112610133576101b861017061144d565b61019273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b6101b373ffffffffffffffffffffffffffffffffffffffff82161515611697565b6116fc565b005b34610133575f600319360112610133576101f86040516101e4816101dd816114c6565b03826113d7565b6040519182916020835260208301906113fa565b0390f35b34610133575f600319360112610133576020600854604051908152f35b34610133575f600319360112610133576040515f600a5461023981611386565b80845290600181169081156102bf5750600114610261575b6101f8836101e4818503826113d7565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102a5575090915081016020016101e4610251565b91926001816020925483858801015201910190929161028d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101e49050610251565b34610133576101806003193601126101335761031b61144d565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036101335760843573ffffffffffffffffffffffffffffffffffffffff81168091036101335760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013357610124359173ffffffffffffffffffffffffffffffffffffffff8316809303610133576101443567ffffffffffffffff8111610133576103ca903690600401611470565b966101643567ffffffffffffffff8111610133576103ec903690600401611470565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c03575b6001149081610bf9575b159081610bf0575b50610bc8578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b73575b5073ffffffffffffffffffffffffffffffffffffffff881615610b15578015610ab7578115610a335782156109af57831561092b5784156108a7578515610823576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff8111610775576105b5816105b0600a54611386565b6115fe565b602094601f82116001146107a2576105e69293949582915f926106e3575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff8211610775576106108261060b600b54611386565b611638565b602090601f83116001146106ee5791806106429261064a95945f926106e35750505f198260011b9260031b1c19161790565b600b556116fc565b61065057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105d3565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061075d575091600193918561064a97969410610745575b505050811b01600b556116fc565b01515f1960f88460031b161c19169055858080610737565b9293602060018192878601518155019501930161071d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061080b575083600195969798106107f3575b505050811b01600a556105ea565b01515f1960f88460031b161c191690558580806107e5565b919260206001819286850151815501940192016107d0565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a610492565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c61043f565b303b159150610437565b8b915061042d565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b34610133575f600319360112610133576020601054604051908152f35b34610133575f600319360112610133576020600d54604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610133576101006003193601126101335760e43567ffffffffffffffff811161013357610cdd90369060040161141f565b610cff73ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161077557610d43601154611386565b601f8111610e6f575b505f601f8211600114610df0578190610d78935f92610de55750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610de060a082016114c6565b0390a4005b0135905083806105d3565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e5757508360019510610e3e575b505050811b01601155610d7c565b5f1960f88560031b161c19910135169055828080610e30565b90926020600181928686013581550194019101610e1e565b60115f52610eb8907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ebe575b601f0160051c01906115e8565b82610d4c565b9091508190610eab565b34610133575f600319360112610133576020600954604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610133575f600319360112610133576020600f54604051908152f35b34610133575f600319360112610133576020600554604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610133575f600319360112610133576020600c54604051908152f35b34610133575f600319360112610133576020600754604051908152f35b346101335760206003193601126101335760043567ffffffffffffffff811161013357610fef90369060040161141f565b61101173ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff81116107755761102f8161060b600b54611386565b5f91601f821160011461109f5761107c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91611094575b505f198260011b9260031b1c19161790565b600b555b61108f60405192839283611670565b0390a1005b90508301358661106a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110611127575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7951061110e575b5050600182811b01600b55611080565b5f1960f88560031b161c199083013516905583806110fe565b838601358355602095860195600190930192016110cc565b346101335760206003193601126101335760043567ffffffffffffffff81116101335761117090369060040161141f565b61119273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff8111610775576111b0816105b0600a54611386565b5f91601f821160011461120e576111fc82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f9161109457505f198260011b9260031b1c19161790565b600a5561108f60405192839283611670565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110611296575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061127d575b5050600182811b01600a55611080565b5f1960f88560031b161c1990830135169055838061126d565b8386013583556020958601956001909301920161123b565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610133575f600319360112610133576040515f600b5461130181611386565b80845290600181169081156102bf5750600114611328576101f8836101e4818503826113d7565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061136c575090915081016020016101e4610251565b919260018160209254838588010152019101909291611354565b90600182811c921680156113cd575b60208310146113a057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611395565b90601f601f19910116810190811067ffffffffffffffff82111761077557604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f840112156101335782359167ffffffffffffffff8311610133576020838186019501011161013357565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013357565b81601f820112156101335780359067ffffffffffffffff821161077557604051926114a56020601f19601f86011601856113d7565b8284526020838301011161013357815f926020809301838601378301015290565b6011545f92916114d582611386565b808252916001811690811561154957506001146114f0575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b83831061152f575060209250010190565b60018160209294939454838587010152019101919061151e565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b1561158a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b8181106115f3575050565b5f81556001016115e8565b90601f821161160b575050565b61163691600a5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b565b90601f8211611645575050565b61163691600b5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561169e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661171d811515611697565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd + ///0x60a03461016b57601f61303238819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36118798181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b03811184821017610144576040928492612b2d84396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206118595f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b6040516117aa90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118595f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461130957806318b5ce81146112d657806329080356146111675780634b8be3f714610fe657806357d1ba2514610fc95780636c31cc4014610fac5780636edd6c0914610f7957806385e1f4d014610f5c5780638703b40a14610f3f5780638da5cb5b14610f0d578063a3c6e1e714610ef0578063a52145f214610cd3578063aa6a43d814610ca0578063b51646a614610c83578063bc8ff19c14610c66578063bf6db6f814610c33578063bf79fd1c14610329578063c7a7609514610241578063d1f4737c14610224578063f0ecc3c5146101e2578063f2fde38b1461017c578063f8a144be1461015f578063f8acb811146101425763ffa1ad7414610121575f80fd5b3461013e575f60031936011261013e576020604051620f42408152f35b5f80fd5b3461013e575f60031936011261013e576020600e54604051908152f35b3461013e575f60031936011261013e576020600654604051908152f35b3461013e57602060031936011261013e576101e0610198611475565b6101ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b6101db73ffffffffffffffffffffffffffffffffffffffff821615156116bf565b611724565b005b3461013e575f60031936011261013e5761022060405161020c81610205816114ee565b03826113ff565b604051918291602083526020830190611422565b0390f35b3461013e575f60031936011261013e576020600854604051908152f35b3461013e575f60031936011261013e576040515f600a54610261816113ae565b80845290600181169081156102e75750600114610289575b6102208361020c818503826113ff565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102cd5750909150810160200161020c610279565b9192600181602092548385880101520191019092916102b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061020c9050610279565b3461013e5761018060031936011261013e57610343611475565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff841680940361013e5760843573ffffffffffffffffffffffffffffffffffffffff811680910361013e5760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013e57610124359173ffffffffffffffffffffffffffffffffffffffff831680930361013e576101443567ffffffffffffffff811161013e576103f2903690600401611498565b966101643567ffffffffffffffff811161013e57610414903690600401611498565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c2b575b6001149081610c21575b159081610c18575b50610bf0578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b9b575b5073ffffffffffffffffffffffffffffffffffffffff881615610b3d578015610adf578115610a5b5782156109d75783156109535784156108cf57851561084b576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161079d576105dd816105d8600a546113ae565b611626565b602094601f82116001146107ca5761060e9293949582915f9261070b575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161079d5761063882610633600b546113ae565b611660565b602090601f831160011461071657918061066a9261067295945f9261070b5750505f198260011b9260031b1c19161790565b600b55611724565b61067857005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105fb565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061078557509160019391856106729796941061076d575b505050811b01600b55611724565b01515f1960f88460031b161c1916905585808061075f565b92936020600181928786015181550195019301610745565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106108335750836001959697981061081b575b505050811b01600a55610612565b01515f1960f88460031b161c1916905585808061080d565b919260206001819286850151815501940192016107f8565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6104ba565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c610467565b303b15915061045f565b8b9150610455565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b3461013e575f60031936011261013e576020601054604051908152f35b3461013e575f60031936011261013e576020600d54604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b3461013e5761010060031936011261013e5760e43567ffffffffffffffff811161013e57610d05903690600401611447565b610d2773ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161079d57610d6b6011546113ae565b601f8111610e97575b505f601f8211600114610e18578190610da0935f92610e0d5750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610e0860a082016114ee565b0390a4005b0135905083806105fb565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e7f57508360019510610e66575b505050811b01601155610da4565b5f1960f88560031b161c19910135169055828080610e58565b90926020600181928686013581550194019101610e46565b60115f52610ee0907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ee6575b601f0160051c0190611610565b82610d74565b9091508190610ed3565b3461013e575f60031936011261013e576020600954604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013e575f60031936011261013e576020600f54604051908152f35b3461013e575f60031936011261013e576020600554604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461013e575f60031936011261013e576020600c54604051908152f35b3461013e575f60031936011261013e576020600754604051908152f35b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611017903690600401611447565b61103973ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d5761105781610633600b546113ae565b5f91601f82116001146110c7576110a482807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f916110bc575b505f198260011b9260031b1c19161790565b600b555b6110b760405192839283611698565b0390a1005b905083013586611092565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061114f575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611136575b5050600182811b01600b556110a8565b5f1960f88560031b161c19908301351690558380611126565b838601358355602095860195600190930192016110f4565b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611198903690600401611447565b6111ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d576111d8816105d8600a546113ae565b5f91601f82116001146112365761122482807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f916110bc57505f198260011b9260031b1c19161790565b600a556110b760405192839283611698565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106112be575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c95106112a5575b5050600182811b01600a556110a8565b5f1960f88560031b161c19908301351690558380611295565b83860135835560209586019560019093019201611263565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013e575f60031936011261013e576040515f600b54611329816113ae565b80845290600181169081156102e75750600114611350576102208361020c818503826113ff565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b8082106113945750909150810160200161020c610279565b91926001816020925483858801015201910190929161137c565b90600182811c921680156113f5575b60208310146113c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916113bd565b90601f601f19910116810190811067ffffffffffffffff82111761079d57604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561013e5782359167ffffffffffffffff831161013e576020838186019501011161013e57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013e57565b81601f8201121561013e5780359067ffffffffffffffff821161079d57604051926114cd6020601f19601f86011601856113ff565b8284526020838301011161013e57815f926020809301838601378301015290565b6011545f92916114fd826113ae565b80825291600181169081156115715750600114611518575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b838310611557575060209250010190565b600181602092949394548385870101520191019190611546565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b156115b257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b81811061161b575050565b5f8155600101611610565b90601f8211611633575050565b61165e91600a5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b565b90601f821161166d575050565b61165e91600b5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156116c657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166117458115156116bf565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA04a\x01kW`\x1Fa0\n8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x18Q\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a+\x05\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x181_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\x82\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x181_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\xE1W\x80c\x18\xB5\xCE\x81\x14a\x12\xAEW\x80c)\x08\x03V\x14a\x11?W\x80cK\x8B\xE3\xF7\x14a\x0F\xBEW\x80cW\xD1\xBA%\x14a\x0F\xA1W\x80cl1\xCC@\x14a\x0F\x84W\x80cn\xDDl\t\x14a\x0FQW\x80c\x85\xE1\xF4\xD0\x14a\x0F4W\x80c\x87\x03\xB4\n\x14a\x0F\x17W\x80c\x8D\xA5\xCB[\x14a\x0E\xE5W\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xC8W\x80c\xA5!E\xF2\x14a\x0C\xABW\x80c\xAAjC\xD8\x14a\x0CxW\x80c\xB5\x16F\xA6\x14a\x0C[W\x80c\xBC\x8F\xF1\x9C\x14a\x0C>W\x80c\xBFm\xB6\xF8\x14a\x0C\x0BW\x80c\xBFy\xFD\x1C\x14a\x03\x01W\x80c\xC7\xA7`\x95\x14a\x02\x19W\x80c\xD1\xF4s|\x14a\x01\xFCW\x80c\xF0\xEC\xC3\xC5\x14a\x01\xBAW\x80c\xF2\xFD\xE3\x8B\x14a\x01TW\x80c\xF8\xA1D\xBE\x14a\x017Wc\xF8\xAC\xB8\x11\x14a\x01\x16W_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0ET`@Q\x90\x81R\xF3[_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x06T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013Wa\x01\xB8a\x01pa\x14MV[a\x01\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[a\x01\xB3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\x97V[a\x16\xFCV[\0[4a\x013W_`\x03\x196\x01\x12a\x013Wa\x01\xF8`@Qa\x01\xE4\x81a\x01\xDD\x81a\x14\xC6V[\x03\x82a\x13\xD7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x13\xFAV[\x03\x90\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x08T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\nTa\x029\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x02aW[a\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xA5WP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x8DV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xE4\x90Pa\x02QV[4a\x013Wa\x01\x80`\x03\x196\x01\x12a\x013Wa\x03\x1Ba\x14MV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x013W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x013Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xCA\x906\x90`\x04\x01a\x14pV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xEC\x906\x90`\x04\x01a\x14pV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C\x03W[`\x01\x14\x90\x81a\x0B\xF9W[\x15\x90\x81a\x0B\xF0W[Pa\x0B\xC8W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BsW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\x15W\x80\x15a\n\xB7W\x81\x15a\n3W\x82\x15a\t\xAFW\x83\x15a\t+W\x84\x15a\x08\xA7W\x85\x15a\x08#W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x05\xB5\x81a\x05\xB0`\nTa\x13\x86V[a\x15\xFEV[` \x94`\x1F\x82\x11`\x01\x14a\x07\xA2Wa\x05\xE6\x92\x93\x94\x95\x82\x91_\x92a\x06\xE3W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uWa\x06\x10\x82a\x06\x0B`\x0BTa\x13\x86V[a\x168V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xEEW\x91\x80a\x06B\x92a\x06J\x95\x94_\x92a\x06\xE3WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x16\xFCV[a\x06PW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xD3V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07]WP\x91`\x01\x93\x91\x85a\x06J\x97\x96\x94\x10a\x07EW[PPP\x81\x1B\x01`\x0BUa\x16\xFCV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x077V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07\x1DV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x08\x0BWP\x83`\x01\x95\x96\x97\x98\x10a\x07\xF3W[PPP\x81\x1B\x01`\nUa\x05\xEAV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\xE5V[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xD0V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x92V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04?V[0;\x15\x91Pa\x047V[\x8B\x91Pa\x04-V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x10T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\rT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x013Wa\x01\0`\x03\x196\x01\x12a\x013W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0C\xDD\x906\x90`\x04\x01a\x14\x1FV[a\x0C\xFFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\rC`\x11Ta\x13\x86V[`\x1F\x81\x11a\x0EoW[P_`\x1F\x82\x11`\x01\x14a\r\xF0W\x81\x90a\rx\x93_\x92a\r\xE5WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\r\xE0`\xA0\x82\x01a\x14\xC6V[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xD3V[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0EWWP\x83`\x01\x95\x10a\x0E>W[PPP\x81\x1B\x01`\x11Ua\r|V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0E0V[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0E\x1EV[`\x11_Ra\x0E\xB8\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xBEW[`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x82a\rLV[\x90\x91P\x81\x90a\x0E\xABV[4a\x013W_`\x03\x196\x01\x12a\x013W` `\tT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0FT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x05T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0CT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x07T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0F\xEF\x906\x90`\x04\x01a\x14\x1FV[a\x10\x11s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x10/\x81a\x06\x0B`\x0BTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x10\x9FWa\x10|\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\x94W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10jV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11'WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x11\x0EW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10\xFEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xCCV[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x11p\x906\x90`\x04\x01a\x14\x1FV[a\x11\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x11\xB0\x81a\x05\xB0`\nTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x12\x0EWa\x11\xFC\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\x94WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\x96WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12}W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12mV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12;V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\x0BTa\x13\x01\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x13(Wa\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13lWP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13TV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xCDW[` \x83\x10\x14a\x13\xA0WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\x95V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07uW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x013W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x013W` \x83\x81\x86\x01\x95\x01\x01\x11a\x013WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x013WV[\x81`\x1F\x82\x01\x12\x15a\x013W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uW`@Q\x92a\x14\xA5` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xD7V[\x82\x84R` \x83\x83\x01\x01\x11a\x013W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xD5\x82a\x13\x86V[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15IWP`\x01\x14a\x14\xF0WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15/WP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15\x1EV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\x8AWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x15\xF3WPPV[_\x81U`\x01\x01a\x15\xE8V[\x90`\x1F\x82\x11a\x16\x0BWPPV[a\x166\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[V[\x90`\x1F\x82\x11a\x16EWPPV[a\x166\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\x9EWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17\x1D\x81\x15\x15a\x16\x97V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", + b"`\xA04a\x01kW`\x1Fa028\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x18y\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a+-\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x18Y_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\xAA\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x18Y_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x13\tW\x80c\x18\xB5\xCE\x81\x14a\x12\xD6W\x80c)\x08\x03V\x14a\x11gW\x80cK\x8B\xE3\xF7\x14a\x0F\xE6W\x80cW\xD1\xBA%\x14a\x0F\xC9W\x80cl1\xCC@\x14a\x0F\xACW\x80cn\xDDl\t\x14a\x0FyW\x80c\x85\xE1\xF4\xD0\x14a\x0F\\W\x80c\x87\x03\xB4\n\x14a\x0F?W\x80c\x8D\xA5\xCB[\x14a\x0F\rW\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xF0W\x80c\xA5!E\xF2\x14a\x0C\xD3W\x80c\xAAjC\xD8\x14a\x0C\xA0W\x80c\xB5\x16F\xA6\x14a\x0C\x83W\x80c\xBC\x8F\xF1\x9C\x14a\x0CfW\x80c\xBFm\xB6\xF8\x14a\x0C3W\x80c\xBFy\xFD\x1C\x14a\x03)W\x80c\xC7\xA7`\x95\x14a\x02AW\x80c\xD1\xF4s|\x14a\x02$W\x80c\xF0\xEC\xC3\xC5\x14a\x01\xE2W\x80c\xF2\xFD\xE3\x8B\x14a\x01|W\x80c\xF8\xA1D\xBE\x14a\x01_W\x80c\xF8\xAC\xB8\x11\x14a\x01BWc\xFF\xA1\xADt\x14a\x01!W_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `@Qb\x0FB@\x81R\xF3[_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0ET`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x06T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>Wa\x01\xE0a\x01\x98a\x14uV[a\x01\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[a\x01\xDBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\xBFV[a\x17$V[\0[4a\x01>W_`\x03\x196\x01\x12a\x01>Wa\x02 `@Qa\x02\x0C\x81a\x02\x05\x81a\x14\xEEV[\x03\x82a\x13\xFFV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\"V[\x03\x90\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x08T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\nTa\x02a\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x02\x89W[a\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xCDWP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\xB5V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x02\x0C\x90Pa\x02yV[4a\x01>Wa\x01\x80`\x03\x196\x01\x12a\x01>Wa\x03Ca\x14uV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x01>W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x01>Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x03\xF2\x906\x90`\x04\x01a\x14\x98V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x04\x14\x906\x90`\x04\x01a\x14\x98V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C+W[`\x01\x14\x90\x81a\x0C!W[\x15\x90\x81a\x0C\x18W[Pa\x0B\xF0W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0B\x9BW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B=W\x80\x15a\n\xDFW\x81\x15a\n[W\x82\x15a\t\xD7W\x83\x15a\tSW\x84\x15a\x08\xCFW\x85\x15a\x08KW`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x05\xDD\x81a\x05\xD8`\nTa\x13\xAEV[a\x16&V[` \x94`\x1F\x82\x11`\x01\x14a\x07\xCAWa\x06\x0E\x92\x93\x94\x95\x82\x91_\x92a\x07\x0BW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DWa\x068\x82a\x063`\x0BTa\x13\xAEV[a\x16`V[` \x90`\x1F\x83\x11`\x01\x14a\x07\x16W\x91\x80a\x06j\x92a\x06r\x95\x94_\x92a\x07\x0BWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x17$V[a\x06xW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xFBV[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x85WP\x91`\x01\x93\x91\x85a\x06r\x97\x96\x94\x10a\x07mW[PPP\x81\x1B\x01`\x0BUa\x17$V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07_V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07EV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x083WP\x83`\x01\x95\x96\x97\x98\x10a\x08\x1BW[PPP\x81\x1B\x01`\nUa\x06\x12V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x08\rV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xF8V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\xBAV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04gV[0;\x15\x91Pa\x04_V[\x8B\x91Pa\x04UV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x10T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\rT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01>Wa\x01\0`\x03\x196\x01\x12a\x01>W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\r\x05\x906\x90`\x04\x01a\x14GV[a\r's\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\rk`\x11Ta\x13\xAEV[`\x1F\x81\x11a\x0E\x97W[P_`\x1F\x82\x11`\x01\x14a\x0E\x18W\x81\x90a\r\xA0\x93_\x92a\x0E\rWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\x0E\x08`\xA0\x82\x01a\x14\xEEV[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xFBV[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0E\x7FWP\x83`\x01\x95\x10a\x0EfW[PPP\x81\x1B\x01`\x11Ua\r\xA4V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0EXV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0EFV[`\x11_Ra\x0E\xE0\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xE6W[`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x82a\rtV[\x90\x91P\x81\x90a\x0E\xD3V[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\tT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0FT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x05T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0CT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x07T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x10\x17\x906\x90`\x04\x01a\x14GV[a\x109s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x10W\x81a\x063`\x0BTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x10\xC7Wa\x10\xA4\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\xBCW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10\x92V[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11OWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x116W[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11&V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xF4V[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x11\x98\x906\x90`\x04\x01a\x14GV[a\x11\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x11\xD8\x81a\x05\xD8`\nTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x126Wa\x12$\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\xBCWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\xBEWP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12\xA5W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12\x95V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12cV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\x0BTa\x13)\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x13PWa\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13\x94WP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13|V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xF5W[` \x83\x10\x14a\x13\xC8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\xBDV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x9DW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x01>W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01>W` \x83\x81\x86\x01\x95\x01\x01\x11a\x01>WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01>WV[\x81`\x1F\x82\x01\x12\x15a\x01>W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DW`@Q\x92a\x14\xCD` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xFFV[\x82\x84R` \x83\x83\x01\x01\x11a\x01>W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xFD\x82a\x13\xAEV[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15qWP`\x01\x14a\x15\x18WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15WWP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15FV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\xB2WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x16\x1BWPPV[_\x81U`\x01\x01a\x16\x10V[\x90`\x1F\x82\x11a\x163WPPV[a\x16^\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[V[\x90`\x1F\x82\x11a\x16mWPPV[a\x16^\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\xC6WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17E\x81\x15\x15a\x16\xBFV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", ); /// The runtime bytecode of the contract, as deployed on the network. /// diff --git a/shared/contract-bindings/src/synd/arb_config_manager_factory.rs b/shared/contract-bindings/src/synd/arb_config_manager_factory.rs index 0a287a13e..7e28e63e7 100644 --- a/shared/contract-bindings/src/synd/arb_config_manager_factory.rs +++ b/shared/contract-bindings/src/synd/arb_config_manager_factory.rs @@ -140,22 +140,22 @@ pub mod ArbConfigManagerFactory { /// The creation / init bytecode of the contract. /// /// ```text - ///0x6080806040523460155761354f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a261300a91604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f61300a38819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36118518181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b03811184821017610144576040928492612b0584396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206118315f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161178290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118315f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e146112e157806318b5ce81146112ae578063290803561461113f5780634b8be3f714610fbe57806357d1ba2514610fa15780636c31cc4014610f845780636edd6c0914610f5157806385e1f4d014610f345780638703b40a14610f175780638da5cb5b14610ee5578063a3c6e1e714610ec8578063a52145f214610cab578063aa6a43d814610c78578063b51646a614610c5b578063bc8ff19c14610c3e578063bf6db6f814610c0b578063bf79fd1c14610301578063c7a7609514610219578063d1f4737c146101fc578063f0ecc3c5146101ba578063f2fde38b14610154578063f8a144be146101375763f8acb81114610116575f80fd5b34610133575f600319360112610133576020600e54604051908152f35b5f80fd5b34610133575f600319360112610133576020600654604051908152f35b34610133576020600319360112610133576101b861017061144d565b61019273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b6101b373ffffffffffffffffffffffffffffffffffffffff82161515611697565b6116fc565b005b34610133575f600319360112610133576101f86040516101e4816101dd816114c6565b03826113d7565b6040519182916020835260208301906113fa565b0390f35b34610133575f600319360112610133576020600854604051908152f35b34610133575f600319360112610133576040515f600a5461023981611386565b80845290600181169081156102bf5750600114610261575b6101f8836101e4818503826113d7565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102a5575090915081016020016101e4610251565b91926001816020925483858801015201910190929161028d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101e49050610251565b34610133576101806003193601126101335761031b61144d565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036101335760843573ffffffffffffffffffffffffffffffffffffffff81168091036101335760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013357610124359173ffffffffffffffffffffffffffffffffffffffff8316809303610133576101443567ffffffffffffffff8111610133576103ca903690600401611470565b966101643567ffffffffffffffff8111610133576103ec903690600401611470565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c03575b6001149081610bf9575b159081610bf0575b50610bc8578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b73575b5073ffffffffffffffffffffffffffffffffffffffff881615610b15578015610ab7578115610a335782156109af57831561092b5784156108a7578515610823576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff8111610775576105b5816105b0600a54611386565b6115fe565b602094601f82116001146107a2576105e69293949582915f926106e3575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff8211610775576106108261060b600b54611386565b611638565b602090601f83116001146106ee5791806106429261064a95945f926106e35750505f198260011b9260031b1c19161790565b600b556116fc565b61065057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105d3565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061075d575091600193918561064a97969410610745575b505050811b01600b556116fc565b01515f1960f88460031b161c19169055858080610737565b9293602060018192878601518155019501930161071d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061080b575083600195969798106107f3575b505050811b01600a556105ea565b01515f1960f88460031b161c191690558580806107e5565b919260206001819286850151815501940192016107d0565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a610492565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c61043f565b303b159150610437565b8b915061042d565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b34610133575f600319360112610133576020601054604051908152f35b34610133575f600319360112610133576020600d54604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610133576101006003193601126101335760e43567ffffffffffffffff811161013357610cdd90369060040161141f565b610cff73ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161077557610d43601154611386565b601f8111610e6f575b505f601f8211600114610df0578190610d78935f92610de55750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610de060a082016114c6565b0390a4005b0135905083806105d3565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e5757508360019510610e3e575b505050811b01601155610d7c565b5f1960f88560031b161c19910135169055828080610e30565b90926020600181928686013581550194019101610e1e565b60115f52610eb8907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ebe575b601f0160051c01906115e8565b82610d4c565b9091508190610eab565b34610133575f600319360112610133576020600954604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610133575f600319360112610133576020600f54604051908152f35b34610133575f600319360112610133576020600554604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610133575f600319360112610133576020600c54604051908152f35b34610133575f600319360112610133576020600754604051908152f35b346101335760206003193601126101335760043567ffffffffffffffff811161013357610fef90369060040161141f565b61101173ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff81116107755761102f8161060b600b54611386565b5f91601f821160011461109f5761107c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91611094575b505f198260011b9260031b1c19161790565b600b555b61108f60405192839283611670565b0390a1005b90508301358661106a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110611127575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7951061110e575b5050600182811b01600b55611080565b5f1960f88560031b161c199083013516905583806110fe565b838601358355602095860195600190930192016110cc565b346101335760206003193601126101335760043567ffffffffffffffff81116101335761117090369060040161141f565b61119273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff8111610775576111b0816105b0600a54611386565b5f91601f821160011461120e576111fc82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f9161109457505f198260011b9260031b1c19161790565b600a5561108f60405192839283611670565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110611296575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061127d575b5050600182811b01600a55611080565b5f1960f88560031b161c1990830135169055838061126d565b8386013583556020958601956001909301920161123b565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610133575f600319360112610133576040515f600b5461130181611386565b80845290600181169081156102bf5750600114611328576101f8836101e4818503826113d7565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061136c575090915081016020016101e4610251565b919260018160209254838588010152019101909291611354565b90600182811c921680156113cd575b60208310146113a057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611395565b90601f601f19910116810190811067ffffffffffffffff82111761077557604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f840112156101335782359167ffffffffffffffff8311610133576020838186019501011161013357565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013357565b81601f820112156101335780359067ffffffffffffffff821161077557604051926114a56020601f19601f86011601856113d7565b8284526020838301011161013357815f926020809301838601378301015290565b6011545f92916114d582611386565b808252916001811690811561154957506001146114f0575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b83831061152f575060209250010190565b60018160209294939454838587010152019101919061151e565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b1561158a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b8181106115f3575050565b5f81556001016115e8565b90601f821161160b575050565b61163691600a5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b565b90601f8211611645575050565b61163691600b5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561169e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661171d811515611697565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd + ///0x60808060405234601557613577908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a261303291604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f61303238819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36118798181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b03811184821017610144576040928492612b2d84396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206118595f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b6040516117aa90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118595f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461130957806318b5ce81146112d657806329080356146111675780634b8be3f714610fe657806357d1ba2514610fc95780636c31cc4014610fac5780636edd6c0914610f7957806385e1f4d014610f5c5780638703b40a14610f3f5780638da5cb5b14610f0d578063a3c6e1e714610ef0578063a52145f214610cd3578063aa6a43d814610ca0578063b51646a614610c83578063bc8ff19c14610c66578063bf6db6f814610c33578063bf79fd1c14610329578063c7a7609514610241578063d1f4737c14610224578063f0ecc3c5146101e2578063f2fde38b1461017c578063f8a144be1461015f578063f8acb811146101425763ffa1ad7414610121575f80fd5b3461013e575f60031936011261013e576020604051620f42408152f35b5f80fd5b3461013e575f60031936011261013e576020600e54604051908152f35b3461013e575f60031936011261013e576020600654604051908152f35b3461013e57602060031936011261013e576101e0610198611475565b6101ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b6101db73ffffffffffffffffffffffffffffffffffffffff821615156116bf565b611724565b005b3461013e575f60031936011261013e5761022060405161020c81610205816114ee565b03826113ff565b604051918291602083526020830190611422565b0390f35b3461013e575f60031936011261013e576020600854604051908152f35b3461013e575f60031936011261013e576040515f600a54610261816113ae565b80845290600181169081156102e75750600114610289575b6102208361020c818503826113ff565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102cd5750909150810160200161020c610279565b9192600181602092548385880101520191019092916102b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061020c9050610279565b3461013e5761018060031936011261013e57610343611475565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff841680940361013e5760843573ffffffffffffffffffffffffffffffffffffffff811680910361013e5760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013e57610124359173ffffffffffffffffffffffffffffffffffffffff831680930361013e576101443567ffffffffffffffff811161013e576103f2903690600401611498565b966101643567ffffffffffffffff811161013e57610414903690600401611498565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c2b575b6001149081610c21575b159081610c18575b50610bf0578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b9b575b5073ffffffffffffffffffffffffffffffffffffffff881615610b3d578015610adf578115610a5b5782156109d75783156109535784156108cf57851561084b576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161079d576105dd816105d8600a546113ae565b611626565b602094601f82116001146107ca5761060e9293949582915f9261070b575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161079d5761063882610633600b546113ae565b611660565b602090601f831160011461071657918061066a9261067295945f9261070b5750505f198260011b9260031b1c19161790565b600b55611724565b61067857005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105fb565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061078557509160019391856106729796941061076d575b505050811b01600b55611724565b01515f1960f88460031b161c1916905585808061075f565b92936020600181928786015181550195019301610745565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106108335750836001959697981061081b575b505050811b01600a55610612565b01515f1960f88460031b161c1916905585808061080d565b919260206001819286850151815501940192016107f8565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6104ba565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c610467565b303b15915061045f565b8b9150610455565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b3461013e575f60031936011261013e576020601054604051908152f35b3461013e575f60031936011261013e576020600d54604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b3461013e5761010060031936011261013e5760e43567ffffffffffffffff811161013e57610d05903690600401611447565b610d2773ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161079d57610d6b6011546113ae565b601f8111610e97575b505f601f8211600114610e18578190610da0935f92610e0d5750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610e0860a082016114ee565b0390a4005b0135905083806105fb565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e7f57508360019510610e66575b505050811b01601155610da4565b5f1960f88560031b161c19910135169055828080610e58565b90926020600181928686013581550194019101610e46565b60115f52610ee0907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ee6575b601f0160051c0190611610565b82610d74565b9091508190610ed3565b3461013e575f60031936011261013e576020600954604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013e575f60031936011261013e576020600f54604051908152f35b3461013e575f60031936011261013e576020600554604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461013e575f60031936011261013e576020600c54604051908152f35b3461013e575f60031936011261013e576020600754604051908152f35b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611017903690600401611447565b61103973ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d5761105781610633600b546113ae565b5f91601f82116001146110c7576110a482807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f916110bc575b505f198260011b9260031b1c19161790565b600b555b6110b760405192839283611698565b0390a1005b905083013586611092565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061114f575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611136575b5050600182811b01600b556110a8565b5f1960f88560031b161c19908301351690558380611126565b838601358355602095860195600190930192016110f4565b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611198903690600401611447565b6111ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d576111d8816105d8600a546113ae565b5f91601f82116001146112365761122482807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f916110bc57505f198260011b9260031b1c19161790565b600a556110b760405192839283611698565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106112be575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c95106112a5575b5050600182811b01600a556110a8565b5f1960f88560031b161c19908301351690558380611295565b83860135835560209586019560019093019201611263565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013e575f60031936011261013e576040515f600b54611329816113ae565b80845290600181169081156102e75750600114611350576102208361020c818503826113ff565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b8082106113945750909150810160200161020c610279565b91926001816020925483858801015201910190929161137c565b90600182811c921680156113f5575b60208310146113c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916113bd565b90601f601f19910116810190811067ffffffffffffffff82111761079d57604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561013e5782359167ffffffffffffffff831161013e576020838186019501011161013e57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013e57565b81601f8201121561013e5780359067ffffffffffffffff821161079d57604051926114cd6020601f19601f86011601856113ff565b8284526020838301011161013e57815f926020809301838601378301015290565b6011545f92916114fd826113ae565b80825291600181169081156115715750600114611518575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b838310611557575060209250010190565b600181602092949394548385870101520191019190611546565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b156115b257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b81811061161b575050565b5f8155600101611610565b90601f8211611633575050565b61165e91600a5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b565b90601f821161166d575050565b61165e91600b5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156116c657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166117458115156116bf565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80\x80`@R4`\x15Wa5O\x90\x81a\0\x1A\x829\xF3[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a0\n\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa0\n8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x18Q\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a+\x05\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x181_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\x82\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x181_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\xE1W\x80c\x18\xB5\xCE\x81\x14a\x12\xAEW\x80c)\x08\x03V\x14a\x11?W\x80cK\x8B\xE3\xF7\x14a\x0F\xBEW\x80cW\xD1\xBA%\x14a\x0F\xA1W\x80cl1\xCC@\x14a\x0F\x84W\x80cn\xDDl\t\x14a\x0FQW\x80c\x85\xE1\xF4\xD0\x14a\x0F4W\x80c\x87\x03\xB4\n\x14a\x0F\x17W\x80c\x8D\xA5\xCB[\x14a\x0E\xE5W\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xC8W\x80c\xA5!E\xF2\x14a\x0C\xABW\x80c\xAAjC\xD8\x14a\x0CxW\x80c\xB5\x16F\xA6\x14a\x0C[W\x80c\xBC\x8F\xF1\x9C\x14a\x0C>W\x80c\xBFm\xB6\xF8\x14a\x0C\x0BW\x80c\xBFy\xFD\x1C\x14a\x03\x01W\x80c\xC7\xA7`\x95\x14a\x02\x19W\x80c\xD1\xF4s|\x14a\x01\xFCW\x80c\xF0\xEC\xC3\xC5\x14a\x01\xBAW\x80c\xF2\xFD\xE3\x8B\x14a\x01TW\x80c\xF8\xA1D\xBE\x14a\x017Wc\xF8\xAC\xB8\x11\x14a\x01\x16W_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0ET`@Q\x90\x81R\xF3[_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x06T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013Wa\x01\xB8a\x01pa\x14MV[a\x01\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[a\x01\xB3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\x97V[a\x16\xFCV[\0[4a\x013W_`\x03\x196\x01\x12a\x013Wa\x01\xF8`@Qa\x01\xE4\x81a\x01\xDD\x81a\x14\xC6V[\x03\x82a\x13\xD7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x13\xFAV[\x03\x90\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x08T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\nTa\x029\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x02aW[a\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xA5WP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x8DV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xE4\x90Pa\x02QV[4a\x013Wa\x01\x80`\x03\x196\x01\x12a\x013Wa\x03\x1Ba\x14MV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x013W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x013Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xCA\x906\x90`\x04\x01a\x14pV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xEC\x906\x90`\x04\x01a\x14pV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C\x03W[`\x01\x14\x90\x81a\x0B\xF9W[\x15\x90\x81a\x0B\xF0W[Pa\x0B\xC8W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BsW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\x15W\x80\x15a\n\xB7W\x81\x15a\n3W\x82\x15a\t\xAFW\x83\x15a\t+W\x84\x15a\x08\xA7W\x85\x15a\x08#W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x05\xB5\x81a\x05\xB0`\nTa\x13\x86V[a\x15\xFEV[` \x94`\x1F\x82\x11`\x01\x14a\x07\xA2Wa\x05\xE6\x92\x93\x94\x95\x82\x91_\x92a\x06\xE3W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uWa\x06\x10\x82a\x06\x0B`\x0BTa\x13\x86V[a\x168V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xEEW\x91\x80a\x06B\x92a\x06J\x95\x94_\x92a\x06\xE3WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x16\xFCV[a\x06PW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xD3V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07]WP\x91`\x01\x93\x91\x85a\x06J\x97\x96\x94\x10a\x07EW[PPP\x81\x1B\x01`\x0BUa\x16\xFCV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x077V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07\x1DV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x08\x0BWP\x83`\x01\x95\x96\x97\x98\x10a\x07\xF3W[PPP\x81\x1B\x01`\nUa\x05\xEAV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\xE5V[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xD0V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x92V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04?V[0;\x15\x91Pa\x047V[\x8B\x91Pa\x04-V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x10T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\rT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x013Wa\x01\0`\x03\x196\x01\x12a\x013W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0C\xDD\x906\x90`\x04\x01a\x14\x1FV[a\x0C\xFFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\rC`\x11Ta\x13\x86V[`\x1F\x81\x11a\x0EoW[P_`\x1F\x82\x11`\x01\x14a\r\xF0W\x81\x90a\rx\x93_\x92a\r\xE5WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\r\xE0`\xA0\x82\x01a\x14\xC6V[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xD3V[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0EWWP\x83`\x01\x95\x10a\x0E>W[PPP\x81\x1B\x01`\x11Ua\r|V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0E0V[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0E\x1EV[`\x11_Ra\x0E\xB8\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xBEW[`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x82a\rLV[\x90\x91P\x81\x90a\x0E\xABV[4a\x013W_`\x03\x196\x01\x12a\x013W` `\tT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0FT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x05T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0CT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x07T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0F\xEF\x906\x90`\x04\x01a\x14\x1FV[a\x10\x11s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x10/\x81a\x06\x0B`\x0BTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x10\x9FWa\x10|\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\x94W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10jV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11'WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x11\x0EW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10\xFEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xCCV[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x11p\x906\x90`\x04\x01a\x14\x1FV[a\x11\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x11\xB0\x81a\x05\xB0`\nTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x12\x0EWa\x11\xFC\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\x94WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\x96WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12}W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12mV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12;V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\x0BTa\x13\x01\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x13(Wa\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13lWP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13TV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xCDW[` \x83\x10\x14a\x13\xA0WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\x95V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07uW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x013W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x013W` \x83\x81\x86\x01\x95\x01\x01\x11a\x013WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x013WV[\x81`\x1F\x82\x01\x12\x15a\x013W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uW`@Q\x92a\x14\xA5` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xD7V[\x82\x84R` \x83\x83\x01\x01\x11a\x013W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xD5\x82a\x13\x86V[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15IWP`\x01\x14a\x14\xF0WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15/WP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15\x1EV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\x8AWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x15\xF3WPPV[_\x81U`\x01\x01a\x15\xE8V[\x90`\x1F\x82\x11a\x16\x0BWPPV[a\x166\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[V[\x90`\x1F\x82\x11a\x16EWPPV[a\x166\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\x9EWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17\x1D\x81\x15\x15a\x16\x97V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", + b"`\x80\x80`@R4`\x15Wa5w\x90\x81a\0\x1A\x829\xF3[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a02\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa028\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x18y\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a+-\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x18Y_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\xAA\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x18Y_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x13\tW\x80c\x18\xB5\xCE\x81\x14a\x12\xD6W\x80c)\x08\x03V\x14a\x11gW\x80cK\x8B\xE3\xF7\x14a\x0F\xE6W\x80cW\xD1\xBA%\x14a\x0F\xC9W\x80cl1\xCC@\x14a\x0F\xACW\x80cn\xDDl\t\x14a\x0FyW\x80c\x85\xE1\xF4\xD0\x14a\x0F\\W\x80c\x87\x03\xB4\n\x14a\x0F?W\x80c\x8D\xA5\xCB[\x14a\x0F\rW\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xF0W\x80c\xA5!E\xF2\x14a\x0C\xD3W\x80c\xAAjC\xD8\x14a\x0C\xA0W\x80c\xB5\x16F\xA6\x14a\x0C\x83W\x80c\xBC\x8F\xF1\x9C\x14a\x0CfW\x80c\xBFm\xB6\xF8\x14a\x0C3W\x80c\xBFy\xFD\x1C\x14a\x03)W\x80c\xC7\xA7`\x95\x14a\x02AW\x80c\xD1\xF4s|\x14a\x02$W\x80c\xF0\xEC\xC3\xC5\x14a\x01\xE2W\x80c\xF2\xFD\xE3\x8B\x14a\x01|W\x80c\xF8\xA1D\xBE\x14a\x01_W\x80c\xF8\xAC\xB8\x11\x14a\x01BWc\xFF\xA1\xADt\x14a\x01!W_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `@Qb\x0FB@\x81R\xF3[_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0ET`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x06T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>Wa\x01\xE0a\x01\x98a\x14uV[a\x01\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[a\x01\xDBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\xBFV[a\x17$V[\0[4a\x01>W_`\x03\x196\x01\x12a\x01>Wa\x02 `@Qa\x02\x0C\x81a\x02\x05\x81a\x14\xEEV[\x03\x82a\x13\xFFV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\"V[\x03\x90\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x08T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\nTa\x02a\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x02\x89W[a\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xCDWP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\xB5V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x02\x0C\x90Pa\x02yV[4a\x01>Wa\x01\x80`\x03\x196\x01\x12a\x01>Wa\x03Ca\x14uV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x01>W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x01>Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x03\xF2\x906\x90`\x04\x01a\x14\x98V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x04\x14\x906\x90`\x04\x01a\x14\x98V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C+W[`\x01\x14\x90\x81a\x0C!W[\x15\x90\x81a\x0C\x18W[Pa\x0B\xF0W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0B\x9BW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B=W\x80\x15a\n\xDFW\x81\x15a\n[W\x82\x15a\t\xD7W\x83\x15a\tSW\x84\x15a\x08\xCFW\x85\x15a\x08KW`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x05\xDD\x81a\x05\xD8`\nTa\x13\xAEV[a\x16&V[` \x94`\x1F\x82\x11`\x01\x14a\x07\xCAWa\x06\x0E\x92\x93\x94\x95\x82\x91_\x92a\x07\x0BW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DWa\x068\x82a\x063`\x0BTa\x13\xAEV[a\x16`V[` \x90`\x1F\x83\x11`\x01\x14a\x07\x16W\x91\x80a\x06j\x92a\x06r\x95\x94_\x92a\x07\x0BWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x17$V[a\x06xW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xFBV[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x85WP\x91`\x01\x93\x91\x85a\x06r\x97\x96\x94\x10a\x07mW[PPP\x81\x1B\x01`\x0BUa\x17$V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07_V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07EV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x083WP\x83`\x01\x95\x96\x97\x98\x10a\x08\x1BW[PPP\x81\x1B\x01`\nUa\x06\x12V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x08\rV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xF8V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\xBAV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04gV[0;\x15\x91Pa\x04_V[\x8B\x91Pa\x04UV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x10T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\rT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01>Wa\x01\0`\x03\x196\x01\x12a\x01>W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\r\x05\x906\x90`\x04\x01a\x14GV[a\r's\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\rk`\x11Ta\x13\xAEV[`\x1F\x81\x11a\x0E\x97W[P_`\x1F\x82\x11`\x01\x14a\x0E\x18W\x81\x90a\r\xA0\x93_\x92a\x0E\rWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\x0E\x08`\xA0\x82\x01a\x14\xEEV[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xFBV[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0E\x7FWP\x83`\x01\x95\x10a\x0EfW[PPP\x81\x1B\x01`\x11Ua\r\xA4V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0EXV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0EFV[`\x11_Ra\x0E\xE0\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xE6W[`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x82a\rtV[\x90\x91P\x81\x90a\x0E\xD3V[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\tT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0FT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x05T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0CT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x07T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x10\x17\x906\x90`\x04\x01a\x14GV[a\x109s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x10W\x81a\x063`\x0BTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x10\xC7Wa\x10\xA4\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\xBCW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10\x92V[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11OWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x116W[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11&V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xF4V[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x11\x98\x906\x90`\x04\x01a\x14GV[a\x11\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x11\xD8\x81a\x05\xD8`\nTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x126Wa\x12$\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\xBCWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\xBEWP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12\xA5W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12\x95V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12cV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\x0BTa\x13)\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x13PWa\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13\x94WP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13|V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xF5W[` \x83\x10\x14a\x13\xC8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\xBDV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x9DW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x01>W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01>W` \x83\x81\x86\x01\x95\x01\x01\x11a\x01>WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01>WV[\x81`\x1F\x82\x01\x12\x15a\x01>W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DW`@Q\x92a\x14\xCD` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xFFV[\x82\x84R` \x83\x83\x01\x01\x11a\x01>W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xFD\x82a\x13\xAEV[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15qWP`\x01\x14a\x15\x18WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15WWP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15FV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\xB2WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x16\x1BWPPV[_\x81U`\x01\x01a\x16\x10V[\x90`\x1F\x82\x11a\x163WPPV[a\x16^\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[V[\x90`\x1F\x82\x11a\x16mWPPV[a\x16^\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\xC6WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17E\x81\x15\x15a\x16\xBFV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a261300a91604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f61300a38819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36118518181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b03811184821017610144576040928492612b0584396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206118315f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161178290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118315f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e146112e157806318b5ce81146112ae578063290803561461113f5780634b8be3f714610fbe57806357d1ba2514610fa15780636c31cc4014610f845780636edd6c0914610f5157806385e1f4d014610f345780638703b40a14610f175780638da5cb5b14610ee5578063a3c6e1e714610ec8578063a52145f214610cab578063aa6a43d814610c78578063b51646a614610c5b578063bc8ff19c14610c3e578063bf6db6f814610c0b578063bf79fd1c14610301578063c7a7609514610219578063d1f4737c146101fc578063f0ecc3c5146101ba578063f2fde38b14610154578063f8a144be146101375763f8acb81114610116575f80fd5b34610133575f600319360112610133576020600e54604051908152f35b5f80fd5b34610133575f600319360112610133576020600654604051908152f35b34610133576020600319360112610133576101b861017061144d565b61019273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b6101b373ffffffffffffffffffffffffffffffffffffffff82161515611697565b6116fc565b005b34610133575f600319360112610133576101f86040516101e4816101dd816114c6565b03826113d7565b6040519182916020835260208301906113fa565b0390f35b34610133575f600319360112610133576020600854604051908152f35b34610133575f600319360112610133576040515f600a5461023981611386565b80845290600181169081156102bf5750600114610261575b6101f8836101e4818503826113d7565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102a5575090915081016020016101e4610251565b91926001816020925483858801015201910190929161028d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101e49050610251565b34610133576101806003193601126101335761031b61144d565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036101335760843573ffffffffffffffffffffffffffffffffffffffff81168091036101335760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013357610124359173ffffffffffffffffffffffffffffffffffffffff8316809303610133576101443567ffffffffffffffff8111610133576103ca903690600401611470565b966101643567ffffffffffffffff8111610133576103ec903690600401611470565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c03575b6001149081610bf9575b159081610bf0575b50610bc8578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b73575b5073ffffffffffffffffffffffffffffffffffffffff881615610b15578015610ab7578115610a335782156109af57831561092b5784156108a7578515610823576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff8111610775576105b5816105b0600a54611386565b6115fe565b602094601f82116001146107a2576105e69293949582915f926106e3575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff8211610775576106108261060b600b54611386565b611638565b602090601f83116001146106ee5791806106429261064a95945f926106e35750505f198260011b9260031b1c19161790565b600b556116fc565b61065057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105d3565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061075d575091600193918561064a97969410610745575b505050811b01600b556116fc565b01515f1960f88460031b161c19169055858080610737565b9293602060018192878601518155019501930161071d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061080b575083600195969798106107f3575b505050811b01600a556105ea565b01515f1960f88460031b161c191690558580806107e5565b919260206001819286850151815501940192016107d0565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a610492565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c61043f565b303b159150610437565b8b915061042d565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b34610133575f600319360112610133576020601054604051908152f35b34610133575f600319360112610133576020600d54604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610133576101006003193601126101335760e43567ffffffffffffffff811161013357610cdd90369060040161141f565b610cff73ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161077557610d43601154611386565b601f8111610e6f575b505f601f8211600114610df0578190610d78935f92610de55750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610de060a082016114c6565b0390a4005b0135905083806105d3565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e5757508360019510610e3e575b505050811b01601155610d7c565b5f1960f88560031b161c19910135169055828080610e30565b90926020600181928686013581550194019101610e1e565b60115f52610eb8907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ebe575b601f0160051c01906115e8565b82610d4c565b9091508190610eab565b34610133575f600319360112610133576020600954604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610133575f600319360112610133576020600f54604051908152f35b34610133575f600319360112610133576020600554604051908152f35b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610133575f600319360112610133576020600c54604051908152f35b34610133575f600319360112610133576020600754604051908152f35b346101335760206003193601126101335760043567ffffffffffffffff811161013357610fef90369060040161141f565b61101173ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff81116107755761102f8161060b600b54611386565b5f91601f821160011461109f5761107c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91611094575b505f198260011b9260031b1c19161790565b600b555b61108f60405192839283611670565b0390a1005b90508301358661106a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110611127575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7951061110e575b5050600182811b01600b55611080565b5f1960f88560031b161c199083013516905583806110fe565b838601358355602095860195600190930192016110cc565b346101335760206003193601126101335760043567ffffffffffffffff81116101335761117090369060040161141f565b61119273ffffffffffffffffffffffffffffffffffffffff5f54163314611583565b67ffffffffffffffff8111610775576111b0816105b0600a54611386565b5f91601f821160011461120e576111fc82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f9161109457505f198260011b9260031b1c19161790565b600a5561108f60405192839283611670565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110611296575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061127d575b5050600182811b01600a55611080565b5f1960f88560031b161c1990830135169055838061126d565b8386013583556020958601956001909301920161123b565b34610133575f60031936011261013357602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610133575f600319360112610133576040515f600b5461130181611386565b80845290600181169081156102bf5750600114611328576101f8836101e4818503826113d7565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061136c575090915081016020016101e4610251565b919260018160209254838588010152019101909291611354565b90600182811c921680156113cd575b60208310146113a057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611395565b90601f601f19910116810190811067ffffffffffffffff82111761077557604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f840112156101335782359167ffffffffffffffff8311610133576020838186019501011161013357565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013357565b81601f820112156101335780359067ffffffffffffffff821161077557604051926114a56020601f19601f86011601856113d7565b8284526020838301011161013357815f926020809301838601378301015290565b6011545f92916114d582611386565b808252916001811690811561154957506001146114f0575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b83831061152f575060209250010190565b60018160209294939454838587010152019101919061151e565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b1561158a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b8181106115f3575050565b5f81556001016115e8565b90601f821161160b575050565b61163691600a5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b565b90601f8211611645575050565b61163691600b5f5260205f20906020601f840160051c83019310610ebe57601f0160051c01906115e8565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561169e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661171d811515611697565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd + ///0x60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a261303291604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f61303238819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36118798181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b03811184821017610144576040928492612b2d84396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206118595f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b6040516117aa90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206118595f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461130957806318b5ce81146112d657806329080356146111675780634b8be3f714610fe657806357d1ba2514610fc95780636c31cc4014610fac5780636edd6c0914610f7957806385e1f4d014610f5c5780638703b40a14610f3f5780638da5cb5b14610f0d578063a3c6e1e714610ef0578063a52145f214610cd3578063aa6a43d814610ca0578063b51646a614610c83578063bc8ff19c14610c66578063bf6db6f814610c33578063bf79fd1c14610329578063c7a7609514610241578063d1f4737c14610224578063f0ecc3c5146101e2578063f2fde38b1461017c578063f8a144be1461015f578063f8acb811146101425763ffa1ad7414610121575f80fd5b3461013e575f60031936011261013e576020604051620f42408152f35b5f80fd5b3461013e575f60031936011261013e576020600e54604051908152f35b3461013e575f60031936011261013e576020600654604051908152f35b3461013e57602060031936011261013e576101e0610198611475565b6101ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b6101db73ffffffffffffffffffffffffffffffffffffffff821615156116bf565b611724565b005b3461013e575f60031936011261013e5761022060405161020c81610205816114ee565b03826113ff565b604051918291602083526020830190611422565b0390f35b3461013e575f60031936011261013e576020600854604051908152f35b3461013e575f60031936011261013e576040515f600a54610261816113ae565b80845290600181169081156102e75750600114610289575b6102208361020c818503826113ff565b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b8082106102cd5750909150810160200161020c610279565b9192600181602092548385880101520191019092916102b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061020c9050610279565b3461013e5761018060031936011261013e57610343611475565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff841680940361013e5760843573ffffffffffffffffffffffffffffffffffffffff811680910361013e5760e43573ffffffffffffffffffffffffffffffffffffffff811680910361013e57610124359173ffffffffffffffffffffffffffffffffffffffff831680930361013e576101443567ffffffffffffffff811161013e576103f2903690600401611498565b966101643567ffffffffffffffff811161013e57610414903690600401611498565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610c2b575b6001149081610c21575b159081610c18575b50610bf0578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b9b575b5073ffffffffffffffffffffffffffffffffffffffff881615610b3d578015610adf578115610a5b5782156109d75783156109535784156108cf57851561084b576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161079d576105dd816105d8600a546113ae565b611626565b602094601f82116001146107ca5761060e9293949582915f9261070b575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161079d5761063882610633600b546113ae565b611660565b602090601f831160011461071657918061066a9261067295945f9261070b5750505f198260011b9260031b1c19161790565b600b55611724565b61067857005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b0151905086806105fb565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b81811061078557509160019391856106729796941061076d575b505050811b01600b55611724565b01515f1960f88460031b161c1916905585808061075f565b92936020600181928786015181550195019301610745565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106108335750836001959697981061081b575b505050811b01600a55610612565b01515f1960f88460031b161c1916905585808061080d565b919260206001819286850151815501940192016107f8565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6104ba565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c610467565b303b15915061045f565b8b9150610455565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b3461013e575f60031936011261013e576020601054604051908152f35b3461013e575f60031936011261013e576020600d54604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b3461013e5761010060031936011261013e5760e43567ffffffffffffffff811161013e57610d05903690600401611447565b610d2773ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b600435600855602435600955604435600c55606435600d55608435600e5560a435600f5560c43560105567ffffffffffffffff811161079d57610d6b6011546113ae565b601f8111610e97575b505f601f8211600114610e18578190610da0935f92610e0d5750505f198260011b9260031b1c19161790565b6011555b60085460095490600c547f807e8088430ce7c504e4dfbb498f90ecd3e8b8657d633be82ac2bd92bb497932600d5492600e5493600f54906010549660405193845260208401526040830152606082015260a0608082015280610e0860a082016114ee565b0390a4005b0135905083806105fb565b601f1982169260115f527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68915f5b858110610e7f57508360019510610e66575b505050811b01601155610da4565b5f1960f88560031b161c19910135169055828080610e58565b90926020600181928686013581550194019101610e46565b60115f52610ee0907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68601f840160051c81019160208510610ee6575b601f0160051c0190611610565b82610d74565b9091508190610ed3565b3461013e575f60031936011261013e576020600954604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013e575f60031936011261013e576020600f54604051908152f35b3461013e575f60031936011261013e576020600554604051908152f35b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461013e575f60031936011261013e576020600c54604051908152f35b3461013e575f60031936011261013e576020600754604051908152f35b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611017903690600401611447565b61103973ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d5761105781610633600b546113ae565b5f91601f82116001146110c7576110a482807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f916110bc575b505f198260011b9260031b1c19161790565b600b555b6110b760405192839283611698565b0390a1005b905083013586611092565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061114f575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611136575b5050600182811b01600b556110a8565b5f1960f88560031b161c19908301351690558380611126565b838601358355602095860195600190930192016110f4565b3461013e57602060031936011261013e5760043567ffffffffffffffff811161013e57611198903690600401611447565b6111ba73ffffffffffffffffffffffffffffffffffffffff5f541633146115ab565b67ffffffffffffffff811161079d576111d8816105d8600a546113ae565b5f91601f82116001146112365761122482807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f916110bc57505f198260011b9260031b1c19161790565b600a556110b760405192839283611698565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106112be575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c95106112a5575b5050600182811b01600a556110a8565b5f1960f88560031b161c19908301351690558380611295565b83860135835560209586019560019093019201611263565b3461013e575f60031936011261013e57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013e575f60031936011261013e576040515f600b54611329816113ae565b80845290600181169081156102e75750600114611350576102208361020c818503826113ff565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b8082106113945750909150810160200161020c610279565b91926001816020925483858801015201910190929161137c565b90600182811c921680156113f5575b60208310146113c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916113bd565b90601f601f19910116810190811067ffffffffffffffff82111761079d57604052565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561013e5782359167ffffffffffffffff831161013e576020838186019501011161013e57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013e57565b81601f8201121561013e5780359067ffffffffffffffff821161079d57604051926114cd6020601f19601f86011601856113ff565b8284526020838301011161013e57815f926020809301838601378301015290565b6011545f92916114fd826113ae565b80825291600181169081156115715750600114611518575050565b60115f9081529293509091907f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b838310611557575060209250010190565b600181602092949394548385870101520191019190611546565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b156115b257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b81811061161b575050565b5f8155600101611610565b90601f8211611633575050565b61165e91600a5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b565b90601f821161166d575050565b61165e91600b5f5260205f20906020601f840160051c83019310610ee657601f0160051c0190611610565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156116c657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166117458115156116bf565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a0\n\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa0\n8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x18Q\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a+\x05\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x181_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\x82\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x181_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\xE1W\x80c\x18\xB5\xCE\x81\x14a\x12\xAEW\x80c)\x08\x03V\x14a\x11?W\x80cK\x8B\xE3\xF7\x14a\x0F\xBEW\x80cW\xD1\xBA%\x14a\x0F\xA1W\x80cl1\xCC@\x14a\x0F\x84W\x80cn\xDDl\t\x14a\x0FQW\x80c\x85\xE1\xF4\xD0\x14a\x0F4W\x80c\x87\x03\xB4\n\x14a\x0F\x17W\x80c\x8D\xA5\xCB[\x14a\x0E\xE5W\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xC8W\x80c\xA5!E\xF2\x14a\x0C\xABW\x80c\xAAjC\xD8\x14a\x0CxW\x80c\xB5\x16F\xA6\x14a\x0C[W\x80c\xBC\x8F\xF1\x9C\x14a\x0C>W\x80c\xBFm\xB6\xF8\x14a\x0C\x0BW\x80c\xBFy\xFD\x1C\x14a\x03\x01W\x80c\xC7\xA7`\x95\x14a\x02\x19W\x80c\xD1\xF4s|\x14a\x01\xFCW\x80c\xF0\xEC\xC3\xC5\x14a\x01\xBAW\x80c\xF2\xFD\xE3\x8B\x14a\x01TW\x80c\xF8\xA1D\xBE\x14a\x017Wc\xF8\xAC\xB8\x11\x14a\x01\x16W_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0ET`@Q\x90\x81R\xF3[_\x80\xFD[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x06T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013Wa\x01\xB8a\x01pa\x14MV[a\x01\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[a\x01\xB3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\x97V[a\x16\xFCV[\0[4a\x013W_`\x03\x196\x01\x12a\x013Wa\x01\xF8`@Qa\x01\xE4\x81a\x01\xDD\x81a\x14\xC6V[\x03\x82a\x13\xD7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x13\xFAV[\x03\x90\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x08T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\nTa\x029\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x02aW[a\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xA5WP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x8DV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xE4\x90Pa\x02QV[4a\x013Wa\x01\x80`\x03\x196\x01\x12a\x013Wa\x03\x1Ba\x14MV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x013W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x013Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x013Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xCA\x906\x90`\x04\x01a\x14pV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x03\xEC\x906\x90`\x04\x01a\x14pV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C\x03W[`\x01\x14\x90\x81a\x0B\xF9W[\x15\x90\x81a\x0B\xF0W[Pa\x0B\xC8W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BsW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\x15W\x80\x15a\n\xB7W\x81\x15a\n3W\x82\x15a\t\xAFW\x83\x15a\t+W\x84\x15a\x08\xA7W\x85\x15a\x08#W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x05\xB5\x81a\x05\xB0`\nTa\x13\x86V[a\x15\xFEV[` \x94`\x1F\x82\x11`\x01\x14a\x07\xA2Wa\x05\xE6\x92\x93\x94\x95\x82\x91_\x92a\x06\xE3W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uWa\x06\x10\x82a\x06\x0B`\x0BTa\x13\x86V[a\x168V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xEEW\x91\x80a\x06B\x92a\x06J\x95\x94_\x92a\x06\xE3WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x16\xFCV[a\x06PW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xD3V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07]WP\x91`\x01\x93\x91\x85a\x06J\x97\x96\x94\x10a\x07EW[PPP\x81\x1B\x01`\x0BUa\x16\xFCV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x077V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07\x1DV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x08\x0BWP\x83`\x01\x95\x96\x97\x98\x10a\x07\xF3W[PPP\x81\x1B\x01`\nUa\x05\xEAV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\xE5V[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xD0V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x92V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04?V[0;\x15\x91Pa\x047V[\x8B\x91Pa\x04-V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x10T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\rT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x013Wa\x01\0`\x03\x196\x01\x12a\x013W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0C\xDD\x906\x90`\x04\x01a\x14\x1FV[a\x0C\xFFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\rC`\x11Ta\x13\x86V[`\x1F\x81\x11a\x0EoW[P_`\x1F\x82\x11`\x01\x14a\r\xF0W\x81\x90a\rx\x93_\x92a\r\xE5WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\r\xE0`\xA0\x82\x01a\x14\xC6V[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xD3V[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0EWWP\x83`\x01\x95\x10a\x0E>W[PPP\x81\x1B\x01`\x11Ua\r|V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0E0V[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0E\x1EV[`\x11_Ra\x0E\xB8\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xBEW[`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x82a\rLV[\x90\x91P\x81\x90a\x0E\xABV[4a\x013W_`\x03\x196\x01\x12a\x013W` `\tT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0FT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x05T`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x0CT`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W` `\x07T`@Q\x90\x81R\xF3[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x0F\xEF\x906\x90`\x04\x01a\x14\x1FV[a\x10\x11s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x10/\x81a\x06\x0B`\x0BTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x10\x9FWa\x10|\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\x94W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10jV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11'WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x11\x0EW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10\xFEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xCCV[4a\x013W` `\x03\x196\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x013Wa\x11p\x906\x90`\x04\x01a\x14\x1FV[a\x11\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07uWa\x11\xB0\x81a\x05\xB0`\nTa\x13\x86V[_\x91`\x1F\x82\x11`\x01\x14a\x12\x0EWa\x11\xFC\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\x94WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\x8F`@Q\x92\x83\x92\x83a\x16pV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\x96WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12}W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\x80V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12mV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12;V[4a\x013W_`\x03\x196\x01\x12a\x013W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x013W_`\x03\x196\x01\x12a\x013W`@Q_`\x0BTa\x13\x01\x81a\x13\x86V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xBFWP`\x01\x14a\x13(Wa\x01\xF8\x83a\x01\xE4\x81\x85\x03\x82a\x13\xD7V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13lWP\x90\x91P\x81\x01` \x01a\x01\xE4a\x02QV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13TV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xCDW[` \x83\x10\x14a\x13\xA0WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\x95V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07uW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x013W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x013W` \x83\x81\x86\x01\x95\x01\x01\x11a\x013WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x013WV[\x81`\x1F\x82\x01\x12\x15a\x013W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07uW`@Q\x92a\x14\xA5` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xD7V[\x82\x84R` \x83\x83\x01\x01\x11a\x013W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xD5\x82a\x13\x86V[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15IWP`\x01\x14a\x14\xF0WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15/WP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15\x1EV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\x8AWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x15\xF3WPPV[_\x81U`\x01\x01a\x15\xE8V[\x90`\x1F\x82\x11a\x16\x0BWPPV[a\x166\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[V[\x90`\x1F\x82\x11a\x16EWPPV[a\x166\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xBEW`\x1F\x01`\x05\x1C\x01\x90a\x15\xE8V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\x9EWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17\x1D\x81\x15\x15a\x16\x97V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a02\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa028\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x18y\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a+-\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x18Y_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x17\xAA\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x18Y_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x13\tW\x80c\x18\xB5\xCE\x81\x14a\x12\xD6W\x80c)\x08\x03V\x14a\x11gW\x80cK\x8B\xE3\xF7\x14a\x0F\xE6W\x80cW\xD1\xBA%\x14a\x0F\xC9W\x80cl1\xCC@\x14a\x0F\xACW\x80cn\xDDl\t\x14a\x0FyW\x80c\x85\xE1\xF4\xD0\x14a\x0F\\W\x80c\x87\x03\xB4\n\x14a\x0F?W\x80c\x8D\xA5\xCB[\x14a\x0F\rW\x80c\xA3\xC6\xE1\xE7\x14a\x0E\xF0W\x80c\xA5!E\xF2\x14a\x0C\xD3W\x80c\xAAjC\xD8\x14a\x0C\xA0W\x80c\xB5\x16F\xA6\x14a\x0C\x83W\x80c\xBC\x8F\xF1\x9C\x14a\x0CfW\x80c\xBFm\xB6\xF8\x14a\x0C3W\x80c\xBFy\xFD\x1C\x14a\x03)W\x80c\xC7\xA7`\x95\x14a\x02AW\x80c\xD1\xF4s|\x14a\x02$W\x80c\xF0\xEC\xC3\xC5\x14a\x01\xE2W\x80c\xF2\xFD\xE3\x8B\x14a\x01|W\x80c\xF8\xA1D\xBE\x14a\x01_W\x80c\xF8\xAC\xB8\x11\x14a\x01BWc\xFF\xA1\xADt\x14a\x01!W_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `@Qb\x0FB@\x81R\xF3[_\x80\xFD[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0ET`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x06T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>Wa\x01\xE0a\x01\x98a\x14uV[a\x01\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[a\x01\xDBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x16\xBFV[a\x17$V[\0[4a\x01>W_`\x03\x196\x01\x12a\x01>Wa\x02 `@Qa\x02\x0C\x81a\x02\x05\x81a\x14\xEEV[\x03\x82a\x13\xFFV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\"V[\x03\x90\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x08T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\nTa\x02a\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x02\x89W[a\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\xCDWP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\xB5V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x02\x0C\x90Pa\x02yV[4a\x01>Wa\x01\x80`\x03\x196\x01\x12a\x01>Wa\x03Ca\x14uV[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\x01>W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01>Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x01>Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x03\xF2\x906\x90`\x04\x01a\x14\x98V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x04\x14\x906\x90`\x04\x01a\x14\x98V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0C+W[`\x01\x14\x90\x81a\x0C!W[\x15\x90\x81a\x0C\x18W[Pa\x0B\xF0W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0B\x9BW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B=W\x80\x15a\n\xDFW\x81\x15a\n[W\x82\x15a\t\xD7W\x83\x15a\tSW\x84\x15a\x08\xCFW\x85\x15a\x08KW`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x05\xDD\x81a\x05\xD8`\nTa\x13\xAEV[a\x16&V[` \x94`\x1F\x82\x11`\x01\x14a\x07\xCAWa\x06\x0E\x92\x93\x94\x95\x82\x91_\x92a\x07\x0BW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DWa\x068\x82a\x063`\x0BTa\x13\xAEV[a\x16`V[` \x90`\x1F\x83\x11`\x01\x14a\x07\x16W\x91\x80a\x06j\x92a\x06r\x95\x94_\x92a\x07\x0BWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x17$V[a\x06xW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\xFBV[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x85WP\x91`\x01\x93\x91\x85a\x06r\x97\x96\x94\x10a\x07mW[PPP\x81\x1B\x01`\x0BUa\x17$V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07_V[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x07EV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x083WP\x83`\x01\x95\x96\x97\x98\x10a\x08\x1BW[PPP\x81\x1B\x01`\nUa\x06\x12V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x08\rV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\xF8V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\xBAV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x04gV[0;\x15\x91Pa\x04_V[\x8B\x91Pa\x04UV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x10T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\rT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01>Wa\x01\0`\x03\x196\x01\x12a\x01>W`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\r\x05\x906\x90`\x04\x01a\x14GV[a\r's\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[`\x045`\x08U`$5`\tU`D5`\x0CU`d5`\rU`\x845`\x0EU`\xA45`\x0FU`\xC45`\x10Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\rk`\x11Ta\x13\xAEV[`\x1F\x81\x11a\x0E\x97W[P_`\x1F\x82\x11`\x01\x14a\x0E\x18W\x81\x90a\r\xA0\x93_\x92a\x0E\rWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x11U[`\x08T`\tT\x90`\x0CT\x7F\x80~\x80\x88C\x0C\xE7\xC5\x04\xE4\xDF\xBBI\x8F\x90\xEC\xD3\xE8\xB8e}c;\xE8*\xC2\xBD\x92\xBBIy2`\rT\x92`\x0ET\x93`\x0FT\x90`\x10T\x96`@Q\x93\x84R` \x84\x01R`@\x83\x01R``\x82\x01R`\xA0`\x80\x82\x01R\x80a\x0E\x08`\xA0\x82\x01a\x14\xEEV[\x03\x90\xA4\0[\x015\x90P\x83\x80a\x05\xFBV[`\x1F\x19\x82\x16\x92`\x11_R\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch\x91_[\x85\x81\x10a\x0E\x7FWP\x83`\x01\x95\x10a\x0EfW[PPP\x81\x1B\x01`\x11Ua\r\xA4V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\x0EXV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x0EFV[`\x11_Ra\x0E\xE0\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E\xE6W[`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x82a\rtV[\x90\x91P\x81\x90a\x0E\xD3V[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\tT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0FT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x05T`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x0CT`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W` `\x07T`@Q\x90\x81R\xF3[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x10\x17\x906\x90`\x04\x01a\x14GV[a\x109s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x10W\x81a\x063`\x0BTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x10\xC7Wa\x10\xA4\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x10\xBCW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x10\x92V[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x11OWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x116W[PP`\x01\x82\x81\x1B\x01`\x0BUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11&V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\xF4V[4a\x01>W` `\x03\x196\x01\x12a\x01>W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01>Wa\x11\x98\x906\x90`\x04\x01a\x14GV[a\x11\xBAs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x15\xABV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x9DWa\x11\xD8\x81a\x05\xD8`\nTa\x13\xAEV[_\x91`\x1F\x82\x11`\x01\x14a\x126Wa\x12$\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x10\xBCWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x10\xB7`@Q\x92\x83\x92\x83a\x16\x98V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x12\xBEWP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x12\xA5W[PP`\x01\x82\x81\x1B\x01`\nUa\x10\xA8V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x12\x95V[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x12cV[4a\x01>W_`\x03\x196\x01\x12a\x01>W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01>W_`\x03\x196\x01\x12a\x01>W`@Q_`\x0BTa\x13)\x81a\x13\xAEV[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02\xE7WP`\x01\x14a\x13PWa\x02 \x83a\x02\x0C\x81\x85\x03\x82a\x13\xFFV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x13\x94WP\x90\x91P\x81\x01` \x01a\x02\x0Ca\x02yV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x13|V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x13\xF5W[` \x83\x10\x14a\x13\xC8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x13\xBDV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x9DW`@RV[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x81`\x1F\x84\x01\x12\x15a\x01>W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01>W` \x83\x81\x86\x01\x95\x01\x01\x11a\x01>WV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01>WV[\x81`\x1F\x82\x01\x12\x15a\x01>W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x9DW`@Q\x92a\x14\xCD` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x13\xFFV[\x82\x84R` \x83\x83\x01\x01\x11a\x01>W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x11T_\x92\x91a\x14\xFD\x82a\x13\xAEV[\x80\x82R\x91`\x01\x81\x16\x90\x81\x15a\x15qWP`\x01\x14a\x15\x18WPPV[`\x11_\x90\x81R\x92\x93P\x90\x91\x90\x7F1\xEC\xC2\x1At^9h\xA0N\x95p\xE4B[\xC1\x8F\xA8\x01\x9Ch\x02\x81\x96\xB5F\xD1f\x9C \x0Ch[\x83\x83\x10a\x15WWP` \x92P\x01\x01\x90V[`\x01\x81` \x92\x94\x93\x94T\x83\x85\x87\x01\x01R\x01\x91\x01\x91\x90a\x15FV[` \x94\x95P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x92\x91\x92\x16\x83\x83\x01R\x15\x15`\x05\x1B\x01\x01\x90V[\x15a\x15\xB2WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x16\x1BWPPV[_\x81U`\x01\x01a\x16\x10V[\x90`\x1F\x82\x11a\x163WPPV[a\x16^\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[V[\x90`\x1F\x82\x11a\x16mWPPV[a\x16^\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E\xE6W`\x1F\x01`\x05\x1C\x01\x90a\x16\x10V[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x16\xC6WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x17E\x81\x15\x15a\x16\xBFV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] diff --git a/shared/contract-bindings/src/synd/erc1967_proxy.rs b/shared/contract-bindings/src/synd/erc1967_proxy.rs new file mode 100644 index 000000000..39b1df500 --- /dev/null +++ b/shared/contract-bindings/src/synd/erc1967_proxy.rs @@ -0,0 +1,1183 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface ERC1967Proxy { + error AddressEmptyCode(address target); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + + event Upgraded(address indexed implementation); + + constructor(address implementation, bytes _data) payable; + + fallback() external payable; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod ERC1967Proxy { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60806040526102728038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516057908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffd + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@Ra\x02r\x808\x03\x80a\0\x14\x81a\x01hV[\x92\x839\x81\x01`@\x82\x82\x03\x12a\x01dW\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x92\x90\x91\x90\x83\x83\x03a\x01dW` \x81\x01Q\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01dW\x01\x92\x81`\x1F\x85\x01\x12\x15a\x01dW\x83Qa\0na\0i\x82a\x01\xA1V[a\x01hV[\x94\x81\x86R` \x86\x01\x93` \x83\x83\x01\x01\x11a\x01dW\x81_\x92` \x80\x93\x01\x86^\x86\x01\x01R\x82;\x15a\x01RW\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x82Q\x15a\x01:W_\x80\x91a\x01\"\x94Q\x90\x84Z\xF4=\x15a\x012W=\x91a\x01\x13a\0i\x84a\x01\xA1V[\x92\x83R=_` \x85\x01>a\x01\xBCV[P[`@Q`W\x90\x81a\x02\x1B\x829\xF3[``\x91a\x01\xBCV[PPP4\x15a\x01$Wc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_R`\x04R`$_\xFD[_\x80\xFD[`@Q\x91\x90`\x1F\x01`\x1F\x19\x16\x82\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01\x8DW`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`\x01`\x01`@\x1B\x03\x81\x11a\x01\x8DW`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x01\xE0WP\x80Q\x15a\x01\xD1W\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x02\x11W[a\x01\xF1WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x01\xE9V\xFE`\x80`@R_\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x166\x82\x807\x816\x91Z\xF4=_\x80>\x15`SW=_\xF3[=_\xFD", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffd + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@R_\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x166\x82\x807\x816\x91Z\xF4=_\x80>\x15`SW=_\xF3[=_\xFD", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + /**Constructor`. +```solidity +constructor(address implementation, bytes _data) payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _data: alloy::sol_types::private::Bytes, + } + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value.implementation, value._data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + implementation: tuple.0, + _data: tuple.1, + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ::tokenize( + &self._data, + ), + ) + } + } + }; + ///Container for all the [`ERC1967Proxy`](self) custom errors. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum ERC1967ProxyErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + } + impl ERC1967ProxyErrors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 189u8, 162u8, 117u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(ERC1967InvalidImplementation), + ::core::stringify!(AddressEmptyCode), + ::core::stringify!(ERC1967NonPayable), + ::core::stringify!(FailedCall), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for ERC1967ProxyErrors { + const NAME: &'static str = "ERC1967ProxyErrors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 4usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(ERC1967ProxyErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(ERC1967ProxyErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(ERC1967ProxyErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(ERC1967ProxyErrors::FailedCall) + } + FailedCall + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::FailedCall) + } + FailedCall + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + ///Container for all the [`ERC1967Proxy`](self) events. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum ERC1967ProxyEvents { + #[allow(missing_docs)] + Upgraded(Upgraded), + } + impl ERC1967ProxyEvents { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(Upgraded), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for ERC1967ProxyEvents { + const NAME: &'static str = "ERC1967ProxyEvents"; + const COUNT: usize = 1usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for ERC1967ProxyEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`ERC1967Proxy`](self) contract instance. + +See the [wrapper's documentation](`ERC1967ProxyInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> ERC1967ProxyInstance { + ERC1967ProxyInstance::::new(address, __provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + ERC1967ProxyInstance::::deploy(__provider, implementation, _data) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::RawCallBuilder { + ERC1967ProxyInstance::::deploy_builder(__provider, implementation, _data) + } + /**A [`ERC1967Proxy`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`ERC1967Proxy`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct ERC1967ProxyInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for ERC1967ProxyInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("ERC1967ProxyInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > ERC1967ProxyInstance { + /**Creates a new wrapper around an on-chain [`ERC1967Proxy`](self) contract instance. + +See the [wrapper's documentation](`ERC1967ProxyInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> Self { + Self { + address, + provider: __provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + __provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(__provider, implementation, _data); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder( + __provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + __provider, + [ + &BYTECODE[..], + &alloy_sol_types::SolConstructor::abi_encode( + &constructorCall { + implementation, + _data, + }, + )[..], + ] + .concat() + .into(), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl ERC1967ProxyInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> ERC1967ProxyInstance { + ERC1967ProxyInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > ERC1967ProxyInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + } + /// Event filters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > ERC1967ProxyInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/contract-bindings/src/synd/gas_aggregator.rs b/shared/contract-bindings/src/synd/gas_aggregator.rs index abec0c10c..6d19bdbb2 100644 --- a/shared/contract-bindings/src/synd/gas_aggregator.rs +++ b/shared/contract-bindings/src/synd/gas_aggregator.rs @@ -28,7 +28,7 @@ interface GasAggregator { event Unpaused(address account); event UpdateMaxAppchainsToQuery(uint256 indexed epoch, uint256 maxAppchainsToQuery); - constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); + constructor(address _gasMeterContract, uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); function EPOCH_DURATION() external view returns (uint256); function GAS_AGGREGATOR_STORAGE_LOCATION() external view returns (bytes32); @@ -36,19 +36,22 @@ interface GasAggregator { function VERSION() external view returns (uint256); function addChain(uint256 chainId) external payable; function addChainFee() external view returns (uint256); - function addLegacyChain(uint256 chainId, address chainContract) external; + function adminAddChain(uint256 chainId, address chainContract, bool isLegacy) external; function aggregateTokens(uint256[] memory prevChainIds, uint256[] memory prevTokens) external; function aggregatedEpochDataHash(uint256 epoch) external view returns (bytes32); function appchainContract(uint256 chainId) external view returns (address); function currentAggregateIndex() external view returns (uint256); function currentEpoch() external view returns (uint256); function factory() external view returns (address); + function gasMeterContract() external view returns (address); + function getAppchainGasUsed(uint256 epoch, uint256 chainId) external view returns (uint256); function getCurrentEpoch() external view returns (uint256); function getEpochEnd(uint256 epochIndex) external pure returns (uint256); function getEpochStart(uint256 epochIndex) external pure returns (uint256); function getTrackedChainCount() external view returns (uint256); function getTrackedChainId(uint256 index) external view returns (uint256); function getTrackedChainIds() external view returns (uint256[] memory chainIDs); + function isLegacyAppchainContract(uint256 chainId) external view returns (bool); function maxAppchainsToQuery() external view returns (uint256); function owner() external view returns (address); function pause() external; @@ -73,6 +76,11 @@ interface GasAggregator { { "type": "constructor", "inputs": [ + { + "name": "_gasMeterContract", + "type": "address", + "internalType": "address" + }, { "name": "_epoch", "type": "uint256", @@ -171,7 +179,7 @@ interface GasAggregator { }, { "type": "function", - "name": "addLegacyChain", + "name": "adminAddChain", "inputs": [ { "name": "chainId", @@ -182,6 +190,11 @@ interface GasAggregator { "name": "chainContract", "type": "address", "internalType": "address" + }, + { + "name": "isLegacy", + "type": "bool", + "internalType": "bool" } ], "outputs": [], @@ -282,6 +295,43 @@ interface GasAggregator { ], "stateMutability": "view" }, + { + "type": "function", + "name": "gasMeterContract", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAppchainGasUsed", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "getCurrentEpoch", @@ -378,6 +428,25 @@ interface GasAggregator { ], "stateMutability": "view" }, + { + "type": "function", + "name": "isLegacyAppchainContract", + "inputs": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "maxAppchainsToQuery", @@ -899,22 +968,22 @@ pub mod GasAggregator { /// The creation / init bytecode of the contract. /// /// ```text - ///0x6080346100e457601f611dac38819003918201601f19168301916001600160401b038311848410176100fb578084926060946040528339810103126100e457805190604060208201519101519033156100e8575f8054604051949133906001600160a01b038316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a81b0319163360ff60a01b1916175f5580156100e45760075580600455156100d3575b80600355156100c9575b611c9c90816101108239f35b60646003556100bd565b674563918244f400006004556100b3565b5f80fd5b631e4fbdf760e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630175e23b1461023457806310ffc6261461022f57806316aa7e931461022a578063177b0072146102255780632f9183ba1461022057806331211e791461021b5780633b43ddad146102165780633f4ba83a146102115780634a61aef21461020c5780635c975abb14610207578063715018a61461020257806376671808146101fd578063781cd99d146101f8578063822942c6146101f35780638456cb59146101ee5780638da5cb5b146101e957806395f65bb4146101e45780639b783e5f146101df578063a5522371146101da578063a70b9f0c146101d5578063ab47c700146101d0578063ad3b1b47146101cb578063b97dd9e2146101c6578063bc467a93146101c1578063bdd5b880146101bc578063c45a0155146101b7578063c9cfea88146101b2578063ce2fd1ff146101ad578063d5176d23146101a8578063d99faf00146101a3578063f2fde38b1461019e578063f3ae210814610199578063fd8c75d2146101945763ffa1ad741461018f575f80fd5b610fb0565b610e46565b610d33565b610c61565b610c04565b610bbd565b610b68565b610b4b565b610b18565b610ac0565b610a40565b610a0a565b610962565b610945565b610928565b6108ee565b6108d1565b61081c565b6107cc565b610743565b6106b0565b61065f565b610642565b6105c6565b6105a2565b610585565b61050b565b6104ee565b61049a565b61045a565b61043d565b61033c565b6102c2565b346102be5760206003193601126102be576004358015610296575f1981019081116102915762278d0081029080820462278d0014901517156102915763688d46f0018063688d46f0116102915760405190815280602081015b0390f35b610fcd565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346102be5760206003193601126102be576004355f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa0600602052602060405f2054604051908152f35b9181601f840112156102be5782359167ffffffffffffffff83116102be576020808501948460051b0101116102be57565b346102be5760206003193601126102be5760043567ffffffffffffffff81116102be5761036d90369060040161030b565b9061037661180b565b61037e611857565b5f5b82811061038957005b61039d610397828585611041565b35611ac3565b156103df576001906007546103b3828686611041565b35907f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a301610380565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f617070636861696e206973206e6f7420747261636b65640000000000000000006044820152fd5b346102be575f6003193601126102be576020600954604051908152f35b346102be5760206003193601126102be576004355f52600a602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346102be5760206003193601126102be577f7bbf02cf0aebb3279d2b6bfd126efefa6a864dce57ef88326569b4b5ac3ebb0760406004356104d961180b565b600454908060045582519182526020820152a1005b346102be575f6003193601126102be576020600254604051908152f35b346102be575f6003193601126102be5761052361180b565b5f6009555f6008556105336119d1565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b346102be575f6003193601126102be576020600354604051908152f35b346102be575f6003193601126102be57602060ff5f5460a01c166040519015158152f35b346102be575f6003193601126102be576105de61180b565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102be575f6003193601126102be576020600754604051908152f35b346102be575f6003193601126102be57602060405163688d46f08152f35b90602080835192838152019201905f5b81811061069a5750505090565b825184526020938401939092019160010161068d565b346102be5760606003193601126102be5760043560243567ffffffffffffffff81116102be576106e490369060040161030b565b91906044359167ffffffffffffffff83116102be5761028d9361070e61071694369060040161030b565b9390926111c0565b610735604094929451948594855260606020860152606085019061067d565b90838203604085015261067d565b346102be575f6003193601126102be5761075b61180b565b610763611857565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102be575f6003193601126102be57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b73ffffffffffffffffffffffffffffffffffffffff8116036102be57565b346102be5760406003193601126102be57600435610839816107fe565b6024359061084561180b565b73ffffffffffffffffffffffffffffffffffffffff6001549161086a828416156113f6565b169081156108a9577fffffffffffffffffffffffff00000000000000000000000000000000000000009061089f8415156110b7565b1617600155600255005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102be575f6003193601126102be576020600554604051908152f35b346102be575f6003193601126102be5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b346102be575f6003193601126102be57602060405162278d008152f35b346102be575f6003193601126102be576020600454604051908152f35b346102be5760406003193601126102be5760043561097f816107fe565b73ffffffffffffffffffffffffffffffffffffffff602435916109a061180b565b169081156108a95780610a04575047905b4782116109d3575f80806109d19481945af16109cb611425565b50611464565b005b5047907ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b906109b1565b346102be575f6003193601126102be576020610a246114c9565b604051908152f35b906020610a3d92818152019061067d565b90565b346102be575f6003193601126102be5760405180602060055491828152019060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f5b818110610aaa5761028d85610a9e81870382611113565b60405191829182610a2c565b8254845260209093019260019283019201610a87565b346102be5760206003193601126102be57600435610adc61180b565b610ae4611857565b806003557fd9c745b4039588378fde0c745b993bfb39a2569c80e1ed73d70d4e281000ddd1602060075492604051908152a2005b346102be575f6003193601126102be57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102be575f6003193601126102be576020600854604051908152f35b346102be5760206003193601126102be57600435600554811015610bb85760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00154604051908152602090f35b611014565b346102be5760206003193601126102be5760043562278d0081029080820462278d0014901517156102915763688d46f0018063688d46f01161029157602090604051908152f35b346102be5760406003193601126102be5760043567ffffffffffffffff81116102be57610c3590369060040161030b565b6024359167ffffffffffffffff83116102be57610c596109d193369060040161030b565b929091611590565b346102be5760206003193601126102be5773ffffffffffffffffffffffffffffffffffffffff600435610c93816107fe565b610c9b61180b565b168015610d075773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b346102be5760406003193601126102be57602435600435610d53826107fe565b610d5b61180b565b610d63611857565b610d8573ffffffffffffffffffffffffffffffffffffffff60015416156113f6565b610d90811515611708565b610da281610d9d81611c22565b611737565b610daf81833b151561176a565b805f52600a602052610dff8260405f209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60075473ffffffffffffffffffffffffffffffffffffffff604051931683527fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f60203394a4005b60206003193601126102be57600435610e5d611857565b610e97610e7e5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b3314610fa057610ead60045434908034146117d4565b610eb8811515611708565b610ec581610d9d81611c22565b610ef1600254610eea60015473ffffffffffffffffffffffffffffffffffffffff1690565b9083611a08565b90610eff81833b151561176a565b610f5582610f15835f52600a60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60075460405173ffffffffffffffffffffffffffffffffffffffff93909316835233927fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f90602090a4005b610fab34341561179d565b610ead565b346102be575f6003193601126102be576020604051620f42408152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820391821161029157565b9190820180921161029157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610bb85760051b0190565b1561105a575050565b7ff562b22b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b1561108f57565b7fefcb5a01000000000000000000000000000000000000000000000000000000005f5260045ffd5b156110be57565b7fee3e17dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761113657604052565b6110e6565b67ffffffffffffffff81116111365760051b60200190565b9061115d8261113b565b61116a6040519182611113565b828152601f1961117a829461113b565b0190602036910137565b8051821015610bb85760209160051b010190565b908160209103126102be575190565b6040513d5f823e3d90fd5b5f1981146102915760010190565b949192935f956111ce6114c9565b6111de6007549182808211611051565b6111ea82600554610ffa565b916111f6831515611088565b600354948386106113e1575b879461120f818a146110b7565b82156113d2575b908493929161122f61122a8998978c611007565b611153565b9a61123d61122a878d611007565b9a5f5b81811061138d5750505050505f5b8381106112745750505050808652808552116112675750565b6112729083856118e7565b565b90919293945061128c6112878284611007565b611b64565b6112c1610e7e610e7e6112a7845f52600a60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b90602060405180937f0c67236300000000000000000000000000000000000000000000000000000000825281806113008a600483019190602083019252565b03915afa918215611388575f92611358575b508a8261132b575b50505060010190859493929161124e565b91879161133e6001959961134f95611184565b52611349828c611184565b526111b2565b94905f8a61131a565b61137a91925060203d8111611381575b6113728183611113565b810190611198565b905f611312565b503d611368565b6111a7565b849596979899508d6113b0826113a9818660019798999a611041565b3592611184565b528c6113c1826113a9818989611041565b520190899897969594939291611240565b6113dc89156110b7565b611216565b98508492506113f08382611007565b98611202565b156113fd57565b7f154c51b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b3d1561145f573d9067ffffffffffffffff821161113657604051916114546020601f19601f8401160184611113565b82523d5f602084013e565b606090565b1561146b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116102915762278d009004600181018091116102915790565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102be5760209260051b809284830137010190565b929061155d90610a3d9593604086526040860191611507565b926020818503910152611507565b9091611582610a3d9360408452604084019061067d565b91602081840391015261067d565b916115bc93916115b493600954155f146116d3576115ac611960565b6009546111c0565b929091600955565b6115ec60405160208101906115e4816115d687878661156b565b03601f198101835282611113565b519020600855565b6009548061168857506116809161167b916008546116336007545f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060060205260405f2090565b5561163d5f600855565b7f6be7edcdfd5ab714759c91366ce1ec48cf00cffc17ef0f102b83cb66344d7f976007549283926116736040519283928361156b565b0390a26111b2565b600755565b61127261188d565b9150507f2a92a957e4cbebe0fa56130e3c3fcbcda51934049cc83f15d0de5aeddb23dc0a6116ce6116be60075493600554610ffa565b6040519081529081906020820190565b0390a2565b6116db6119d1565b61170360085460405160208101906116fa816115d68a8a8a8a88611544565b519020146110b7565b6115ac565b1561170f57565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561173f5750565b7f83ad7459000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b156117725750565b7f4a7f43fa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b156117a55750565b7ff05eb608000000000000000000000000000000000000000000000000000000005f525f60045260245260445ffd5b156117dd575050565b7ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361182b57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff5f5460a01c1661186557565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b6118956119d1565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1565b8051825180911480611956575b156102be5790839160208085019160051b8501019060208460051b86010191858403915b83821161192757505050505252565b909192939450611938838383611b98565b908482101561194e57505b908694939291611918565b915090611943565b50808411156118f4565b611968611857565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1565b60ff5f5460a01c16156119e057565b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b60559173ffffffffffffffffffffffffffffffffffffffff93600b92604051926040840152602083015281520160ff8153201690565b8054821015610bb8575f5260205f2001905f90565b91611a6c918354905f199060031b92831b921b19161790565b9055565b80548015611a96575f190190611a868282611a3e565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81815260066020526040902054908115611b5e575f1982019082821161029157600554925f1984019384116102915783835f95611b1d9503611b23575b505050611b0e6005611a70565b6006905f5260205260405f2090565b55600190565b611b0e611b4f91611b45611b3b611b55956005611a3e565b90549060031b1c90565b9283916005611a3e565b90611a53565b555f8080611b01565b50505f90565b600554811015610bb85760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0015490565b91601f1982840160061c60051b519301925b5f60015b15611bc3575b5060205f940193845190611bae565b818111611bb45790939291925f60015b15611bec575b50601f199290920180519092905f611bd3565b858110611bd95790949193929384861015611c1a579085528352838201805183850180519092529052611baa565b505050505090565b805f52600660205260405f2054155f14611c9757600554680100000000000000008110156111365760018101600555600554811015610bb8577f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018190556005545f9182526006602052604090912055600190565b505f9056 + ///0x60a03461010d57601f611fb338819003918201601f19168301916001600160401b038311848410176101245780849260809460405283398101031261010d578051906001600160a01b038216820361010d5760208101519060606040820151910151913315610111575f8054604051959133906001600160a01b038316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a81b0319163360ff60a01b1916175f55811561010d5760805260075580600455156100fc575b80600355156100f2575b611e7a90816101398239608051818181610e7a01526112ae0152f35b60646003556100d6565b674563918244f400006004556100cc565b5f80fd5b631e4fbdf760e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630175e23b1461026457806310ffc6261461025f57806316aa7e931461025a578063177b0072146102555780632f9183ba1461025057806331211e791461024b5780633aae7d24146102465780633b43ddad146102415780633d9e82211461023c5780633f4ba83a146102375780634a61aef2146102325780635c975abb1461022d578063715018a6146102285780637667180814610223578063781cd99d1461021e57806381f0ebde14610219578063822942c6146102145780638456cb591461020f5780638da5cb5b1461020a57806395f65bb4146102055780639b783e5f14610200578063a5522371146101fb578063a70b9f0c146101f6578063ab47c700146101f1578063ad3b1b47146101ec578063b97dd9e2146101e7578063bc467a93146101e2578063bdd5b880146101dd578063c45a0155146101d8578063c9cfea88146101d3578063ce2fd1ff146101ce578063d5176d23146101c9578063d99faf00146101c4578063e63d30d5146101bf578063f2fde38b146101ba578063fd8c75d2146101b55763ffa1ad74146101b0575f80fd5b6110da565b610f70565b610e9e565b610e4e565b610df1565b610daa565b610d55565b610d38565b610d05565b610cad565b610c2d565b610bff565b610b57565b610b3a565b610b1d565b610ae3565b610ac6565b6109da565b6109a8565b61091f565b61088c565b610723565b6106e7565b6106ca565b61064e565b61062a565b61060d565b610593565b610564565b610547565b61051e565b6104ca565b61048a565b61046d565b61036c565b6102f2565b346102ee5760206003193601126102ee5760043580156102c6575f1981019081116102c15762278d0081029080820462278d0014901517156102c15763688d46f0018063688d46f0116102c15760405190815280602081015b0390f35b6110f7565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346102ee5760206003193601126102ee576004355f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa0600602052602060405f2054604051908152f35b9181601f840112156102ee5782359167ffffffffffffffff83116102ee576020808501948460051b0101116102ee57565b346102ee5760206003193601126102ee5760043567ffffffffffffffff81116102ee5761039d90369060040161033b565b906103a66119e9565b6103ae611a35565b5f5b8281106103b957005b6103cd6103c782858561116b565b35611ca1565b1561040f576001906007546103e382868661116b565b35907f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3016103b0565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f617070636861696e206973206e6f7420747261636b65640000000000000000006044820152fd5b346102ee575f6003193601126102ee576020600954604051908152f35b346102ee5760206003193601126102ee576004355f52600a602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346102ee5760206003193601126102ee577f7bbf02cf0aebb3279d2b6bfd126efefa6a864dce57ef88326569b4b5ac3ebb0760406004356105096119e9565b600454908060045582519182526020820152a1005b346102ee5760406003193601126102ee57602061053f6024356004356111ea565b604051908152f35b346102ee575f6003193601126102ee576020600254604051908152f35b346102ee5760206003193601126102ee576004355f52600b602052602060ff60405f2054166040519015158152f35b346102ee575f6003193601126102ee576105ab6119e9565b5f6009555f6008556105bb611baf565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b346102ee575f6003193601126102ee576020600354604051908152f35b346102ee575f6003193601126102ee57602060ff5f5460a01c166040519015158152f35b346102ee575f6003193601126102ee576106666119e9565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102ee575f6003193601126102ee576020600754604051908152f35b346102ee575f6003193601126102ee57602060405163688d46f08152f35b73ffffffffffffffffffffffffffffffffffffffff8116036102ee57565b346102ee5760606003193601126102ee5760243560043561074382610705565b6044358015158091036102ee576107586119e9565b610760611a35565b61076b82151561137e565b61077882843b15156113ad565b61078a8261078581611d42565b6113e0565b815f52600a6020526107da8360405f209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b815f52600b60205260405f209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911617905560075473ffffffffffffffffffffffffffffffffffffffff604051931683527fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f60203394a4005b90602080835192838152019201905f5b8181106108765750505090565b8251845260209384019390920191600101610869565b346102ee5760606003193601126102ee5760043560243567ffffffffffffffff81116102ee576108c090369060040161033b565b91906044359167ffffffffffffffff83116102ee576102bd936108ea6108f294369060040161033b565b939092611513565b6109116040949294519485948552606060208601526060850190610859565b908382036040850152610859565b346102ee575f6003193601126102ee576109376119e9565b61093f611a35565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102ee575f6003193601126102ee57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346102ee5760406003193601126102ee576004356109f781610705565b60243590610a036119e9565b6001549073ffffffffffffffffffffffffffffffffffffffff8216610a9e5773ffffffffffffffffffffffffffffffffffffffff16908115610a76577fffffffffffffffffffffffff000000000000000000000000000000000000000090610a6c841515611479565b1617600155600255005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f154c51b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102ee575f6003193601126102ee576020600554604051908152f35b346102ee575f6003193601126102ee5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b346102ee575f6003193601126102ee57602060405162278d008152f35b346102ee575f6003193601126102ee576020600454604051908152f35b346102ee5760406003193601126102ee57600435610b7481610705565b73ffffffffffffffffffffffffffffffffffffffff60243591610b956119e9565b16908115610a765780610bf9575047905b478211610bc8575f8080610bc69481945af1610bc0611698565b506116d7565b005b5047907ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b90610ba6565b346102ee575f6003193601126102ee57602061053f61173c565b906020610c2a928181520190610859565b90565b346102ee575f6003193601126102ee5760405180602060055491828152019060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f5b818110610c97576102bd85610c8b818703826111a8565b60405191829182610c19565b8254845260209093019260019283019201610c74565b346102ee5760206003193601126102ee57600435610cc96119e9565b610cd1611a35565b806003557fd9c745b4039588378fde0c745b993bfb39a2569c80e1ed73d70d4e281000ddd1602060075492604051908152a2005b346102ee575f6003193601126102ee57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102ee575f6003193601126102ee576020600854604051908152f35b346102ee5760206003193601126102ee57600435600554811015610da55760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00154604051908152602090f35b61113e565b346102ee5760206003193601126102ee5760043562278d0081029080820462278d0014901517156102c15763688d46f0018063688d46f0116102c157602090604051908152f35b346102ee5760406003193601126102ee5760043567ffffffffffffffff81116102ee57610e2290369060040161033b565b6024359167ffffffffffffffff83116102ee57610e46610bc693369060040161033b565b929091611803565b346102ee575f6003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102ee5760206003193601126102ee5773ffffffffffffffffffffffffffffffffffffffff600435610ed081610705565b610ed86119e9565b168015610f445773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b60206003193601126102ee57600435610f87611a35565b610fc1610fa85f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b33146110ca57610fd760045434908034146119b2565b610fe281151561137e565b610fef8161078581611d42565b61101b60025461101460015473ffffffffffffffffffffffffffffffffffffffff1690565b9083611be6565b9061102981833b15156113ad565b61107f8261103f835f52600a60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60075460405173ffffffffffffffffffffffffffffffffffffffff93909316835233927fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f90602090a4005b6110d534341561197b565b610fd7565b346102ee575f6003193601126102ee576020604051620f46288152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b919082039182116102c157565b919082018092116102c157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610da55760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff8211176111cb57604052565b61117b565b908160209103126102ee575190565b6040513d5f823e3d90fd5b90611207611200825f52600b60205260405f2090565b5460ff1690565b61130f57611295916112406112266020935f52600a60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fb2fe22d5000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff16602482015291829081906044820190565b038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561130a575f916112e1575090565b610c2a915060203d602011611303575b6112fb81836111a8565b8101906111d0565b503d6112f1565b6111df565b61136991611330610fa8610fa86112266020955f52600a60205260405f2090565b60405180809581947f0c672363000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa90811561130a575f916112e1575090565b1561138557565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b156113b55750565b7f4a7f43fa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b156113e85750565b7f83ad7459000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b1561141c575050565b7ff562b22b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b1561145157565b7fefcb5a01000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561148057565b7fee3e17dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff81116111cb5760051b60200190565b906114ca826114a8565b6114d760405191826111a8565b828152601f196114e782946114a8565b0190602036910137565b8051821015610da55760209160051b010190565b5f1981146102c15760010190565b949192935f9561152161173c565b6115316007549182808211611413565b61153d82600554611124565b9161154983151561144a565b60035494838610611683575b8794611562818a14611479565b8215611674575b908493929161158261157d8998978c611131565b6114c0565b9a61159061157d878d611131565b9a5f5b81811061162f5750505050505f5b8381106115c75750505050808652808552116115ba5750565b6115c5908385611ac5565b565b9091929394506115df6115da8284611131565b611dbc565b6115e981856111ea565b908a82611602575b5050506001019085949392916115a1565b91879161161560019599611626956114f1565b52611620828c6114f1565b52611505565b94905f8a6115f1565b849596979899508d6116528261164b818660019798999a61116b565b35926114f1565b528c6116638261164b81898961116b565b520190899897969594939291611593565b61167e8915611479565b611569565b98508492506116928382611131565b98611555565b3d156116d2573d9067ffffffffffffffff82116111cb57604051916116c76020601f19601f84011601846111a8565b82523d5f602084013e565b606090565b156116de57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116102c15762278d009004600181018091116102c15790565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102ee5760209260051b809284830137010190565b92906117d090610c2a959360408652604086019161177a565b92602081850391015261177a565b90916117f5610c2a93604084526040840190610859565b916020818403910152610859565b9161182f939161182793600954155f146119465761181f611b3e565b600954611513565b929091600955565b61185f6040516020810190611857816118498787866117de565b03601f1981018352826111a8565b519020600855565b600954806118fb57506118f3916118ee916008546118a66007545f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060060205260405f2090565b556118b05f600855565b7f6be7edcdfd5ab714759c91366ce1ec48cf00cffc17ef0f102b83cb66344d7f976007549283926118e6604051928392836117de565b0390a2611505565b600755565b6115c5611a6b565b9150507f2a92a957e4cbebe0fa56130e3c3fcbcda51934049cc83f15d0de5aeddb23dc0a61194161193160075493600554611124565b6040519081529081906020820190565b0390a2565b61194e611baf565b611976600854604051602081019061196d816118498a8a8a8a886117b7565b51902014611479565b61181f565b156119835750565b7ff05eb608000000000000000000000000000000000000000000000000000000005f525f60045260245260445ffd5b156119bb575050565b7ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303611a0957565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff5f5460a01c16611a4357565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b611a73611baf565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1565b8051825180911480611b34575b156102ee5790839160208085019160051b8501019060208460051b86010191858403915b838211611b0557505050505252565b909192939450611b16838383611df0565b9084821015611b2c57505b908694939291611af6565b915090611b21565b5080841115611ad2565b611b46611a35565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1565b60ff5f5460a01c1615611bbe57565b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b60559173ffffffffffffffffffffffffffffffffffffffff93600b92604051926040840152602083015281520160ff8153201690565b8054821015610da5575f5260205f2001905f90565b91611c4a918354905f199060031b92831b921b19161790565b9055565b80548015611c74575f190190611c648282611c1c565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81815260066020526040902054908115611d3c575f198201908282116102c157600554925f1984019384116102c15783835f95611cfb9503611d01575b505050611cec6005611c4e565b6006905f5260205260405f2090565b55600190565b611cec611d2d91611d23611d19611d33956005611c1c565b90549060031b1c90565b9283916005611c1c565b90611c31565b555f8080611cdf565b50505f90565b805f52600660205260405f2054155f14611db757600554680100000000000000008110156111cb5760018101600555600554811015610da5577f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018190556005545f9182526006602052604090912055600190565b505f90565b600554811015610da55760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0015490565b91601f1982840160061c60051b519301925b5f60015b15611e1b575b5060205f940193845190611e06565b818111611e0c5790939291925f60015b15611e44575b50601f199290920180519092905f611e2b565b858110611e315790949193929384861015611e72579085528352838201805183850180519092529052611e02565b50505050509056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x804a\0\xE4W`\x1Fa\x1D\xAC8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\0\xFBW\x80\x84\x92``\x94`@R\x839\x81\x01\x03\x12a\0\xE4W\x80Q\x90`@` \x82\x01Q\x91\x01Q\x903\x15a\0\xE8W_\x80T`@Q\x94\x913\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3`\x01`\x01`\xA8\x1B\x03\x19\x163`\xFF`\xA0\x1B\x19\x16\x17_U\x80\x15a\0\xE4W`\x07U\x80`\x04U\x15a\0\xD3W[\x80`\x03U\x15a\0\xC9W[a\x1C\x9C\x90\x81a\x01\x10\x829\xF3[`d`\x03Ua\0\xBDV[gEc\x91\x82D\xF4\0\0`\x04Ua\0\xB3V[_\x80\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x024W\x80c\x10\xFF\xC6&\x14a\x02/W\x80c\x16\xAA~\x93\x14a\x02*W\x80c\x17{\0r\x14a\x02%W\x80c/\x91\x83\xBA\x14a\x02 W\x80c1!\x1Ey\x14a\x02\x1BW\x80c;C\xDD\xAD\x14a\x02\x16W\x80c?K\xA8:\x14a\x02\x11W\x80cJa\xAE\xF2\x14a\x02\x0CW\x80c\\\x97Z\xBB\x14a\x02\x07W\x80cqP\x18\xA6\x14a\x02\x02W\x80cvg\x18\x08\x14a\x01\xFDW\x80cx\x1C\xD9\x9D\x14a\x01\xF8W\x80c\x82)B\xC6\x14a\x01\xF3W\x80c\x84V\xCBY\x14a\x01\xEEW\x80c\x8D\xA5\xCB[\x14a\x01\xE9W\x80c\x95\xF6[\xB4\x14a\x01\xE4W\x80c\x9Bx>_\x14a\x01\xDFW\x80c\xA5R#q\x14a\x01\xDAW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xD5W\x80c\xABG\xC7\0\x14a\x01\xD0W\x80c\xAD;\x1BG\x14a\x01\xCBW\x80c\xB9}\xD9\xE2\x14a\x01\xC6W\x80c\xBCFz\x93\x14a\x01\xC1W\x80c\xBD\xD5\xB8\x80\x14a\x01\xBCW\x80c\xC4Z\x01U\x14a\x01\xB7W\x80c\xC9\xCF\xEA\x88\x14a\x01\xB2W\x80c\xCE/\xD1\xFF\x14a\x01\xADW\x80c\xD5\x17m#\x14a\x01\xA8W\x80c\xD9\x9F\xAF\0\x14a\x01\xA3W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x9EW\x80c\xF3\xAE!\x08\x14a\x01\x99W\x80c\xFD\x8Cu\xD2\x14a\x01\x94Wc\xFF\xA1\xADt\x14a\x01\x8FW_\x80\xFD[a\x0F\xB0V[a\x0EFV[a\r3V[a\x0CaV[a\x0C\x04V[a\x0B\xBDV[a\x0BhV[a\x0BKV[a\x0B\x18V[a\n\xC0V[a\n@V[a\n\nV[a\tbV[a\tEV[a\t(V[a\x08\xEEV[a\x08\xD1V[a\x08\x1CV[a\x07\xCCV[a\x07CV[a\x06\xB0V[a\x06_V[a\x06BV[a\x05\xC6V[a\x05\xA2V[a\x05\x85V[a\x05\x0BV[a\x04\xEEV[a\x04\x9AV[a\x04ZV[a\x04=V[a\x03\xBB\x07`@`\x045a\x04\xD9a\x18\x0BV[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05#a\x18\x0BV[_`\tU_`\x08Ua\x053a\x19\xD1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05\xDEa\x18\x0BV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qch\x8DF\xF0\x81R\xF3[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x06\x9AWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x06\x8DV[4a\x02\xBEW```\x03\x196\x01\x12a\x02\xBEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x06\xE4\x906\x90`\x04\x01a\x03\x0BV[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x02\x8D\x93a\x07\x0Ea\x07\x16\x946\x90`\x04\x01a\x03\x0BV[\x93\x90\x92a\x11\xC0V[a\x075`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x06}V[\x90\x83\x82\x03`@\x85\x01Ra\x06}V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x07[a\x18\x0BV[a\x07ca\x18WV[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xBEWV[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\x089\x81a\x07\xFEV[`$5\x90a\x08Ea\x18\x0BV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x91a\x08j\x82\x84\x16\x15a\x13\xF6V[\x16\x90\x81\x15a\x08\xA9W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x08\x9F\x84\x15\x15a\x10\xB7V[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\t\x7F\x81a\x07\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\t\xA0a\x18\x0BV[\x16\x90\x81\x15a\x08\xA9W\x80a\n\x04WPG\x90[G\x82\x11a\t\xD3W_\x80\x80a\t\xD1\x94\x81\x94Z\xF1a\t\xCBa\x14%V[Pa\x14dV[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\t\xB1V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` a\n$a\x14\xC9V[`@Q\x90\x81R\xF3[\x90` a\n=\x92\x81\x81R\x01\x90a\x06}V[\x90V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW`@Q\x80` `\x05T\x91\x82\x81R\x01\x90`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x90_[\x81\x81\x10a\n\xAAWa\x02\x8D\x85a\n\x9E\x81\x87\x03\x82a\x11\x13V[`@Q\x91\x82\x91\x82a\n,V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\n\x87V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045a\n\xDCa\x18\x0BV[a\n\xE4a\x18WV[\x80`\x03U\x7F\xD9\xC7E\xB4\x03\x95\x887\x8F\xDE\x0Ct[\x99;\xFB9\xA2V\x9C\x80\xE1\xEDs\xD7\rN(\x10\0\xDD\xD1` `\x07T\x92`@Q\x90\x81R\xA2\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x08T`@Q\x90\x81R\xF3[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T`@Q\x90\x81R` \x90\xF3[a\x10\x14V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\x91Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\x91W` \x90`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x0C5\x906\x90`\x04\x01a\x03\x0BV[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x0CYa\t\xD1\x936\x90`\x04\x01a\x03\x0BV[\x92\x90\x91a\x15\x90V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0C\x93\x81a\x07\xFEV[a\x0C\x9Ba\x18\x0BV[\x16\x80\x15a\r\x07Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`$5`\x045a\rS\x82a\x07\xFEV[a\r[a\x18\x0BV[a\rca\x18WV[a\r\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16\x15a\x13\xF6V[a\r\x90\x81\x15\x15a\x17\x08V[a\r\xA2\x81a\r\x9D\x81a\x1C\"V[a\x177V[a\r\xAF\x81\x83;\x15\x15a\x17jV[\x80_R`\n` Ra\r\xFF\x82`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[` `\x03\x196\x01\x12a\x02\xBEW`\x045a\x0E]a\x18WV[a\x0E\x97a\x0E~_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x0F\xA0Wa\x0E\xAD`\x04T4\x90\x804\x14a\x17\xD4V[a\x0E\xB8\x81\x15\x15a\x17\x08V[a\x0E\xC5\x81a\r\x9D\x81a\x1C\"V[a\x0E\xF1`\x02Ta\x0E\xEA`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1A\x08V[\x90a\x0E\xFF\x81\x83;\x15\x15a\x17jV[a\x0FU\x82a\x0F\x15\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x0F\xAB44\x15a\x17\x9DV[a\x0E\xADV[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\x91WV[\x91\x90\x82\x01\x80\x92\x11a\x02\x91WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x0B\xB8W`\x05\x1B\x01\x90V[\x15a\x10ZWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x10\x8FWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x10\xBEWV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x116W`@RV[a\x10\xE6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x116W`\x05\x1B` \x01\x90V[\x90a\x11]\x82a\x11;V[a\x11j`@Q\x91\x82a\x11\x13V[\x82\x81R`\x1F\x19a\x11z\x82\x94a\x11;V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\x0B\xB8W` \x91`\x05\x1B\x01\x01\x90V[\x90\x81` \x91\x03\x12a\x02\xBEWQ\x90V[`@Q=_\x82>=\x90\xFD[_\x19\x81\x14a\x02\x91W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x11\xCEa\x14\xC9V[a\x11\xDE`\x07T\x91\x82\x80\x82\x11a\x10QV[a\x11\xEA\x82`\x05Ta\x0F\xFAV[\x91a\x11\xF6\x83\x15\x15a\x10\x88V[`\x03T\x94\x83\x86\x10a\x13\xE1W[\x87\x94a\x12\x0F\x81\x8A\x14a\x10\xB7V[\x82\x15a\x13\xD2W[\x90\x84\x93\x92\x91a\x12/a\x12*\x89\x98\x97\x8Ca\x10\x07V[a\x11SV[\x9Aa\x12=a\x12*\x87\x8Da\x10\x07V[\x9A_[\x81\x81\x10a\x13\x8DWPPPPP_[\x83\x81\x10a\x12tWPPPP\x80\x86R\x80\x85R\x11a\x12gWPV[a\x12r\x90\x83\x85a\x18\xE7V[V[\x90\x91\x92\x93\x94Pa\x12\x8Ca\x12\x87\x82\x84a\x10\x07V[a\x1BdV[a\x12\xC1a\x0E~a\x0E~a\x12\xA7\x84_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90` `@Q\x80\x93\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R\x81\x80a\x13\0\x8A`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x91\x82\x15a\x13\x88W_\x92a\x13XW[P\x8A\x82a\x13+W[PPP`\x01\x01\x90\x85\x94\x93\x92\x91a\x12NV[\x91\x87\x91a\x13>`\x01\x95\x99a\x13O\x95a\x11\x84V[Ra\x13I\x82\x8Ca\x11\x84V[Ra\x11\xB2V[\x94\x90_\x8Aa\x13\x1AV[a\x13z\x91\x92P` =\x81\x11a\x13\x81W[a\x13r\x81\x83a\x11\x13V[\x81\x01\x90a\x11\x98V[\x90_a\x13\x12V[P=a\x13hV[a\x11\xA7V[\x84\x95\x96\x97\x98\x99P\x8Da\x13\xB0\x82a\x13\xA9\x81\x86`\x01\x97\x98\x99\x9Aa\x10AV[5\x92a\x11\x84V[R\x8Ca\x13\xC1\x82a\x13\xA9\x81\x89\x89a\x10AV[R\x01\x90\x89\x98\x97\x96\x95\x94\x93\x92\x91a\x12@V[a\x13\xDC\x89\x15a\x10\xB7V[a\x12\x16V[\x98P\x84\x92Pa\x13\xF0\x83\x82a\x10\x07V[\x98a\x12\x02V[\x15a\x13\xFDWV[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[=\x15a\x14_W=\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x116W`@Q\x91a\x14T` `\x1F\x19`\x1F\x84\x01\x16\x01\x84a\x11\x13V[\x82R=_` \x84\x01>V[``\x90V[\x15a\x14kWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\x91Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\x91W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x15]\x90a\n=\x95\x93`@\x86R`@\x86\x01\x91a\x15\x07V[\x92` \x81\x85\x03\x91\x01Ra\x15\x07V[\x90\x91a\x15\x82a\n=\x93`@\x84R`@\x84\x01\x90a\x06}V[\x91` \x81\x84\x03\x91\x01Ra\x06}V[\x91a\x15\xBC\x93\x91a\x15\xB4\x93`\tT\x15_\x14a\x16\xD3Wa\x15\xACa\x19`V[`\tTa\x11\xC0V[\x92\x90\x91`\tUV[a\x15\xEC`@Q` \x81\x01\x90a\x15\xE4\x81a\x15\xD6\x87\x87\x86a\x15kV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\x13V[Q\x90 `\x08UV[`\tT\x80a\x16\x88WPa\x16\x80\x91a\x16{\x91`\x08Ta\x163`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x16=_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x16s`@Q\x92\x83\x92\x83a\x15kV[\x03\x90\xA2a\x11\xB2V[`\x07UV[a\x12ra\x18\x8DV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0EV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x06` R`@\x90 T\x90\x81\x15a\x1B^W_\x19\x82\x01\x90\x82\x82\x11a\x02\x91W`\x05T\x92_\x19\x84\x01\x93\x84\x11a\x02\x91W\x83\x83_\x95a\x1B\x1D\x95\x03a\x1B#W[PPPa\x1B\x0E`\x05a\x1ApV[`\x06\x90_R` R`@_ \x90V[U`\x01\x90V[a\x1B\x0Ea\x1BO\x91a\x1BEa\x1B;a\x1BU\x95`\x05a\x1A>V[\x90T\x90`\x03\x1B\x1C\x90V[\x92\x83\x91`\x05a\x1A>V[\x90a\x1ASV[U_\x80\x80a\x1B\x01V[PP_\x90V[`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T\x90V[\x91`\x1F\x19\x82\x84\x01`\x06\x1C`\x05\x1BQ\x93\x01\x92[_`\x01[\x15a\x1B\xC3W[P` _\x94\x01\x93\x84Q\x90a\x1B\xAEV[\x81\x81\x11a\x1B\xB4W\x90\x93\x92\x91\x92_`\x01[\x15a\x1B\xECW[P`\x1F\x19\x92\x90\x92\x01\x80Q\x90\x92\x90_a\x1B\xD3V[\x85\x81\x10a\x1B\xD9W\x90\x94\x91\x93\x92\x93\x84\x86\x10\x15a\x1C\x1AW\x90\x85R\x83R\x83\x82\x01\x80Q\x83\x85\x01\x80Q\x90\x92R\x90Ra\x1B\xAAV[PPPPP\x90V[\x80_R`\x06` R`@_ T\x15_\x14a\x1C\x97W`\x05Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x116W`\x01\x81\x01`\x05U`\x05T\x81\x10\x15a\x0B\xB8W\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01\x81\x90U`\x05T_\x91\x82R`\x06` R`@\x90\x91 U`\x01\x90V[P_\x90V", + b"`\xA04a\x01\rW`\x1Fa\x1F\xB38\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01$W\x80\x84\x92`\x80\x94`@R\x839\x81\x01\x03\x12a\x01\rW\x80Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\rW` \x81\x01Q\x90```@\x82\x01Q\x91\x01Q\x913\x15a\x01\x11W_\x80T`@Q\x95\x913\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3`\x01`\x01`\xA8\x1B\x03\x19\x163`\xFF`\xA0\x1B\x19\x16\x17_U\x81\x15a\x01\rW`\x80R`\x07U\x80`\x04U\x15a\0\xFCW[\x80`\x03U\x15a\0\xF2W[a\x1Ez\x90\x81a\x019\x829`\x80Q\x81\x81\x81a\x0Ez\x01Ra\x12\xAE\x01R\xF3[`d`\x03Ua\0\xD6V[gEc\x91\x82D\xF4\0\0`\x04Ua\0\xCCV[_\x80\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x02dW\x80c\x10\xFF\xC6&\x14a\x02_W\x80c\x16\xAA~\x93\x14a\x02ZW\x80c\x17{\0r\x14a\x02UW\x80c/\x91\x83\xBA\x14a\x02PW\x80c1!\x1Ey\x14a\x02KW\x80c:\xAE}$\x14a\x02FW\x80c;C\xDD\xAD\x14a\x02AW\x80c=\x9E\x82!\x14a\x02_\x14a\x02\0W\x80c\xA5R#q\x14a\x01\xFBW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xF6W\x80c\xABG\xC7\0\x14a\x01\xF1W\x80c\xAD;\x1BG\x14a\x01\xECW\x80c\xB9}\xD9\xE2\x14a\x01\xE7W\x80c\xBCFz\x93\x14a\x01\xE2W\x80c\xBD\xD5\xB8\x80\x14a\x01\xDDW\x80c\xC4Z\x01U\x14a\x01\xD8W\x80c\xC9\xCF\xEA\x88\x14a\x01\xD3W\x80c\xCE/\xD1\xFF\x14a\x01\xCEW\x80c\xD5\x17m#\x14a\x01\xC9W\x80c\xD9\x9F\xAF\0\x14a\x01\xC4W\x80c\xE6=0\xD5\x14a\x01\xBFW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xBAW\x80c\xFD\x8Cu\xD2\x14a\x01\xB5Wc\xFF\xA1\xADt\x14a\x01\xB0W_\x80\xFD[a\x10\xDAV[a\x0FpV[a\x0E\x9EV[a\x0ENV[a\r\xF1V[a\r\xAAV[a\rUV[a\r8V[a\r\x05V[a\x0C\xADV[a\x0C-V[a\x0B\xFFV[a\x0BWV[a\x0B:V[a\x0B\x1DV[a\n\xE3V[a\n\xC6V[a\t\xDAV[a\t\xA8V[a\t\x1FV[a\x08\x8CV[a\x07#V[a\x06\xE7V[a\x06\xCAV[a\x06NV[a\x06*V[a\x06\rV[a\x05\x93V[a\x05dV[a\x05GV[a\x05\x1EV[a\x04\xCAV[a\x04\x8AV[a\x04mV[a\x03lV[a\x02\xF2V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045\x80\x15a\x02\xC6W_\x19\x81\x01\x90\x81\x11a\x02\xC1Wb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W`@Q\x90\x81R\x80` \x81\x01[\x03\x90\xF3[a\x10\xF7V[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R` `@_ T`@Q\x90\x81R\xF3[\x91\x81`\x1F\x84\x01\x12\x15a\x02\xEEW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x02\xEEWV[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x03\x9D\x906\x90`\x04\x01a\x03;V[\x90a\x03\xA6a\x19\xE9V[a\x03\xAEa\x1A5V[_[\x82\x81\x10a\x03\xB9W\0[a\x03\xCDa\x03\xC7\x82\x85\x85a\x11kV[5a\x1C\xA1V[\x15a\x04\x0FW`\x01\x90`\x07Ta\x03\xE3\x82\x86\x86a\x11kV[5\x90\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\x01a\x03\xB0V[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7Fappchain is not tracked\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\tT`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\n` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW\x7F{\xBF\x02\xCF\n\xEB\xB3'\x9D+k\xFD\x12n\xFE\xFAj\x86M\xCEW\xEF\x882ei\xB4\xB5\xAC>\xBB\x07`@`\x045a\x05\ta\x19\xE9V[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW` a\x05?`$5`\x045a\x11\xEAV[`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\x0B` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x05\xABa\x19\xE9V[_`\tU_`\x08Ua\x05\xBBa\x1B\xAFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x06fa\x19\xE9V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qch\x8DF\xF0\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xEEWV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`$5`\x045a\x07C\x82a\x07\x05V[`D5\x80\x15\x15\x80\x91\x03a\x02\xEEWa\x07Xa\x19\xE9V[a\x07`a\x1A5V[a\x07k\x82\x15\x15a\x13~V[a\x07x\x82\x84;\x15\x15a\x13\xADV[a\x07\x8A\x82a\x07\x85\x81a\x1DBV[a\x13\xE0V[\x81_R`\n` Ra\x07\xDA\x83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x81_R`\x0B` R`@_ \x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x16\x17\x90U`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x08vWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x08iV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x08\xC0\x906\x90`\x04\x01a\x03;V[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x02\xBD\x93a\x08\xEAa\x08\xF2\x946\x90`\x04\x01a\x03;V[\x93\x90\x92a\x15\x13V[a\t\x11`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x08YV[\x90\x83\x82\x03`@\x85\x01Ra\x08YV[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\t7a\x19\xE9V[a\t?a\x1A5V[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\t\xF7\x81a\x07\x05V[`$5\x90a\n\x03a\x19\xE9V[`\x01T\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16a\n\x9EWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x15a\nvW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\nl\x84\x15\x15a\x14yV[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\x0Bt\x81a\x07\x05V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\x0B\x95a\x19\xE9V[\x16\x90\x81\x15a\nvW\x80a\x0B\xF9WPG\x90[G\x82\x11a\x0B\xC8W_\x80\x80a\x0B\xC6\x94\x81\x94Z\xF1a\x0B\xC0a\x16\x98V[Pa\x16\xD7V[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\x0B\xA6V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` a\x05?a\x17V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W` \x90`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x0E\"\x906\x90`\x04\x01a\x03;V[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x0EFa\x0B\xC6\x936\x90`\x04\x01a\x03;V[\x92\x90\x91a\x18\x03V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0E\xD0\x81a\x07\x05V[a\x0E\xD8a\x19\xE9V[\x16\x80\x15a\x0FDWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[` `\x03\x196\x01\x12a\x02\xEEW`\x045a\x0F\x87a\x1A5V[a\x0F\xC1a\x0F\xA8_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x10\xCAWa\x0F\xD7`\x04T4\x90\x804\x14a\x19\xB2V[a\x0F\xE2\x81\x15\x15a\x13~V[a\x0F\xEF\x81a\x07\x85\x81a\x1DBV[a\x10\x1B`\x02Ta\x10\x14`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1B\xE6V[\x90a\x10)\x81\x83;\x15\x15a\x13\xADV[a\x10\x7F\x82a\x10?\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x10\xD544\x15a\x19{V[a\x0F\xD7V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb\x0FF(\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\xC1WV[\x91\x90\x82\x01\x80\x92\x11a\x02\xC1WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xA5W`\x05\x1B\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x11\xCBW`@RV[a\x11{V[\x90\x81` \x91\x03\x12a\x02\xEEWQ\x90V[`@Q=_\x82>=\x90\xFD[\x90a\x12\x07a\x12\0\x82_R`\x0B` R`@_ \x90V[T`\xFF\x16\x90V[a\x13\x0FWa\x12\x95\x91a\x12@a\x12&` \x93_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[`@Q\x7F\xB2\xFE\"\xD5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x92\x90\x92Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`$\x82\x01R\x91\x82\x90\x81\x90`D\x82\x01\x90V[\x03\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[a\x0C*\x91P` =` \x11a\x13\x03W[a\x12\xFB\x81\x83a\x11\xA8V[\x81\x01\x90a\x11\xD0V[P=a\x12\xF1V[a\x11\xDFV[a\x13i\x91a\x130a\x0F\xA8a\x0F\xA8a\x12&` \x95_R`\n` R`@_ \x90V[`@Q\x80\x80\x95\x81\x94\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[\x15a\x13\x85WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x13\xB5WPV[\x7FJ\x7FC\xFA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x13\xE8WPV[\x7F\x83\xADtY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x14\x1CWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x14QWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x14\x80WV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x11\xCBW`\x05\x1B` \x01\x90V[\x90a\x14\xCA\x82a\x14\xA8V[a\x14\xD7`@Q\x91\x82a\x11\xA8V[\x82\x81R`\x1F\x19a\x14\xE7\x82\x94a\x14\xA8V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\r\xA5W` \x91`\x05\x1B\x01\x01\x90V[_\x19\x81\x14a\x02\xC1W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x15!a\x17V[``\x90V[\x15a\x16\xDEWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\xC1Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\xC1W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x17\xD0\x90a\x0C*\x95\x93`@\x86R`@\x86\x01\x91a\x17zV[\x92` \x81\x85\x03\x91\x01Ra\x17zV[\x90\x91a\x17\xF5a\x0C*\x93`@\x84R`@\x84\x01\x90a\x08YV[\x91` \x81\x84\x03\x91\x01Ra\x08YV[\x91a\x18/\x93\x91a\x18'\x93`\tT\x15_\x14a\x19FWa\x18\x1Fa\x1B>V[`\tTa\x15\x13V[\x92\x90\x91`\tUV[a\x18_`@Q` \x81\x01\x90a\x18W\x81a\x18I\x87\x87\x86a\x17\xDEV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\xA8V[Q\x90 `\x08UV[`\tT\x80a\x18\xFBWPa\x18\xF3\x91a\x18\xEE\x91`\x08Ta\x18\xA6`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x18\xB0_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x18\xE6`@Q\x92\x83\x92\x83a\x17\xDEV[\x03\x90\xA2a\x15\x05V[`\x07UV[a\x15\xC5a\x1AkV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0E_\x14a\x01\xDFW\x80c\xA5R#q\x14a\x01\xDAW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xD5W\x80c\xABG\xC7\0\x14a\x01\xD0W\x80c\xAD;\x1BG\x14a\x01\xCBW\x80c\xB9}\xD9\xE2\x14a\x01\xC6W\x80c\xBCFz\x93\x14a\x01\xC1W\x80c\xBD\xD5\xB8\x80\x14a\x01\xBCW\x80c\xC4Z\x01U\x14a\x01\xB7W\x80c\xC9\xCF\xEA\x88\x14a\x01\xB2W\x80c\xCE/\xD1\xFF\x14a\x01\xADW\x80c\xD5\x17m#\x14a\x01\xA8W\x80c\xD9\x9F\xAF\0\x14a\x01\xA3W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x9EW\x80c\xF3\xAE!\x08\x14a\x01\x99W\x80c\xFD\x8Cu\xD2\x14a\x01\x94Wc\xFF\xA1\xADt\x14a\x01\x8FW_\x80\xFD[a\x0F\xB0V[a\x0EFV[a\r3V[a\x0CaV[a\x0C\x04V[a\x0B\xBDV[a\x0BhV[a\x0BKV[a\x0B\x18V[a\n\xC0V[a\n@V[a\n\nV[a\tbV[a\tEV[a\t(V[a\x08\xEEV[a\x08\xD1V[a\x08\x1CV[a\x07\xCCV[a\x07CV[a\x06\xB0V[a\x06_V[a\x06BV[a\x05\xC6V[a\x05\xA2V[a\x05\x85V[a\x05\x0BV[a\x04\xEEV[a\x04\x9AV[a\x04ZV[a\x04=V[a\x03\xBB\x07`@`\x045a\x04\xD9a\x18\x0BV[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05#a\x18\x0BV[_`\tU_`\x08Ua\x053a\x19\xD1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05\xDEa\x18\x0BV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qch\x8DF\xF0\x81R\xF3[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x06\x9AWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x06\x8DV[4a\x02\xBEW```\x03\x196\x01\x12a\x02\xBEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x06\xE4\x906\x90`\x04\x01a\x03\x0BV[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x02\x8D\x93a\x07\x0Ea\x07\x16\x946\x90`\x04\x01a\x03\x0BV[\x93\x90\x92a\x11\xC0V[a\x075`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x06}V[\x90\x83\x82\x03`@\x85\x01Ra\x06}V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x07[a\x18\x0BV[a\x07ca\x18WV[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xBEWV[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\x089\x81a\x07\xFEV[`$5\x90a\x08Ea\x18\x0BV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x91a\x08j\x82\x84\x16\x15a\x13\xF6V[\x16\x90\x81\x15a\x08\xA9W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x08\x9F\x84\x15\x15a\x10\xB7V[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\t\x7F\x81a\x07\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\t\xA0a\x18\x0BV[\x16\x90\x81\x15a\x08\xA9W\x80a\n\x04WPG\x90[G\x82\x11a\t\xD3W_\x80\x80a\t\xD1\x94\x81\x94Z\xF1a\t\xCBa\x14%V[Pa\x14dV[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\t\xB1V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` a\n$a\x14\xC9V[`@Q\x90\x81R\xF3[\x90` a\n=\x92\x81\x81R\x01\x90a\x06}V[\x90V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW`@Q\x80` `\x05T\x91\x82\x81R\x01\x90`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x90_[\x81\x81\x10a\n\xAAWa\x02\x8D\x85a\n\x9E\x81\x87\x03\x82a\x11\x13V[`@Q\x91\x82\x91\x82a\n,V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\n\x87V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045a\n\xDCa\x18\x0BV[a\n\xE4a\x18WV[\x80`\x03U\x7F\xD9\xC7E\xB4\x03\x95\x887\x8F\xDE\x0Ct[\x99;\xFB9\xA2V\x9C\x80\xE1\xEDs\xD7\rN(\x10\0\xDD\xD1` `\x07T\x92`@Q\x90\x81R\xA2\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x08T`@Q\x90\x81R\xF3[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T`@Q\x90\x81R` \x90\xF3[a\x10\x14V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\x91Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\x91W` \x90`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x0C5\x906\x90`\x04\x01a\x03\x0BV[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x0CYa\t\xD1\x936\x90`\x04\x01a\x03\x0BV[\x92\x90\x91a\x15\x90V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0C\x93\x81a\x07\xFEV[a\x0C\x9Ba\x18\x0BV[\x16\x80\x15a\r\x07Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`$5`\x045a\rS\x82a\x07\xFEV[a\r[a\x18\x0BV[a\rca\x18WV[a\r\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16\x15a\x13\xF6V[a\r\x90\x81\x15\x15a\x17\x08V[a\r\xA2\x81a\r\x9D\x81a\x1C\"V[a\x177V[a\r\xAF\x81\x83;\x15\x15a\x17jV[\x80_R`\n` Ra\r\xFF\x82`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[` `\x03\x196\x01\x12a\x02\xBEW`\x045a\x0E]a\x18WV[a\x0E\x97a\x0E~_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x0F\xA0Wa\x0E\xAD`\x04T4\x90\x804\x14a\x17\xD4V[a\x0E\xB8\x81\x15\x15a\x17\x08V[a\x0E\xC5\x81a\r\x9D\x81a\x1C\"V[a\x0E\xF1`\x02Ta\x0E\xEA`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1A\x08V[\x90a\x0E\xFF\x81\x83;\x15\x15a\x17jV[a\x0FU\x82a\x0F\x15\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x0F\xAB44\x15a\x17\x9DV[a\x0E\xADV[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\x91WV[\x91\x90\x82\x01\x80\x92\x11a\x02\x91WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x0B\xB8W`\x05\x1B\x01\x90V[\x15a\x10ZWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x10\x8FWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x10\xBEWV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x116W`@RV[a\x10\xE6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x116W`\x05\x1B` \x01\x90V[\x90a\x11]\x82a\x11;V[a\x11j`@Q\x91\x82a\x11\x13V[\x82\x81R`\x1F\x19a\x11z\x82\x94a\x11;V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\x0B\xB8W` \x91`\x05\x1B\x01\x01\x90V[\x90\x81` \x91\x03\x12a\x02\xBEWQ\x90V[`@Q=_\x82>=\x90\xFD[_\x19\x81\x14a\x02\x91W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x11\xCEa\x14\xC9V[a\x11\xDE`\x07T\x91\x82\x80\x82\x11a\x10QV[a\x11\xEA\x82`\x05Ta\x0F\xFAV[\x91a\x11\xF6\x83\x15\x15a\x10\x88V[`\x03T\x94\x83\x86\x10a\x13\xE1W[\x87\x94a\x12\x0F\x81\x8A\x14a\x10\xB7V[\x82\x15a\x13\xD2W[\x90\x84\x93\x92\x91a\x12/a\x12*\x89\x98\x97\x8Ca\x10\x07V[a\x11SV[\x9Aa\x12=a\x12*\x87\x8Da\x10\x07V[\x9A_[\x81\x81\x10a\x13\x8DWPPPPP_[\x83\x81\x10a\x12tWPPPP\x80\x86R\x80\x85R\x11a\x12gWPV[a\x12r\x90\x83\x85a\x18\xE7V[V[\x90\x91\x92\x93\x94Pa\x12\x8Ca\x12\x87\x82\x84a\x10\x07V[a\x1BdV[a\x12\xC1a\x0E~a\x0E~a\x12\xA7\x84_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90` `@Q\x80\x93\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R\x81\x80a\x13\0\x8A`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x91\x82\x15a\x13\x88W_\x92a\x13XW[P\x8A\x82a\x13+W[PPP`\x01\x01\x90\x85\x94\x93\x92\x91a\x12NV[\x91\x87\x91a\x13>`\x01\x95\x99a\x13O\x95a\x11\x84V[Ra\x13I\x82\x8Ca\x11\x84V[Ra\x11\xB2V[\x94\x90_\x8Aa\x13\x1AV[a\x13z\x91\x92P` =\x81\x11a\x13\x81W[a\x13r\x81\x83a\x11\x13V[\x81\x01\x90a\x11\x98V[\x90_a\x13\x12V[P=a\x13hV[a\x11\xA7V[\x84\x95\x96\x97\x98\x99P\x8Da\x13\xB0\x82a\x13\xA9\x81\x86`\x01\x97\x98\x99\x9Aa\x10AV[5\x92a\x11\x84V[R\x8Ca\x13\xC1\x82a\x13\xA9\x81\x89\x89a\x10AV[R\x01\x90\x89\x98\x97\x96\x95\x94\x93\x92\x91a\x12@V[a\x13\xDC\x89\x15a\x10\xB7V[a\x12\x16V[\x98P\x84\x92Pa\x13\xF0\x83\x82a\x10\x07V[\x98a\x12\x02V[\x15a\x13\xFDWV[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[=\x15a\x14_W=\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x116W`@Q\x91a\x14T` `\x1F\x19`\x1F\x84\x01\x16\x01\x84a\x11\x13V[\x82R=_` \x84\x01>V[``\x90V[\x15a\x14kWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\x91Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\x91W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x15]\x90a\n=\x95\x93`@\x86R`@\x86\x01\x91a\x15\x07V[\x92` \x81\x85\x03\x91\x01Ra\x15\x07V[\x90\x91a\x15\x82a\n=\x93`@\x84R`@\x84\x01\x90a\x06}V[\x91` \x81\x84\x03\x91\x01Ra\x06}V[\x91a\x15\xBC\x93\x91a\x15\xB4\x93`\tT\x15_\x14a\x16\xD3Wa\x15\xACa\x19`V[`\tTa\x11\xC0V[\x92\x90\x91`\tUV[a\x15\xEC`@Q` \x81\x01\x90a\x15\xE4\x81a\x15\xD6\x87\x87\x86a\x15kV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\x13V[Q\x90 `\x08UV[`\tT\x80a\x16\x88WPa\x16\x80\x91a\x16{\x91`\x08Ta\x163`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x16=_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x16s`@Q\x92\x83\x92\x83a\x15kV[\x03\x90\xA2a\x11\xB2V[`\x07UV[a\x12ra\x18\x8DV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0EV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x06` R`@\x90 T\x90\x81\x15a\x1B^W_\x19\x82\x01\x90\x82\x82\x11a\x02\x91W`\x05T\x92_\x19\x84\x01\x93\x84\x11a\x02\x91W\x83\x83_\x95a\x1B\x1D\x95\x03a\x1B#W[PPPa\x1B\x0E`\x05a\x1ApV[`\x06\x90_R` R`@_ \x90V[U`\x01\x90V[a\x1B\x0Ea\x1BO\x91a\x1BEa\x1B;a\x1BU\x95`\x05a\x1A>V[\x90T\x90`\x03\x1B\x1C\x90V[\x92\x83\x91`\x05a\x1A>V[\x90a\x1ASV[U_\x80\x80a\x1B\x01V[PP_\x90V[`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T\x90V[\x91`\x1F\x19\x82\x84\x01`\x06\x1C`\x05\x1BQ\x93\x01\x92[_`\x01[\x15a\x1B\xC3W[P` _\x94\x01\x93\x84Q\x90a\x1B\xAEV[\x81\x81\x11a\x1B\xB4W\x90\x93\x92\x91\x92_`\x01[\x15a\x1B\xECW[P`\x1F\x19\x92\x90\x92\x01\x80Q\x90\x92\x90_a\x1B\xD3V[\x85\x81\x10a\x1B\xD9W\x90\x94\x91\x93\x92\x93\x84\x86\x10\x15a\x1C\x1AW\x90\x85R\x83R\x83\x82\x01\x80Q\x83\x85\x01\x80Q\x90\x92R\x90Ra\x1B\xAAV[PPPPP\x90V[\x80_R`\x06` R`@_ T\x15_\x14a\x1C\x97W`\x05Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x116W`\x01\x81\x01`\x05U`\x05T\x81\x10\x15a\x0B\xB8W\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01\x81\x90U`\x05T_\x91\x82R`\x06` R`@\x90\x91 U`\x01\x90V[P_\x90V", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x02dW\x80c\x10\xFF\xC6&\x14a\x02_W\x80c\x16\xAA~\x93\x14a\x02ZW\x80c\x17{\0r\x14a\x02UW\x80c/\x91\x83\xBA\x14a\x02PW\x80c1!\x1Ey\x14a\x02KW\x80c:\xAE}$\x14a\x02FW\x80c;C\xDD\xAD\x14a\x02AW\x80c=\x9E\x82!\x14a\x02_\x14a\x02\0W\x80c\xA5R#q\x14a\x01\xFBW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xF6W\x80c\xABG\xC7\0\x14a\x01\xF1W\x80c\xAD;\x1BG\x14a\x01\xECW\x80c\xB9}\xD9\xE2\x14a\x01\xE7W\x80c\xBCFz\x93\x14a\x01\xE2W\x80c\xBD\xD5\xB8\x80\x14a\x01\xDDW\x80c\xC4Z\x01U\x14a\x01\xD8W\x80c\xC9\xCF\xEA\x88\x14a\x01\xD3W\x80c\xCE/\xD1\xFF\x14a\x01\xCEW\x80c\xD5\x17m#\x14a\x01\xC9W\x80c\xD9\x9F\xAF\0\x14a\x01\xC4W\x80c\xE6=0\xD5\x14a\x01\xBFW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xBAW\x80c\xFD\x8Cu\xD2\x14a\x01\xB5Wc\xFF\xA1\xADt\x14a\x01\xB0W_\x80\xFD[a\x10\xDAV[a\x0FpV[a\x0E\x9EV[a\x0ENV[a\r\xF1V[a\r\xAAV[a\rUV[a\r8V[a\r\x05V[a\x0C\xADV[a\x0C-V[a\x0B\xFFV[a\x0BWV[a\x0B:V[a\x0B\x1DV[a\n\xE3V[a\n\xC6V[a\t\xDAV[a\t\xA8V[a\t\x1FV[a\x08\x8CV[a\x07#V[a\x06\xE7V[a\x06\xCAV[a\x06NV[a\x06*V[a\x06\rV[a\x05\x93V[a\x05dV[a\x05GV[a\x05\x1EV[a\x04\xCAV[a\x04\x8AV[a\x04mV[a\x03lV[a\x02\xF2V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045\x80\x15a\x02\xC6W_\x19\x81\x01\x90\x81\x11a\x02\xC1Wb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W`@Q\x90\x81R\x80` \x81\x01[\x03\x90\xF3[a\x10\xF7V[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R` `@_ T`@Q\x90\x81R\xF3[\x91\x81`\x1F\x84\x01\x12\x15a\x02\xEEW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x02\xEEWV[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x03\x9D\x906\x90`\x04\x01a\x03;V[\x90a\x03\xA6a\x19\xE9V[a\x03\xAEa\x1A5V[_[\x82\x81\x10a\x03\xB9W\0[a\x03\xCDa\x03\xC7\x82\x85\x85a\x11kV[5a\x1C\xA1V[\x15a\x04\x0FW`\x01\x90`\x07Ta\x03\xE3\x82\x86\x86a\x11kV[5\x90\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\x01a\x03\xB0V[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7Fappchain is not tracked\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\tT`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\n` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW\x7F{\xBF\x02\xCF\n\xEB\xB3'\x9D+k\xFD\x12n\xFE\xFAj\x86M\xCEW\xEF\x882ei\xB4\xB5\xAC>\xBB\x07`@`\x045a\x05\ta\x19\xE9V[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW` a\x05?`$5`\x045a\x11\xEAV[`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\x0B` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x05\xABa\x19\xE9V[_`\tU_`\x08Ua\x05\xBBa\x1B\xAFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x06fa\x19\xE9V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qch\x8DF\xF0\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xEEWV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`$5`\x045a\x07C\x82a\x07\x05V[`D5\x80\x15\x15\x80\x91\x03a\x02\xEEWa\x07Xa\x19\xE9V[a\x07`a\x1A5V[a\x07k\x82\x15\x15a\x13~V[a\x07x\x82\x84;\x15\x15a\x13\xADV[a\x07\x8A\x82a\x07\x85\x81a\x1DBV[a\x13\xE0V[\x81_R`\n` Ra\x07\xDA\x83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x81_R`\x0B` R`@_ \x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x16\x17\x90U`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x08vWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x08iV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x08\xC0\x906\x90`\x04\x01a\x03;V[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x02\xBD\x93a\x08\xEAa\x08\xF2\x946\x90`\x04\x01a\x03;V[\x93\x90\x92a\x15\x13V[a\t\x11`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x08YV[\x90\x83\x82\x03`@\x85\x01Ra\x08YV[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\t7a\x19\xE9V[a\t?a\x1A5V[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\t\xF7\x81a\x07\x05V[`$5\x90a\n\x03a\x19\xE9V[`\x01T\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16a\n\x9EWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x15a\nvW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\nl\x84\x15\x15a\x14yV[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\x0Bt\x81a\x07\x05V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\x0B\x95a\x19\xE9V[\x16\x90\x81\x15a\nvW\x80a\x0B\xF9WPG\x90[G\x82\x11a\x0B\xC8W_\x80\x80a\x0B\xC6\x94\x81\x94Z\xF1a\x0B\xC0a\x16\x98V[Pa\x16\xD7V[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\x0B\xA6V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` a\x05?a\x17V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W` \x90`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x0E\"\x906\x90`\x04\x01a\x03;V[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x0EFa\x0B\xC6\x936\x90`\x04\x01a\x03;V[\x92\x90\x91a\x18\x03V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0E\xD0\x81a\x07\x05V[a\x0E\xD8a\x19\xE9V[\x16\x80\x15a\x0FDWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[` `\x03\x196\x01\x12a\x02\xEEW`\x045a\x0F\x87a\x1A5V[a\x0F\xC1a\x0F\xA8_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x10\xCAWa\x0F\xD7`\x04T4\x90\x804\x14a\x19\xB2V[a\x0F\xE2\x81\x15\x15a\x13~V[a\x0F\xEF\x81a\x07\x85\x81a\x1DBV[a\x10\x1B`\x02Ta\x10\x14`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1B\xE6V[\x90a\x10)\x81\x83;\x15\x15a\x13\xADV[a\x10\x7F\x82a\x10?\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x10\xD544\x15a\x19{V[a\x0F\xD7V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb\x0FF(\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\xC1WV[\x91\x90\x82\x01\x80\x92\x11a\x02\xC1WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xA5W`\x05\x1B\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x11\xCBW`@RV[a\x11{V[\x90\x81` \x91\x03\x12a\x02\xEEWQ\x90V[`@Q=_\x82>=\x90\xFD[\x90a\x12\x07a\x12\0\x82_R`\x0B` R`@_ \x90V[T`\xFF\x16\x90V[a\x13\x0FWa\x12\x95\x91a\x12@a\x12&` \x93_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[`@Q\x7F\xB2\xFE\"\xD5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x92\x90\x92Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`$\x82\x01R\x91\x82\x90\x81\x90`D\x82\x01\x90V[\x03\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x16Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[a\x0C*\x91P` =` \x11a\x13\x03W[a\x12\xFB\x81\x83a\x11\xA8V[\x81\x01\x90a\x11\xD0V[P=a\x12\xF1V[a\x11\xDFV[a\x13i\x91a\x130a\x0F\xA8a\x0F\xA8a\x12&` \x95_R`\n` R`@_ \x90V[`@Q\x80\x80\x95\x81\x94\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[\x15a\x13\x85WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x13\xB5WPV[\x7FJ\x7FC\xFA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x13\xE8WPV[\x7F\x83\xADtY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x14\x1CWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x14QWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x14\x80WV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x11\xCBW`\x05\x1B` \x01\x90V[\x90a\x14\xCA\x82a\x14\xA8V[a\x14\xD7`@Q\x91\x82a\x11\xA8V[\x82\x81R`\x1F\x19a\x14\xE7\x82\x94a\x14\xA8V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\r\xA5W` \x91`\x05\x1B\x01\x01\x90V[_\x19\x81\x14a\x02\xC1W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x15!a\x17V[``\x90V[\x15a\x16\xDEWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\xC1Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\xC1W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x17\xD0\x90a\x0C*\x95\x93`@\x86R`@\x86\x01\x91a\x17zV[\x92` \x81\x85\x03\x91\x01Ra\x17zV[\x90\x91a\x17\xF5a\x0C*\x93`@\x84R`@\x84\x01\x90a\x08YV[\x91` \x81\x84\x03\x91\x01Ra\x08YV[\x91a\x18/\x93\x91a\x18'\x93`\tT\x15_\x14a\x19FWa\x18\x1Fa\x1B>V[`\tTa\x15\x13V[\x92\x90\x91`\tUV[a\x18_`@Q` \x81\x01\x90a\x18W\x81a\x18I\x87\x87\x86a\x17\xDEV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\xA8V[Q\x90 `\x08UV[`\tT\x80a\x18\xFBWPa\x18\xF3\x91a\x18\xEE\x91`\x08Ta\x18\xA6`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x18\xB0_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x18\xE6`@Q\x92\x83\x92\x83a\x17\xDEV[\x03\x90\xA2a\x15\x05V[`\x07UV[a\x15\xC5a\x1AkV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0E = ( + alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, alloy::sol_types::private::primitives::aliases::U256, alloy::sol_types::private::primitives::aliases::U256, alloy::sol_types::private::primitives::aliases::U256, @@ -3133,7 +3206,12 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: constructorCall) -> Self { - (value._epoch, value._addChainFee, value._maxAppchainsToQuery) + ( + value._gasMeterContract, + value._epoch, + value._addChainFee, + value._maxAppchainsToQuery, + ) } } #[automatically_derived] @@ -3141,9 +3219,10 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); impl ::core::convert::From> for constructorCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - _epoch: tuple.0, - _addChainFee: tuple.1, - _maxAppchainsToQuery: tuple.2, + _gasMeterContract: tuple.0, + _epoch: tuple.1, + _addChainFee: tuple.2, + _maxAppchainsToQuery: tuple.3, } } } @@ -3151,6 +3230,7 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); #[automatically_derived] impl alloy_sol_types::SolConstructor for constructorCall { type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, @@ -3167,6 +3247,9 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); #[inline] fn tokenize(&self) -> Self::Token<'_> { ( + ::tokenize( + &self._gasMeterContract, + ), as alloy_sol_types::SolType>::tokenize(&self._epoch), @@ -4069,22 +4152,24 @@ function addChainFee() external view returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `addLegacyChain(uint256,address)` and selector `0xf3ae2108`. + /**Function with signature `adminAddChain(uint256,address,bool)` and selector `0x81f0ebde`. ```solidity -function addLegacyChain(uint256 chainId, address chainContract) external; +function adminAddChain(uint256 chainId, address chainContract, bool isLegacy) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct addLegacyChainCall { + pub struct adminAddChainCall { #[allow(missing_docs)] pub chainId: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub chainContract: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub isLegacy: bool, } - ///Container type for the return parameters of the [`addLegacyChain(uint256,address)`](addLegacyChainCall) function. + ///Container type for the return parameters of the [`adminAddChain(uint256,address,bool)`](adminAddChainCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct addLegacyChainReturn {} + pub struct adminAddChainReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -4099,11 +4184,13 @@ function addLegacyChain(uint256 chainId, address chainContract) external; type UnderlyingSolTuple<'a> = ( alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bool, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( alloy::sol_types::private::primitives::aliases::U256, alloy::sol_types::private::Address, + bool, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -4118,18 +4205,19 @@ function addLegacyChain(uint256 chainId, address chainContract) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addLegacyChainCall) -> Self { - (value.chainId, value.chainContract) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: adminAddChainCall) -> Self { + (value.chainId, value.chainContract, value.isLegacy) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for addLegacyChainCall { + impl ::core::convert::From> for adminAddChainCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { chainId: tuple.0, chainContract: tuple.1, + isLegacy: tuple.2, } } } @@ -4153,44 +4241,43 @@ function addLegacyChain(uint256 chainId, address chainContract) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: addLegacyChainReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: adminAddChainReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for addLegacyChainReturn { + impl ::core::convert::From> for adminAddChainReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl addLegacyChainReturn { + impl adminAddChainReturn { fn _tokenize( &self, - ) -> ::ReturnToken<'_> { + ) -> ::ReturnToken<'_> { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for addLegacyChainCall { + impl alloy_sol_types::SolCall for adminAddChainCall { type Parameters<'a> = ( alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bool, ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = addLegacyChainReturn; + type Return = adminAddChainReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "addLegacyChain(uint256,address)"; - const SELECTOR: [u8; 4] = [243u8, 174u8, 33u8, 8u8]; + const SIGNATURE: &'static str = "adminAddChain(uint256,address,bool)"; + const SELECTOR: [u8; 4] = [129u8, 240u8, 235u8, 222u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4206,11 +4293,14 @@ function addLegacyChain(uint256 chainId, address chainContract) external; ::tokenize( &self.chainContract, ), + ::tokenize( + &self.isLegacy, + ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - addLegacyChainReturn::_tokenize(ret) + adminAddChainReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -5131,9 +5221,333 @@ function factory() external view returns (address); #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( - ret, - ), + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: factoryReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: factoryReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasMeterContract()` and selector `0xe63d30d5`. +```solidity +function gasMeterContract() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterContractCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasMeterContract()`](gasMeterContractCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterContractReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasMeterContractCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasMeterContractCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasMeterContractReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasMeterContractReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasMeterContractCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasMeterContract()"; + const SELECTOR: [u8; 4] = [230u8, 61u8, 48u8, 213u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasMeterContractReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasMeterContractReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getAppchainGasUsed(uint256,uint256)` and selector `0x3aae7d24`. +```solidity +function getAppchainGasUsed(uint256 epoch, uint256 chainId) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getAppchainGasUsedCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub chainId: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getAppchainGasUsed(uint256,uint256)`](getAppchainGasUsedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getAppchainGasUsedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getAppchainGasUsedCall) -> Self { + (value.epoch, value.chainId) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getAppchainGasUsedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + epoch: tuple.0, + chainId: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getAppchainGasUsedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getAppchainGasUsedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getAppchainGasUsedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getAppchainGasUsed(uint256,uint256)"; + const SELECTOR: [u8; 4] = [58u8, 174u8, 125u8, 36u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + as alloy_sol_types::SolType>::tokenize(&self.chainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), ) } #[inline] @@ -5142,7 +5556,7 @@ function factory() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: factoryReturn = r.into(); + let r: getAppchainGasUsedReturn = r.into(); r._0 }) } @@ -5154,7 +5568,7 @@ function factory() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: factoryReturn = r.into(); + let r: getAppchainGasUsedReturn = r.into(); r._0 }) } @@ -6095,6 +6509,164 @@ function getTrackedChainIds() external view returns (uint256[] memory chainIDs); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isLegacyAppchainContract(uint256)` and selector `0x3d9e8221`. +```solidity +function isLegacyAppchainContract(uint256 chainId) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isLegacyAppchainContractCall { + #[allow(missing_docs)] + pub chainId: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isLegacyAppchainContract(uint256)`](isLegacyAppchainContractCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isLegacyAppchainContractReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: isLegacyAppchainContractCall) -> Self { + (value.chainId,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for isLegacyAppchainContractCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { chainId: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: isLegacyAppchainContractReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for isLegacyAppchainContractReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isLegacyAppchainContractCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isLegacyAppchainContract(uint256)"; + const SELECTOR: [u8; 4] = [61u8, 158u8, 130u8, 33u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.chainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isLegacyAppchainContractReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isLegacyAppchainContractReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `maxAppchainsToQuery()` and selector `0x4a61aef2`. ```solidity function maxAppchainsToQuery() external view returns (uint256); @@ -8416,7 +8988,7 @@ function withdrawFees(address to, uint256 amount) external; #[allow(missing_docs)] addChainFee(addChainFeeCall), #[allow(missing_docs)] - addLegacyChain(addLegacyChainCall), + adminAddChain(adminAddChainCall), #[allow(missing_docs)] aggregateTokens(aggregateTokensCall), #[allow(missing_docs)] @@ -8430,6 +9002,10 @@ function withdrawFees(address to, uint256 amount) external; #[allow(missing_docs)] factory(factoryCall), #[allow(missing_docs)] + gasMeterContract(gasMeterContractCall), + #[allow(missing_docs)] + getAppchainGasUsed(getAppchainGasUsedCall), + #[allow(missing_docs)] getCurrentEpoch(getCurrentEpochCall), #[allow(missing_docs)] getEpochEnd(getEpochEndCall), @@ -8442,6 +9018,8 @@ function withdrawFees(address to, uint256 amount) external; #[allow(missing_docs)] getTrackedChainIds(getTrackedChainIdsCall), #[allow(missing_docs)] + isLegacyAppchainContract(isLegacyAppchainContractCall), + #[allow(missing_docs)] maxAppchainsToQuery(maxAppchainsToQueryCall), #[allow(missing_docs)] owner(ownerCall), @@ -8486,13 +9064,16 @@ function withdrawFees(address to, uint256 amount) external; [23u8, 123u8, 0u8, 114u8], [47u8, 145u8, 131u8, 186u8], [49u8, 33u8, 30u8, 121u8], + [58u8, 174u8, 125u8, 36u8], [59u8, 67u8, 221u8, 173u8], + [61u8, 158u8, 130u8, 33u8], [63u8, 75u8, 168u8, 58u8], [74u8, 97u8, 174u8, 242u8], [92u8, 151u8, 90u8, 187u8], [113u8, 80u8, 24u8, 166u8], [118u8, 103u8, 24u8, 8u8], [120u8, 28u8, 217u8, 157u8], + [129u8, 240u8, 235u8, 222u8], [130u8, 41u8, 66u8, 198u8], [132u8, 86u8, 203u8, 89u8], [141u8, 165u8, 203u8, 91u8], @@ -8510,8 +9091,8 @@ function withdrawFees(address to, uint256 amount) external; [206u8, 47u8, 209u8, 255u8], [213u8, 23u8, 109u8, 35u8], [217u8, 159u8, 175u8, 0u8], + [230u8, 61u8, 48u8, 213u8], [242u8, 253u8, 227u8, 139u8], - [243u8, 174u8, 33u8, 8u8], [253u8, 140u8, 117u8, 210u8], [255u8, 161u8, 173u8, 116u8], ]; @@ -8523,13 +9104,16 @@ function withdrawFees(address to, uint256 amount) external; ::core::stringify!(currentAggregateIndex), ::core::stringify!(appchainContract), ::core::stringify!(setAddChainFee), + ::core::stringify!(getAppchainGasUsed), ::core::stringify!(syndicateProxyBytecodeHash), + ::core::stringify!(isLegacyAppchainContract), ::core::stringify!(unpause), ::core::stringify!(maxAppchainsToQuery), ::core::stringify!(paused), ::core::stringify!(renounceOwnership), ::core::stringify!(currentEpoch), ::core::stringify!(START_TIMESTAMP), + ::core::stringify!(adminAddChain), ::core::stringify!(simulateAggregateTokens), ::core::stringify!(pause), ::core::stringify!(owner), @@ -8547,8 +9131,8 @@ function withdrawFees(address to, uint256 amount) external; ::core::stringify!(getTrackedChainId), ::core::stringify!(getEpochEnd), ::core::stringify!(aggregateTokens), + ::core::stringify!(gasMeterContract), ::core::stringify!(transferOwnership), - ::core::stringify!(addLegacyChain), ::core::stringify!(addChain), ::core::stringify!(VERSION), ]; @@ -8560,13 +9144,16 @@ function withdrawFees(address to, uint256 amount) external; ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, @@ -8584,8 +9171,8 @@ function withdrawFees(address to, uint256 amount) external; ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ]; @@ -8614,7 +9201,7 @@ function withdrawFees(address to, uint256 amount) external; impl alloy_sol_types::SolInterface for GasAggregatorCalls { const NAME: &'static str = "GasAggregatorCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 34usize; + const COUNT: usize = 37usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -8632,8 +9219,8 @@ function withdrawFees(address to, uint256 amount) external; Self::addChainFee(_) => { ::SELECTOR } - Self::addLegacyChain(_) => { - ::SELECTOR + Self::adminAddChain(_) => { + ::SELECTOR } Self::aggregateTokens(_) => { ::SELECTOR @@ -8651,6 +9238,12 @@ function withdrawFees(address to, uint256 amount) external; ::SELECTOR } Self::factory(_) => ::SELECTOR, + Self::gasMeterContract(_) => { + ::SELECTOR + } + Self::getAppchainGasUsed(_) => { + ::SELECTOR + } Self::getCurrentEpoch(_) => { ::SELECTOR } @@ -8669,6 +9262,9 @@ function withdrawFees(address to, uint256 amount) external; Self::getTrackedChainIds(_) => { ::SELECTOR } + Self::isLegacyAppchainContract(_) => { + ::SELECTOR + } Self::maxAppchainsToQuery(_) => { ::SELECTOR } @@ -8791,6 +9387,17 @@ function withdrawFees(address to, uint256 amount) external; } setAddChainFee }, + { + fn getAppchainGasUsed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasAggregatorCalls::getAppchainGasUsed) + } + getAppchainGasUsed + }, { fn syndicateProxyBytecodeHash( data: &[u8], @@ -8802,6 +9409,17 @@ function withdrawFees(address to, uint256 amount) external; } syndicateProxyBytecodeHash }, + { + fn isLegacyAppchainContract( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasAggregatorCalls::isLegacyAppchainContract) + } + isLegacyAppchainContract + }, { fn unpause( data: &[u8], @@ -8864,6 +9482,17 @@ function withdrawFees(address to, uint256 amount) external; } START_TIMESTAMP }, + { + fn adminAddChain( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasAggregatorCalls::adminAddChain) + } + adminAddChain + }, { fn simulateAggregateTokens( data: &[u8], @@ -9046,26 +9675,26 @@ function withdrawFees(address to, uint256 amount) external; aggregateTokens }, { - fn transferOwnership( + fn gasMeterContract( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(GasAggregatorCalls::transferOwnership) + .map(GasAggregatorCalls::gasMeterContract) } - transferOwnership + gasMeterContract }, { - fn addLegacyChain( + fn transferOwnership( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(GasAggregatorCalls::addLegacyChain) + .map(GasAggregatorCalls::transferOwnership) } - addLegacyChain + transferOwnership }, { fn addChain( @@ -9171,6 +9800,17 @@ function withdrawFees(address to, uint256 amount) external; } setAddChainFee }, + { + fn getAppchainGasUsed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasAggregatorCalls::getAppchainGasUsed) + } + getAppchainGasUsed + }, { fn syndicateProxyBytecodeHash( data: &[u8], @@ -9182,6 +9822,17 @@ function withdrawFees(address to, uint256 amount) external; } syndicateProxyBytecodeHash }, + { + fn isLegacyAppchainContract( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasAggregatorCalls::isLegacyAppchainContract) + } + isLegacyAppchainContract + }, { fn unpause( data: &[u8], @@ -9248,6 +9899,17 @@ function withdrawFees(address to, uint256 amount) external; } START_TIMESTAMP }, + { + fn adminAddChain( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasAggregatorCalls::adminAddChain) + } + adminAddChain + }, { fn simulateAggregateTokens( data: &[u8], @@ -9436,26 +10098,26 @@ function withdrawFees(address to, uint256 amount) external; aggregateTokens }, { - fn transferOwnership( + fn gasMeterContract( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(GasAggregatorCalls::transferOwnership) + .map(GasAggregatorCalls::gasMeterContract) } - transferOwnership + gasMeterContract }, { - fn addLegacyChain( + fn transferOwnership( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(GasAggregatorCalls::addLegacyChain) + .map(GasAggregatorCalls::transferOwnership) } - addLegacyChain + transferOwnership }, { fn addChain( @@ -9519,8 +10181,8 @@ function withdrawFees(address to, uint256 amount) external; inner, ) } - Self::addLegacyChain(inner) => { - ::abi_encoded_size( + Self::adminAddChain(inner) => { + ::abi_encoded_size( inner, ) } @@ -9552,6 +10214,16 @@ function withdrawFees(address to, uint256 amount) external; Self::factory(inner) => { ::abi_encoded_size(inner) } + Self::gasMeterContract(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getAppchainGasUsed(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::getCurrentEpoch(inner) => { ::abi_encoded_size( inner, @@ -9582,6 +10254,11 @@ function withdrawFees(address to, uint256 amount) external; inner, ) } + Self::isLegacyAppchainContract(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::maxAppchainsToQuery(inner) => { ::abi_encoded_size( inner, @@ -9685,8 +10362,8 @@ function withdrawFees(address to, uint256 amount) external; out, ) } - Self::addLegacyChain(inner) => { - ::abi_encode_raw( + Self::adminAddChain(inner) => { + ::abi_encode_raw( inner, out, ) @@ -9724,6 +10401,18 @@ function withdrawFees(address to, uint256 amount) external; Self::factory(inner) => { ::abi_encode_raw(inner, out) } + Self::gasMeterContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getAppchainGasUsed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::getCurrentEpoch(inner) => { ::abi_encode_raw( inner, @@ -9760,6 +10449,12 @@ function withdrawFees(address to, uint256 amount) external; out, ) } + Self::isLegacyAppchainContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::maxAppchainsToQuery(inner) => { ::abi_encode_raw( inner, @@ -10800,6 +11495,7 @@ For more fine-grained control over the deployment process, use [`deploy_builder` N: alloy_contract::private::Network, >( __provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, @@ -10809,7 +11505,13 @@ For more fine-grained control over the deployment process, use [`deploy_builder` GasAggregatorInstance::< P, N, - >::deploy(__provider, _epoch, _addChainFee, _maxAppchainsToQuery) + >::deploy( + __provider, + _gasMeterContract, + _epoch, + _addChainFee, + _maxAppchainsToQuery, + ) } /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` and constructor arguments, if any. @@ -10822,6 +11524,7 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ N: alloy_contract::private::Network, >( __provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, @@ -10829,7 +11532,13 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ GasAggregatorInstance::< P, N, - >::deploy_builder(__provider, _epoch, _addChainFee, _maxAppchainsToQuery) + >::deploy_builder( + __provider, + _gasMeterContract, + _epoch, + _addChainFee, + _maxAppchainsToQuery, + ) } /**A [`GasAggregator`](self) instance. @@ -10882,12 +11591,14 @@ For more fine-grained control over the deployment process, use [`deploy_builder` #[inline] pub async fn deploy( __provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::Result> { let call_builder = Self::deploy_builder( __provider, + _gasMeterContract, _epoch, _addChainFee, _maxAppchainsToQuery, @@ -10903,6 +11614,7 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ #[inline] pub fn deploy_builder( __provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, @@ -10913,6 +11625,7 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ &BYTECODE[..], &alloy_sol_types::SolConstructor::abi_encode( &constructorCall { + _gasMeterContract, _epoch, _addChainFee, _maxAppchainsToQuery, @@ -11005,16 +11718,18 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, addChainFeeCall, N> { self.call_builder(&addChainFeeCall) } - ///Creates a new call builder for the [`addLegacyChain`] function. - pub fn addLegacyChain( + ///Creates a new call builder for the [`adminAddChain`] function. + pub fn adminAddChain( &self, chainId: alloy::sol_types::private::primitives::aliases::U256, chainContract: alloy::sol_types::private::Address, - ) -> alloy_contract::SolCallBuilder<&P, addLegacyChainCall, N> { + isLegacy: bool, + ) -> alloy_contract::SolCallBuilder<&P, adminAddChainCall, N> { self.call_builder( - &addLegacyChainCall { + &adminAddChainCall { chainId, chainContract, + isLegacy, }, ) } @@ -11069,6 +11784,25 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ pub fn factory(&self) -> alloy_contract::SolCallBuilder<&P, factoryCall, N> { self.call_builder(&factoryCall) } + ///Creates a new call builder for the [`gasMeterContract`] function. + pub fn gasMeterContract( + &self, + ) -> alloy_contract::SolCallBuilder<&P, gasMeterContractCall, N> { + self.call_builder(&gasMeterContractCall) + } + ///Creates a new call builder for the [`getAppchainGasUsed`] function. + pub fn getAppchainGasUsed( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + chainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getAppchainGasUsedCall, N> { + self.call_builder( + &getAppchainGasUsedCall { + epoch, + chainId, + }, + ) + } ///Creates a new call builder for the [`getCurrentEpoch`] function. pub fn getCurrentEpoch( &self, @@ -11108,6 +11842,17 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, getTrackedChainIdsCall, N> { self.call_builder(&getTrackedChainIdsCall) } + ///Creates a new call builder for the [`isLegacyAppchainContract`] function. + pub fn isLegacyAppchainContract( + &self, + chainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, isLegacyAppchainContractCall, N> { + self.call_builder( + &isLegacyAppchainContractCall { + chainId, + }, + ) + } ///Creates a new call builder for the [`maxAppchainsToQuery`] function. pub fn maxAppchainsToQuery( &self, diff --git a/shared/contract-bindings/src/synd/gas_archive.rs b/shared/contract-bindings/src/synd/gas_archive.rs index 6e23b2276..4a0ee1490 100644 --- a/shared/contract-bindings/src/synd/gas_archive.rs +++ b/shared/contract-bindings/src/synd/gas_archive.rs @@ -41,21 +41,23 @@ interface GasArchive { constructor(address _blockHashSender, uint256 _settlementChainID); function GAS_AGGREGATOR_STORAGE_LOCATION() external view returns (bytes32); + function GAS_ARCHIVE_STORAGE_LOCATION() external view returns (bytes32); function HEADER_STATE_ROOT_INDEX() external view returns (uint256); function SEND_ROOT_STORAGE_SLOT() external view returns (uint256); function STORAGE_ROOT_ACCOUNT_FIELDS_INDEX() external view returns (uint256); function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); function addSequencingChain(uint256 chainID, address aggregatorAddress, address outboxAddress, bool settlesToBase) external; function addSettlementChainAsSequencingChain(address aggregatorAddress) external; - function appchainGasFees(uint256 epoch, uint256 appchainId) external view returns (uint256 tokens); + function appchainGasFees(uint256 _epoch, uint256 appchainId) external view returns (uint256); function blockHashSender() external view returns (address); function confirmEpochDataHash(uint256 seqChainID, bytes32 sendRoot, bytes memory ethBlockHeader, bytes[] memory ethAccountProof, bytes[] memory ethStorageProof, bytes memory seqBlockHeader, bytes[] memory seqAccountProof, bytes[] memory seqStorageProof) external; function confirmSettlementChainEpochDataHash(bytes memory blockHeader, bytes[] memory accountProof, bytes[] memory storageProof) external; function epoch() external view returns (uint256); - function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view returns (bool submitted); + function epochChainDataSubmitted(uint256 _epoch, uint256 chainId) external view returns (bool); function epochRemainingChains() external view returns (uint256); - function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view returns (bytes32 dataHash); - function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent); + function epochVerifiedDataHash(uint256 _epoch, uint256 seqChainID) external view returns (bytes32); + function ethBlockHashes(bytes32 blockHash) external view returns (bool); function getAppchainCount(uint256 epochIndex) external view returns (uint256); function getAppchainGasFees(uint256 epochIndex, uint256 appchainId) external view returns (uint256); function getAppchainIds(uint256 epochIndex) external view returns (uint256[] memory chainIDs); @@ -68,15 +70,15 @@ interface GasArchive { function removeSequencingChain(uint256 chainID) external; function renounceOwnership() external; function sendBlockHashes(bytes32 ethBlockHash, bytes32 setBlockHash) external; - function seqChainGasAggregator(uint256 chainId) external view returns (address aggregatorAddress); - function seqChainOutbox(uint256 chainId) external view returns (address outboxAddress); + function seqChainGasAggregator(uint256 chainId) external view returns (address); + function seqChainOutbox(uint256 chainId) external view returns (address); function seqChainSettlesToBase(uint256 chainId) external view returns (bool); function sequencingChainCount() external view returns (uint256); function sequencingChainId(uint256 index) external view returns (uint256); - function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent); + function setBlockHashes(bytes32 blockHash) external view returns (bool); function settlementChainID() external view returns (uint256); function submitEpochPreImageData(uint256 seqChainID, uint256[] memory appchains, uint256[] memory tokens) external; - function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens); + function totalGasFees(uint256 _epoch) external view returns (uint256); function transferOwnership(address newOwner) external; function upgradeToAndCall(address newImplementation, bytes memory data) external payable; } @@ -114,6 +116,19 @@ interface GasArchive { ], "stateMutability": "view" }, + { + "type": "function", + "name": "GAS_ARCHIVE_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "HEADER_STATE_ROOT_INDEX", @@ -166,6 +181,19 @@ interface GasArchive { ], "stateMutability": "view" }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "addSequencingChain", @@ -212,7 +240,7 @@ interface GasArchive { "name": "appchainGasFees", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" }, @@ -224,7 +252,7 @@ interface GasArchive { ], "outputs": [ { - "name": "tokens", + "name": "", "type": "uint256", "internalType": "uint256" } @@ -333,7 +361,7 @@ interface GasArchive { "name": "epochChainDataSubmitted", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" }, @@ -345,7 +373,7 @@ interface GasArchive { ], "outputs": [ { - "name": "submitted", + "name": "", "type": "bool", "internalType": "bool" } @@ -370,7 +398,7 @@ interface GasArchive { "name": "epochVerifiedDataHash", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" }, @@ -382,7 +410,7 @@ interface GasArchive { ], "outputs": [ { - "name": "dataHash", + "name": "", "type": "bytes32", "internalType": "bytes32" } @@ -401,7 +429,7 @@ interface GasArchive { ], "outputs": [ { - "name": "isPresent", + "name": "", "type": "bool", "internalType": "bool" } @@ -625,7 +653,7 @@ interface GasArchive { ], "outputs": [ { - "name": "aggregatorAddress", + "name": "", "type": "address", "internalType": "address" } @@ -644,7 +672,7 @@ interface GasArchive { ], "outputs": [ { - "name": "outboxAddress", + "name": "", "type": "address", "internalType": "address" } @@ -714,7 +742,7 @@ interface GasArchive { ], "outputs": [ { - "name": "isPresent", + "name": "", "type": "bool", "internalType": "bool" } @@ -762,14 +790,14 @@ interface GasArchive { "name": "totalGasFees", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" } ], "outputs": [ { - "name": "totalTokens", + "name": "", "type": "uint256", "internalType": "uint256" } @@ -1129,22 +1157,22 @@ pub mod GasArchive { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60e03461017c57601f6136e838819003918201601f19168301916001600160401b0383118484101761018057808492604094855283398101031261017c5780516001600160a01b0381169182820361017c576020015191306080521561016d57811561015e5760a05260c0525f5160206136c85f395f51905f525460ff8160401c1661014f576002600160401b03196001600160401b038216016100f9575b6040516135339081610195823960805181818161081b0152610a0b015260a05181818161067001526116bc015260c0518181816103a20152818161048d01528181610b0501528181610cdf015281816110250152611d4d0152f35b6001600160401b0319166001600160401b039081175f5160206136c85f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61009e565b63f92ee8a960e01b5f5260045ffd5b633212217560e21b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461027f5780631c8081ed1461027a5780632262389714610275578063285f2446146102705780633198eb101461026b578063362b8154146102665780634a5723db146102615780634eb4f97a1461025c5780634f1ef2861461025757806352d1902d14610252578063563344b61461024d578063567f3b3e146102485780635a633080146102435780635e84009d1461023e57806360630122146102395780636b4d17ad146102345780636ba3d17f1461022f5780636cfadeb51461022a578063709ba44a146101df578063715018a6146102255780637d4588b1146102205780637d85a2811461021b5780637e26965d146102165780638a5f7e6d146102115780638da5cb5b1461020c578063900cf0cf14610207578063a552237114610202578063a6e5e125146101fd578063ad3cb1cc146101f8578063cd0f45d2146101f3578063ce537c9f146101ee578063daac1a56146101e9578063dc027d6b146101e4578063e18b4dae146101df578063e48465b7146101da578063f2fde38b146101d5578063f4030228146101d0578063f5ec3ad0146101cb5763fe4b84df146101c6575f80fd5b61191c565b6118ed565b611803565b6117b5565b61168e565b610eac565b611671565b611639565b611603565b6115d4565b61155e565b61151e565b6114e4565b6114c8565b611476565b611259565b611166565b610fb9565b610f83565b610ec7565b610e7d565b610e45565b610e2a565b610dba565b610d65565b610d28565b610c5b565b610a5b565b6109e4565b6107cf565b6106b1565b610694565b610644565b610472565b6103c5565b61038b565b610361565b6102cb565b90602080835192838152019201905f5b8181106102a15750505090565b8251845260209384019390920191600101610294565b9060206102c8928181520190610284565b90565b3461034f575f60031936011261034f5760405180602060015491828152019060015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6905f5b81811061033957610335856103298187038261073f565b604051918291826102b7565b0390f35b8254845260209093019260019283019201610312565b5f80fd5b5f52600560205260405f2090565b3461034f57602060031936011261034f576004355f52600b602052602060405f2054604051908152f35b3461034f575f60031936011261034f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461034f57604060031936011261034f57600435602435906103e95f548210611b74565b5f52600d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b3461034f57602060031936011261034f5761048b610409565b7f0000000000000000000000000000000000000000000000000000000000000000906104b56121c6565b6104d673ffffffffffffffffffffffffffffffffffffffff82161515611ba3565b6104e1821515611bd2565b6104f26104ed83612678565b611c01565b61052761052361051c8461050f5f545f52600960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b61062c575b61058281610542845f52600460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b906106276105ee61051c875f52600660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b61063f61063a600354611c5d565b600355565b61052c565b3461034f575f60031936011261034f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461034f575f60031936011261034f576020600354604051908152f35b3461034f57602060031936011261034f576004355f526005602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761073a57604052565b6106f1565b90601f601f19910116810190811067ffffffffffffffff82111761073a57604052565b67ffffffffffffffff811161073a57601f01601f191660200190565b92919261078a82610762565b91610798604051938461073f565b82948184528183011161034f578281602093845f960137010152565b9080601f8301121561034f578160206102c89335910161077e565b604060031936011261034f576107e3610409565b60243567ffffffffffffffff811161034f576108039036906004016107b4565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156109a2575b5061097a576108536121c6565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610949575b506108e8577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc830361091c5761091a9250612515565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b61096c91945060203d602011610973575b610964818361073f565b8101906121b7565b925f6108a1565b503d61095a565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610846565b3461034f575f60031936011261034f5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097a5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461034f57608060031936011261034f57600435610a7761042c565b610a7f61044f565b606435801515810361034f57610a936121c6565b610ab473ffffffffffffffffffffffffffffffffffffffff84161515611ba3565b610abf841515611bd2565b610acb6104ed85612678565b610ae861052361051c8661050f5f545f52600960205260405f2090565b610be9575b610b0383610542865f52600460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610b66575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b610ba082610b8e73ffffffffffffffffffffffffffffffffffffffff610be295161515611ba3565b610542865f52600560205260405f2090565b610bb2845f52600660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610b2b565b610bf761063a600354611c5d565b610aed565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020838186019501011161034f57565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020808501948460051b01011161034f57565b3461034f57606060031936011261034f5760043567ffffffffffffffff811161034f57610c8c903690600401610bfc565b9060243567ffffffffffffffff811161034f57610cad903690600401610c2a565b6044939193359067ffffffffffffffff821161034f57610d0a94610cd8610d03933690600401610c2a565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612261565b369161077e565b602081519101205f52600860205261091a60ff60405f205416611c6b565b3461034f57604060031936011261034f57600435602435905f52600960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f57600435600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60154604051908152602090f35b611f29565b3461034f57602060031936011261034f57600435610dda5f548210611b74565b5f52600c60205260405f206040519081602082549182815201915f5260205f20905f5b818110610e1457610335856103298187038261073f565b8254845260209093019260019283019201610dfd565b3461034f575f60031936011261034f57602060405160028152f35b3461034f57604060031936011261034f57600435602435905f52600a60205260405f20905f52602052602060405f2054604051908152f35b3461034f57602060031936011261034f576004355f526008602052602060ff60405f2054166040519015158152f35b3461034f575f60031936011261034f57602060405160038152f35b3461034f575f60031936011261034f57610edf6121c6565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461034f57602060031936011261034f57600435610fa35f548210611b74565b5f52600c602052602060405f2054604051908152f35b3461034f57602060031936011261034f57600435610fd56121c6565b610fe6610fe1826127c7565b611c9a565b611023610ffb825f52600460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f0000000000000000000000000000000000000000000000000000000000000000810361110f575b805f5461106a61052361051c8461050f855f52600960205260405f2090565b611098575b505f547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f9161050f6110af925f52600a60205260405f2090565b556110be61063a600354611cc9565b600354156110ce575b805f61106f565b6110fd5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c5d565b5f5561110a600154600355565b6110c7565b611124610ffb825f52600560205260405f2090565b611161611139825f52600660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61104b565b3461034f5761010060031936011261034f5760043560243560443567ffffffffffffffff811161034f5761119e903690600401610bfc565b60649391933567ffffffffffffffff811161034f576111c1903690600401610c2a565b60849291923567ffffffffffffffff811161034f576111e4903690600401610c2a565b60a49291923567ffffffffffffffff811161034f57611207903690600401610bfc565b93909260c43567ffffffffffffffff811161034f5761122a903690600401610c2a565b97909660e4359b67ffffffffffffffff8d1161034f5761125161091a9d3690600401610c2a565b9c909b611d33565b3461034f57606060031936011261034f5760043560243567ffffffffffffffff811161034f5761128d903690600401610c2a565b9060443567ffffffffffffffff811161034f576112ae903690600401610c2a565b6113206112ef8661050f5f979597546112e16112dc61052361051c8661050f865f52600960205260405f2090565b611e67565b5f52600a60205260405f2090565b54604051602081019061131781611309878b8a8c88611ed3565b03601f19810183528261073f565b51902014611efa565b5f5b8281106113e8576113946113698761050f5f5482817f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a35f52600960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b6113a261063a600354611cc9565b600354156113ac57005b6113db5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c5d565b5f5561091a600154600355565b806113f66001928488611f56565b3580611404575b5001611322565b61146e61146661141584888a611f56565b356114328161142d5f545f52600c60205260405f2090565b6126f2565b506114465f545f52600b60205260405f2090565b611451858254611f74565b905561050f5f545f52600d60205260405f2090565b918254611f74565b90555f6113fd565b3461034f575f60031936011261034f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461034f575f60031936011261034f5760205f54604051908152f35b3461034f575f60031936011261034f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461034f57602060031936011261034f576004355f526004602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461034f575f60031936011261034f57604080519061157d818361073f565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461034f57602060031936011261034f576004355f526006602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f576004356116235f548210611b74565b5f52600b602052602060405f2054604051908152f35b3461034f57604060031936011261034f57600435602435905f52600d60205260405f20905f52602052602060405f2054604051908152f35b3461034f575f60031936011261034f576020600154604051908152f35b3461034f57604060031936011261034f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361178d57817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f52600760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f52600860205261177360405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461034f57602060031936011261034f5761091a6117d1610409565b6117d96121c6565b611f81565b90916117f56102c893604084526040840190610284565b916020818403910152610284565b3461034f57606060031936011261034f576004356024359060443561182a5f548310611b74565b815f52600c60205260405f20548381039081116118e857811580156118df575b6118d7575b5061185981612109565b9161186382612109565b935f5b83811061187c57604051806103358888836117de565b6001906118c56118a7611897865f52600c60205260405f2090565b6118a18487611f74565b90612760565b806118b2848a612188565b5261050f865f52600d60205260405f2090565b546118d08289612188565b5201611866565b90505f61184f565b5080821161184a565b611c30565b3461034f57602060031936011261034f576004355f526007602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff611975604084901c60ff16159367ffffffffffffffff1690565b1680159081611b6c575b6001149081611b62575b159081611b59575b50611b3157611a129082611a0960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611ab65761219c565b611a1857005b611a837fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2908060208101611788565b611b2c680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61219c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f611991565b303b159150611989565b83915061197f565b15611b7b57565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611baa57565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611bd957565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611c0857565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f1981146118e85760010190565b15611c7257565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611ca157565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b80156118e8575f190190565b15611cdc57565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611d0b57565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a611d4b9496989a8f87612261565b7f00000000000000000000000000000000000000000000000000000000000000008114611e455792611e009592611e08989592611dd36105bb87611da0611e159f9c9961051c905f52600660205260405f2090565b15611e1757610353611dce61051c611db936888f61077e565b602081519101205f52600860205260405f2090565b611d04565b95604051611df7816113096020820194856020600391939293604081019481520152565b519020966123ff565b92369161077e565b6020815191012014611c6b565b565b610353611e4061051c611e2b36888f61077e565b602081519101205f52600760205260405f2090565b611cd5565b505050505050505061051c611db9611e1593611e6293369161077e565b611c6b565b15611e6e57565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161034f5760209260051b809284830137010190565b9290611eec906102c89593604086526040860191611e96565b926020818503910152611e96565b15611f0157565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610db55760051b0190565b90600182018092116118e857565b919082018092116118e857565b73ffffffffffffffffffffffffffffffffffffffff1680156120425773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f1982019182116118e857565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082019182116118e857565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082019182116118e857565b60200390602082116118e857565b919082039182116118e857565b67ffffffffffffffff811161073a5760051b60200190565b90612113826120f1565b612120604051918261073f565b828152601f1961213082946120f1565b0190602036910137565b805160031015610db55760800190565b805160021015610db55760600190565b805160101015610db5576102200190565b805115610db55760200190565b805160011015610db55760400190565b8051821015610db55760209160051b010190565b5f556121a6612db0565b6121ae612db0565b611e1533611f81565b9081602091031261034f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361220657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b1561223957565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9392915f5496875f52600a60205260405f20865f5260205261228760405f205415611e67565b855f52600260205260405f20541561230d5761230a9661050f956122fe956122ba6105bb8a5f52600460205260405f2090565b948b604051611df78161130960208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936112e1851515612232565b55565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b929190612341816120f1565b9361234f604051958661073f565b602085838152019160051b81019183831161034f5781905b838210612375575050505050565b813567ffffffffffffffff811161034f5760209161239687849387016107b4565b815201910190612367565b156123a857565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b156123d757565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b9361244f956124c76124ea61245e6124e56124d961244f6125049d6102c89f9c6124d36124ce6124d39d6124b99f6124c76124ce9f61245e61245961245461244f6124b99a61246495369161077e565b612870565b6128eb565b61213a565b51612998565b966040516124a3816113096020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f19810187528661073f565b3691612335565b6129da565b91612a7a565b612454815115156123a1565b61214a565b966040516124a38161130960208201948560209181520190565b612510815115156123d0565b612998565b90813b156126045773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156125d3576125d091612e07565b50565b5050346125dc57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b8054821015610db5575f5260205f2001905f90565b91612674918354905f199060031b92831b921b19161790565b9055565b5f818152600260205260409020546126ed576001546801000000000000000081101561073a5760018101600155600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601819055600154905f52600260205260405f2055600190565b505f90565b5f82815260018201602052604090205461275a578054906801000000000000000082101561073a578261274561272f846001809601855584612646565b81939154905f199060031b92831b921b19161790565b90558054925f520160205260405f2055600190565b50505f90565b9061276a91612646565b90549060031b1c90565b8054801561279a575f19019061278a8282612646565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f8181526002602052604090205490811561275a575f198201908282116118e857600154925f1984019384116118e85783835f956128219503612827575b5050506128126001612774565b6002905f5260205260405f2090565b55600190565b6128126128499161283f61276a61284f956001612646565b9283916001612646565b9061265b565b555f8080612805565b604051906128658261071e565b5f6020838281520152565b612878612858565b5060208151916040519261288b8461071e565b835201602082015290565b1561034f57565b906128a7826120f1565b6128b4604051918261073f565b828152601f196128c482946120f1565b01905f5b8281106128d457505050565b6020906128df612858565b828285010152016128c8565b906128f582612e4b565b1561034f5761290382612e6a565b9161290d8361289d565b9060208101805161291d81612ecb565b81018091116118e857945f905b80821061294c5750506102c89293946129449151906120e4565b905114612896565b90956129908161295d600193612f36565b9060405161296c60408261073f565b82815281602082015261297f8b8a612188565b5261298a8a89612188565b50611f74565b96019061292a565b805180151590816129ce575b501561034f576129b390612ff0565b905190602081106129c2575090565b6020036101000a900490565b6021915011155f6129a4565b6129e4815161289d565b905f5b8151811015612a225780612a06612a0060019385612188565b51612870565b612a108286612188565b52612a1b8185612188565b50016129e7565b505090565b60405190612a3660208361073f565b5f808352366020840137565b90612a4c82610762565b612a59604051918261073f565b828152601f196121308294610762565b908151811015610db5570160200190565b90612a8490613066565b5f915f612a8f612858565b50845115612d7757935f915b8151831015612d185782158080612d02575b61034f571580612ce6575b61034f57612acf612ac98484612188565b516128eb565b958651600281145f14612bd0575050612af8612af3612aed8861216b565b516132b4565b613302565b95612b0e612b0788888461336f565b8092611f74565b965111612bb25715612b455750612b25905161206e565b1161034f575111612b3c57612aed6102c891612178565b506102c8612a27565b919094612b52865161206e565b821461034f5780612b70610523612b6a600194612178565b51612e4b565b15612b9357612b81612b8791612178565b516132f4565b915b0191949094612a9b565b612b9f612bac91612178565b5160208101519051902090565b91612b89565b505091509250612bc391505161206e565b1161034f576102c8612a27565b6011909791939794929414612be9575b50600190612b89565b959380925094929094518314155f14612cc85760ff612c43612c3d612c37612c118787612a69565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b94611f66565b9316601081101561034f57612c61612c5b8289612188565b516132de565b15612c835750505050612c769192505161206e565b0361034f576102c8612a27565b86612c9b610523612b6a84600196989a97999b612188565b15612cb557612cad91612b8191612188565b915b90612be0565b612cc291612b9f91612188565b91612caf565b505050612cd5905161206e565b0361034f57612aed6102c89161215a565b50612cfa612cf48484612188565b51613277565b861415612ab8565b50612d10612b9f8585612188565b821415612aad565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b509050612da892507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421915014612896565b6102c8612a27565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612ddf57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102c893602081519101845af43d15612e43573d91612e2783610762565b92612e35604051948561073f565b83523d5f602085013e613413565b606091613413565b8051156126ed57602060c0910151515f1a10612e6657600190565b5f90565b8051156126ed575f9060208101908151612e8381612ecb565b81018091116118e8579151905181018091116118e85791905b828110612ea95750905090565b612eb281612f36565b81018091116118e857612ec59091611c5d565b90612e9c565b515f1a6080811015612edc57505f90565b60b881108015612f20575b15612ef25750600190565b60c0811015612f11576102c890612f0c9060b75b906120e4565b611f66565b6102c890612f0c9060f7612f06565b5060c08110158015612ee7575060f88110612ee7565b80515f1a906080821015612f4b575050600190565b60b8821015612f615750612f0c6102c8916120a9565b60c0821015612fa25760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015612fb85750612f0c6102c89161207c565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b9060208201916130008351612ecb565b9251908382018092116118e857519283039283116118e8579190565b908160011b91808304600214901517156118e857565b1561303957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b9061308f5f613080845161307b811515612896565b61301c565b61308a6001612896565b6120e4565b9061309982612a42565b925f91825b6130a8855f611f74565b84101561316857613123612c3d6130a8926130c38760011690565b61312b577f0f0000000000000000000000000000000000000000000000000000000000000061310d613104612c37612c116130fe8c60011c90565b8b612a69565b60041c600f1690565b60f81b165f1a61311d828b612a69565b53611f66565b93905061309e565b7f0f0000000000000000000000000000000000000000000000000000000000000061310d613162612c37612c116130fe8c60011c90565b60ff1690565b91509250611e159150835114613032565b6131998261318d835161307b811515612896565b61308a81831115612896565b906131a382612a42565b9383925f5b6131b28287611f74565b851015613265579061322561321f6131b2936131ce8860011690565b61322e577f0f0000000000000000000000000000000000000000000000000000000000000061320f613104612c37612c116132098d60011c90565b8c612a69565b60f81b165f1a61311d828c612a69565b95611f66565b949091506131a8565b7f0f0000000000000000000000000000000000000000000000000000000000000061320f613162612c37612c116132098d60011c90565b9250509250611e159150835114613032565b8051602081101561328f575060208101519051902090565b90602001512060405160208101918252602081526132ae60408261073f565b51902090565b80511561034f576132c76102c891612ff0565b6132d381939293612a42565b9283602001906134bb565b60018151036126ed5760200151515f1a60801490565b6132fd90612ff0565b902090565b9081511561034f57600f61331e613104612c37612c118661216b565b168061333157506102c860025f93613179565b6001810361334657506102c860015f93613179565b6002810361335c57506102c86002600193613179565b60030361034f576102c860018093613179565b91905f5b8381018082116118e8578251811080613409575b15613401576133b77fff000000000000000000000000000000000000000000000000000000000000009184612a69565b51167fff000000000000000000000000000000000000000000000000000000000000006133e48386612a69565b511690036133fa576133f590611c5d565b613373565b9250505090565b509250505090565b5083518210613387565b90613450575080511561342857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806134a3575b613461575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613459565b601f81116118e8576101000a90565b9091801561352e575b60208110156134fe57806134d757505050565b6134eb6134e66134f0926120d6565b6134ac565b61206e565b905182518216911916179052565b919080518252602081018091116118e85790602081018091116118e85791601f198101908111156134c457611c30565b50505056f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + ///0x60e03461017c57601f61430438819003918201601f19168301916001600160401b0383118484101761018057808492604094855283398101031261017c5780516001600160a01b0381169182820361017c576020015191306080521561016d57811561015e5760a05260c0525f5160206142e45f395f51905f525460ff8160401c1661014f576002600160401b03196001600160401b038216016100f9575b60405161414f908161019582396080518181816109e30152610bd3015260a0518181816107fa0152611f5d015260c0518181816103f30152818161051d01528181610d2b01528181610fa10152818161147701526127110152f35b6001600160401b0319166001600160401b039081175f5160206142e45f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61009e565b63f92ee8a960e01b5f5260045ffd5b633212217560e21b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461029f5780631c8081ed1461029a5780632262389714610295578063285f2446146102905780633198eb101461028b578063362b8154146102865780634a5723db146102815780634eb4f97a1461027c5780634f1ef2861461027757806352d1902d14610272578063563344b61461026d578063567f3b3e146102685780635a633080146102635780635e84009d1461025e5780635f7907431461025957806360630122146102545780636b4d17ad1461024f5780636ba3d17f1461024a5780636cfadeb514610245578063709ba44a146101fa578063715018a6146102405780637d4588b11461023b5780637d85a281146102365780637e26965d146102315780638a5f7e6d1461022c5780638da5cb5b14610227578063900cf0cf14610222578063a55223711461021d578063a6e5e12514610218578063ad3cb1cc14610213578063cd0f45d21461020e578063ce537c9f14610209578063daac1a5614610204578063dc027d6b146101ff578063e18b4dae146101fa578063e48465b7146101f5578063f2fde38b146101f0578063f4030228146101eb578063f5ec3ad0146101e6578063fe4b84df146101e15763ffa1ad74146101dc575f80fd5b6124e9565b612291565b612243565b6120e2565b612094565b611f2f565b6112a0565b611ef3565b611e9c565b611e27565b611dd9565b611d63565b611d04565b611cca565b611c8e565b611c3c565b611828565b611735565b6113ec565b611377565b6112bb565b611252565b6111fb565b6111e0565b611132565b6110f8565b611065565b611009565b610f1d565b610c23565b610bac565b610997565b61085a565b61081e565b6107ce565b610502565b610416565b6103dc565b610393565b6102eb565b90602080835192838152019201905f5b8181106102c15750505090565b82518452602093840193909201916001016102b4565b9060206102e89281815201906102a4565b90565b3461038f575f60031936011261038f576040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015480825260208201907fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f5260205f20905f5b818110610379576103758561036981870382610907565b604051918291826102d7565b0390f35b8254845260209093019260019283019201610352565b5f80fd5b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461038f57604060031936011261038f576004356024359061045a7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b3461038f57602060031936011261038f5761051b610499565b7f000000000000000000000000000000000000000000000000000000000000000090610545612c07565b61056673ffffffffffffffffffffffffffffffffffffffff82161515612562565b610571821515612591565b61058261057d83613142565b6125c0565b6105f66105f26105eb846105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b610778575b61067081610630845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b9061077361073a6105eb875f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b6107c96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461261c565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6105fb565b3461038f575f60031936011261038f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a405602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761090257604052565b6108b9565b90601f601f19910116810190811067ffffffffffffffff82111761090257604052565b67ffffffffffffffff811161090257601f01601f191660200190565b9291926109528261092a565b916109606040519384610907565b82948184528183011161038f578281602093845f960137010152565b9080601f8301121561038f578160206102e893359101610946565b604060031936011261038f576109ab610499565b60243567ffffffffffffffff811161038f576109cb90369060040161097c565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610b6a575b50610b4257610a1b612c07565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610b11575b50610ab0577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610ae457610ae29250612fdf565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610b3491945060203d602011610b3b575b610b2c8183610907565b810190612bf8565b925f610a69565b503d610b22565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610a0e565b3461038f575f60031936011261038f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b425760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461038f57608060031936011261038f57600435610c3f6104bc565b610c476104df565b606435801515810361038f57610c5b612c07565b610c7c73ffffffffffffffffffffffffffffffffffffffff84161515612562565b610c87841515612591565b610c9361057d85613142565b610cef6105f26105eb866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b610e8c575b610d2983610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610dcb575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e2482610df373ffffffffffffffffffffffffffffffffffffffff610e8595161515612562565b610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e55845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610d51565b610eb96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461261c565b610cf4565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020838186019501011161038f57565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020808501948460051b01011161038f57565b3461038f57606060031936011261038f5760043567ffffffffffffffff811161038f57610f4e903690600401610ebe565b9060243567ffffffffffffffff811161038f57610f6f903690600401610eec565b6044939193359067ffffffffffffffff821161038f57610fcc94610f9a610fc5933690600401610eec565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612cd1565b3691610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052610ae260ff60405f20541661262f565b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f576004357fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401548110156110f3577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f527fdaac75c40bd42f199572623979cd72d831e7903a136ecb1935e6fa006548c8220154604051908152602090f35b61294a565b3461038f575f60031936011261038f5760206040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4008152f35b3461038f57602060031936011261038f576004356111727fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2060405190805480835260208301915f5260205f20905f5b8181106111ca576103758561036981870382610907565b82548452602090930192600192830192016111b3565b3461038f575f60031936011261038f57602060405160028152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20905f52602052602060405f2054604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052602060ff60405f2054166040519015158152f35b3461038f575f60031936011261038f57602060405160038152f35b3461038f575f60031936011261038f576112d3612c07565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461038f57602060031936011261038f576004356113b77fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c602052602060405f2054604051908152f35b3461038f57602060031936011261038f57600435611408612c07565b61141961141482613329565b61265e565b61147561144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f000000000000000000000000000000000000000000000000000000000000000081036116a0575b807fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400546114fb6105f26105eb846105de855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b611549575b507fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f916105de61157f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b556115ad6107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461268d565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354156115dc575b805f611500565b61165261162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a261261c565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055565b61169b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6115d5565b6116d461144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b611730611708825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61149d565b3461038f5761010060031936011261038f5760043560243560443567ffffffffffffffff811161038f5761176d903690600401610ebe565b60649391933567ffffffffffffffff811161038f57611790903690600401610eec565b60849291923567ffffffffffffffff811161038f576117b3903690600401610eec565b60a49291923567ffffffffffffffff811161038f576117d6903690600401610ebe565b93909260c43567ffffffffffffffff811161038f576117f9903690600401610eec565b97909660e4359b67ffffffffffffffff8d1161038f57611820610ae29d3690600401610eec565b9c909b6126f7565b3461038f57606060031936011261038f5760043560243567ffffffffffffffff811161038f5761185c903690600401610eec565b9060443567ffffffffffffffff811161038f5761187d903690600401610eec565b61194d61191c866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400979597546118ef6118ea6105f26105eb866105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b612888565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b54604051602081019061194481611936878b8a8c886128f4565b03601f198101835282610907565b5190201461291b565b5f5b828110611af157611a006119d5876105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4005482817f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a35f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b611a2d6107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461268d565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035415611a5657005b611aa861162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a261261c565b610ae27fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b80611aff6001928488612977565b3580611b0d575b500161194f565b611c34611c2c611b1e84888a612977565b35611b7a81611b757fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b61326a565b50611bcd7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b60205260405f2090565b611bd8858254612995565b90556105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b918254612995565b90555f611b06565b3461038f575f60031936011261038f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054604051908152f35b3461038f575f60031936011261038f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a404602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461038f575f60031936011261038f576040805190611d828183610907565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a406602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f57600435611e677fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154604051908152f35b3461038f57604060031936011261038f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361206c57817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205261205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461038f57602060031936011261038f57610ae26120b0610499565b6120b8612c07565b6129a2565b90916120d46102e8936040845260408401906102a4565b9160208184039101526102a4565b3461038f57606060031936011261038f57600435602435906044356121297fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548310612533565b815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205261215e8360405f2054612b05565b8115801561223a575b612232575b5061217681612b2a565b9161218082612b2a565b935f5b83811061219957604051806103758888836120bd565b6001906122206121e36121d3865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b6121dd8487612995565b906132c2565b806121ee848a612ba9565b526105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b5461222b8289612ba9565b5201612183565b90505f61216c565b50808211612167565b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a407602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff6122ea604084901c60ff16159367ffffffffffffffff1690565b16801590816124e1575b60011490816124d7575b1590816124ce575b506124a657612387908261237e60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61242b57612bbd565b61238d57005b6123f87fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2908060208101612067565b6124a1680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612bbd565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f612306565b303b1591506122fe565b8391506122f4565b3461038f575f60031936011261038f576020604051620f42408152f35b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b1561253a57565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561256957565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561259857565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b156125c757565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f19811461262a5760010190565b6125ef565b1561263657565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561266557565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b801561262a575f190190565b156126a057565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b156126cf57565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a61270f9496989a8f87612cd1565b7f000000000000000000000000000000000000000000000000000000000000000081146128665792612802959261280a9895926127d56106e8876127836128179f9c996105eb905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b15612819576125066127d06105eb61279c36888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205260405f2090565b6126c8565b956040516127f9816119366020820194856020600391939293604081019481520152565b51902096612ec9565b923691610946565b602081519101201461262f565b565b6125066128616105eb61282d36888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2090565b612699565b50505050505050506105eb61279c61281793612883933691610946565b61262f565b1561288f57565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161038f5760209260051b809284830137010190565b929061290d906102e895936040865260408601916128b7565b9260208185039101526128b7565b1561292257565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156110f35760051b0190565b906001820180921161262a57565b9190820180921161262a57565b73ffffffffffffffffffffffffffffffffffffffff168015612a635773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f19820191821161262a57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40820191821161262a57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80820191821161262a57565b602003906020821161262a57565b9190820391821161262a57565b67ffffffffffffffff81116109025760051b60200190565b90612b3482612b12565b612b416040519182610907565b828152601f19612b518294612b12565b0190602036910137565b8051600310156110f35760800190565b8051600210156110f35760600190565b8051601010156110f3576102200190565b8051156110f35760200190565b8051600110156110f35760400190565b80518210156110f35760209160051b010190565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055612be76139cc565b612bef6139cc565b612817336129a2565b9081602091031261038f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612c4757565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b15612c7a57565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612ca957565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b93916105de9396612dfc96612df0947fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054998a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20895f52602052612d4260405f205415612888565b885f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402602052612d7860405f20541515612c73565b612dac6106e88a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b948b6040516127f98161193660208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936118ef851515612ca2565b55565b929190612e0b81612b12565b93612e196040519586610907565b602085838152019160051b81019183831161038f5781905b838210612e3f575050505050565b813567ffffffffffffffff811161038f57602091612e60878493870161097c565b815201910190612e31565b15612e7257565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612ea157565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b93612f1995612f91612fb4612f28612faf612fa3612f19612fce9d6102e89f9c612f9d612f98612f9d9d612f839f612f91612f989f612f28612f23612f1e612f19612f839a612f2e953691610946565b61348c565b613507565b612b5b565b516135b4565b96604051612f6d816119366020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f198101875286610907565b3691612dff565b6135f6565b91613696565b612f1e81511515612e6b565b612b6b565b96604051612f6d8161193660208201948560209181520190565b612fda81511515612e9a565b6135b4565b90813b156130ce5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a280511561309d5761309a91613a23565b50565b5050346130a657565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b80548210156110f3575f5260205f2001905f90565b9161313e918354905f199060031b92831b921b19161790565b9055565b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4026020526040902054613265577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015468010000000000000000811015610902576132106131fa8260018594017fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613110565b81939154905f199060031b92831b921b19161790565b90557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260405f2055600190565b505f90565b5f8281526001820160205260409020546132bc578054906801000000000000000082101561090257826132a76131fa846001809601855584613110565b90558054925f520160205260405f2055600190565b50505f90565b906132cc91613110565b90549060031b1c90565b805480156132fc575f1901906132ec8282613110565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260409020549081156132bc575f1982019082821161262a577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154925f19840193841161262a5783835f956133ff9503613405575b5050506133d17fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4016132d6565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402905f5260205260405f2090565b55600190565b6133d16134659161343c6132cc61346b957fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613110565b9283917fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613110565b90613125565b555f80806133a5565b60405190613481826108e6565b5f6020838281520152565b613494613474565b506020815191604051926134a7846108e6565b835201602082015290565b1561038f57565b906134c382612b12565b6134d06040519182610907565b828152601f196134e08294612b12565b01905f5b8281106134f057505050565b6020906134fb613474565b828285010152016134e4565b9061351182613a67565b1561038f5761351f82613a86565b91613529836134b9565b9060208101805161353981613ae7565b810180911161262a57945f905b8082106135685750506102e8929394613560915190612b05565b9051146134b2565b90956135ac81613579600193613b52565b90604051613588604082610907565b82815281602082015261359b8b8a612ba9565b526135a68a89612ba9565b50612995565b960190613546565b805180151590816135ea575b501561038f576135cf90613c0c565b905190602081106135de575090565b6020036101000a900490565b6021915011155f6135c0565b61360081516134b9565b905f5b815181101561363e578061362261361c60019385612ba9565b5161348c565b61362c8286612ba9565b526136378185612ba9565b5001613603565b505090565b60405190613652602083610907565b5f808352366020840137565b906136688261092a565b6136756040519182610907565b828152601f19612b51829461092a565b9081518110156110f3570160200190565b906136a090613c82565b5f915f6136ab613474565b5084511561399357935f915b8151831015613934578215808061391e575b61038f571580613902575b61038f576136eb6136e58484612ba9565b51613507565b958651600281145f146137ec57505061371461370f61370988612b8c565b51613ed0565b613f1e565b9561372a613723888884613f8b565b8092612995565b9651116137ce571561376157506137419051612a8f565b1161038f575111613758576137096102e891612b99565b506102e8613643565b91909461376e8651612a8f565b821461038f578061378c6105f2613786600194612b99565b51613a67565b156137af5761379d6137a391612b99565b51613f10565b915b01919490946136b7565b6137bb6137c891612b99565b5160208101519051902090565b916137a5565b5050915092506137df915051612a8f565b1161038f576102e8613643565b6011909791939794929414613805575b506001906137a5565b959380925094929094518314155f146138e45760ff61385f61385961385361382d8787613685565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b94612987565b9316601081101561038f5761387d6138778289612ba9565b51613efa565b1561389f575050505061389291925051612a8f565b0361038f576102e8613643565b866138b76105f261378684600196989a97999b612ba9565b156138d1576138c99161379d91612ba9565b915b906137fc565b6138de916137bb91612ba9565b916138cb565b5050506138f19051612a8f565b0361038f576137096102e891612b7b565b506139166139108484612ba9565b51613e93565b8614156136d4565b5061392c6137bb8585612ba9565b8214156136c9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b5090506139c492507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4219150146134b2565b6102e8613643565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156139fb57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102e893602081519101845af43d15613a5f573d91613a438361092a565b92613a516040519485610907565b83523d5f602085013e61402f565b60609161402f565b80511561326557602060c0910151515f1a10613a8257600190565b5f90565b805115613265575f9060208101908151613a9f81613ae7565b810180911161262a5791519051810180911161262a5791905b828110613ac55750905090565b613ace81613b52565b810180911161262a57613ae1909161261c565b90613ab8565b515f1a6080811015613af857505f90565b60b881108015613b3c575b15613b0e5750600190565b60c0811015613b2d576102e890613b289060b75b90612b05565b612987565b6102e890613b289060f7613b22565b5060c08110158015613b03575060f88110613b03565b80515f1a906080821015613b67575050600190565b60b8821015613b7d5750613b286102e891612aca565b60c0821015613bbe5760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015613bd45750613b286102e891612a9d565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b906020820191613c1c8351613ae7565b92519083820180921161262a575192830392831161262a579190565b908160011b918083046002149015171561262a57565b15613c5557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b90613cab5f613c9c8451613c978115156134b2565b613c38565b613ca660016134b2565b612b05565b90613cb58261365e565b925f91825b613cc4855f612995565b841015613d8457613d3f613859613cc492613cdf8760011690565b613d47577f0f00000000000000000000000000000000000000000000000000000000000000613d29613d2061385361382d613d1a8c60011c90565b8b613685565b60041c600f1690565b60f81b165f1a613d39828b613685565b53612987565b939050613cba565b7f0f00000000000000000000000000000000000000000000000000000000000000613d29613d7e61385361382d613d1a8c60011c90565b60ff1690565b915092506128179150835114613c4e565b613db582613da98351613c978115156134b2565b613ca6818311156134b2565b90613dbf8261365e565b9383925f5b613dce8287612995565b851015613e815790613e41613e3b613dce93613dea8860011690565b613e4a577f0f00000000000000000000000000000000000000000000000000000000000000613e2b613d2061385361382d613e258d60011c90565b8c613685565b60f81b165f1a613d39828c613685565b95612987565b94909150613dc4565b7f0f00000000000000000000000000000000000000000000000000000000000000613e2b613d7e61385361382d613e258d60011c90565b92505092506128179150835114613c4e565b80516020811015613eab575060208101519051902090565b9060200151206040516020810191825260208152613eca604082610907565b51902090565b80511561038f57613ee36102e891613c0c565b613eef8193929361365e565b9283602001906140d7565b60018151036132655760200151515f1a60801490565b613f1990613c0c565b902090565b9081511561038f57600f613f3a613d2061385361382d86612b8c565b1680613f4d57506102e860025f93613d95565b60018103613f6257506102e860015f93613d95565b60028103613f7857506102e86002600193613d95565b60030361038f576102e860018093613d95565b91905f5b83810180821161262a578251811080614025575b1561401d57613fd37fff000000000000000000000000000000000000000000000000000000000000009184613685565b51167fff000000000000000000000000000000000000000000000000000000000000006140008386613685565b51169003614016576140119061261c565b613f8f565b9250505090565b509250505090565b5083518210613fa3565b9061406c575080511561404457805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806140bf575b61407d575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614075565b601f811161262a576101000a90565b9091801561414a575b602081101561411a57806140f357505050565b61410761410261410c92612af7565b6140c8565b612a8f565b905182518216911916179052565b9190805182526020810180911161262a57906020810180911161262a5791601f198101908111156140e0576125ef565b50505056f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xE04a\x01|W`\x1Fa6\xE88\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01\x80W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x01|W\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x91\x82\x82\x03a\x01|W` \x01Q\x910`\x80R\x15a\x01mW\x81\x15a\x01^W`\xA0R`\xC0R_Q` a6\xC8_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01OW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xF9W[`@Qa53\x90\x81a\x01\x95\x829`\x80Q\x81\x81\x81a\x08\x1B\x01Ra\n\x0B\x01R`\xA0Q\x81\x81\x81a\x06p\x01Ra\x16\xBC\x01R`\xC0Q\x81\x81\x81a\x03\xA2\x01R\x81\x81a\x04\x8D\x01R\x81\x81a\x0B\x05\x01R\x81\x81a\x0C\xDF\x01R\x81\x81a\x10%\x01Ra\x1DM\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a6\xC8_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x9EV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c2\x12!u`\xE2\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x7FW\x80c\x1C\x80\x81\xED\x14a\x02zW\x80c\"b8\x97\x14a\x02uW\x80c(_$F\x14a\x02pW\x80c1\x98\xEB\x10\x14a\x02kW\x80c6+\x81T\x14a\x02fW\x80cJW#\xDB\x14a\x02aW\x80cN\xB4\xF9z\x14a\x02\\W\x80cO\x1E\xF2\x86\x14a\x02WW\x80cR\xD1\x90-\x14a\x02RW\x80cV3D\xB6\x14a\x02MW\x80cV\x7F;>\x14a\x02HW\x80cZc0\x80\x14a\x02CW\x80c^\x84\0\x9D\x14a\x02>W\x80c`c\x01\"\x14a\x029W\x80ckM\x17\xAD\x14a\x024W\x80ck\xA3\xD1\x7F\x14a\x02/W\x80cl\xFA\xDE\xB5\x14a\x02*W\x80cp\x9B\xA4J\x14a\x01\xDFW\x80cqP\x18\xA6\x14a\x02%W\x80c}E\x88\xB1\x14a\x02 W\x80c}\x85\xA2\x81\x14a\x02\x1BW\x80c~&\x96]\x14a\x02\x16W\x80c\x8A_~m\x14a\x02\x11W\x80c\x8D\xA5\xCB[\x14a\x02\x0CW\x80c\x90\x0C\xF0\xCF\x14a\x02\x07W\x80c\xA5R#q\x14a\x02\x02W\x80c\xA6\xE5\xE1%\x14a\x01\xFDW\x80c\xAD<\xB1\xCC\x14a\x01\xF8W\x80c\xCD\x0FE\xD2\x14a\x01\xF3W\x80c\xCES|\x9F\x14a\x01\xEEW\x80c\xDA\xAC\x1AV\x14a\x01\xE9W\x80c\xDC\x02}k\x14a\x01\xE4W\x80c\xE1\x8BM\xAE\x14a\x01\xDFW\x80c\xE4\x84e\xB7\x14a\x01\xDAW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xD5W\x80c\xF4\x03\x02(\x14a\x01\xD0W\x80c\xF5\xEC:\xD0\x14a\x01\xCBWc\xFEK\x84\xDF\x14a\x01\xC6W_\x80\xFD[a\x19\x1CV[a\x18\xEDV[a\x18\x03V[a\x17\xB5V[a\x16\x8EV[a\x0E\xACV[a\x16qV[a\x169V[a\x16\x03V[a\x15\xD4V[a\x15^V[a\x15\x1EV[a\x14\xE4V[a\x14\xC8V[a\x14vV[a\x12YV[a\x11fV[a\x0F\xB9V[a\x0F\x83V[a\x0E\xC7V[a\x0E}V[a\x0EEV[a\x0E*V[a\r\xBAV[a\reV[a\r(V[a\x0C[V[a\n[V[a\t\xE4V[a\x07\xCFV[a\x06\xB1V[a\x06\x94V[a\x06DV[a\x04rV[a\x03\xC5V[a\x03\x8BV[a\x03aV[a\x02\xCBV[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x02\xA1WPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x02\x94V[\x90` a\x02\xC8\x92\x81\x81R\x01\x90a\x02\x84V[\x90V[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@Q\x80` `\x01T\x91\x82\x81R\x01\x90`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x90_[\x81\x81\x10a\x039Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[`@Q\x91\x82\x91\x82a\x02\xB7V[\x03\x90\xF3[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x03\x12V[_\x80\xFD[_R`\x05` R`@_ \x90V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\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\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90a\x03\xE9_T\x82\x10a\x1BtV[_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`D5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\x04\x8Ba\x04\tV[\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\x90a\x04\xB5a!\xC6V[a\x04\xD6s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x1B\xA3V[a\x04\xE1\x82\x15\x15a\x1B\xD2V[a\x04\xF2a\x04\xED\x83a&xV[a\x1C\x01V[a\x05'a\x05#a\x05\x1C\x84a\x05\x0F_T_R`\t` R`@_ \x90V[\x90_R` R`@_ \x90V[T`\xFF\x16\x90V[\x15\x90V[a\x06,W[a\x05\x82\x81a\x05B\x84_R`\x04` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\x06'a\x05\xEEa\x05\x1C\x87_R`\x06` R`@_ \x90V[`@Q\x93\x84\x93\x84\x91\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@\x92\x95\x94\x81``\x86\x01\x97\x16\x85R\x16` \x84\x01R\x15\x15\x91\x01RV[\x03\x90\xA3\0[a\x06?a\x06:`\x03Ta\x1C]V[`\x03UV[a\x05,V[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x03T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x05` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[a\x06\xF1V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x07\x8A\x82a\x07bV[\x91a\x07\x98`@Q\x93\x84a\x07?V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03OW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03OW\x81` a\x02\xC8\x935\x91\x01a\x07~V[`@`\x03\x196\x01\x12a\x03OWa\x07\xE3a\x04\tV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x08\x03\x906\x90`\x04\x01a\x07\xB4V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\t\xA2W[Pa\tzWa\x08Sa!\xC6V[`@Q\x91\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` \x83`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16Z\xFA_\x93\x81a\tIW[Pa\x08\xE8W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\x04R`$_\xFD[\x90\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\t\x1CWa\t\x1A\x92Pa%\x15V[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\tl\x91\x94P` =` \x11a\tsW[a\td\x81\x83a\x07?V[\x81\x01\x90a!\xB7V[\x92_a\x08\xA1V[P=a\tZV[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x08FV[4a\x03OW_`\x03\x196\x01\x12a\x03OWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\tzW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03OW`\x80`\x03\x196\x01\x12a\x03OW`\x045a\nwa\x04,V[a\n\x7Fa\x04OV[`d5\x80\x15\x15\x81\x03a\x03OWa\n\x93a!\xC6V[a\n\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a\x1B\xA3V[a\n\xBF\x84\x15\x15a\x1B\xD2V[a\n\xCBa\x04\xED\x85a&xV[a\n\xE8a\x05#a\x05\x1C\x86a\x05\x0F_T_R`\t` R`@_ \x90V[a\x0B\xE9W[a\x0B\x03\x83a\x05B\x86_R`\x04` R`@_ \x90V[\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\x84\x03a\x0BfW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[a\x0B\xA0\x82a\x0B\x8Es\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0B\xE2\x95\x16\x15\x15a\x1B\xA3V[a\x05B\x86_R`\x05` R`@_ \x90V[a\x0B\xB2\x84_R`\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\x0B+V[a\x0B\xF7a\x06:`\x03Ta\x1C]V[a\n\xEDV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03OWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03OWV[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\x8C\x906\x90`\x04\x01a\x0B\xFCV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\xAD\x906\x90`\x04\x01a\x0C*V[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03OWa\r\n\x94a\x0C\xD8a\r\x03\x936\x90`\x04\x01a\x0C*V[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\"aV[6\x91a\x07~V[` \x81Q\x91\x01 _R`\x08` Ra\t\x1A`\xFF`@_ T\x16a\x1CkV[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01T`@Q\x90\x81R` \x90\xF3[a\x1F)V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\r\xDA_T\x82\x10a\x1BtV[_R`\x0C` R`@_ `@Q\x90\x81` \x82T\x91\x82\x81R\x01\x91_R` _ \x90_[\x81\x81\x10a\x0E\x14Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\r\xFDV[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x02\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x03\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OWa\x0E\xDFa!\xC6V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xA3_T\x82\x10a\x1BtV[_R`\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xD5a!\xC6V[a\x0F\xE6a\x0F\xE1\x82a'\xC7V[a\x1C\x9AV[a\x10#a\x0F\xFB\x82_R`\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\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\x81\x03a\x11\x0FW[\x80_Ta\x10ja\x05#a\x05\x1C\x84a\x05\x0F\x85_R`\t` R`@_ \x90V[a\x10\x98W[P_T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\x0Fa\x10\xAF\x92_R`\n` R`@_ \x90V[Ua\x10\xBEa\x06:`\x03Ta\x1C\xC9V[`\x03T\x15a\x10\xCEW[\x80_a\x10oV[a\x10\xFD_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1C]V[_Ua\x11\n`\x01T`\x03UV[a\x10\xC7V[a\x11$a\x0F\xFB\x82_R`\x05` R`@_ \x90V[a\x11aa\x119\x82_R`\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x10KV[4a\x03OWa\x01\0`\x03\x196\x01\x12a\x03OW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\x9E\x906\x90`\x04\x01a\x0B\xFCV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xC1\x906\x90`\x04\x01a\x0C*V[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xE4\x906\x90`\x04\x01a\x0C*V[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x07\x906\x90`\x04\x01a\x0B\xFCV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12*\x906\x90`\x04\x01a\x0C*V[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03OWa\x12Qa\t\x1A\x9D6\x90`\x04\x01a\x0C*V[\x9C\x90\x9Ba\x1D3V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x8D\x906\x90`\x04\x01a\x0C*V[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\xAE\x906\x90`\x04\x01a\x0C*V[a\x13 a\x12\xEF\x86a\x05\x0F_\x97\x95\x97Ta\x12\xE1a\x12\xDCa\x05#a\x05\x1C\x86a\x05\x0F\x86_R`\t` R`@_ \x90V[a\x1EgV[_R`\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x13\x17\x81a\x13\t\x87\x8B\x8A\x8C\x88a\x1E\xD3V[\x03`\x1F\x19\x81\x01\x83R\x82a\x07?V[Q\x90 \x14a\x1E\xFAV[_[\x82\x81\x10a\x13\xE8Wa\x13\x94a\x13i\x87a\x05\x0F_T\x82\x81\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3_R`\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x13\xA2a\x06:`\x03Ta\x1C\xC9V[`\x03T\x15a\x13\xACW\0[a\x13\xDB_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1C]V[_Ua\t\x1A`\x01T`\x03UV[\x80a\x13\xF6`\x01\x92\x84\x88a\x1FVV[5\x80a\x14\x04W[P\x01a\x13\"V[a\x14na\x14fa\x14\x15\x84\x88\x8Aa\x1FVV[5a\x142\x81a\x14-_T_R`\x0C` R`@_ \x90V[a&\xF2V[Pa\x14F_T_R`\x0B` R`@_ \x90V[a\x14Q\x85\x82Ta\x1FtV[\x90Ua\x05\x0F_T_R`\r` R`@_ \x90V[\x91\x82Ta\x1FtV[\x90U_a\x13\xFDV[4a\x03OW_`\x03\x196\x01\x12a\x03OW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` _T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@\x80Q\x90a\x15}\x81\x83a\x07?V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x16#_T\x82\x10a\x1BtV[_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x01T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x17\x8DW\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R`\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R`\x08` Ra\x17s`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\t\x1Aa\x17\xD1a\x04\tV[a\x17\xD9a!\xC6V[a\x1F\x81V[\x90\x91a\x17\xF5a\x02\xC8\x93`@\x84R`@\x84\x01\x90a\x02\x84V[\x91` \x81\x84\x03\x91\x01Ra\x02\x84V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5\x90`D5a\x18*_T\x83\x10a\x1BtV[\x81_R`\x0C` R`@_ T\x83\x81\x03\x90\x81\x11a\x18\xE8W\x81\x15\x80\x15a\x18\xDFW[a\x18\xD7W[Pa\x18Y\x81a!\tV[\x91a\x18c\x82a!\tV[\x93_[\x83\x81\x10a\x18|W`@Q\x80a\x035\x88\x88\x83a\x17\xDEV[`\x01\x90a\x18\xC5a\x18\xA7a\x18\x97\x86_R`\x0C` R`@_ \x90V[a\x18\xA1\x84\x87a\x1FtV[\x90a'`V[\x80a\x18\xB2\x84\x8Aa!\x88V[Ra\x05\x0F\x86_R`\r` R`@_ \x90V[Ta\x18\xD0\x82\x89a!\x88V[R\x01a\x18fV[\x90P_a\x18OV[P\x80\x82\x11a\x18JV[a\x1C0V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19u`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x1BlW[`\x01\x14\x90\x81a\x1BbW[\x15\x90\x81a\x1BYW[Pa\x1B1Wa\x1A\x12\x90\x82a\x1A\t`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x1A\xB6Wa!\x9CV[a\x1A\x18W\0[a\x1A\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a\x17\x88V[a\x1B,h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a!\x9CV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x19\x91V[0;\x15\x91Pa\x19\x89V[\x83\x91Pa\x19\x7FV[\x15a\x1B{WV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xAAWV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xD9WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\x08WV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a\x18\xE8W`\x01\x01\x90V[\x15a\x1CrWV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\xA1WV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a\x18\xE8W_\x19\x01\x90V[\x15a\x1C\xDCWV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1D\x0BWV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa\x1DK\x94\x96\x98\x9A\x8F\x87a\"aV[\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\x81\x14a\x1EEW\x92a\x1E\0\x95\x92a\x1E\x08\x98\x95\x92a\x1D\xD3a\x05\xBB\x87a\x1D\xA0a\x1E\x15\x9F\x9C\x99a\x05\x1C\x90_R`\x06` R`@_ \x90V[\x15a\x1E\x17Wa\x03Sa\x1D\xCEa\x05\x1Ca\x1D\xB96\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x08` R`@_ \x90V[a\x1D\x04V[\x95`@Qa\x1D\xF7\x81a\x13\t` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a#\xFFV[\x926\x91a\x07~V[` \x81Q\x91\x01 \x14a\x1CkV[V[a\x03Sa\x1E@a\x05\x1Ca\x1E+6\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x07` R`@_ \x90V[a\x1C\xD5V[PPPPPPPPa\x05\x1Ca\x1D\xB9a\x1E\x15\x93a\x1Eb\x936\x91a\x07~V[a\x1CkV[\x15a\x1EnWV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x1E\xEC\x90a\x02\xC8\x95\x93`@\x86R`@\x86\x01\x91a\x1E\x96V[\x92` \x81\x85\x03\x91\x01Ra\x1E\x96V[\x15a\x1F\x01WV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xB5W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a\x18\xE8WV[\x91\x90\x82\x01\x80\x92\x11a\x18\xE8WV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a BWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a\x18\xE8WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a\x18\xE8WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a\x18\xE8WV[` \x03\x90` \x82\x11a\x18\xE8WV[\x91\x90\x82\x03\x91\x82\x11a\x18\xE8WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x05\x1B` \x01\x90V[\x90a!\x13\x82a \xF1V[a! `@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!0\x82\x94a \xF1V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\r\xB5W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\r\xB5W``\x01\x90V[\x80Q`\x10\x10\x15a\r\xB5Wa\x02 \x01\x90V[\x80Q\x15a\r\xB5W` \x01\x90V[\x80Q`\x01\x10\x15a\r\xB5W`@\x01\x90V[\x80Q\x82\x10\x15a\r\xB5W` \x91`\x05\x1B\x01\x01\x90V[_Ua!\xA6a-\xB0V[a!\xAEa-\xB0V[a\x1E\x153a\x1F\x81V[\x90\x81` \x91\x03\x12a\x03OWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\"\x06WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a\"9WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x92\x91_T\x96\x87_R`\n` R`@_ \x86_R` Ra\"\x87`@_ T\x15a\x1EgV[\x85_R`\x02` R`@_ T\x15a#\rWa#\n\x96a\x05\x0F\x95a\"\xFE\x95a\"\xBAa\x05\xBB\x8A_R`\x04` R`@_ \x90V[\x94\x8B`@Qa\x1D\xF7\x81a\x13\t` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x12\xE1\x85\x15\x15a\"2V[UV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x92\x91\x90a#A\x81a \xF1V[\x93a#O`@Q\x95\x86a\x07?V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03OW\x81\x90[\x83\x82\x10a#uWPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OW` \x91a#\x96\x87\x84\x93\x87\x01a\x07\xB4V[\x81R\x01\x91\x01\x90a#gV[\x15a#\xA8WV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a#\xD7WV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a$O\x95a$\xC7a$\xEAa$^a$\xE5a$\xD9a$Oa%\x04\x9Da\x02\xC8\x9F\x9Ca$\xD3a$\xCEa$\xD3\x9Da$\xB9\x9Fa$\xC7a$\xCE\x9Fa$^a$Ya$Ta$Oa$\xB9\x9Aa$d\x956\x91a\x07~V[a(pV[a(\xEBV[a!:V[Qa)\x98V[\x96`@Qa$\xA3\x81a\x13\t` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\x07?V[6\x91a#5V[a)\xDAV[\x91a*zV[a$T\x81Q\x15\x15a#\xA1V[a!JV[\x96`@Qa$\xA3\x81a\x13\t` \x82\x01\x94\x85` \x91\x81R\x01\x90V[a%\x10\x81Q\x15\x15a#\xD0V[a)\x98V[\x90\x81;\x15a&\x04Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a%\xD3Wa%\xD0\x91a.\x07V[PV[PP4a%\xDCWV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\r\xB5W_R` _ \x01\x90_\x90V[\x91a&t\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R`\x02` R`@\x90 Ta&\xEDW`\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x07:W`\x01\x81\x01`\x01U`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01\x81\x90U`\x01T\x90_R`\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta'ZW\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\x07:W\x82a'Ea'/\x84`\x01\x80\x96\x01\x85U\x84a&FV[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a'j\x91a&FV[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a'\x9AW_\x19\x01\x90a'\x8A\x82\x82a&FV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x02` R`@\x90 T\x90\x81\x15a'ZW_\x19\x82\x01\x90\x82\x82\x11a\x18\xE8W`\x01T\x92_\x19\x84\x01\x93\x84\x11a\x18\xE8W\x83\x83_\x95a(!\x95\x03a('W[PPPa(\x12`\x01a'tV[`\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a(\x12a(I\x91a(?a'ja(O\x95`\x01a&FV[\x92\x83\x91`\x01a&FV[\x90a&[V[U_\x80\x80a(\x05V[`@Q\x90a(e\x82a\x07\x1EV[_` \x83\x82\x81R\x01RV[a(xa(XV[P` \x81Q\x91`@Q\x92a(\x8B\x84a\x07\x1EV[\x83R\x01` \x82\x01R\x90V[\x15a\x03OWV[\x90a(\xA7\x82a \xF1V[a(\xB4`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a(\xC4\x82\x94a \xF1V[\x01\x90_[\x82\x81\x10a(\xD4WPPPV[` \x90a(\xDFa(XV[\x82\x82\x85\x01\x01R\x01a(\xC8V[\x90a(\xF5\x82a.KV[\x15a\x03OWa)\x03\x82a.jV[\x91a)\r\x83a(\x9DV[\x90` \x81\x01\x80Qa)\x1D\x81a.\xCBV[\x81\x01\x80\x91\x11a\x18\xE8W\x94_\x90[\x80\x82\x10a)LWPPa\x02\xC8\x92\x93\x94a)D\x91Q\x90a \xE4V[\x90Q\x14a(\x96V[\x90\x95a)\x90\x81a)]`\x01\x93a/6V[\x90`@Qa)l`@\x82a\x07?V[\x82\x81R\x81` \x82\x01Ra)\x7F\x8B\x8Aa!\x88V[Ra)\x8A\x8A\x89a!\x88V[Pa\x1FtV[\x96\x01\x90a)*V[\x80Q\x80\x15\x15\x90\x81a)\xCEW[P\x15a\x03OWa)\xB3\x90a/\xF0V[\x90Q\x90` \x81\x10a)\xC2WP\x90V[` \x03a\x01\0\n\x90\x04\x90V[`!\x91P\x11\x15_a)\xA4V[a)\xE4\x81Qa(\x9DV[\x90_[\x81Q\x81\x10\x15a*\"W\x80a*\x06a*\0`\x01\x93\x85a!\x88V[Qa(pV[a*\x10\x82\x86a!\x88V[Ra*\x1B\x81\x85a!\x88V[P\x01a)\xE7V[PP\x90V[`@Q\x90a*6` \x83a\x07?V[_\x80\x83R6` \x84\x017V[\x90a*L\x82a\x07bV[a*Y`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!0\x82\x94a\x07bV[\x90\x81Q\x81\x10\x15a\r\xB5W\x01` \x01\x90V[\x90a*\x84\x90a0fV[_\x91_a*\x8Fa(XV[P\x84Q\x15a-wW\x93_\x91[\x81Q\x83\x10\x15a-\x18W\x82\x15\x80\x80a-\x02W[a\x03OW\x15\x80a,\xE6W[a\x03OWa*\xCFa*\xC9\x84\x84a!\x88V[Qa(\xEBV[\x95\x86Q`\x02\x81\x14_\x14a+\xD0WPPa*\xF8a*\xF3a*\xED\x88a!kV[Qa2\xB4V[a3\x02V[\x95a+\x0Ea+\x07\x88\x88\x84a3oV[\x80\x92a\x1FtV[\x96Q\x11a+\xB2W\x15a+EWPa+%\x90Qa nV[\x11a\x03OWQ\x11a+#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a-\xDFWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xC8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a.CW=\x91a.'\x83a\x07bV[\x92a.5`@Q\x94\x85a\x07?V[\x83R=_` \x85\x01>a4\x13V[``\x91a4\x13V[\x80Q\x15a&\xEDW` `\xC0\x91\x01QQ_\x1A\x10a.fW`\x01\x90V[_\x90V[\x80Q\x15a&\xEDW_\x90` \x81\x01\x90\x81Qa.\x83\x81a.\xCBV[\x81\x01\x80\x91\x11a\x18\xE8W\x91Q\x90Q\x81\x01\x80\x91\x11a\x18\xE8W\x91\x90[\x82\x81\x10a.\xA9WP\x90P\x90V[a.\xB2\x81a/6V[\x81\x01\x80\x91\x11a\x18\xE8Wa.\xC5\x90\x91a\x1C]V[\x90a.\x9CV[Q_\x1A`\x80\x81\x10\x15a.\xDCWP_\x90V[`\xB8\x81\x10\x80\x15a/ W[\x15a.\xF2WP`\x01\x90V[`\xC0\x81\x10\x15a/\x11Wa\x02\xC8\x90a/\x0C\x90`\xB7[\x90a \xE4V[a\x1FfV[a\x02\xC8\x90a/\x0C\x90`\xF7a/\x06V[P`\xC0\x81\x10\x15\x80\x15a.\xE7WP`\xF8\x81\x10a.\xE7V[\x80Q_\x1A\x90`\x80\x82\x10\x15a/KWPP`\x01\x90V[`\xB8\x82\x10\x15a/aWPa/\x0Ca\x02\xC8\x91a \xA9V[`\xC0\x82\x10\x15a/\xA2W`\x01\x01Q` \x82\x90\x03`\xB7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFJ\x01\x90V[`\xF8\x82\x10\x15a/\xB8WPa/\x0Ca\x02\xC8\x91a |V[`\x01\x01Q` \x82\x90\x03`\xF7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\n\x01\x90V[\x90` \x82\x01\x91a0\0\x83Qa.\xCBV[\x92Q\x90\x83\x82\x01\x80\x92\x11a\x18\xE8WQ\x92\x83\x03\x92\x83\x11a\x18\xE8W\x91\x90V[\x90\x81`\x01\x1B\x91\x80\x83\x04`\x02\x14\x90\x15\x17\x15a\x18\xE8WV[\x15a09WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x01`\x04R`$_\xFD[\x90a0\x8F_a0\x80\x84Qa0{\x81\x15\x15a(\x96V[a0\x1CV[a0\x8A`\x01a(\x96V[a \xE4V[\x90a0\x99\x82a*BV[\x92_\x91\x82[a0\xA8\x85_a\x1FtV[\x84\x10\x15a1hWa1#a,=a0\xA8\x92a0\xC3\x87`\x01\x16\x90V[a1+W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\ra1\x04a,7a,\x11a0\xFE\x8C`\x01\x1C\x90V[\x8Ba*iV[`\x04\x1C`\x0F\x16\x90V[`\xF8\x1B\x16_\x1Aa1\x1D\x82\x8Ba*iV[Sa\x1FfV[\x93\x90Pa0\x9EV[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\ra1ba,7a,\x11a0\xFE\x8C`\x01\x1C\x90V[`\xFF\x16\x90V[\x91P\x92Pa\x1E\x15\x91P\x83Q\x14a02V[a1\x99\x82a1\x8D\x83Qa0{\x81\x15\x15a(\x96V[a0\x8A\x81\x83\x11\x15a(\x96V[\x90a1\xA3\x82a*BV[\x93\x83\x92_[a1\xB2\x82\x87a\x1FtV[\x85\x10\x15a2eW\x90a2%a2\x1Fa1\xB2\x93a1\xCE\x88`\x01\x16\x90V[a2.W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x0Fa1\x04a,7a,\x11a2\t\x8D`\x01\x1C\x90V[\x8Ca*iV[`\xF8\x1B\x16_\x1Aa1\x1D\x82\x8Ca*iV[\x95a\x1FfV[\x94\x90\x91Pa1\xA8V[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x0Fa1ba,7a,\x11a2\t\x8D`\x01\x1C\x90V[\x92PP\x92Pa\x1E\x15\x91P\x83Q\x14a02V[\x80Q` \x81\x10\x15a2\x8FWP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra2\xAE`@\x82a\x07?V[Q\x90 \x90V[\x80Q\x15a\x03OWa2\xC7a\x02\xC8\x91a/\xF0V[a2\xD3\x81\x93\x92\x93a*BV[\x92\x83` \x01\x90a4\xBBV[`\x01\x81Q\x03a&\xEDW` \x01QQ_\x1A`\x80\x14\x90V[a2\xFD\x90a/\xF0V[\x90 \x90V[\x90\x81Q\x15a\x03OW`\x0Fa3\x1Ea1\x04a,7a,\x11\x86a!kV[\x16\x80a31WPa\x02\xC8`\x02_\x93a1yV[`\x01\x81\x03a3FWPa\x02\xC8`\x01_\x93a1yV[`\x02\x81\x03a3\\WPa\x02\xC8`\x02`\x01\x93a1yV[`\x03\x03a\x03OWa\x02\xC8`\x01\x80\x93a1yV[\x91\x90_[\x83\x81\x01\x80\x82\x11a\x18\xE8W\x82Q\x81\x10\x80a4\tW[\x15a4\x01Wa3\xB7\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a*iV[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a3\xE4\x83\x86a*iV[Q\x16\x90\x03a3\xFAWa3\xF5\x90a\x1C]V[a3sV[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a3\x87V[\x90a4PWP\x80Q\x15a4(W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a4\xA3W[a4aWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a4YV[`\x1F\x81\x11a\x18\xE8Wa\x01\0\n\x90V[\x90\x91\x80\x15a5.W[` \x81\x10\x15a4\xFEW\x80a4\xD7WPPPV[a4\xEBa4\xE6a4\xF0\x92a \xD6V[a4\xACV[a nV[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a\x18\xE8W\x90` \x81\x01\x80\x91\x11a\x18\xE8W\x91`\x1F\x19\x81\x01\x90\x81\x11\x15a4\xC4Wa\x1C0V[PPPV\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", + b"`\xE04a\x01|W`\x1FaC\x048\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01\x80W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x01|W\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x91\x82\x82\x03a\x01|W` \x01Q\x910`\x80R\x15a\x01mW\x81\x15a\x01^W`\xA0R`\xC0R_Q` aB\xE4_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01OW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xF9W[`@QaAO\x90\x81a\x01\x95\x829`\x80Q\x81\x81\x81a\t\xE3\x01Ra\x0B\xD3\x01R`\xA0Q\x81\x81\x81a\x07\xFA\x01Ra\x1F]\x01R`\xC0Q\x81\x81\x81a\x03\xF3\x01R\x81\x81a\x05\x1D\x01R\x81\x81a\r+\x01R\x81\x81a\x0F\xA1\x01R\x81\x81a\x14w\x01Ra'\x11\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` aB\xE4_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x9EV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c2\x12!u`\xE2\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x9FW\x80c\x1C\x80\x81\xED\x14a\x02\x9AW\x80c\"b8\x97\x14a\x02\x95W\x80c(_$F\x14a\x02\x90W\x80c1\x98\xEB\x10\x14a\x02\x8BW\x80c6+\x81T\x14a\x02\x86W\x80cJW#\xDB\x14a\x02\x81W\x80cN\xB4\xF9z\x14a\x02|W\x80cO\x1E\xF2\x86\x14a\x02wW\x80cR\xD1\x90-\x14a\x02rW\x80cV3D\xB6\x14a\x02mW\x80cV\x7F;>\x14a\x02hW\x80cZc0\x80\x14a\x02cW\x80c^\x84\0\x9D\x14a\x02^W\x80c_y\x07C\x14a\x02YW\x80c`c\x01\"\x14a\x02TW\x80ckM\x17\xAD\x14a\x02OW\x80ck\xA3\xD1\x7F\x14a\x02JW\x80cl\xFA\xDE\xB5\x14a\x02EW\x80cp\x9B\xA4J\x14a\x01\xFAW\x80cqP\x18\xA6\x14a\x02@W\x80c}E\x88\xB1\x14a\x02;W\x80c}\x85\xA2\x81\x14a\x026W\x80c~&\x96]\x14a\x021W\x80c\x8A_~m\x14a\x02,W\x80c\x8D\xA5\xCB[\x14a\x02'W\x80c\x90\x0C\xF0\xCF\x14a\x02\"W\x80c\xA5R#q\x14a\x02\x1DW\x80c\xA6\xE5\xE1%\x14a\x02\x18W\x80c\xAD<\xB1\xCC\x14a\x02\x13W\x80c\xCD\x0FE\xD2\x14a\x02\x0EW\x80c\xCES|\x9F\x14a\x02\tW\x80c\xDA\xAC\x1AV\x14a\x02\x04W\x80c\xDC\x02}k\x14a\x01\xFFW\x80c\xE1\x8BM\xAE\x14a\x01\xFAW\x80c\xE4\x84e\xB7\x14a\x01\xF5W\x80c\xF2\xFD\xE3\x8B\x14a\x01\xF0W\x80c\xF4\x03\x02(\x14a\x01\xEBW\x80c\xF5\xEC:\xD0\x14a\x01\xE6W\x80c\xFEK\x84\xDF\x14a\x01\xE1Wc\xFF\xA1\xADt\x14a\x01\xDCW_\x80\xFD[a$\xE9V[a\"\x91V[a\"CV[a \xE2V[a \x94V[a\x1F/V[a\x12\xA0V[a\x1E\xF3V[a\x1E\x9CV[a\x1E'V[a\x1D\xD9V[a\x1DcV[a\x1D\x04V[a\x1C\xCAV[a\x1C\x8EV[a\x1C v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\n\xE4Wa\n\xE2\x92Pa/\xDFV[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\x0B4\x91\x94P` =` \x11a\x0B;W[a\x0B,\x81\x83a\t\x07V[\x81\x01\x90a+\xF8V[\x92_a\niV[P=a\x0B\"V[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\n\x0EV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x0BBW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03\x8FW`\x80`\x03\x196\x01\x12a\x03\x8FW`\x045a\x0C?a\x04\xBCV[a\x0CGa\x04\xDFV[`d5\x80\x15\x15\x81\x03a\x03\x8FWa\x0C[a,\x07V[a\x0C|s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a%bV[a\x0C\x87\x84\x15\x15a%\x91V[a\x0C\x93a\x05}\x85a1BV[a\x0C\xEFa\x05\xF2a\x05\xEB\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x0E\x8CW[a\r)\x83a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\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\x84\x03a\r\xCBW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x91a\x07\x02a\x06\xE8\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0E$\x82a\r\xF3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0E\x85\x95\x16\x15\x15a%bV[a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0EU\x84_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\rQV[a\x0E\xB9a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\x1CV[a\x0C\xF4V[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03\x8FWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03\x8FWV[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0FN\x906\x90`\x04\x01a\x0E\xBEV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0Fo\x906\x90`\x04\x01a\x0E\xECV[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03\x8FWa\x0F\xCC\x94a\x0F\x9Aa\x0F\xC5\x936\x90`\x04\x01a\x0E\xECV[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a,\xD1V[6\x91a\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra\n\xE2`\xFF`@_ T\x16a&/V[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x81\x10\x15a\x10\xF3W\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01_R\x7F\xDA\xACu\xC4\x0B\xD4/\x19\x95rb9y\xCDr\xD81\xE7\x90:\x13n\xCB\x195\xE6\xFA\0eH\xC8\"\x01T`@Q\x90\x81R` \x90\xF3[a)JV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x11r\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%3V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ `@Q\x90\x80T\x80\x83R` \x83\x01\x91_R` _ \x90_[\x81\x81\x10a\x11\xCAWa\x03u\x85a\x03i\x81\x87\x03\x82a\t\x07V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x11\xB3V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x02\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x03\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWa\x12\xD3a,\x07V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x13\xB7\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%3V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x14\x08a,\x07V[a\x14\x19a\x14\x14\x82a3)V[a&^V[a\x14ua\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\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\x81\x03a\x16\xA0W[\x80\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ta\x14\xFBa\x05\xF2a\x05\xEB\x84a\x05\xDE\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x15IW[P\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\xDEa\x15\x7F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[Ua\x15\xADa\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\x8DV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x15\xDCW[\x80_a\x15\0V[a\x16Ra\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&\x1CV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0UV[a\x16\x9B\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x15\xD5V[a\x16\xD4a\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x170a\x17\x08\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x14\x9DV[4a\x03\x8FWa\x01\0`\x03\x196\x01\x12a\x03\x8FW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17m\x906\x90`\x04\x01a\x0E\xBEV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\x90\x906\x90`\x04\x01a\x0E\xECV[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xB3\x906\x90`\x04\x01a\x0E\xECV[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xD6\x906\x90`\x04\x01a\x0E\xBEV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xF9\x906\x90`\x04\x01a\x0E\xECV[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03\x8FWa\x18 a\n\xE2\x9D6\x90`\x04\x01a\x0E\xECV[\x9C\x90\x9Ba&\xF7V[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18\\\x906\x90`\x04\x01a\x0E\xECV[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18}\x906\x90`\x04\x01a\x0E\xECV[a\x19Ma\x19\x1C\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x97\x95\x97Ta\x18\xEFa\x18\xEAa\x05\xF2a\x05\xEB\x86a\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a(\x88V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x19D\x81a\x196\x87\x8B\x8A\x8C\x88a(\xF4V[\x03`\x1F\x19\x81\x01\x83R\x82a\t\x07V[Q\x90 \x14a)\x1BV[_[\x82\x81\x10a\x1A\xF1Wa\x1A\0a\x19\xD5\x87a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x81\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x1A-a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\x8DV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x1AVW\0[a\x1A\xA8a\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&\x1CV[a\n\xE2\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[\x80a\x1A\xFF`\x01\x92\x84\x88a)wV[5\x80a\x1B\rW[P\x01a\x19OV[a\x1C4a\x1C,a\x1B\x1E\x84\x88\x8Aa)wV[5a\x1Bz\x81a\x1Bu\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a2jV[Pa\x1B\xCD\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R`@_ \x90V[a\x1B\xD8\x85\x82Ta)\x95V[\x90Ua\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[\x91\x82Ta)\x95V[\x90U_a\x1B\x06V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW`@\x80Q\x90a\x1D\x82\x81\x83a\t\x07V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x1Eg\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%3V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a lW\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FWa\n\xE2a \xB0a\x04\x99V[a \xB8a,\x07V[a)\xA2V[\x90\x91a \xD4a\x02\xE8\x93`@\x84R`@\x84\x01\x90a\x02\xA4V[\x91` \x81\x84\x03\x91\x01Ra\x02\xA4V[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90`D5a!)\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x83\x10a%3V[\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` Ra!^\x83`@_ Ta+\x05V[\x81\x15\x80\x15a\":W[a\"2W[Pa!v\x81a+*V[\x91a!\x80\x82a+*V[\x93_[\x83\x81\x10a!\x99W`@Q\x80a\x03u\x88\x88\x83a \xBDV[`\x01\x90a\" a!\xE3a!\xD3\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a!\xDD\x84\x87a)\x95V[\x90a2\xC2V[\x80a!\xEE\x84\x8Aa+\xA9V[Ra\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[Ta\"+\x82\x89a+\xA9V[R\x01a!\x83V[\x90P_a!lV[P\x80\x82\x11a!gV[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\"\xEA`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a$\xE1W[`\x01\x14\x90\x81a$\xD7W[\x15\x90\x81a$\xCEW[Pa$\xA6Wa#\x87\x90\x82a#~`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a$+Wa+\xBDV[a#\x8DW\0[a#\xF8\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a gV[a$\xA1h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a+\xBDV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a#\x06V[0;\x15\x91Pa\"\xFEV[\x83\x91Pa\"\xF4V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Qb\x0FB@\x81R\xF3[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[\x15a%:WV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%iWV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\x98WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\xC7WV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a&*W`\x01\x01\x90V[a%\xEFV[\x15a&6WV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&eWV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a&*W_\x19\x01\x90V[\x15a&\xA0WV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&\xCFWV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa'\x0F\x94\x96\x98\x9A\x8F\x87a,\xD1V[\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\x81\x14a(fW\x92a(\x02\x95\x92a(\n\x98\x95\x92a'\xD5a\x06\xE8\x87a'\x83a(\x17\x9F\x9C\x99a\x05\xEB\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x15a(\x19Wa%\x06a'\xD0a\x05\xEBa'\x9C6\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R`@_ \x90V[a&\xC8V[\x95`@Qa'\xF9\x81a\x196` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a.\xC9V[\x926\x91a\tFV[` \x81Q\x91\x01 \x14a&/V[V[a%\x06a(aa\x05\xEBa(-6\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ \x90V[a&\x99V[PPPPPPPPa\x05\xEBa'\x9Ca(\x17\x93a(\x83\x936\x91a\tFV[a&/V[\x15a(\x8FWV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a)\r\x90a\x02\xE8\x95\x93`@\x86R`@\x86\x01\x91a(\xB7V[\x92` \x81\x85\x03\x91\x01Ra(\xB7V[\x15a)\"WV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x10\xF3W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a&*WV[\x91\x90\x82\x01\x80\x92\x11a&*WV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a*cWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a&*WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a&*WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a&*WV[` \x03\x90` \x82\x11a&*WV[\x91\x90\x82\x03\x91\x82\x11a&*WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\t\x02W`\x05\x1B` \x01\x90V[\x90a+4\x82a+\x12V[a+A`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+Q\x82\x94a+\x12V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\x10\xF3W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\x10\xF3W``\x01\x90V[\x80Q`\x10\x10\x15a\x10\xF3Wa\x02 \x01\x90V[\x80Q\x15a\x10\xF3W` \x01\x90V[\x80Q`\x01\x10\x15a\x10\xF3W`@\x01\x90V[\x80Q\x82\x10\x15a\x10\xF3W` \x91`\x05\x1B\x01\x01\x90V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ua+\xE7a9\xCCV[a+\xEFa9\xCCV[a(\x173a)\xA2V[\x90\x81` \x91\x03\x12a\x03\x8FWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a,GWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a,zWV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a,\xA9WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x91a\x05\xDE\x93\x96a-\xFC\x96a-\xF0\x94\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x99\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x89_R` Ra-B`@_ T\x15a(\x88V[\x88_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` Ra-x`@_ T\x15\x15a,sV[a-\xACa\x06\xE8\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x94\x8B`@Qa'\xF9\x81a\x196` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x18\xEF\x85\x15\x15a,\xA2V[UV[\x92\x91\x90a.\x0B\x81a+\x12V[\x93a.\x19`@Q\x95\x86a\t\x07V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03\x8FW\x81\x90[\x83\x82\x10a.?WPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FW` \x91a.`\x87\x84\x93\x87\x01a\t|V[\x81R\x01\x91\x01\x90a.1V[\x15a.rWV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a.\xA1WV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a/\x19\x95a/\x91a/\xB4a/(a/\xAFa/\xA3a/\x19a/\xCE\x9Da\x02\xE8\x9F\x9Ca/\x9Da/\x98a/\x9D\x9Da/\x83\x9Fa/\x91a/\x98\x9Fa/(a/#a/\x1Ea/\x19a/\x83\x9Aa/.\x956\x91a\tFV[a4\x8CV[a5\x07V[a+[V[Qa5\xB4V[\x96`@Qa/m\x81a\x196` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\t\x07V[6\x91a-\xFFV[a5\xF6V[\x91a6\x96V[a/\x1E\x81Q\x15\x15a.kV[a+kV[\x96`@Qa/m\x81a\x196` \x82\x01\x94\x85` \x91\x81R\x01\x90V[a/\xDA\x81Q\x15\x15a.\x9AV[a5\xB4V[\x90\x81;\x15a0\xCEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a0\x9DWa0\x9A\x91a:#V[PV[PP4a0\xA6WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\x10\xF3W_R` _ \x01\x90_\x90V[\x91a1>\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 Ta2eW\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\t\x02Wa2\x10a1\xFA\x82`\x01\x85\x94\x01\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a1\x10V[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta2\xBCW\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\t\x02W\x82a2\xA7a1\xFA\x84`\x01\x80\x96\x01\x85U\x84a1\x10V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a2\xCC\x91a1\x10V[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a2\xFCW_\x19\x01\x90a2\xEC\x82\x82a1\x10V[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 T\x90\x81\x15a2\xBCW_\x19\x82\x01\x90\x82\x82\x11a&*W\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x92_\x19\x84\x01\x93\x84\x11a&*W\x83\x83_\x95a3\xFF\x95\x03a4\x05W[PPPa3\xD1\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a2\xD6V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a3\xD1a4e\x91a4W\x80a6\"a6\x1C`\x01\x93\x85a+\xA9V[Qa4\x8CV[a6,\x82\x86a+\xA9V[Ra67\x81\x85a+\xA9V[P\x01a6\x03V[PP\x90V[`@Q\x90a6R` \x83a\t\x07V[_\x80\x83R6` \x84\x017V[\x90a6h\x82a\t*V[a6u`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+Q\x82\x94a\t*V[\x90\x81Q\x81\x10\x15a\x10\xF3W\x01` \x01\x90V[\x90a6\xA0\x90a<\x82V[_\x91_a6\xABa4tV[P\x84Q\x15a9\x93W\x93_\x91[\x81Q\x83\x10\x15a94W\x82\x15\x80\x80a9\x1EW[a\x03\x8FW\x15\x80a9\x02W[a\x03\x8FWa6\xEBa6\xE5\x84\x84a+\xA9V[Qa5\x07V[\x95\x86Q`\x02\x81\x14_\x14a7\xECWPPa7\x14a7\x0Fa7\t\x88a+\x8CV[Qa>\xD0V[a?\x1EV[\x95a7*a7#\x88\x88\x84a?\x8BV[\x80\x92a)\x95V[\x96Q\x11a7\xCEW\x15a7aWPa7A\x90Qa*\x8FV[\x11a\x03\x8FWQ\x11a7XWa7\ta\x02\xE8\x91a+\x99V[Pa\x02\xE8a6CV[\x91\x90\x94a7n\x86Qa*\x8FV[\x82\x14a\x03\x8FW\x80a7\x8Ca\x05\xF2a7\x86`\x01\x94a+\x99V[Qa:gV[\x15a7\xAFWa7\x9Da7\xA3\x91a+\x99V[Qa?\x10V[\x91[\x01\x91\x94\x90\x94a6\xB7V[a7\xBBa7\xC8\x91a+\x99V[Q` \x81\x01Q\x90Q\x90 \x90V[\x91a7\xA5V[PP\x91P\x92Pa7\xDF\x91PQa*\x8FV[\x11a\x03\x8FWa\x02\xE8a6CV[`\x11\x90\x97\x91\x93\x97\x94\x92\x94\x14a8\x05W[P`\x01\x90a7\xA5V[\x95\x93\x80\x92P\x94\x92\x90\x94Q\x83\x14\x15_\x14a8\xE4W`\xFFa8_a8Ya8Sa8-\x87\x87a6\x85V[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[\x94a)\x87V[\x93\x16`\x10\x81\x10\x15a\x03\x8FWa8}a8w\x82\x89a+\xA9V[Qa>\xFAV[\x15a8\x9FWPPPPa8\x92\x91\x92PQa*\x8FV[\x03a\x03\x8FWa\x02\xE8a6CV[\x86a8\xB7a\x05\xF2a7\x86\x84`\x01\x96\x98\x9A\x97\x99\x9Ba+\xA9V[\x15a8\xD1Wa8\xC9\x91a7\x9D\x91a+\xA9V[\x91[\x90a7\xFCV[a8\xDE\x91a7\xBB\x91a+\xA9V[\x91a8\xCBV[PPPa8\xF1\x90Qa*\x8FV[\x03a\x03\x8FWa7\ta\x02\xE8\x91a+{V[Pa9\x16a9\x10\x84\x84a+\xA9V[Qa>\x93V[\x86\x14\x15a6\xD4V[Pa9,a7\xBB\x85\x85a+\xA9V[\x82\x14\x15a6\xC9V[`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid MPT proof\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[P\x90Pa9\xC4\x92P\x7FV\xE8\x1F\x17\x1B\xCCU\xA6\xFF\x83E\xE6\x92\xC0\xF8n[H\xE0\x1B\x99l\xAD\xC0\x01b/\xB5\xE3c\xB4!\x91P\x14a4\xB2V[a\x02\xE8a6CV[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a9\xFBWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xE8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a:_W=\x91a:C\x83a\t*V[\x92a:Q`@Q\x94\x85a\t\x07V[\x83R=_` \x85\x01>a@/V[``\x91a@/V[\x80Q\x15a2eW` `\xC0\x91\x01QQ_\x1A\x10a:\x82W`\x01\x90V[_\x90V[\x80Q\x15a2eW_\x90` \x81\x01\x90\x81Qa:\x9F\x81a:\xE7V[\x81\x01\x80\x91\x11a&*W\x91Q\x90Q\x81\x01\x80\x91\x11a&*W\x91\x90[\x82\x81\x10a:\xC5WP\x90P\x90V[a:\xCE\x81a;RV[\x81\x01\x80\x91\x11a&*Wa:\xE1\x90\x91a&\x1CV[\x90a:\xB8V[Q_\x1A`\x80\x81\x10\x15a:\xF8WP_\x90V[`\xB8\x81\x10\x80\x15a;\x81W\x90a>Aa>;a=\xCE\x93a=\xEA\x88`\x01\x16\x90V[a>JW\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>+a= a8Sa8-a>%\x8D`\x01\x1C\x90V[\x8Ca6\x85V[`\xF8\x1B\x16_\x1Aa=9\x82\x8Ca6\x85V[\x95a)\x87V[\x94\x90\x91Pa=\xC4V[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>+a=~a8Sa8-a>%\x8D`\x01\x1C\x90V[\x92PP\x92Pa(\x17\x91P\x83Q\x14a\xABWP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra>\xCA`@\x82a\t\x07V[Q\x90 \x90V[\x80Q\x15a\x03\x8FWa>\xE3a\x02\xE8\x91a<\x0CV[a>\xEF\x81\x93\x92\x93a6^V[\x92\x83` \x01\x90a@\xD7V[`\x01\x81Q\x03a2eW` \x01QQ_\x1A`\x80\x14\x90V[a?\x19\x90a<\x0CV[\x90 \x90V[\x90\x81Q\x15a\x03\x8FW`\x0Fa?:a= a8Sa8-\x86a+\x8CV[\x16\x80a?MWPa\x02\xE8`\x02_\x93a=\x95V[`\x01\x81\x03a?bWPa\x02\xE8`\x01_\x93a=\x95V[`\x02\x81\x03a?xWPa\x02\xE8`\x02`\x01\x93a=\x95V[`\x03\x03a\x03\x8FWa\x02\xE8`\x01\x80\x93a=\x95V[\x91\x90_[\x83\x81\x01\x80\x82\x11a&*W\x82Q\x81\x10\x80a@%W[\x15a@\x1DWa?\xD3\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a6\x85V[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a@\0\x83\x86a6\x85V[Q\x16\x90\x03a@\x16Wa@\x11\x90a&\x1CV[a?\x8FV[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a?\xA3V[\x90a@lWP\x80Q\x15a@DW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a@\xBFW[a@}WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a@uV[`\x1F\x81\x11a&*Wa\x01\0\n\x90V[\x90\x91\x80\x15aAJW[` \x81\x10\x15aA\x1AW\x80a@\xF3WPPPV[aA\x07aA\x02aA\x0C\x92a*\xF7V[a@\xC8V[a*\x8FV[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a&*W\x90` \x81\x01\x80\x91\x11a&*W\x91`\x1F\x19\x81\x01\x90\x81\x11\x15a@\xE0Wa%\xEFV[PPPV\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461027f5780631c8081ed1461027a5780632262389714610275578063285f2446146102705780633198eb101461026b578063362b8154146102665780634a5723db146102615780634eb4f97a1461025c5780634f1ef2861461025757806352d1902d14610252578063563344b61461024d578063567f3b3e146102485780635a633080146102435780635e84009d1461023e57806360630122146102395780636b4d17ad146102345780636ba3d17f1461022f5780636cfadeb51461022a578063709ba44a146101df578063715018a6146102255780637d4588b1146102205780637d85a2811461021b5780637e26965d146102165780638a5f7e6d146102115780638da5cb5b1461020c578063900cf0cf14610207578063a552237114610202578063a6e5e125146101fd578063ad3cb1cc146101f8578063cd0f45d2146101f3578063ce537c9f146101ee578063daac1a56146101e9578063dc027d6b146101e4578063e18b4dae146101df578063e48465b7146101da578063f2fde38b146101d5578063f4030228146101d0578063f5ec3ad0146101cb5763fe4b84df146101c6575f80fd5b61191c565b6118ed565b611803565b6117b5565b61168e565b610eac565b611671565b611639565b611603565b6115d4565b61155e565b61151e565b6114e4565b6114c8565b611476565b611259565b611166565b610fb9565b610f83565b610ec7565b610e7d565b610e45565b610e2a565b610dba565b610d65565b610d28565b610c5b565b610a5b565b6109e4565b6107cf565b6106b1565b610694565b610644565b610472565b6103c5565b61038b565b610361565b6102cb565b90602080835192838152019201905f5b8181106102a15750505090565b8251845260209384019390920191600101610294565b9060206102c8928181520190610284565b90565b3461034f575f60031936011261034f5760405180602060015491828152019060015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6905f5b81811061033957610335856103298187038261073f565b604051918291826102b7565b0390f35b8254845260209093019260019283019201610312565b5f80fd5b5f52600560205260405f2090565b3461034f57602060031936011261034f576004355f52600b602052602060405f2054604051908152f35b3461034f575f60031936011261034f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461034f57604060031936011261034f57600435602435906103e95f548210611b74565b5f52600d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b3461034f57602060031936011261034f5761048b610409565b7f0000000000000000000000000000000000000000000000000000000000000000906104b56121c6565b6104d673ffffffffffffffffffffffffffffffffffffffff82161515611ba3565b6104e1821515611bd2565b6104f26104ed83612678565b611c01565b61052761052361051c8461050f5f545f52600960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b61062c575b61058281610542845f52600460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b906106276105ee61051c875f52600660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b61063f61063a600354611c5d565b600355565b61052c565b3461034f575f60031936011261034f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461034f575f60031936011261034f576020600354604051908152f35b3461034f57602060031936011261034f576004355f526005602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761073a57604052565b6106f1565b90601f601f19910116810190811067ffffffffffffffff82111761073a57604052565b67ffffffffffffffff811161073a57601f01601f191660200190565b92919261078a82610762565b91610798604051938461073f565b82948184528183011161034f578281602093845f960137010152565b9080601f8301121561034f578160206102c89335910161077e565b604060031936011261034f576107e3610409565b60243567ffffffffffffffff811161034f576108039036906004016107b4565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156109a2575b5061097a576108536121c6565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610949575b506108e8577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc830361091c5761091a9250612515565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b61096c91945060203d602011610973575b610964818361073f565b8101906121b7565b925f6108a1565b503d61095a565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610846565b3461034f575f60031936011261034f5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097a5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461034f57608060031936011261034f57600435610a7761042c565b610a7f61044f565b606435801515810361034f57610a936121c6565b610ab473ffffffffffffffffffffffffffffffffffffffff84161515611ba3565b610abf841515611bd2565b610acb6104ed85612678565b610ae861052361051c8661050f5f545f52600960205260405f2090565b610be9575b610b0383610542865f52600460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610b66575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b610ba082610b8e73ffffffffffffffffffffffffffffffffffffffff610be295161515611ba3565b610542865f52600560205260405f2090565b610bb2845f52600660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610b2b565b610bf761063a600354611c5d565b610aed565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020838186019501011161034f57565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020808501948460051b01011161034f57565b3461034f57606060031936011261034f5760043567ffffffffffffffff811161034f57610c8c903690600401610bfc565b9060243567ffffffffffffffff811161034f57610cad903690600401610c2a565b6044939193359067ffffffffffffffff821161034f57610d0a94610cd8610d03933690600401610c2a565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612261565b369161077e565b602081519101205f52600860205261091a60ff60405f205416611c6b565b3461034f57604060031936011261034f57600435602435905f52600960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f57600435600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60154604051908152602090f35b611f29565b3461034f57602060031936011261034f57600435610dda5f548210611b74565b5f52600c60205260405f206040519081602082549182815201915f5260205f20905f5b818110610e1457610335856103298187038261073f565b8254845260209093019260019283019201610dfd565b3461034f575f60031936011261034f57602060405160028152f35b3461034f57604060031936011261034f57600435602435905f52600a60205260405f20905f52602052602060405f2054604051908152f35b3461034f57602060031936011261034f576004355f526008602052602060ff60405f2054166040519015158152f35b3461034f575f60031936011261034f57602060405160038152f35b3461034f575f60031936011261034f57610edf6121c6565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461034f57602060031936011261034f57600435610fa35f548210611b74565b5f52600c602052602060405f2054604051908152f35b3461034f57602060031936011261034f57600435610fd56121c6565b610fe6610fe1826127c7565b611c9a565b611023610ffb825f52600460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f0000000000000000000000000000000000000000000000000000000000000000810361110f575b805f5461106a61052361051c8461050f855f52600960205260405f2090565b611098575b505f547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f9161050f6110af925f52600a60205260405f2090565b556110be61063a600354611cc9565b600354156110ce575b805f61106f565b6110fd5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c5d565b5f5561110a600154600355565b6110c7565b611124610ffb825f52600560205260405f2090565b611161611139825f52600660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61104b565b3461034f5761010060031936011261034f5760043560243560443567ffffffffffffffff811161034f5761119e903690600401610bfc565b60649391933567ffffffffffffffff811161034f576111c1903690600401610c2a565b60849291923567ffffffffffffffff811161034f576111e4903690600401610c2a565b60a49291923567ffffffffffffffff811161034f57611207903690600401610bfc565b93909260c43567ffffffffffffffff811161034f5761122a903690600401610c2a565b97909660e4359b67ffffffffffffffff8d1161034f5761125161091a9d3690600401610c2a565b9c909b611d33565b3461034f57606060031936011261034f5760043560243567ffffffffffffffff811161034f5761128d903690600401610c2a565b9060443567ffffffffffffffff811161034f576112ae903690600401610c2a565b6113206112ef8661050f5f979597546112e16112dc61052361051c8661050f865f52600960205260405f2090565b611e67565b5f52600a60205260405f2090565b54604051602081019061131781611309878b8a8c88611ed3565b03601f19810183528261073f565b51902014611efa565b5f5b8281106113e8576113946113698761050f5f5482817f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a35f52600960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b6113a261063a600354611cc9565b600354156113ac57005b6113db5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c5d565b5f5561091a600154600355565b806113f66001928488611f56565b3580611404575b5001611322565b61146e61146661141584888a611f56565b356114328161142d5f545f52600c60205260405f2090565b6126f2565b506114465f545f52600b60205260405f2090565b611451858254611f74565b905561050f5f545f52600d60205260405f2090565b918254611f74565b90555f6113fd565b3461034f575f60031936011261034f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461034f575f60031936011261034f5760205f54604051908152f35b3461034f575f60031936011261034f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461034f57602060031936011261034f576004355f526004602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461034f575f60031936011261034f57604080519061157d818361073f565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461034f57602060031936011261034f576004355f526006602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f576004356116235f548210611b74565b5f52600b602052602060405f2054604051908152f35b3461034f57604060031936011261034f57600435602435905f52600d60205260405f20905f52602052602060405f2054604051908152f35b3461034f575f60031936011261034f576020600154604051908152f35b3461034f57604060031936011261034f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361178d57817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f52600760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f52600860205261177360405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461034f57602060031936011261034f5761091a6117d1610409565b6117d96121c6565b611f81565b90916117f56102c893604084526040840190610284565b916020818403910152610284565b3461034f57606060031936011261034f576004356024359060443561182a5f548310611b74565b815f52600c60205260405f20548381039081116118e857811580156118df575b6118d7575b5061185981612109565b9161186382612109565b935f5b83811061187c57604051806103358888836117de565b6001906118c56118a7611897865f52600c60205260405f2090565b6118a18487611f74565b90612760565b806118b2848a612188565b5261050f865f52600d60205260405f2090565b546118d08289612188565b5201611866565b90505f61184f565b5080821161184a565b611c30565b3461034f57602060031936011261034f576004355f526007602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff611975604084901c60ff16159367ffffffffffffffff1690565b1680159081611b6c575b6001149081611b62575b159081611b59575b50611b3157611a129082611a0960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611ab65761219c565b611a1857005b611a837fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2908060208101611788565b611b2c680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61219c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f611991565b303b159150611989565b83915061197f565b15611b7b57565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611baa57565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611bd957565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611c0857565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f1981146118e85760010190565b15611c7257565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611ca157565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b80156118e8575f190190565b15611cdc57565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611d0b57565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a611d4b9496989a8f87612261565b7f00000000000000000000000000000000000000000000000000000000000000008114611e455792611e009592611e08989592611dd36105bb87611da0611e159f9c9961051c905f52600660205260405f2090565b15611e1757610353611dce61051c611db936888f61077e565b602081519101205f52600860205260405f2090565b611d04565b95604051611df7816113096020820194856020600391939293604081019481520152565b519020966123ff565b92369161077e565b6020815191012014611c6b565b565b610353611e4061051c611e2b36888f61077e565b602081519101205f52600760205260405f2090565b611cd5565b505050505050505061051c611db9611e1593611e6293369161077e565b611c6b565b15611e6e57565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161034f5760209260051b809284830137010190565b9290611eec906102c89593604086526040860191611e96565b926020818503910152611e96565b15611f0157565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610db55760051b0190565b90600182018092116118e857565b919082018092116118e857565b73ffffffffffffffffffffffffffffffffffffffff1680156120425773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f1982019182116118e857565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082019182116118e857565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082019182116118e857565b60200390602082116118e857565b919082039182116118e857565b67ffffffffffffffff811161073a5760051b60200190565b90612113826120f1565b612120604051918261073f565b828152601f1961213082946120f1565b0190602036910137565b805160031015610db55760800190565b805160021015610db55760600190565b805160101015610db5576102200190565b805115610db55760200190565b805160011015610db55760400190565b8051821015610db55760209160051b010190565b5f556121a6612db0565b6121ae612db0565b611e1533611f81565b9081602091031261034f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361220657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b1561223957565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9392915f5496875f52600a60205260405f20865f5260205261228760405f205415611e67565b855f52600260205260405f20541561230d5761230a9661050f956122fe956122ba6105bb8a5f52600460205260405f2090565b948b604051611df78161130960208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936112e1851515612232565b55565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b929190612341816120f1565b9361234f604051958661073f565b602085838152019160051b81019183831161034f5781905b838210612375575050505050565b813567ffffffffffffffff811161034f5760209161239687849387016107b4565b815201910190612367565b156123a857565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b156123d757565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b9361244f956124c76124ea61245e6124e56124d961244f6125049d6102c89f9c6124d36124ce6124d39d6124b99f6124c76124ce9f61245e61245961245461244f6124b99a61246495369161077e565b612870565b6128eb565b61213a565b51612998565b966040516124a3816113096020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f19810187528661073f565b3691612335565b6129da565b91612a7a565b612454815115156123a1565b61214a565b966040516124a38161130960208201948560209181520190565b612510815115156123d0565b612998565b90813b156126045773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156125d3576125d091612e07565b50565b5050346125dc57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b8054821015610db5575f5260205f2001905f90565b91612674918354905f199060031b92831b921b19161790565b9055565b5f818152600260205260409020546126ed576001546801000000000000000081101561073a5760018101600155600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601819055600154905f52600260205260405f2055600190565b505f90565b5f82815260018201602052604090205461275a578054906801000000000000000082101561073a578261274561272f846001809601855584612646565b81939154905f199060031b92831b921b19161790565b90558054925f520160205260405f2055600190565b50505f90565b9061276a91612646565b90549060031b1c90565b8054801561279a575f19019061278a8282612646565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f8181526002602052604090205490811561275a575f198201908282116118e857600154925f1984019384116118e85783835f956128219503612827575b5050506128126001612774565b6002905f5260205260405f2090565b55600190565b6128126128499161283f61276a61284f956001612646565b9283916001612646565b9061265b565b555f8080612805565b604051906128658261071e565b5f6020838281520152565b612878612858565b5060208151916040519261288b8461071e565b835201602082015290565b1561034f57565b906128a7826120f1565b6128b4604051918261073f565b828152601f196128c482946120f1565b01905f5b8281106128d457505050565b6020906128df612858565b828285010152016128c8565b906128f582612e4b565b1561034f5761290382612e6a565b9161290d8361289d565b9060208101805161291d81612ecb565b81018091116118e857945f905b80821061294c5750506102c89293946129449151906120e4565b905114612896565b90956129908161295d600193612f36565b9060405161296c60408261073f565b82815281602082015261297f8b8a612188565b5261298a8a89612188565b50611f74565b96019061292a565b805180151590816129ce575b501561034f576129b390612ff0565b905190602081106129c2575090565b6020036101000a900490565b6021915011155f6129a4565b6129e4815161289d565b905f5b8151811015612a225780612a06612a0060019385612188565b51612870565b612a108286612188565b52612a1b8185612188565b50016129e7565b505090565b60405190612a3660208361073f565b5f808352366020840137565b90612a4c82610762565b612a59604051918261073f565b828152601f196121308294610762565b908151811015610db5570160200190565b90612a8490613066565b5f915f612a8f612858565b50845115612d7757935f915b8151831015612d185782158080612d02575b61034f571580612ce6575b61034f57612acf612ac98484612188565b516128eb565b958651600281145f14612bd0575050612af8612af3612aed8861216b565b516132b4565b613302565b95612b0e612b0788888461336f565b8092611f74565b965111612bb25715612b455750612b25905161206e565b1161034f575111612b3c57612aed6102c891612178565b506102c8612a27565b919094612b52865161206e565b821461034f5780612b70610523612b6a600194612178565b51612e4b565b15612b9357612b81612b8791612178565b516132f4565b915b0191949094612a9b565b612b9f612bac91612178565b5160208101519051902090565b91612b89565b505091509250612bc391505161206e565b1161034f576102c8612a27565b6011909791939794929414612be9575b50600190612b89565b959380925094929094518314155f14612cc85760ff612c43612c3d612c37612c118787612a69565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b94611f66565b9316601081101561034f57612c61612c5b8289612188565b516132de565b15612c835750505050612c769192505161206e565b0361034f576102c8612a27565b86612c9b610523612b6a84600196989a97999b612188565b15612cb557612cad91612b8191612188565b915b90612be0565b612cc291612b9f91612188565b91612caf565b505050612cd5905161206e565b0361034f57612aed6102c89161215a565b50612cfa612cf48484612188565b51613277565b861415612ab8565b50612d10612b9f8585612188565b821415612aad565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b509050612da892507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421915014612896565b6102c8612a27565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612ddf57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102c893602081519101845af43d15612e43573d91612e2783610762565b92612e35604051948561073f565b83523d5f602085013e613413565b606091613413565b8051156126ed57602060c0910151515f1a10612e6657600190565b5f90565b8051156126ed575f9060208101908151612e8381612ecb565b81018091116118e8579151905181018091116118e85791905b828110612ea95750905090565b612eb281612f36565b81018091116118e857612ec59091611c5d565b90612e9c565b515f1a6080811015612edc57505f90565b60b881108015612f20575b15612ef25750600190565b60c0811015612f11576102c890612f0c9060b75b906120e4565b611f66565b6102c890612f0c9060f7612f06565b5060c08110158015612ee7575060f88110612ee7565b80515f1a906080821015612f4b575050600190565b60b8821015612f615750612f0c6102c8916120a9565b60c0821015612fa25760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015612fb85750612f0c6102c89161207c565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b9060208201916130008351612ecb565b9251908382018092116118e857519283039283116118e8579190565b908160011b91808304600214901517156118e857565b1561303957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b9061308f5f613080845161307b811515612896565b61301c565b61308a6001612896565b6120e4565b9061309982612a42565b925f91825b6130a8855f611f74565b84101561316857613123612c3d6130a8926130c38760011690565b61312b577f0f0000000000000000000000000000000000000000000000000000000000000061310d613104612c37612c116130fe8c60011c90565b8b612a69565b60041c600f1690565b60f81b165f1a61311d828b612a69565b53611f66565b93905061309e565b7f0f0000000000000000000000000000000000000000000000000000000000000061310d613162612c37612c116130fe8c60011c90565b60ff1690565b91509250611e159150835114613032565b6131998261318d835161307b811515612896565b61308a81831115612896565b906131a382612a42565b9383925f5b6131b28287611f74565b851015613265579061322561321f6131b2936131ce8860011690565b61322e577f0f0000000000000000000000000000000000000000000000000000000000000061320f613104612c37612c116132098d60011c90565b8c612a69565b60f81b165f1a61311d828c612a69565b95611f66565b949091506131a8565b7f0f0000000000000000000000000000000000000000000000000000000000000061320f613162612c37612c116132098d60011c90565b9250509250611e159150835114613032565b8051602081101561328f575060208101519051902090565b90602001512060405160208101918252602081526132ae60408261073f565b51902090565b80511561034f576132c76102c891612ff0565b6132d381939293612a42565b9283602001906134bb565b60018151036126ed5760200151515f1a60801490565b6132fd90612ff0565b902090565b9081511561034f57600f61331e613104612c37612c118661216b565b168061333157506102c860025f93613179565b6001810361334657506102c860015f93613179565b6002810361335c57506102c86002600193613179565b60030361034f576102c860018093613179565b91905f5b8381018082116118e8578251811080613409575b15613401576133b77fff000000000000000000000000000000000000000000000000000000000000009184612a69565b51167fff000000000000000000000000000000000000000000000000000000000000006133e48386612a69565b511690036133fa576133f590611c5d565b613373565b9250505090565b509250505090565b5083518210613387565b90613450575080511561342857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806134a3575b613461575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613459565b601f81116118e8576101000a90565b9091801561352e575b60208110156134fe57806134d757505050565b6134eb6134e66134f0926120d6565b6134ac565b61206e565b905182518216911916179052565b919080518252602081018091116118e85790602081018091116118e85791601f198101908111156134c457611c30565b50505056 + ///0x60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461029f5780631c8081ed1461029a5780632262389714610295578063285f2446146102905780633198eb101461028b578063362b8154146102865780634a5723db146102815780634eb4f97a1461027c5780634f1ef2861461027757806352d1902d14610272578063563344b61461026d578063567f3b3e146102685780635a633080146102635780635e84009d1461025e5780635f7907431461025957806360630122146102545780636b4d17ad1461024f5780636ba3d17f1461024a5780636cfadeb514610245578063709ba44a146101fa578063715018a6146102405780637d4588b11461023b5780637d85a281146102365780637e26965d146102315780638a5f7e6d1461022c5780638da5cb5b14610227578063900cf0cf14610222578063a55223711461021d578063a6e5e12514610218578063ad3cb1cc14610213578063cd0f45d21461020e578063ce537c9f14610209578063daac1a5614610204578063dc027d6b146101ff578063e18b4dae146101fa578063e48465b7146101f5578063f2fde38b146101f0578063f4030228146101eb578063f5ec3ad0146101e6578063fe4b84df146101e15763ffa1ad74146101dc575f80fd5b6124e9565b612291565b612243565b6120e2565b612094565b611f2f565b6112a0565b611ef3565b611e9c565b611e27565b611dd9565b611d63565b611d04565b611cca565b611c8e565b611c3c565b611828565b611735565b6113ec565b611377565b6112bb565b611252565b6111fb565b6111e0565b611132565b6110f8565b611065565b611009565b610f1d565b610c23565b610bac565b610997565b61085a565b61081e565b6107ce565b610502565b610416565b6103dc565b610393565b6102eb565b90602080835192838152019201905f5b8181106102c15750505090565b82518452602093840193909201916001016102b4565b9060206102e89281815201906102a4565b90565b3461038f575f60031936011261038f576040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015480825260208201907fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f5260205f20905f5b818110610379576103758561036981870382610907565b604051918291826102d7565b0390f35b8254845260209093019260019283019201610352565b5f80fd5b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461038f57604060031936011261038f576004356024359061045a7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b3461038f57602060031936011261038f5761051b610499565b7f000000000000000000000000000000000000000000000000000000000000000090610545612c07565b61056673ffffffffffffffffffffffffffffffffffffffff82161515612562565b610571821515612591565b61058261057d83613142565b6125c0565b6105f66105f26105eb846105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b610778575b61067081610630845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b9061077361073a6105eb875f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b6107c96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461261c565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6105fb565b3461038f575f60031936011261038f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a405602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761090257604052565b6108b9565b90601f601f19910116810190811067ffffffffffffffff82111761090257604052565b67ffffffffffffffff811161090257601f01601f191660200190565b9291926109528261092a565b916109606040519384610907565b82948184528183011161038f578281602093845f960137010152565b9080601f8301121561038f578160206102e893359101610946565b604060031936011261038f576109ab610499565b60243567ffffffffffffffff811161038f576109cb90369060040161097c565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610b6a575b50610b4257610a1b612c07565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610b11575b50610ab0577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610ae457610ae29250612fdf565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610b3491945060203d602011610b3b575b610b2c8183610907565b810190612bf8565b925f610a69565b503d610b22565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610a0e565b3461038f575f60031936011261038f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b425760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461038f57608060031936011261038f57600435610c3f6104bc565b610c476104df565b606435801515810361038f57610c5b612c07565b610c7c73ffffffffffffffffffffffffffffffffffffffff84161515612562565b610c87841515612591565b610c9361057d85613142565b610cef6105f26105eb866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b610e8c575b610d2983610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610dcb575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e2482610df373ffffffffffffffffffffffffffffffffffffffff610e8595161515612562565b610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e55845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610d51565b610eb96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461261c565b610cf4565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020838186019501011161038f57565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020808501948460051b01011161038f57565b3461038f57606060031936011261038f5760043567ffffffffffffffff811161038f57610f4e903690600401610ebe565b9060243567ffffffffffffffff811161038f57610f6f903690600401610eec565b6044939193359067ffffffffffffffff821161038f57610fcc94610f9a610fc5933690600401610eec565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612cd1565b3691610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052610ae260ff60405f20541661262f565b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f576004357fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401548110156110f3577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f527fdaac75c40bd42f199572623979cd72d831e7903a136ecb1935e6fa006548c8220154604051908152602090f35b61294a565b3461038f575f60031936011261038f5760206040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4008152f35b3461038f57602060031936011261038f576004356111727fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2060405190805480835260208301915f5260205f20905f5b8181106111ca576103758561036981870382610907565b82548452602090930192600192830192016111b3565b3461038f575f60031936011261038f57602060405160028152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20905f52602052602060405f2054604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052602060ff60405f2054166040519015158152f35b3461038f575f60031936011261038f57602060405160038152f35b3461038f575f60031936011261038f576112d3612c07565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461038f57602060031936011261038f576004356113b77fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c602052602060405f2054604051908152f35b3461038f57602060031936011261038f57600435611408612c07565b61141961141482613329565b61265e565b61147561144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f000000000000000000000000000000000000000000000000000000000000000081036116a0575b807fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400546114fb6105f26105eb846105de855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b611549575b507fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f916105de61157f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b556115ad6107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461268d565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354156115dc575b805f611500565b61165261162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a261261c565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055565b61169b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6115d5565b6116d461144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b611730611708825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61149d565b3461038f5761010060031936011261038f5760043560243560443567ffffffffffffffff811161038f5761176d903690600401610ebe565b60649391933567ffffffffffffffff811161038f57611790903690600401610eec565b60849291923567ffffffffffffffff811161038f576117b3903690600401610eec565b60a49291923567ffffffffffffffff811161038f576117d6903690600401610ebe565b93909260c43567ffffffffffffffff811161038f576117f9903690600401610eec565b97909660e4359b67ffffffffffffffff8d1161038f57611820610ae29d3690600401610eec565b9c909b6126f7565b3461038f57606060031936011261038f5760043560243567ffffffffffffffff811161038f5761185c903690600401610eec565b9060443567ffffffffffffffff811161038f5761187d903690600401610eec565b61194d61191c866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400979597546118ef6118ea6105f26105eb866105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b612888565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b54604051602081019061194481611936878b8a8c886128f4565b03601f198101835282610907565b5190201461291b565b5f5b828110611af157611a006119d5876105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4005482817f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a35f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b611a2d6107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035461268d565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035415611a5657005b611aa861162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a261261c565b610ae27fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b80611aff6001928488612977565b3580611b0d575b500161194f565b611c34611c2c611b1e84888a612977565b35611b7a81611b757fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b61326a565b50611bcd7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b60205260405f2090565b611bd8858254612995565b90556105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b918254612995565b90555f611b06565b3461038f575f60031936011261038f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054604051908152f35b3461038f575f60031936011261038f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a404602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461038f575f60031936011261038f576040805190611d828183610907565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a406602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f57600435611e677fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548210612533565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154604051908152f35b3461038f57604060031936011261038f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361206c57817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205261205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461038f57602060031936011261038f57610ae26120b0610499565b6120b8612c07565b6129a2565b90916120d46102e8936040845260408401906102a4565b9160208184039101526102a4565b3461038f57606060031936011261038f57600435602435906044356121297fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400548310612533565b815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205261215e8360405f2054612b05565b8115801561223a575b612232575b5061217681612b2a565b9161218082612b2a565b935f5b83811061219957604051806103758888836120bd565b6001906122206121e36121d3865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b6121dd8487612995565b906132c2565b806121ee848a612ba9565b526105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b5461222b8289612ba9565b5201612183565b90505f61216c565b50808211612167565b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a407602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff6122ea604084901c60ff16159367ffffffffffffffff1690565b16801590816124e1575b60011490816124d7575b1590816124ce575b506124a657612387908261237e60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61242b57612bbd565b61238d57005b6123f87fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2908060208101612067565b6124a1680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612bbd565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f612306565b303b1591506122fe565b8391506122f4565b3461038f575f60031936011261038f576020604051620f42408152f35b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b1561253a57565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561256957565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561259857565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b156125c757565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f19811461262a5760010190565b6125ef565b1561263657565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561266557565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b801561262a575f190190565b156126a057565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b156126cf57565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a61270f9496989a8f87612cd1565b7f000000000000000000000000000000000000000000000000000000000000000081146128665792612802959261280a9895926127d56106e8876127836128179f9c996105eb905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b15612819576125066127d06105eb61279c36888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205260405f2090565b6126c8565b956040516127f9816119366020820194856020600391939293604081019481520152565b51902096612ec9565b923691610946565b602081519101201461262f565b565b6125066128616105eb61282d36888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2090565b612699565b50505050505050506105eb61279c61281793612883933691610946565b61262f565b1561288f57565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161038f5760209260051b809284830137010190565b929061290d906102e895936040865260408601916128b7565b9260208185039101526128b7565b1561292257565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156110f35760051b0190565b906001820180921161262a57565b9190820180921161262a57565b73ffffffffffffffffffffffffffffffffffffffff168015612a635773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f19820191821161262a57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40820191821161262a57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80820191821161262a57565b602003906020821161262a57565b9190820391821161262a57565b67ffffffffffffffff81116109025760051b60200190565b90612b3482612b12565b612b416040519182610907565b828152601f19612b518294612b12565b0190602036910137565b8051600310156110f35760800190565b8051600210156110f35760600190565b8051601010156110f3576102200190565b8051156110f35760200190565b8051600110156110f35760400190565b80518210156110f35760209160051b010190565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055612be76139cc565b612bef6139cc565b612817336129a2565b9081602091031261038f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612c4757565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b15612c7a57565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612ca957565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b93916105de9396612dfc96612df0947fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054998a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20895f52602052612d4260405f205415612888565b885f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402602052612d7860405f20541515612c73565b612dac6106e88a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b948b6040516127f98161193660208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936118ef851515612ca2565b55565b929190612e0b81612b12565b93612e196040519586610907565b602085838152019160051b81019183831161038f5781905b838210612e3f575050505050565b813567ffffffffffffffff811161038f57602091612e60878493870161097c565b815201910190612e31565b15612e7257565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612ea157565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b93612f1995612f91612fb4612f28612faf612fa3612f19612fce9d6102e89f9c612f9d612f98612f9d9d612f839f612f91612f989f612f28612f23612f1e612f19612f839a612f2e953691610946565b61348c565b613507565b612b5b565b516135b4565b96604051612f6d816119366020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f198101875286610907565b3691612dff565b6135f6565b91613696565b612f1e81511515612e6b565b612b6b565b96604051612f6d8161193660208201948560209181520190565b612fda81511515612e9a565b6135b4565b90813b156130ce5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a280511561309d5761309a91613a23565b50565b5050346130a657565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b80548210156110f3575f5260205f2001905f90565b9161313e918354905f199060031b92831b921b19161790565b9055565b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4026020526040902054613265577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015468010000000000000000811015610902576132106131fa8260018594017fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613110565b81939154905f199060031b92831b921b19161790565b90557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260405f2055600190565b505f90565b5f8281526001820160205260409020546132bc578054906801000000000000000082101561090257826132a76131fa846001809601855584613110565b90558054925f520160205260405f2055600190565b50505f90565b906132cc91613110565b90549060031b1c90565b805480156132fc575f1901906132ec8282613110565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260409020549081156132bc575f1982019082821161262a577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154925f19840193841161262a5783835f956133ff9503613405575b5050506133d17fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4016132d6565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402905f5260205260405f2090565b55600190565b6133d16134659161343c6132cc61346b957fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613110565b9283917fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613110565b90613125565b555f80806133a5565b60405190613481826108e6565b5f6020838281520152565b613494613474565b506020815191604051926134a7846108e6565b835201602082015290565b1561038f57565b906134c382612b12565b6134d06040519182610907565b828152601f196134e08294612b12565b01905f5b8281106134f057505050565b6020906134fb613474565b828285010152016134e4565b9061351182613a67565b1561038f5761351f82613a86565b91613529836134b9565b9060208101805161353981613ae7565b810180911161262a57945f905b8082106135685750506102e8929394613560915190612b05565b9051146134b2565b90956135ac81613579600193613b52565b90604051613588604082610907565b82815281602082015261359b8b8a612ba9565b526135a68a89612ba9565b50612995565b960190613546565b805180151590816135ea575b501561038f576135cf90613c0c565b905190602081106135de575090565b6020036101000a900490565b6021915011155f6135c0565b61360081516134b9565b905f5b815181101561363e578061362261361c60019385612ba9565b5161348c565b61362c8286612ba9565b526136378185612ba9565b5001613603565b505090565b60405190613652602083610907565b5f808352366020840137565b906136688261092a565b6136756040519182610907565b828152601f19612b51829461092a565b9081518110156110f3570160200190565b906136a090613c82565b5f915f6136ab613474565b5084511561399357935f915b8151831015613934578215808061391e575b61038f571580613902575b61038f576136eb6136e58484612ba9565b51613507565b958651600281145f146137ec57505061371461370f61370988612b8c565b51613ed0565b613f1e565b9561372a613723888884613f8b565b8092612995565b9651116137ce571561376157506137419051612a8f565b1161038f575111613758576137096102e891612b99565b506102e8613643565b91909461376e8651612a8f565b821461038f578061378c6105f2613786600194612b99565b51613a67565b156137af5761379d6137a391612b99565b51613f10565b915b01919490946136b7565b6137bb6137c891612b99565b5160208101519051902090565b916137a5565b5050915092506137df915051612a8f565b1161038f576102e8613643565b6011909791939794929414613805575b506001906137a5565b959380925094929094518314155f146138e45760ff61385f61385961385361382d8787613685565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b94612987565b9316601081101561038f5761387d6138778289612ba9565b51613efa565b1561389f575050505061389291925051612a8f565b0361038f576102e8613643565b866138b76105f261378684600196989a97999b612ba9565b156138d1576138c99161379d91612ba9565b915b906137fc565b6138de916137bb91612ba9565b916138cb565b5050506138f19051612a8f565b0361038f576137096102e891612b7b565b506139166139108484612ba9565b51613e93565b8614156136d4565b5061392c6137bb8585612ba9565b8214156136c9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b5090506139c492507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4219150146134b2565b6102e8613643565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156139fb57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102e893602081519101845af43d15613a5f573d91613a438361092a565b92613a516040519485610907565b83523d5f602085013e61402f565b60609161402f565b80511561326557602060c0910151515f1a10613a8257600190565b5f90565b805115613265575f9060208101908151613a9f81613ae7565b810180911161262a5791519051810180911161262a5791905b828110613ac55750905090565b613ace81613b52565b810180911161262a57613ae1909161261c565b90613ab8565b515f1a6080811015613af857505f90565b60b881108015613b3c575b15613b0e5750600190565b60c0811015613b2d576102e890613b289060b75b90612b05565b612987565b6102e890613b289060f7613b22565b5060c08110158015613b03575060f88110613b03565b80515f1a906080821015613b67575050600190565b60b8821015613b7d5750613b286102e891612aca565b60c0821015613bbe5760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015613bd45750613b286102e891612a9d565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b906020820191613c1c8351613ae7565b92519083820180921161262a575192830392831161262a579190565b908160011b918083046002149015171561262a57565b15613c5557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b90613cab5f613c9c8451613c978115156134b2565b613c38565b613ca660016134b2565b612b05565b90613cb58261365e565b925f91825b613cc4855f612995565b841015613d8457613d3f613859613cc492613cdf8760011690565b613d47577f0f00000000000000000000000000000000000000000000000000000000000000613d29613d2061385361382d613d1a8c60011c90565b8b613685565b60041c600f1690565b60f81b165f1a613d39828b613685565b53612987565b939050613cba565b7f0f00000000000000000000000000000000000000000000000000000000000000613d29613d7e61385361382d613d1a8c60011c90565b60ff1690565b915092506128179150835114613c4e565b613db582613da98351613c978115156134b2565b613ca6818311156134b2565b90613dbf8261365e565b9383925f5b613dce8287612995565b851015613e815790613e41613e3b613dce93613dea8860011690565b613e4a577f0f00000000000000000000000000000000000000000000000000000000000000613e2b613d2061385361382d613e258d60011c90565b8c613685565b60f81b165f1a613d39828c613685565b95612987565b94909150613dc4565b7f0f00000000000000000000000000000000000000000000000000000000000000613e2b613d7e61385361382d613e258d60011c90565b92505092506128179150835114613c4e565b80516020811015613eab575060208101519051902090565b9060200151206040516020810191825260208152613eca604082610907565b51902090565b80511561038f57613ee36102e891613c0c565b613eef8193929361365e565b9283602001906140d7565b60018151036132655760200151515f1a60801490565b613f1990613c0c565b902090565b9081511561038f57600f613f3a613d2061385361382d86612b8c565b1680613f4d57506102e860025f93613d95565b60018103613f6257506102e860015f93613d95565b60028103613f7857506102e86002600193613d95565b60030361038f576102e860018093613d95565b91905f5b83810180821161262a578251811080614025575b1561401d57613fd37fff000000000000000000000000000000000000000000000000000000000000009184613685565b51167fff000000000000000000000000000000000000000000000000000000000000006140008386613685565b51169003614016576140119061261c565b613f8f565b9250505090565b509250505090565b5083518210613fa3565b9061406c575080511561404457805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806140bf575b61407d575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614075565b601f811161262a576101000a90565b9091801561414a575b602081101561411a57806140f357505050565b61410761410261410c92612af7565b6140c8565b612a8f565b905182518216911916179052565b9190805182526020810180911161262a57906020810180911161262a5791601f198101908111156140e0576125ef565b50505056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x7FW\x80c\x1C\x80\x81\xED\x14a\x02zW\x80c\"b8\x97\x14a\x02uW\x80c(_$F\x14a\x02pW\x80c1\x98\xEB\x10\x14a\x02kW\x80c6+\x81T\x14a\x02fW\x80cJW#\xDB\x14a\x02aW\x80cN\xB4\xF9z\x14a\x02\\W\x80cO\x1E\xF2\x86\x14a\x02WW\x80cR\xD1\x90-\x14a\x02RW\x80cV3D\xB6\x14a\x02MW\x80cV\x7F;>\x14a\x02HW\x80cZc0\x80\x14a\x02CW\x80c^\x84\0\x9D\x14a\x02>W\x80c`c\x01\"\x14a\x029W\x80ckM\x17\xAD\x14a\x024W\x80ck\xA3\xD1\x7F\x14a\x02/W\x80cl\xFA\xDE\xB5\x14a\x02*W\x80cp\x9B\xA4J\x14a\x01\xDFW\x80cqP\x18\xA6\x14a\x02%W\x80c}E\x88\xB1\x14a\x02 W\x80c}\x85\xA2\x81\x14a\x02\x1BW\x80c~&\x96]\x14a\x02\x16W\x80c\x8A_~m\x14a\x02\x11W\x80c\x8D\xA5\xCB[\x14a\x02\x0CW\x80c\x90\x0C\xF0\xCF\x14a\x02\x07W\x80c\xA5R#q\x14a\x02\x02W\x80c\xA6\xE5\xE1%\x14a\x01\xFDW\x80c\xAD<\xB1\xCC\x14a\x01\xF8W\x80c\xCD\x0FE\xD2\x14a\x01\xF3W\x80c\xCES|\x9F\x14a\x01\xEEW\x80c\xDA\xAC\x1AV\x14a\x01\xE9W\x80c\xDC\x02}k\x14a\x01\xE4W\x80c\xE1\x8BM\xAE\x14a\x01\xDFW\x80c\xE4\x84e\xB7\x14a\x01\xDAW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xD5W\x80c\xF4\x03\x02(\x14a\x01\xD0W\x80c\xF5\xEC:\xD0\x14a\x01\xCBWc\xFEK\x84\xDF\x14a\x01\xC6W_\x80\xFD[a\x19\x1CV[a\x18\xEDV[a\x18\x03V[a\x17\xB5V[a\x16\x8EV[a\x0E\xACV[a\x16qV[a\x169V[a\x16\x03V[a\x15\xD4V[a\x15^V[a\x15\x1EV[a\x14\xE4V[a\x14\xC8V[a\x14vV[a\x12YV[a\x11fV[a\x0F\xB9V[a\x0F\x83V[a\x0E\xC7V[a\x0E}V[a\x0EEV[a\x0E*V[a\r\xBAV[a\reV[a\r(V[a\x0C[V[a\n[V[a\t\xE4V[a\x07\xCFV[a\x06\xB1V[a\x06\x94V[a\x06DV[a\x04rV[a\x03\xC5V[a\x03\x8BV[a\x03aV[a\x02\xCBV[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x02\xA1WPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x02\x94V[\x90` a\x02\xC8\x92\x81\x81R\x01\x90a\x02\x84V[\x90V[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@Q\x80` `\x01T\x91\x82\x81R\x01\x90`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x90_[\x81\x81\x10a\x039Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[`@Q\x91\x82\x91\x82a\x02\xB7V[\x03\x90\xF3[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x03\x12V[_\x80\xFD[_R`\x05` R`@_ \x90V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\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\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90a\x03\xE9_T\x82\x10a\x1BtV[_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`D5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\x04\x8Ba\x04\tV[\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\x90a\x04\xB5a!\xC6V[a\x04\xD6s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x1B\xA3V[a\x04\xE1\x82\x15\x15a\x1B\xD2V[a\x04\xF2a\x04\xED\x83a&xV[a\x1C\x01V[a\x05'a\x05#a\x05\x1C\x84a\x05\x0F_T_R`\t` R`@_ \x90V[\x90_R` R`@_ \x90V[T`\xFF\x16\x90V[\x15\x90V[a\x06,W[a\x05\x82\x81a\x05B\x84_R`\x04` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\x06'a\x05\xEEa\x05\x1C\x87_R`\x06` R`@_ \x90V[`@Q\x93\x84\x93\x84\x91\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@\x92\x95\x94\x81``\x86\x01\x97\x16\x85R\x16` \x84\x01R\x15\x15\x91\x01RV[\x03\x90\xA3\0[a\x06?a\x06:`\x03Ta\x1C]V[`\x03UV[a\x05,V[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x03T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x05` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[a\x06\xF1V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x07\x8A\x82a\x07bV[\x91a\x07\x98`@Q\x93\x84a\x07?V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03OW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03OW\x81` a\x02\xC8\x935\x91\x01a\x07~V[`@`\x03\x196\x01\x12a\x03OWa\x07\xE3a\x04\tV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x08\x03\x906\x90`\x04\x01a\x07\xB4V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\t\xA2W[Pa\tzWa\x08Sa!\xC6V[`@Q\x91\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` \x83`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16Z\xFA_\x93\x81a\tIW[Pa\x08\xE8W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\x04R`$_\xFD[\x90\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\t\x1CWa\t\x1A\x92Pa%\x15V[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\tl\x91\x94P` =` \x11a\tsW[a\td\x81\x83a\x07?V[\x81\x01\x90a!\xB7V[\x92_a\x08\xA1V[P=a\tZV[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x08FV[4a\x03OW_`\x03\x196\x01\x12a\x03OWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\tzW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03OW`\x80`\x03\x196\x01\x12a\x03OW`\x045a\nwa\x04,V[a\n\x7Fa\x04OV[`d5\x80\x15\x15\x81\x03a\x03OWa\n\x93a!\xC6V[a\n\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a\x1B\xA3V[a\n\xBF\x84\x15\x15a\x1B\xD2V[a\n\xCBa\x04\xED\x85a&xV[a\n\xE8a\x05#a\x05\x1C\x86a\x05\x0F_T_R`\t` R`@_ \x90V[a\x0B\xE9W[a\x0B\x03\x83a\x05B\x86_R`\x04` R`@_ \x90V[\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\x84\x03a\x0BfW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[a\x0B\xA0\x82a\x0B\x8Es\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0B\xE2\x95\x16\x15\x15a\x1B\xA3V[a\x05B\x86_R`\x05` R`@_ \x90V[a\x0B\xB2\x84_R`\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\x0B+V[a\x0B\xF7a\x06:`\x03Ta\x1C]V[a\n\xEDV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03OWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03OWV[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\x8C\x906\x90`\x04\x01a\x0B\xFCV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\xAD\x906\x90`\x04\x01a\x0C*V[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03OWa\r\n\x94a\x0C\xD8a\r\x03\x936\x90`\x04\x01a\x0C*V[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\"aV[6\x91a\x07~V[` \x81Q\x91\x01 _R`\x08` Ra\t\x1A`\xFF`@_ T\x16a\x1CkV[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01T`@Q\x90\x81R` \x90\xF3[a\x1F)V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\r\xDA_T\x82\x10a\x1BtV[_R`\x0C` R`@_ `@Q\x90\x81` \x82T\x91\x82\x81R\x01\x91_R` _ \x90_[\x81\x81\x10a\x0E\x14Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\r\xFDV[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x02\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x03\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OWa\x0E\xDFa!\xC6V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xA3_T\x82\x10a\x1BtV[_R`\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xD5a!\xC6V[a\x0F\xE6a\x0F\xE1\x82a'\xC7V[a\x1C\x9AV[a\x10#a\x0F\xFB\x82_R`\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\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\x81\x03a\x11\x0FW[\x80_Ta\x10ja\x05#a\x05\x1C\x84a\x05\x0F\x85_R`\t` R`@_ \x90V[a\x10\x98W[P_T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\x0Fa\x10\xAF\x92_R`\n` R`@_ \x90V[Ua\x10\xBEa\x06:`\x03Ta\x1C\xC9V[`\x03T\x15a\x10\xCEW[\x80_a\x10oV[a\x10\xFD_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1C]V[_Ua\x11\n`\x01T`\x03UV[a\x10\xC7V[a\x11$a\x0F\xFB\x82_R`\x05` R`@_ \x90V[a\x11aa\x119\x82_R`\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x10KV[4a\x03OWa\x01\0`\x03\x196\x01\x12a\x03OW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\x9E\x906\x90`\x04\x01a\x0B\xFCV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xC1\x906\x90`\x04\x01a\x0C*V[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xE4\x906\x90`\x04\x01a\x0C*V[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x07\x906\x90`\x04\x01a\x0B\xFCV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12*\x906\x90`\x04\x01a\x0C*V[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03OWa\x12Qa\t\x1A\x9D6\x90`\x04\x01a\x0C*V[\x9C\x90\x9Ba\x1D3V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x8D\x906\x90`\x04\x01a\x0C*V[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\xAE\x906\x90`\x04\x01a\x0C*V[a\x13 a\x12\xEF\x86a\x05\x0F_\x97\x95\x97Ta\x12\xE1a\x12\xDCa\x05#a\x05\x1C\x86a\x05\x0F\x86_R`\t` R`@_ \x90V[a\x1EgV[_R`\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x13\x17\x81a\x13\t\x87\x8B\x8A\x8C\x88a\x1E\xD3V[\x03`\x1F\x19\x81\x01\x83R\x82a\x07?V[Q\x90 \x14a\x1E\xFAV[_[\x82\x81\x10a\x13\xE8Wa\x13\x94a\x13i\x87a\x05\x0F_T\x82\x81\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3_R`\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x13\xA2a\x06:`\x03Ta\x1C\xC9V[`\x03T\x15a\x13\xACW\0[a\x13\xDB_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1C]V[_Ua\t\x1A`\x01T`\x03UV[\x80a\x13\xF6`\x01\x92\x84\x88a\x1FVV[5\x80a\x14\x04W[P\x01a\x13\"V[a\x14na\x14fa\x14\x15\x84\x88\x8Aa\x1FVV[5a\x142\x81a\x14-_T_R`\x0C` R`@_ \x90V[a&\xF2V[Pa\x14F_T_R`\x0B` R`@_ \x90V[a\x14Q\x85\x82Ta\x1FtV[\x90Ua\x05\x0F_T_R`\r` R`@_ \x90V[\x91\x82Ta\x1FtV[\x90U_a\x13\xFDV[4a\x03OW_`\x03\x196\x01\x12a\x03OW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` _T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@\x80Q\x90a\x15}\x81\x83a\x07?V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x16#_T\x82\x10a\x1BtV[_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x01T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x17\x8DW\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R`\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R`\x08` Ra\x17s`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\t\x1Aa\x17\xD1a\x04\tV[a\x17\xD9a!\xC6V[a\x1F\x81V[\x90\x91a\x17\xF5a\x02\xC8\x93`@\x84R`@\x84\x01\x90a\x02\x84V[\x91` \x81\x84\x03\x91\x01Ra\x02\x84V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5\x90`D5a\x18*_T\x83\x10a\x1BtV[\x81_R`\x0C` R`@_ T\x83\x81\x03\x90\x81\x11a\x18\xE8W\x81\x15\x80\x15a\x18\xDFW[a\x18\xD7W[Pa\x18Y\x81a!\tV[\x91a\x18c\x82a!\tV[\x93_[\x83\x81\x10a\x18|W`@Q\x80a\x035\x88\x88\x83a\x17\xDEV[`\x01\x90a\x18\xC5a\x18\xA7a\x18\x97\x86_R`\x0C` R`@_ \x90V[a\x18\xA1\x84\x87a\x1FtV[\x90a'`V[\x80a\x18\xB2\x84\x8Aa!\x88V[Ra\x05\x0F\x86_R`\r` R`@_ \x90V[Ta\x18\xD0\x82\x89a!\x88V[R\x01a\x18fV[\x90P_a\x18OV[P\x80\x82\x11a\x18JV[a\x1C0V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19u`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x1BlW[`\x01\x14\x90\x81a\x1BbW[\x15\x90\x81a\x1BYW[Pa\x1B1Wa\x1A\x12\x90\x82a\x1A\t`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x1A\xB6Wa!\x9CV[a\x1A\x18W\0[a\x1A\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a\x17\x88V[a\x1B,h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a!\x9CV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x19\x91V[0;\x15\x91Pa\x19\x89V[\x83\x91Pa\x19\x7FV[\x15a\x1B{WV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xAAWV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xD9WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\x08WV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a\x18\xE8W`\x01\x01\x90V[\x15a\x1CrWV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\xA1WV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a\x18\xE8W_\x19\x01\x90V[\x15a\x1C\xDCWV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1D\x0BWV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa\x1DK\x94\x96\x98\x9A\x8F\x87a\"aV[\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\x81\x14a\x1EEW\x92a\x1E\0\x95\x92a\x1E\x08\x98\x95\x92a\x1D\xD3a\x05\xBB\x87a\x1D\xA0a\x1E\x15\x9F\x9C\x99a\x05\x1C\x90_R`\x06` R`@_ \x90V[\x15a\x1E\x17Wa\x03Sa\x1D\xCEa\x05\x1Ca\x1D\xB96\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x08` R`@_ \x90V[a\x1D\x04V[\x95`@Qa\x1D\xF7\x81a\x13\t` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a#\xFFV[\x926\x91a\x07~V[` \x81Q\x91\x01 \x14a\x1CkV[V[a\x03Sa\x1E@a\x05\x1Ca\x1E+6\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x07` R`@_ \x90V[a\x1C\xD5V[PPPPPPPPa\x05\x1Ca\x1D\xB9a\x1E\x15\x93a\x1Eb\x936\x91a\x07~V[a\x1CkV[\x15a\x1EnWV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x1E\xEC\x90a\x02\xC8\x95\x93`@\x86R`@\x86\x01\x91a\x1E\x96V[\x92` \x81\x85\x03\x91\x01Ra\x1E\x96V[\x15a\x1F\x01WV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xB5W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a\x18\xE8WV[\x91\x90\x82\x01\x80\x92\x11a\x18\xE8WV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a BWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a\x18\xE8WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a\x18\xE8WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a\x18\xE8WV[` \x03\x90` \x82\x11a\x18\xE8WV[\x91\x90\x82\x03\x91\x82\x11a\x18\xE8WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x05\x1B` \x01\x90V[\x90a!\x13\x82a \xF1V[a! `@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!0\x82\x94a \xF1V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\r\xB5W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\r\xB5W``\x01\x90V[\x80Q`\x10\x10\x15a\r\xB5Wa\x02 \x01\x90V[\x80Q\x15a\r\xB5W` \x01\x90V[\x80Q`\x01\x10\x15a\r\xB5W`@\x01\x90V[\x80Q\x82\x10\x15a\r\xB5W` \x91`\x05\x1B\x01\x01\x90V[_Ua!\xA6a-\xB0V[a!\xAEa-\xB0V[a\x1E\x153a\x1F\x81V[\x90\x81` \x91\x03\x12a\x03OWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\"\x06WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a\"9WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x92\x91_T\x96\x87_R`\n` R`@_ \x86_R` Ra\"\x87`@_ T\x15a\x1EgV[\x85_R`\x02` R`@_ T\x15a#\rWa#\n\x96a\x05\x0F\x95a\"\xFE\x95a\"\xBAa\x05\xBB\x8A_R`\x04` R`@_ \x90V[\x94\x8B`@Qa\x1D\xF7\x81a\x13\t` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x12\xE1\x85\x15\x15a\"2V[UV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x92\x91\x90a#A\x81a \xF1V[\x93a#O`@Q\x95\x86a\x07?V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03OW\x81\x90[\x83\x82\x10a#uWPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OW` \x91a#\x96\x87\x84\x93\x87\x01a\x07\xB4V[\x81R\x01\x91\x01\x90a#gV[\x15a#\xA8WV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a#\xD7WV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a$O\x95a$\xC7a$\xEAa$^a$\xE5a$\xD9a$Oa%\x04\x9Da\x02\xC8\x9F\x9Ca$\xD3a$\xCEa$\xD3\x9Da$\xB9\x9Fa$\xC7a$\xCE\x9Fa$^a$Ya$Ta$Oa$\xB9\x9Aa$d\x956\x91a\x07~V[a(pV[a(\xEBV[a!:V[Qa)\x98V[\x96`@Qa$\xA3\x81a\x13\t` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\x07?V[6\x91a#5V[a)\xDAV[\x91a*zV[a$T\x81Q\x15\x15a#\xA1V[a!JV[\x96`@Qa$\xA3\x81a\x13\t` \x82\x01\x94\x85` \x91\x81R\x01\x90V[a%\x10\x81Q\x15\x15a#\xD0V[a)\x98V[\x90\x81;\x15a&\x04Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a%\xD3Wa%\xD0\x91a.\x07V[PV[PP4a%\xDCWV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\r\xB5W_R` _ \x01\x90_\x90V[\x91a&t\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R`\x02` R`@\x90 Ta&\xEDW`\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x07:W`\x01\x81\x01`\x01U`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01\x81\x90U`\x01T\x90_R`\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta'ZW\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\x07:W\x82a'Ea'/\x84`\x01\x80\x96\x01\x85U\x84a&FV[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a'j\x91a&FV[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a'\x9AW_\x19\x01\x90a'\x8A\x82\x82a&FV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x02` R`@\x90 T\x90\x81\x15a'ZW_\x19\x82\x01\x90\x82\x82\x11a\x18\xE8W`\x01T\x92_\x19\x84\x01\x93\x84\x11a\x18\xE8W\x83\x83_\x95a(!\x95\x03a('W[PPPa(\x12`\x01a'tV[`\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a(\x12a(I\x91a(?a'ja(O\x95`\x01a&FV[\x92\x83\x91`\x01a&FV[\x90a&[V[U_\x80\x80a(\x05V[`@Q\x90a(e\x82a\x07\x1EV[_` \x83\x82\x81R\x01RV[a(xa(XV[P` \x81Q\x91`@Q\x92a(\x8B\x84a\x07\x1EV[\x83R\x01` \x82\x01R\x90V[\x15a\x03OWV[\x90a(\xA7\x82a \xF1V[a(\xB4`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a(\xC4\x82\x94a \xF1V[\x01\x90_[\x82\x81\x10a(\xD4WPPPV[` \x90a(\xDFa(XV[\x82\x82\x85\x01\x01R\x01a(\xC8V[\x90a(\xF5\x82a.KV[\x15a\x03OWa)\x03\x82a.jV[\x91a)\r\x83a(\x9DV[\x90` \x81\x01\x80Qa)\x1D\x81a.\xCBV[\x81\x01\x80\x91\x11a\x18\xE8W\x94_\x90[\x80\x82\x10a)LWPPa\x02\xC8\x92\x93\x94a)D\x91Q\x90a \xE4V[\x90Q\x14a(\x96V[\x90\x95a)\x90\x81a)]`\x01\x93a/6V[\x90`@Qa)l`@\x82a\x07?V[\x82\x81R\x81` \x82\x01Ra)\x7F\x8B\x8Aa!\x88V[Ra)\x8A\x8A\x89a!\x88V[Pa\x1FtV[\x96\x01\x90a)*V[\x80Q\x80\x15\x15\x90\x81a)\xCEW[P\x15a\x03OWa)\xB3\x90a/\xF0V[\x90Q\x90` \x81\x10a)\xC2WP\x90V[` \x03a\x01\0\n\x90\x04\x90V[`!\x91P\x11\x15_a)\xA4V[a)\xE4\x81Qa(\x9DV[\x90_[\x81Q\x81\x10\x15a*\"W\x80a*\x06a*\0`\x01\x93\x85a!\x88V[Qa(pV[a*\x10\x82\x86a!\x88V[Ra*\x1B\x81\x85a!\x88V[P\x01a)\xE7V[PP\x90V[`@Q\x90a*6` \x83a\x07?V[_\x80\x83R6` \x84\x017V[\x90a*L\x82a\x07bV[a*Y`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!0\x82\x94a\x07bV[\x90\x81Q\x81\x10\x15a\r\xB5W\x01` \x01\x90V[\x90a*\x84\x90a0fV[_\x91_a*\x8Fa(XV[P\x84Q\x15a-wW\x93_\x91[\x81Q\x83\x10\x15a-\x18W\x82\x15\x80\x80a-\x02W[a\x03OW\x15\x80a,\xE6W[a\x03OWa*\xCFa*\xC9\x84\x84a!\x88V[Qa(\xEBV[\x95\x86Q`\x02\x81\x14_\x14a+\xD0WPPa*\xF8a*\xF3a*\xED\x88a!kV[Qa2\xB4V[a3\x02V[\x95a+\x0Ea+\x07\x88\x88\x84a3oV[\x80\x92a\x1FtV[\x96Q\x11a+\xB2W\x15a+EWPa+%\x90Qa nV[\x11a\x03OWQ\x11a+#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a-\xDFWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xC8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a.CW=\x91a.'\x83a\x07bV[\x92a.5`@Q\x94\x85a\x07?V[\x83R=_` \x85\x01>a4\x13V[``\x91a4\x13V[\x80Q\x15a&\xEDW` `\xC0\x91\x01QQ_\x1A\x10a.fW`\x01\x90V[_\x90V[\x80Q\x15a&\xEDW_\x90` \x81\x01\x90\x81Qa.\x83\x81a.\xCBV[\x81\x01\x80\x91\x11a\x18\xE8W\x91Q\x90Q\x81\x01\x80\x91\x11a\x18\xE8W\x91\x90[\x82\x81\x10a.\xA9WP\x90P\x90V[a.\xB2\x81a/6V[\x81\x01\x80\x91\x11a\x18\xE8Wa.\xC5\x90\x91a\x1C]V[\x90a.\x9CV[Q_\x1A`\x80\x81\x10\x15a.\xDCWP_\x90V[`\xB8\x81\x10\x80\x15a/ W[\x15a.\xF2WP`\x01\x90V[`\xC0\x81\x10\x15a/\x11Wa\x02\xC8\x90a/\x0C\x90`\xB7[\x90a \xE4V[a\x1FfV[a\x02\xC8\x90a/\x0C\x90`\xF7a/\x06V[P`\xC0\x81\x10\x15\x80\x15a.\xE7WP`\xF8\x81\x10a.\xE7V[\x80Q_\x1A\x90`\x80\x82\x10\x15a/KWPP`\x01\x90V[`\xB8\x82\x10\x15a/aWPa/\x0Ca\x02\xC8\x91a \xA9V[`\xC0\x82\x10\x15a/\xA2W`\x01\x01Q` \x82\x90\x03`\xB7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFJ\x01\x90V[`\xF8\x82\x10\x15a/\xB8WPa/\x0Ca\x02\xC8\x91a |V[`\x01\x01Q` \x82\x90\x03`\xF7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\n\x01\x90V[\x90` \x82\x01\x91a0\0\x83Qa.\xCBV[\x92Q\x90\x83\x82\x01\x80\x92\x11a\x18\xE8WQ\x92\x83\x03\x92\x83\x11a\x18\xE8W\x91\x90V[\x90\x81`\x01\x1B\x91\x80\x83\x04`\x02\x14\x90\x15\x17\x15a\x18\xE8WV[\x15a09WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x01`\x04R`$_\xFD[\x90a0\x8F_a0\x80\x84Qa0{\x81\x15\x15a(\x96V[a0\x1CV[a0\x8A`\x01a(\x96V[a \xE4V[\x90a0\x99\x82a*BV[\x92_\x91\x82[a0\xA8\x85_a\x1FtV[\x84\x10\x15a1hWa1#a,=a0\xA8\x92a0\xC3\x87`\x01\x16\x90V[a1+W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\ra1\x04a,7a,\x11a0\xFE\x8C`\x01\x1C\x90V[\x8Ba*iV[`\x04\x1C`\x0F\x16\x90V[`\xF8\x1B\x16_\x1Aa1\x1D\x82\x8Ba*iV[Sa\x1FfV[\x93\x90Pa0\x9EV[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\ra1ba,7a,\x11a0\xFE\x8C`\x01\x1C\x90V[`\xFF\x16\x90V[\x91P\x92Pa\x1E\x15\x91P\x83Q\x14a02V[a1\x99\x82a1\x8D\x83Qa0{\x81\x15\x15a(\x96V[a0\x8A\x81\x83\x11\x15a(\x96V[\x90a1\xA3\x82a*BV[\x93\x83\x92_[a1\xB2\x82\x87a\x1FtV[\x85\x10\x15a2eW\x90a2%a2\x1Fa1\xB2\x93a1\xCE\x88`\x01\x16\x90V[a2.W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x0Fa1\x04a,7a,\x11a2\t\x8D`\x01\x1C\x90V[\x8Ca*iV[`\xF8\x1B\x16_\x1Aa1\x1D\x82\x8Ca*iV[\x95a\x1FfV[\x94\x90\x91Pa1\xA8V[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x0Fa1ba,7a,\x11a2\t\x8D`\x01\x1C\x90V[\x92PP\x92Pa\x1E\x15\x91P\x83Q\x14a02V[\x80Q` \x81\x10\x15a2\x8FWP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra2\xAE`@\x82a\x07?V[Q\x90 \x90V[\x80Q\x15a\x03OWa2\xC7a\x02\xC8\x91a/\xF0V[a2\xD3\x81\x93\x92\x93a*BV[\x92\x83` \x01\x90a4\xBBV[`\x01\x81Q\x03a&\xEDW` \x01QQ_\x1A`\x80\x14\x90V[a2\xFD\x90a/\xF0V[\x90 \x90V[\x90\x81Q\x15a\x03OW`\x0Fa3\x1Ea1\x04a,7a,\x11\x86a!kV[\x16\x80a31WPa\x02\xC8`\x02_\x93a1yV[`\x01\x81\x03a3FWPa\x02\xC8`\x01_\x93a1yV[`\x02\x81\x03a3\\WPa\x02\xC8`\x02`\x01\x93a1yV[`\x03\x03a\x03OWa\x02\xC8`\x01\x80\x93a1yV[\x91\x90_[\x83\x81\x01\x80\x82\x11a\x18\xE8W\x82Q\x81\x10\x80a4\tW[\x15a4\x01Wa3\xB7\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a*iV[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a3\xE4\x83\x86a*iV[Q\x16\x90\x03a3\xFAWa3\xF5\x90a\x1C]V[a3sV[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a3\x87V[\x90a4PWP\x80Q\x15a4(W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a4\xA3W[a4aWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a4YV[`\x1F\x81\x11a\x18\xE8Wa\x01\0\n\x90V[\x90\x91\x80\x15a5.W[` \x81\x10\x15a4\xFEW\x80a4\xD7WPPPV[a4\xEBa4\xE6a4\xF0\x92a \xD6V[a4\xACV[a nV[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a\x18\xE8W\x90` \x81\x01\x80\x91\x11a\x18\xE8W\x91`\x1F\x19\x81\x01\x90\x81\x11\x15a4\xC4Wa\x1C0V[PPPV", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x9FW\x80c\x1C\x80\x81\xED\x14a\x02\x9AW\x80c\"b8\x97\x14a\x02\x95W\x80c(_$F\x14a\x02\x90W\x80c1\x98\xEB\x10\x14a\x02\x8BW\x80c6+\x81T\x14a\x02\x86W\x80cJW#\xDB\x14a\x02\x81W\x80cN\xB4\xF9z\x14a\x02|W\x80cO\x1E\xF2\x86\x14a\x02wW\x80cR\xD1\x90-\x14a\x02rW\x80cV3D\xB6\x14a\x02mW\x80cV\x7F;>\x14a\x02hW\x80cZc0\x80\x14a\x02cW\x80c^\x84\0\x9D\x14a\x02^W\x80c_y\x07C\x14a\x02YW\x80c`c\x01\"\x14a\x02TW\x80ckM\x17\xAD\x14a\x02OW\x80ck\xA3\xD1\x7F\x14a\x02JW\x80cl\xFA\xDE\xB5\x14a\x02EW\x80cp\x9B\xA4J\x14a\x01\xFAW\x80cqP\x18\xA6\x14a\x02@W\x80c}E\x88\xB1\x14a\x02;W\x80c}\x85\xA2\x81\x14a\x026W\x80c~&\x96]\x14a\x021W\x80c\x8A_~m\x14a\x02,W\x80c\x8D\xA5\xCB[\x14a\x02'W\x80c\x90\x0C\xF0\xCF\x14a\x02\"W\x80c\xA5R#q\x14a\x02\x1DW\x80c\xA6\xE5\xE1%\x14a\x02\x18W\x80c\xAD<\xB1\xCC\x14a\x02\x13W\x80c\xCD\x0FE\xD2\x14a\x02\x0EW\x80c\xCES|\x9F\x14a\x02\tW\x80c\xDA\xAC\x1AV\x14a\x02\x04W\x80c\xDC\x02}k\x14a\x01\xFFW\x80c\xE1\x8BM\xAE\x14a\x01\xFAW\x80c\xE4\x84e\xB7\x14a\x01\xF5W\x80c\xF2\xFD\xE3\x8B\x14a\x01\xF0W\x80c\xF4\x03\x02(\x14a\x01\xEBW\x80c\xF5\xEC:\xD0\x14a\x01\xE6W\x80c\xFEK\x84\xDF\x14a\x01\xE1Wc\xFF\xA1\xADt\x14a\x01\xDCW_\x80\xFD[a$\xE9V[a\"\x91V[a\"CV[a \xE2V[a \x94V[a\x1F/V[a\x12\xA0V[a\x1E\xF3V[a\x1E\x9CV[a\x1E'V[a\x1D\xD9V[a\x1DcV[a\x1D\x04V[a\x1C\xCAV[a\x1C\x8EV[a\x1C v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\n\xE4Wa\n\xE2\x92Pa/\xDFV[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\x0B4\x91\x94P` =` \x11a\x0B;W[a\x0B,\x81\x83a\t\x07V[\x81\x01\x90a+\xF8V[\x92_a\niV[P=a\x0B\"V[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\n\x0EV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x0BBW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03\x8FW`\x80`\x03\x196\x01\x12a\x03\x8FW`\x045a\x0C?a\x04\xBCV[a\x0CGa\x04\xDFV[`d5\x80\x15\x15\x81\x03a\x03\x8FWa\x0C[a,\x07V[a\x0C|s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a%bV[a\x0C\x87\x84\x15\x15a%\x91V[a\x0C\x93a\x05}\x85a1BV[a\x0C\xEFa\x05\xF2a\x05\xEB\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x0E\x8CW[a\r)\x83a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\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\x84\x03a\r\xCBW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x91a\x07\x02a\x06\xE8\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0E$\x82a\r\xF3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0E\x85\x95\x16\x15\x15a%bV[a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0EU\x84_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\rQV[a\x0E\xB9a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\x1CV[a\x0C\xF4V[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03\x8FWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03\x8FWV[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0FN\x906\x90`\x04\x01a\x0E\xBEV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0Fo\x906\x90`\x04\x01a\x0E\xECV[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03\x8FWa\x0F\xCC\x94a\x0F\x9Aa\x0F\xC5\x936\x90`\x04\x01a\x0E\xECV[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a,\xD1V[6\x91a\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra\n\xE2`\xFF`@_ T\x16a&/V[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x81\x10\x15a\x10\xF3W\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01_R\x7F\xDA\xACu\xC4\x0B\xD4/\x19\x95rb9y\xCDr\xD81\xE7\x90:\x13n\xCB\x195\xE6\xFA\0eH\xC8\"\x01T`@Q\x90\x81R` \x90\xF3[a)JV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x11r\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%3V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ `@Q\x90\x80T\x80\x83R` \x83\x01\x91_R` _ \x90_[\x81\x81\x10a\x11\xCAWa\x03u\x85a\x03i\x81\x87\x03\x82a\t\x07V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x11\xB3V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x02\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x03\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWa\x12\xD3a,\x07V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x13\xB7\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%3V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x14\x08a,\x07V[a\x14\x19a\x14\x14\x82a3)V[a&^V[a\x14ua\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\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\x81\x03a\x16\xA0W[\x80\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ta\x14\xFBa\x05\xF2a\x05\xEB\x84a\x05\xDE\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x15IW[P\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\xDEa\x15\x7F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[Ua\x15\xADa\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\x8DV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x15\xDCW[\x80_a\x15\0V[a\x16Ra\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&\x1CV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0UV[a\x16\x9B\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x15\xD5V[a\x16\xD4a\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x170a\x17\x08\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x14\x9DV[4a\x03\x8FWa\x01\0`\x03\x196\x01\x12a\x03\x8FW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17m\x906\x90`\x04\x01a\x0E\xBEV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\x90\x906\x90`\x04\x01a\x0E\xECV[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xB3\x906\x90`\x04\x01a\x0E\xECV[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xD6\x906\x90`\x04\x01a\x0E\xBEV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xF9\x906\x90`\x04\x01a\x0E\xECV[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03\x8FWa\x18 a\n\xE2\x9D6\x90`\x04\x01a\x0E\xECV[\x9C\x90\x9Ba&\xF7V[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18\\\x906\x90`\x04\x01a\x0E\xECV[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18}\x906\x90`\x04\x01a\x0E\xECV[a\x19Ma\x19\x1C\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x97\x95\x97Ta\x18\xEFa\x18\xEAa\x05\xF2a\x05\xEB\x86a\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a(\x88V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x19D\x81a\x196\x87\x8B\x8A\x8C\x88a(\xF4V[\x03`\x1F\x19\x81\x01\x83R\x82a\t\x07V[Q\x90 \x14a)\x1BV[_[\x82\x81\x10a\x1A\xF1Wa\x1A\0a\x19\xD5\x87a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x81\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x1A-a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\x8DV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x1AVW\0[a\x1A\xA8a\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&\x1CV[a\n\xE2\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[\x80a\x1A\xFF`\x01\x92\x84\x88a)wV[5\x80a\x1B\rW[P\x01a\x19OV[a\x1C4a\x1C,a\x1B\x1E\x84\x88\x8Aa)wV[5a\x1Bz\x81a\x1Bu\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a2jV[Pa\x1B\xCD\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R`@_ \x90V[a\x1B\xD8\x85\x82Ta)\x95V[\x90Ua\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[\x91\x82Ta)\x95V[\x90U_a\x1B\x06V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW`@\x80Q\x90a\x1D\x82\x81\x83a\t\x07V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x1Eg\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%3V[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a lW\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FWa\n\xE2a \xB0a\x04\x99V[a \xB8a,\x07V[a)\xA2V[\x90\x91a \xD4a\x02\xE8\x93`@\x84R`@\x84\x01\x90a\x02\xA4V[\x91` \x81\x84\x03\x91\x01Ra\x02\xA4V[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90`D5a!)\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x83\x10a%3V[\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` Ra!^\x83`@_ Ta+\x05V[\x81\x15\x80\x15a\":W[a\"2W[Pa!v\x81a+*V[\x91a!\x80\x82a+*V[\x93_[\x83\x81\x10a!\x99W`@Q\x80a\x03u\x88\x88\x83a \xBDV[`\x01\x90a\" a!\xE3a!\xD3\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a!\xDD\x84\x87a)\x95V[\x90a2\xC2V[\x80a!\xEE\x84\x8Aa+\xA9V[Ra\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[Ta\"+\x82\x89a+\xA9V[R\x01a!\x83V[\x90P_a!lV[P\x80\x82\x11a!gV[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\"\xEA`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a$\xE1W[`\x01\x14\x90\x81a$\xD7W[\x15\x90\x81a$\xCEW[Pa$\xA6Wa#\x87\x90\x82a#~`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a$+Wa+\xBDV[a#\x8DW\0[a#\xF8\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a gV[a$\xA1h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a+\xBDV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a#\x06V[0;\x15\x91Pa\"\xFEV[\x83\x91Pa\"\xF4V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Qb\x0FB@\x81R\xF3[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[\x15a%:WV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%iWV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\x98WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\xC7WV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a&*W`\x01\x01\x90V[a%\xEFV[\x15a&6WV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&eWV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a&*W_\x19\x01\x90V[\x15a&\xA0WV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&\xCFWV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa'\x0F\x94\x96\x98\x9A\x8F\x87a,\xD1V[\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\x81\x14a(fW\x92a(\x02\x95\x92a(\n\x98\x95\x92a'\xD5a\x06\xE8\x87a'\x83a(\x17\x9F\x9C\x99a\x05\xEB\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x15a(\x19Wa%\x06a'\xD0a\x05\xEBa'\x9C6\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R`@_ \x90V[a&\xC8V[\x95`@Qa'\xF9\x81a\x196` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a.\xC9V[\x926\x91a\tFV[` \x81Q\x91\x01 \x14a&/V[V[a%\x06a(aa\x05\xEBa(-6\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ \x90V[a&\x99V[PPPPPPPPa\x05\xEBa'\x9Ca(\x17\x93a(\x83\x936\x91a\tFV[a&/V[\x15a(\x8FWV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a)\r\x90a\x02\xE8\x95\x93`@\x86R`@\x86\x01\x91a(\xB7V[\x92` \x81\x85\x03\x91\x01Ra(\xB7V[\x15a)\"WV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x10\xF3W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a&*WV[\x91\x90\x82\x01\x80\x92\x11a&*WV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a*cWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a&*WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a&*WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a&*WV[` \x03\x90` \x82\x11a&*WV[\x91\x90\x82\x03\x91\x82\x11a&*WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\t\x02W`\x05\x1B` \x01\x90V[\x90a+4\x82a+\x12V[a+A`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+Q\x82\x94a+\x12V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\x10\xF3W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\x10\xF3W``\x01\x90V[\x80Q`\x10\x10\x15a\x10\xF3Wa\x02 \x01\x90V[\x80Q\x15a\x10\xF3W` \x01\x90V[\x80Q`\x01\x10\x15a\x10\xF3W`@\x01\x90V[\x80Q\x82\x10\x15a\x10\xF3W` \x91`\x05\x1B\x01\x01\x90V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ua+\xE7a9\xCCV[a+\xEFa9\xCCV[a(\x173a)\xA2V[\x90\x81` \x91\x03\x12a\x03\x8FWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a,GWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a,zWV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a,\xA9WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x91a\x05\xDE\x93\x96a-\xFC\x96a-\xF0\x94\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x99\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x89_R` Ra-B`@_ T\x15a(\x88V[\x88_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` Ra-x`@_ T\x15\x15a,sV[a-\xACa\x06\xE8\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x94\x8B`@Qa'\xF9\x81a\x196` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x18\xEF\x85\x15\x15a,\xA2V[UV[\x92\x91\x90a.\x0B\x81a+\x12V[\x93a.\x19`@Q\x95\x86a\t\x07V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03\x8FW\x81\x90[\x83\x82\x10a.?WPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FW` \x91a.`\x87\x84\x93\x87\x01a\t|V[\x81R\x01\x91\x01\x90a.1V[\x15a.rWV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a.\xA1WV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a/\x19\x95a/\x91a/\xB4a/(a/\xAFa/\xA3a/\x19a/\xCE\x9Da\x02\xE8\x9F\x9Ca/\x9Da/\x98a/\x9D\x9Da/\x83\x9Fa/\x91a/\x98\x9Fa/(a/#a/\x1Ea/\x19a/\x83\x9Aa/.\x956\x91a\tFV[a4\x8CV[a5\x07V[a+[V[Qa5\xB4V[\x96`@Qa/m\x81a\x196` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\t\x07V[6\x91a-\xFFV[a5\xF6V[\x91a6\x96V[a/\x1E\x81Q\x15\x15a.kV[a+kV[\x96`@Qa/m\x81a\x196` \x82\x01\x94\x85` \x91\x81R\x01\x90V[a/\xDA\x81Q\x15\x15a.\x9AV[a5\xB4V[\x90\x81;\x15a0\xCEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a0\x9DWa0\x9A\x91a:#V[PV[PP4a0\xA6WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\x10\xF3W_R` _ \x01\x90_\x90V[\x91a1>\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 Ta2eW\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\t\x02Wa2\x10a1\xFA\x82`\x01\x85\x94\x01\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a1\x10V[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta2\xBCW\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\t\x02W\x82a2\xA7a1\xFA\x84`\x01\x80\x96\x01\x85U\x84a1\x10V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a2\xCC\x91a1\x10V[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a2\xFCW_\x19\x01\x90a2\xEC\x82\x82a1\x10V[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 T\x90\x81\x15a2\xBCW_\x19\x82\x01\x90\x82\x82\x11a&*W\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x92_\x19\x84\x01\x93\x84\x11a&*W\x83\x83_\x95a3\xFF\x95\x03a4\x05W[PPPa3\xD1\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a2\xD6V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a3\xD1a4e\x91a4W\x80a6\"a6\x1C`\x01\x93\x85a+\xA9V[Qa4\x8CV[a6,\x82\x86a+\xA9V[Ra67\x81\x85a+\xA9V[P\x01a6\x03V[PP\x90V[`@Q\x90a6R` \x83a\t\x07V[_\x80\x83R6` \x84\x017V[\x90a6h\x82a\t*V[a6u`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+Q\x82\x94a\t*V[\x90\x81Q\x81\x10\x15a\x10\xF3W\x01` \x01\x90V[\x90a6\xA0\x90a<\x82V[_\x91_a6\xABa4tV[P\x84Q\x15a9\x93W\x93_\x91[\x81Q\x83\x10\x15a94W\x82\x15\x80\x80a9\x1EW[a\x03\x8FW\x15\x80a9\x02W[a\x03\x8FWa6\xEBa6\xE5\x84\x84a+\xA9V[Qa5\x07V[\x95\x86Q`\x02\x81\x14_\x14a7\xECWPPa7\x14a7\x0Fa7\t\x88a+\x8CV[Qa>\xD0V[a?\x1EV[\x95a7*a7#\x88\x88\x84a?\x8BV[\x80\x92a)\x95V[\x96Q\x11a7\xCEW\x15a7aWPa7A\x90Qa*\x8FV[\x11a\x03\x8FWQ\x11a7XWa7\ta\x02\xE8\x91a+\x99V[Pa\x02\xE8a6CV[\x91\x90\x94a7n\x86Qa*\x8FV[\x82\x14a\x03\x8FW\x80a7\x8Ca\x05\xF2a7\x86`\x01\x94a+\x99V[Qa:gV[\x15a7\xAFWa7\x9Da7\xA3\x91a+\x99V[Qa?\x10V[\x91[\x01\x91\x94\x90\x94a6\xB7V[a7\xBBa7\xC8\x91a+\x99V[Q` \x81\x01Q\x90Q\x90 \x90V[\x91a7\xA5V[PP\x91P\x92Pa7\xDF\x91PQa*\x8FV[\x11a\x03\x8FWa\x02\xE8a6CV[`\x11\x90\x97\x91\x93\x97\x94\x92\x94\x14a8\x05W[P`\x01\x90a7\xA5V[\x95\x93\x80\x92P\x94\x92\x90\x94Q\x83\x14\x15_\x14a8\xE4W`\xFFa8_a8Ya8Sa8-\x87\x87a6\x85V[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[\x94a)\x87V[\x93\x16`\x10\x81\x10\x15a\x03\x8FWa8}a8w\x82\x89a+\xA9V[Qa>\xFAV[\x15a8\x9FWPPPPa8\x92\x91\x92PQa*\x8FV[\x03a\x03\x8FWa\x02\xE8a6CV[\x86a8\xB7a\x05\xF2a7\x86\x84`\x01\x96\x98\x9A\x97\x99\x9Ba+\xA9V[\x15a8\xD1Wa8\xC9\x91a7\x9D\x91a+\xA9V[\x91[\x90a7\xFCV[a8\xDE\x91a7\xBB\x91a+\xA9V[\x91a8\xCBV[PPPa8\xF1\x90Qa*\x8FV[\x03a\x03\x8FWa7\ta\x02\xE8\x91a+{V[Pa9\x16a9\x10\x84\x84a+\xA9V[Qa>\x93V[\x86\x14\x15a6\xD4V[Pa9,a7\xBB\x85\x85a+\xA9V[\x82\x14\x15a6\xC9V[`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid MPT proof\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[P\x90Pa9\xC4\x92P\x7FV\xE8\x1F\x17\x1B\xCCU\xA6\xFF\x83E\xE6\x92\xC0\xF8n[H\xE0\x1B\x99l\xAD\xC0\x01b/\xB5\xE3c\xB4!\x91P\x14a4\xB2V[a\x02\xE8a6CV[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a9\xFBWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xE8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a:_W=\x91a:C\x83a\t*V[\x92a:Q`@Q\x94\x85a\t\x07V[\x83R=_` \x85\x01>a@/V[``\x91a@/V[\x80Q\x15a2eW` `\xC0\x91\x01QQ_\x1A\x10a:\x82W`\x01\x90V[_\x90V[\x80Q\x15a2eW_\x90` \x81\x01\x90\x81Qa:\x9F\x81a:\xE7V[\x81\x01\x80\x91\x11a&*W\x91Q\x90Q\x81\x01\x80\x91\x11a&*W\x91\x90[\x82\x81\x10a:\xC5WP\x90P\x90V[a:\xCE\x81a;RV[\x81\x01\x80\x91\x11a&*Wa:\xE1\x90\x91a&\x1CV[\x90a:\xB8V[Q_\x1A`\x80\x81\x10\x15a:\xF8WP_\x90V[`\xB8\x81\x10\x80\x15a;\x81W\x90a>Aa>;a=\xCE\x93a=\xEA\x88`\x01\x16\x90V[a>JW\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>+a= a8Sa8-a>%\x8D`\x01\x1C\x90V[\x8Ca6\x85V[`\xF8\x1B\x16_\x1Aa=9\x82\x8Ca6\x85V[\x95a)\x87V[\x94\x90\x91Pa=\xC4V[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>+a=~a8Sa8-a>%\x8D`\x01\x1C\x90V[\x92PP\x92Pa(\x17\x91P\x83Q\x14a\xABWP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra>\xCA`@\x82a\t\x07V[Q\x90 \x90V[\x80Q\x15a\x03\x8FWa>\xE3a\x02\xE8\x91a<\x0CV[a>\xEF\x81\x93\x92\x93a6^V[\x92\x83` \x01\x90a@\xD7V[`\x01\x81Q\x03a2eW` \x01QQ_\x1A`\x80\x14\x90V[a?\x19\x90a<\x0CV[\x90 \x90V[\x90\x81Q\x15a\x03\x8FW`\x0Fa?:a= a8Sa8-\x86a+\x8CV[\x16\x80a?MWPa\x02\xE8`\x02_\x93a=\x95V[`\x01\x81\x03a?bWPa\x02\xE8`\x01_\x93a=\x95V[`\x02\x81\x03a?xWPa\x02\xE8`\x02`\x01\x93a=\x95V[`\x03\x03a\x03\x8FWa\x02\xE8`\x01\x80\x93a=\x95V[\x91\x90_[\x83\x81\x01\x80\x82\x11a&*W\x82Q\x81\x10\x80a@%W[\x15a@\x1DWa?\xD3\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a6\x85V[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a@\0\x83\x86a6\x85V[Q\x16\x90\x03a@\x16Wa@\x11\x90a&\x1CV[a?\x8FV[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a?\xA3V[\x90a@lWP\x80Q\x15a@DW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a@\xBFW[a@}WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a@uV[`\x1F\x81\x11a&*Wa\x01\0\n\x90V[\x90\x91\x80\x15aAJW[` \x81\x10\x15aA\x1AW\x80a@\xF3WPPPV[aA\x07aA\x02aA\x0C\x92a*\xF7V[a@\xC8V[a*\x8FV[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a&*W\x90` \x81\x01\x80\x91\x11a&*W\x91`\x1F\x19\x81\x01\x90\x81\x11\x15a@\xE0Wa%\xEFV[PPPV", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] @@ -4205,6 +4233,155 @@ function GAS_AGGREGATOR_STORAGE_LOCATION() external view returns (bytes32); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `GAS_ARCHIVE_STORAGE_LOCATION()` and selector `0x5f790743`. +```solidity +function GAS_ARCHIVE_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_ARCHIVE_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`GAS_ARCHIVE_STORAGE_LOCATION()`](GAS_ARCHIVE_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_ARCHIVE_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_ARCHIVE_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_ARCHIVE_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_ARCHIVE_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_ARCHIVE_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for GAS_ARCHIVE_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GAS_ARCHIVE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [95u8, 121u8, 7u8, 67u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: GAS_ARCHIVE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: GAS_ARCHIVE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `HEADER_STATE_ROOT_INDEX()` and selector `0xe18b4dae`. ```solidity function HEADER_STATE_ROOT_INDEX() external view returns (uint256); @@ -4807,6 +4984,153 @@ function UPGRADE_INTERFACE_VERSION() external view returns (string memory); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `VERSION()` and selector `0xffa1ad74`. +```solidity +function VERSION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `addSequencingChain(uint256,address,address,bool)` and selector `0x563344b6`. ```solidity function addSequencingChain(uint256 chainID, address aggregatorAddress, address outboxAddress, bool settlesToBase) external; @@ -5147,13 +5471,13 @@ function addSettlementChainAsSequencingChain(address aggregatorAddress) external #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `appchainGasFees(uint256,uint256)` and selector `0xdaac1a56`. ```solidity -function appchainGasFees(uint256 epoch, uint256 appchainId) external view returns (uint256 tokens); +function appchainGasFees(uint256 _epoch, uint256 appchainId) external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct appchainGasFeesCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub appchainId: alloy::sol_types::private::primitives::aliases::U256, } @@ -5164,7 +5488,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return #[derive(Clone)] pub struct appchainGasFeesReturn { #[allow(missing_docs)] - pub tokens: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::primitives::aliases::U256, } #[allow( non_camel_case_types, @@ -5201,7 +5525,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: appchainGasFeesCall) -> Self { - (value.epoch, value.appchainId) + (value._epoch, value.appchainId) } } #[automatically_derived] @@ -5209,7 +5533,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return impl ::core::convert::From> for appchainGasFeesCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - epoch: tuple.0, + _epoch: tuple.0, appchainId: tuple.1, } } @@ -5239,7 +5563,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: appchainGasFeesReturn) -> Self { - (value.tokens,) + (value._0,) } } #[automatically_derived] @@ -5247,7 +5571,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return impl ::core::convert::From> for appchainGasFeesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { tokens: tuple.0 } + Self { _0: tuple.0 } } } } @@ -5278,7 +5602,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), as alloy_sol_types::SolType>::tokenize(&self.appchainId), @@ -5299,7 +5623,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: appchainGasFeesReturn = r.into(); - r.tokens + r._0 }) } #[inline] @@ -5311,7 +5635,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: appchainGasFeesReturn = r.into(); - r.tokens + r._0 }) } } @@ -6032,13 +6356,13 @@ function epoch() external view returns (uint256); #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `epochChainDataSubmitted(uint256,uint256)` and selector `0x5a633080`. ```solidity -function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view returns (bool submitted); +function epochChainDataSubmitted(uint256 _epoch, uint256 chainId) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct epochChainDataSubmittedCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub chainId: alloy::sol_types::private::primitives::aliases::U256, } @@ -6049,7 +6373,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r #[derive(Clone)] pub struct epochChainDataSubmittedReturn { #[allow(missing_docs)] - pub submitted: bool, + pub _0: bool, } #[allow( non_camel_case_types, @@ -6087,7 +6411,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochChainDataSubmittedCall) -> Self { - (value.epoch, value.chainId) + (value._epoch, value.chainId) } } #[automatically_derived] @@ -6096,7 +6420,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r for epochChainDataSubmittedCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - epoch: tuple.0, + _epoch: tuple.0, chainId: tuple.1, } } @@ -6124,7 +6448,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochChainDataSubmittedReturn) -> Self { - (value.submitted,) + (value._0,) } } #[automatically_derived] @@ -6132,7 +6456,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r impl ::core::convert::From> for epochChainDataSubmittedReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { submitted: tuple.0 } + Self { _0: tuple.0 } } } } @@ -6163,7 +6487,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), as alloy_sol_types::SolType>::tokenize(&self.chainId), @@ -6184,7 +6508,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: epochChainDataSubmittedReturn = r.into(); - r.submitted + r._0 }) } #[inline] @@ -6196,7 +6520,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: epochChainDataSubmittedReturn = r.into(); - r.submitted + r._0 }) } } @@ -6356,13 +6680,13 @@ function epochRemainingChains() external view returns (uint256); #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `epochVerifiedDataHash(uint256,uint256)` and selector `0x6ba3d17f`. ```solidity -function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view returns (bytes32 dataHash); +function epochVerifiedDataHash(uint256 _epoch, uint256 seqChainID) external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct epochVerifiedDataHashCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub seqChainID: alloy::sol_types::private::primitives::aliases::U256, } @@ -6373,7 +6697,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view #[derive(Clone)] pub struct epochVerifiedDataHashReturn { #[allow(missing_docs)] - pub dataHash: alloy::sol_types::private::FixedBytes<32>, + pub _0: alloy::sol_types::private::FixedBytes<32>, } #[allow( non_camel_case_types, @@ -6411,7 +6735,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochVerifiedDataHashCall) -> Self { - (value.epoch, value.seqChainID) + (value._epoch, value.seqChainID) } } #[automatically_derived] @@ -6420,7 +6744,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view for epochVerifiedDataHashCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - epoch: tuple.0, + _epoch: tuple.0, seqChainID: tuple.1, } } @@ -6448,7 +6772,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochVerifiedDataHashReturn) -> Self { - (value.dataHash,) + (value._0,) } } #[automatically_derived] @@ -6456,7 +6780,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view impl ::core::convert::From> for epochVerifiedDataHashReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { dataHash: tuple.0 } + Self { _0: tuple.0 } } } } @@ -6487,7 +6811,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), as alloy_sol_types::SolType>::tokenize(&self.seqChainID), @@ -6508,7 +6832,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: epochVerifiedDataHashReturn = r.into(); - r.dataHash + r._0 }) } #[inline] @@ -6520,7 +6844,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: epochVerifiedDataHashReturn = r.into(); - r.dataHash + r._0 }) } } @@ -6529,7 +6853,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `ethBlockHashes(bytes32)` and selector `0xf5ec3ad0`. ```solidity -function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent); +function ethBlockHashes(bytes32 blockHash) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -6544,7 +6868,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent #[derive(Clone)] pub struct ethBlockHashesReturn { #[allow(missing_docs)] - pub isPresent: bool, + pub _0: bool, } #[allow( non_camel_case_types, @@ -6608,7 +6932,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: ethBlockHashesReturn) -> Self { - (value.isPresent,) + (value._0,) } } #[automatically_derived] @@ -6616,7 +6940,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From> for ethBlockHashesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { isPresent: tuple.0 } + Self { _0: tuple.0 } } } } @@ -6662,7 +6986,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: ethBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } #[inline] @@ -6674,7 +6998,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: ethBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } } @@ -8603,7 +8927,7 @@ function sendBlockHashes(bytes32 ethBlockHash, bytes32 setBlockHash) external; #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `seqChainGasAggregator(uint256)` and selector `0xa6e5e125`. ```solidity -function seqChainGasAggregator(uint256 chainId) external view returns (address aggregatorAddress); +function seqChainGasAggregator(uint256 chainId) external view returns (address); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -8618,7 +8942,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a #[derive(Clone)] pub struct seqChainGasAggregatorReturn { #[allow(missing_docs)] - pub aggregatorAddress: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -8686,7 +9010,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: seqChainGasAggregatorReturn) -> Self { - (value.aggregatorAddress,) + (value._0,) } } #[automatically_derived] @@ -8694,7 +9018,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a impl ::core::convert::From> for seqChainGasAggregatorReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { aggregatorAddress: tuple.0 } + Self { _0: tuple.0 } } } } @@ -8740,7 +9064,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: seqChainGasAggregatorReturn = r.into(); - r.aggregatorAddress + r._0 }) } #[inline] @@ -8752,7 +9076,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: seqChainGasAggregatorReturn = r.into(); - r.aggregatorAddress + r._0 }) } } @@ -8761,7 +9085,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `seqChainOutbox(uint256)` and selector `0x4eb4f97a`. ```solidity -function seqChainOutbox(uint256 chainId) external view returns (address outboxAddress); +function seqChainOutbox(uint256 chainId) external view returns (address); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -8776,7 +9100,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd #[derive(Clone)] pub struct seqChainOutboxReturn { #[allow(missing_docs)] - pub outboxAddress: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -8842,7 +9166,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: seqChainOutboxReturn) -> Self { - (value.outboxAddress,) + (value._0,) } } #[automatically_derived] @@ -8850,7 +9174,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd impl ::core::convert::From> for seqChainOutboxReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { outboxAddress: tuple.0 } + Self { _0: tuple.0 } } } } @@ -8896,7 +9220,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: seqChainOutboxReturn = r.into(); - r.outboxAddress + r._0 }) } #[inline] @@ -8908,7 +9232,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: seqChainOutboxReturn = r.into(); - r.outboxAddress + r._0 }) } } @@ -9386,7 +9710,7 @@ function sequencingChainId(uint256 index) external view returns (uint256); #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `setBlockHashes(bytes32)` and selector `0x6cfadeb5`. ```solidity -function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent); +function setBlockHashes(bytes32 blockHash) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -9401,7 +9725,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent #[derive(Clone)] pub struct setBlockHashesReturn { #[allow(missing_docs)] - pub isPresent: bool, + pub _0: bool, } #[allow( non_camel_case_types, @@ -9465,7 +9789,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: setBlockHashesReturn) -> Self { - (value.isPresent,) + (value._0,) } } #[automatically_derived] @@ -9473,7 +9797,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From> for setBlockHashesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { isPresent: tuple.0 } + Self { _0: tuple.0 } } } } @@ -9519,7 +9843,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: setBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } #[inline] @@ -9531,7 +9855,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: setBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } } @@ -9875,13 +10199,13 @@ function submitEpochPreImageData(uint256 seqChainID, uint256[] memory appchains, #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `totalGasFees(uint256)` and selector `0x1c8081ed`. ```solidity -function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens); +function totalGasFees(uint256 _epoch) external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct totalGasFeesCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] @@ -9890,7 +10214,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) #[derive(Clone)] pub struct totalGasFeesReturn { #[allow(missing_docs)] - pub totalTokens: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::primitives::aliases::U256, } #[allow( non_camel_case_types, @@ -9923,14 +10247,14 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: totalGasFeesCall) -> Self { - (value.epoch,) + (value._epoch,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> for totalGasFeesCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epoch: tuple.0 } + Self { _epoch: tuple.0 } } } } @@ -9957,14 +10281,14 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: totalGasFeesReturn) -> Self { - (value.totalTokens,) + (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> for totalGasFeesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { totalTokens: tuple.0 } + Self { _0: tuple.0 } } } } @@ -9992,7 +10316,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), ) } #[inline] @@ -10010,7 +10334,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: totalGasFeesReturn = r.into(); - r.totalTokens + r._0 }) } #[inline] @@ -10022,7 +10346,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: totalGasFeesReturn = r.into(); - r.totalTokens + r._0 }) } } @@ -10348,6 +10672,8 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[allow(missing_docs)] GAS_AGGREGATOR_STORAGE_LOCATION(GAS_AGGREGATOR_STORAGE_LOCATIONCall), #[allow(missing_docs)] + GAS_ARCHIVE_STORAGE_LOCATION(GAS_ARCHIVE_STORAGE_LOCATIONCall), + #[allow(missing_docs)] HEADER_STATE_ROOT_INDEX(HEADER_STATE_ROOT_INDEXCall), #[allow(missing_docs)] SEND_ROOT_STORAGE_SLOT(SEND_ROOT_STORAGE_SLOTCall), @@ -10356,6 +10682,8 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[allow(missing_docs)] UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), #[allow(missing_docs)] + VERSION(VERSIONCall), + #[allow(missing_docs)] addSequencingChain(addSequencingChainCall), #[allow(missing_docs)] addSettlementChainAsSequencingChain(addSettlementChainAsSequencingChainCall), @@ -10446,6 +10774,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external [86u8, 127u8, 59u8, 62u8], [90u8, 99u8, 48u8, 128u8], [94u8, 132u8, 0u8, 157u8], + [95u8, 121u8, 7u8, 67u8], [96u8, 99u8, 1u8, 34u8], [107u8, 77u8, 23u8, 173u8], [107u8, 163u8, 209u8, 127u8], @@ -10471,6 +10800,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external [244u8, 3u8, 2u8, 40u8], [245u8, 236u8, 58u8, 208u8], [254u8, 75u8, 132u8, 223u8], + [255u8, 161u8, 173u8, 116u8], ]; /// The names of the variants in the same order as `SELECTORS`. pub const VARIANT_NAMES: &'static [&'static str] = &[ @@ -10488,6 +10818,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external ::core::stringify!(confirmSettlementChainEpochDataHash), ::core::stringify!(epochChainDataSubmitted), ::core::stringify!(sequencingChainId), + ::core::stringify!(GAS_ARCHIVE_STORAGE_LOCATION), ::core::stringify!(getAppchainIds), ::core::stringify!(STORAGE_ROOT_ACCOUNT_FIELDS_INDEX), ::core::stringify!(epochVerifiedDataHash), @@ -10513,6 +10844,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external ::core::stringify!(getAppchainInfo), ::core::stringify!(ethBlockHashes), ::core::stringify!(initialize), + ::core::stringify!(VERSION), ]; /// The signatures in the same order as `SELECTORS`. pub const SIGNATURES: &'static [&'static str] = &[ @@ -10530,6 +10862,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, @@ -10555,6 +10888,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, ]; /// Returns the signature for the given selector, if known. #[inline] @@ -10581,13 +10915,16 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external impl alloy_sol_types::SolInterface for GasArchiveCalls { const NAME: &'static str = "GasArchiveCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 39usize; + const COUNT: usize = 41usize; #[inline] fn selector(&self) -> [u8; 4] { match self { Self::GAS_AGGREGATOR_STORAGE_LOCATION(_) => { ::SELECTOR } + Self::GAS_ARCHIVE_STORAGE_LOCATION(_) => { + ::SELECTOR + } Self::HEADER_STATE_ROOT_INDEX(_) => { ::SELECTOR } @@ -10600,6 +10937,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external Self::UPGRADE_INTERFACE_VERSION(_) => { ::SELECTOR } + Self::VERSION(_) => ::SELECTOR, Self::addSequencingChain(_) => { ::SELECTOR } @@ -10871,6 +11209,17 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } sequencingChainId }, + { + fn GAS_ARCHIVE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasArchiveCalls::GAS_ARCHIVE_STORAGE_LOCATION) + } + GAS_ARCHIVE_STORAGE_LOCATION + }, { fn getAppchainIds( data: &[u8], @@ -11138,6 +11487,13 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } initialize }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasArchiveCalls::VERSION) + } + VERSION + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -11312,6 +11668,17 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } sequencingChainId }, + { + fn GAS_ARCHIVE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasArchiveCalls::GAS_ARCHIVE_STORAGE_LOCATION) + } + GAS_ARCHIVE_STORAGE_LOCATION + }, { fn getAppchainIds( data: &[u8], @@ -11583,6 +11950,15 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } initialize }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasArchiveCalls::VERSION) + } + VERSION + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -11602,6 +11978,11 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } + Self::GAS_ARCHIVE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::HEADER_STATE_ROOT_INDEX(inner) => { ::abi_encoded_size( inner, @@ -11622,6 +12003,9 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } + Self::VERSION(inner) => { + ::abi_encoded_size(inner) + } Self::addSequencingChain(inner) => { ::abi_encoded_size( inner, @@ -11797,6 +12181,12 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } + Self::GAS_ARCHIVE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::HEADER_STATE_ROOT_INDEX(inner) => { ::abi_encode_raw( inner, @@ -11821,6 +12211,9 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } Self::addSequencingChain(inner) => { ::abi_encode_raw( inner, @@ -13574,6 +13967,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, GAS_AGGREGATOR_STORAGE_LOCATIONCall, N> { self.call_builder(&GAS_AGGREGATOR_STORAGE_LOCATIONCall) } + ///Creates a new call builder for the [`GAS_ARCHIVE_STORAGE_LOCATION`] function. + pub fn GAS_ARCHIVE_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, GAS_ARCHIVE_STORAGE_LOCATIONCall, N> { + self.call_builder(&GAS_ARCHIVE_STORAGE_LOCATIONCall) + } ///Creates a new call builder for the [`HEADER_STATE_ROOT_INDEX`] function. pub fn HEADER_STATE_ROOT_INDEX( &self, @@ -13602,6 +14001,10 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) } + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } ///Creates a new call builder for the [`addSequencingChain`] function. pub fn addSequencingChain( &self, @@ -13637,12 +14040,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`appchainGasFees`] function. pub fn appchainGasFees( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, appchainId: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, appchainGasFeesCall, N> { self.call_builder( &appchainGasFeesCall { - epoch, + _epoch, appchainId, }, ) @@ -13716,12 +14119,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`epochChainDataSubmitted`] function. pub fn epochChainDataSubmitted( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, chainId: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, epochChainDataSubmittedCall, N> { self.call_builder( &epochChainDataSubmittedCall { - epoch, + _epoch, chainId, }, ) @@ -13735,12 +14138,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`epochVerifiedDataHash`] function. pub fn epochVerifiedDataHash( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, seqChainID: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, epochVerifiedDataHashCall, N> { self.call_builder( &epochVerifiedDataHashCall { - epoch, + _epoch, seqChainID, }, ) @@ -13931,9 +14334,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`totalGasFees`] function. pub fn totalGasFees( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, totalGasFeesCall, N> { - self.call_builder(&totalGasFeesCall { epoch }) + self.call_builder(&totalGasFeesCall { _epoch }) } ///Creates a new call builder for the [`transferOwnership`] function. pub fn transferOwnership( diff --git a/shared/contract-bindings/src/synd/gas_meter.rs b/shared/contract-bindings/src/synd/gas_meter.rs new file mode 100644 index 000000000..296595315 --- /dev/null +++ b/shared/contract-bindings/src/synd/gas_meter.rs @@ -0,0 +1,5914 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface GasMeter { + error AddressEmptyCode(address target); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error InvalidInitialization(); + error NotInitializing(); + error OwnableInvalidOwner(address owner); + error OwnableUnauthorizedAccount(address account); + error ReentrancyGuardReentrantCall(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroEpochIndex(); + + event Initialized(uint64 version); + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + event Upgraded(address indexed implementation); + + constructor(); + + function EPOCH_DURATION() external view returns (uint256); + function GAS_METER_STORAGE_LOCATION() external view returns (bytes32); + function START_TIMESTAMP() external view returns (uint256); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); + function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); + function getCurrentEpoch() external view returns (uint256); + function getEpochEnd(uint256 epochIndex) external pure returns (uint256); + function getEpochStart(uint256 epochIndex) external pure returns (uint256); + function initialize() external; + function meterCall(bytes memory meteredCall) external; + function owner() external view returns (address); + function proxiableUUID() external view returns (bytes32); + function renounceOwnership() external; + function transferOwnership(address newOwner) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "EPOCH_DURATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "GAS_METER_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "START_TIMESTAMP", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gasUsed", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "chainAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurrentEpoch", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getEpochEnd", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getEpochStart", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "meterCall", + "inputs": [ + { + "name": "meteredCall", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroEpochIndex", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod GasMeter { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60a080604052346100c257306080525f5160206111f35f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161112c90816100c782396080518181816103660152610b350152f35b6001600160401b0319166001600160401b039081175f5160206111f35f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630175e23b146101145780631ef750371461010f5780634f1ef2861461010a57806352d1902d14610105578063715018a614610100578063781cd99d146100fb5780638129fc1c146100f65780638da5cb5b146100f1578063a70b9f0c146100ec578063ad3cb1cc146100e7578063b2fe22d5146100e2578063b97dd9e2146100dd578063cf6acdac146100d8578063d5176d23146100d3578063f2fde38b146100ce5763ffa1ad74146100c9575f80fd5b610ab2565b610a89565b610a42565b6108bd565b61089b565b61080b565b610777565b61075a565b610708565b6104b8565b61049a565b6103de565b61033f565b6102c6565b6101bc565b346101b85760206003193601126101b8576004358015610190577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161018b5762278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57604051908152602090f35b610acf565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101b8575f6003193601126101b85760206040517ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc89008152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028757604052565b610219565b67ffffffffffffffff811161028757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60406003193601126101b8576102da6101f6565b6024359067ffffffffffffffff82116101b857366023830112156101b8578160040135906103078261028c565b916103156040519384610246565b80835236602482860101116101b8576020815f92602461033d97018387013784010152610b1c565b005b346101b8575f6003193601126101b85773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036103b65760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b8575f6003193601126101b8576103f6610e5a565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b8575f6003193601126101b857602060405163688d46f08152f35b346101b8575f6003193601126101b8577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff61050d60ff604084901c16159267ffffffffffffffff1690565b1680159081610700575b60011490816106f6575b1590816106ed575b506106c5578061059d60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61064a575b6105aa610cd8565b6105b057005b61061b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6106c0680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6105a2565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610529565b303b159150610521565b829150610517565b346101b8575f6003193601126101b857602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101b8575f6003193601126101b857602060405162278d008152f35b346101b8575f6003193601126101b85760408051906107968183610246565b6005825260208201917f352e302e3000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b346101b85760406003193601126101b85760243560043573ffffffffffffffffffffffffffffffffffffffff821682036101b857602091610892915f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346101b8575f6003193601126101b85760206108b5610cf1565b604051908152f35b346101b85760206003193601126101b85760043567ffffffffffffffff81116101b857366023820112156101b85780600401359067ffffffffffffffff82116101b85736602483830101116101b8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a1a575f6024819260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5a94806040519384930183378101838152039082335af161097a610d2f565b9015610a1257503a3a15610a0a575b5a820391821161018b5761099c91610afc565b6109a4610cf1565b5f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900602052610a006109f83360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b918254610b0f565b905561033d610ec6565b506001610989565b602081519101fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b85760206003193601126101b85760043562278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57602090604051908152f35b346101b85760206003193601126101b85761033d610aa56101f6565b610aad610e5a565b610d5e565b346101b8575f6003193601126101b8576020604051620f42408152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181029291811591840414171561018b57565b9190820180921161018b57565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c96575b506103b657610b6d610e5a565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa5f9481610c65575b50610c02577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8403610c3857610c36929350610eeb565b565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600484905260245ffd5b610c8891955060203d602011610c8f575b610c808183610246565b810190610e4b565b935f610bbb565b503d610c76565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610b60565b610ce061101c565b610ce861101c565b610c3633610d5e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161018b5762278d0090046001810180911161018b5790565b3d15610d59573d90610d408261028c565b91610d4e6040519384610246565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015610e1f5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b908160209103126101b8575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610e9a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b90813b15610fda5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610fa957610fa691611073565b50565b505034610fb257565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561104b57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f8061109093602081519101845af461108a610d2f565b91611093565b90565b906110d057508051156110a857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611123575b6110e1575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110d956f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\xA0\x80`@R4a\0\xC2W0`\x80R_Q` a\x11\xF3_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\0\xB3W`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0`W[`@Qa\x11,\x90\x81a\0\xC7\x829`\x80Q\x81\x81\x81a\x03f\x01Ra\x0B5\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x11\xF3_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80a\0AV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x01\x14W\x80c\x1E\xF7P7\x14a\x01\x0FW\x80cO\x1E\xF2\x86\x14a\x01\nW\x80cR\xD1\x90-\x14a\x01\x05W\x80cqP\x18\xA6\x14a\x01\0W\x80cx\x1C\xD9\x9D\x14a\0\xFBW\x80c\x81)\xFC\x1C\x14a\0\xF6W\x80c\x8D\xA5\xCB[\x14a\0\xF1W\x80c\xA7\x0B\x9F\x0C\x14a\0\xECW\x80c\xAD<\xB1\xCC\x14a\0\xE7W\x80c\xB2\xFE\"\xD5\x14a\0\xE2W\x80c\xB9}\xD9\xE2\x14a\0\xDDW\x80c\xCFj\xCD\xAC\x14a\0\xD8W\x80c\xD5\x17m#\x14a\0\xD3W\x80c\xF2\xFD\xE3\x8B\x14a\0\xCEWc\xFF\xA1\xADt\x14a\0\xC9W_\x80\xFD[a\n\xB2V[a\n\x89V[a\nBV[a\x08\xBDV[a\x08\x9BV[a\x08\x0BV[a\x07wV[a\x07ZV[a\x07\x08V[a\x04\xB8V[a\x04\x9AV[a\x03\xDEV[a\x03?V[a\x02\xC6V[a\x01\xBCV[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045\x80\x15a\x01\x90W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x01\x8BWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW`@Q\x90\x81R` \x90\xF3[a\n\xCFV[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Q\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\x87W`@RV[a\x02\x19V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\x87W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[`@`\x03\x196\x01\x12a\x01\xB8Wa\x02\xDAa\x01\xF6V[`$5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`#\x83\x01\x12\x15a\x01\xB8W\x81`\x04\x015\x90a\x03\x07\x82a\x02\x8CV[\x91a\x03\x15`@Q\x93\x84a\x02FV[\x80\x83R6`$\x82\x86\x01\x01\x11a\x01\xB8W` \x81_\x92`$a\x03=\x97\x01\x83\x87\x017\x84\x01\x01Ra\x0B\x1CV[\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x03\xB6W` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Wa\x03\xF6a\x0EZV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qch\x8DF\xF0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\r`\xFF`@\x84\x90\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x07\0W[`\x01\x14\x90\x81a\x06\xF6W[\x15\x90\x81a\x06\xEDW[Pa\x06\xC5W\x80a\x05\x9D`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x06JW[a\x05\xAAa\x0C\xD8V[a\x05\xB0W\0[a\x06\x1B\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1\0[a\x06\xC0h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x05\xA2V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x05)V[0;\x15\x91Pa\x05!V[\x82\x91Pa\x05\x17V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb'\x8D\0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W`@\x80Q\x90a\x07\x96\x81\x83a\x02FV[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x01\xB8W`@`\x03\x196\x01\x12a\x01\xB8W`$5`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8W` \x91a\x08\x92\x91_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x83R`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[T`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` a\x08\xB5a\x0C\xF1V[`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\xB8W6`#\x82\x01\x12\x15a\x01\xB8W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`$\x83\x83\x01\x01\x11a\x01\xB8W\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0\\a\n\x1AW_`$\x81\x92`\x01\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]Z\x94\x80`@Q\x93\x84\x93\x01\x837\x81\x01\x83\x81R\x03\x90\x823Z\xF1a\tza\r/V[\x90\x15a\n\x12WP::\x15a\n\nW[Z\x82\x03\x91\x82\x11a\x01\x8BWa\t\x9C\x91a\n\xFCV[a\t\xA4a\x0C\xF1V[_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0` Ra\n\0a\t\xF83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[\x91\x82Ta\x0B\x0FV[\x90Ua\x03=a\x0E\xC6V[P`\x01a\t\x89V[` \x81Q\x91\x01\xFD[\x7F>\xE5\xAE\xB5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW` \x90`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8Wa\x03=a\n\xA5a\x01\xF6V[a\n\xADa\x0EZV[a\r^V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x81\x81\x02\x92\x91\x81\x15\x91\x84\x04\x14\x17\x15a\x01\x8BWV[\x91\x90\x82\x01\x80\x92\x11a\x01\x8BWV[\x90\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0C\x96W[Pa\x03\xB6Wa\x0Bma\x0EZV[`@Q\x92\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` \x84`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x87\x16Z\xFA_\x94\x81a\x0CeW[Pa\x0C\x02W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16`\x04R`$_\xFD[\x90\x91\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x84\x03a\x0C8Wa\x0C6\x92\x93Pa\x0E\xEBV[V[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x84\x90R`$_\xFD[a\x0C\x88\x91\x95P` =` \x11a\x0C\x8FW[a\x0C\x80\x81\x83a\x02FV[\x81\x01\x90a\x0EKV[\x93_a\x0B\xBBV[P=a\x0CvV[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x0B`V[a\x0C\xE0a\x10\x1CV[a\x0C\xE8a\x10\x1CV[a\x0C63a\r^V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x01\x8BWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x01\x8BW\x90V[=\x15a\rYW=\x90a\r@\x82a\x02\x8CV[\x91a\rN`@Q\x93\x84a\x02FV[\x82R=_` \x84\x01>V[``\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x0E\x1FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90\x81` \x91\x03\x12a\x01\xB8WQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x0E\x9AWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[_\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]V[\x90\x81;\x15a\x0F\xDAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a\x0F\xA9Wa\x0F\xA6\x91a\x10sV[PV[PP4a\x0F\xB2WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x10KWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x10\x90\x93` \x81Q\x91\x01\x84Z\xF4a\x10\x8Aa\r/V[\x91a\x10\x93V[\x90V[\x90a\x10\xD0WP\x80Q\x15a\x10\xA8W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x11#W[a\x10\xE1WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x10\xD9V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60806040526004361015610011575f80fd5b5f3560e01c80630175e23b146101145780631ef750371461010f5780634f1ef2861461010a57806352d1902d14610105578063715018a614610100578063781cd99d146100fb5780638129fc1c146100f65780638da5cb5b146100f1578063a70b9f0c146100ec578063ad3cb1cc146100e7578063b2fe22d5146100e2578063b97dd9e2146100dd578063cf6acdac146100d8578063d5176d23146100d3578063f2fde38b146100ce5763ffa1ad74146100c9575f80fd5b610ab2565b610a89565b610a42565b6108bd565b61089b565b61080b565b610777565b61075a565b610708565b6104b8565b61049a565b6103de565b61033f565b6102c6565b6101bc565b346101b85760206003193601126101b8576004358015610190577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161018b5762278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57604051908152602090f35b610acf565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101b8575f6003193601126101b85760206040517ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc89008152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028757604052565b610219565b67ffffffffffffffff811161028757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60406003193601126101b8576102da6101f6565b6024359067ffffffffffffffff82116101b857366023830112156101b8578160040135906103078261028c565b916103156040519384610246565b80835236602482860101116101b8576020815f92602461033d97018387013784010152610b1c565b005b346101b8575f6003193601126101b85773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036103b65760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b8575f6003193601126101b8576103f6610e5a565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b8575f6003193601126101b857602060405163688d46f08152f35b346101b8575f6003193601126101b8577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff61050d60ff604084901c16159267ffffffffffffffff1690565b1680159081610700575b60011490816106f6575b1590816106ed575b506106c5578061059d60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61064a575b6105aa610cd8565b6105b057005b61061b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6106c0680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6105a2565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610529565b303b159150610521565b829150610517565b346101b8575f6003193601126101b857602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101b8575f6003193601126101b857602060405162278d008152f35b346101b8575f6003193601126101b85760408051906107968183610246565b6005825260208201917f352e302e3000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b346101b85760406003193601126101b85760243560043573ffffffffffffffffffffffffffffffffffffffff821682036101b857602091610892915f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346101b8575f6003193601126101b85760206108b5610cf1565b604051908152f35b346101b85760206003193601126101b85760043567ffffffffffffffff81116101b857366023820112156101b85780600401359067ffffffffffffffff82116101b85736602483830101116101b8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a1a575f6024819260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5a94806040519384930183378101838152039082335af161097a610d2f565b9015610a1257503a3a15610a0a575b5a820391821161018b5761099c91610afc565b6109a4610cf1565b5f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900602052610a006109f83360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b918254610b0f565b905561033d610ec6565b506001610989565b602081519101fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b85760206003193601126101b85760043562278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57602090604051908152f35b346101b85760206003193601126101b85761033d610aa56101f6565b610aad610e5a565b610d5e565b346101b8575f6003193601126101b8576020604051620f42408152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181029291811591840414171561018b57565b9190820180921161018b57565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c96575b506103b657610b6d610e5a565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa5f9481610c65575b50610c02577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8403610c3857610c36929350610eeb565b565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600484905260245ffd5b610c8891955060203d602011610c8f575b610c808183610246565b810190610e4b565b935f610bbb565b503d610c76565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610b60565b610ce061101c565b610ce861101c565b610c3633610d5e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161018b5762278d0090046001810180911161018b5790565b3d15610d59573d90610d408261028c565b91610d4e6040519384610246565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015610e1f5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b908160209103126101b8575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610e9a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b90813b15610fda5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610fa957610fa691611073565b50565b505034610fb257565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561104b57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f8061109093602081519101845af461108a610d2f565b91611093565b90565b906110d057508051156110a857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611123575b6110e1575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110d956 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x01\x14W\x80c\x1E\xF7P7\x14a\x01\x0FW\x80cO\x1E\xF2\x86\x14a\x01\nW\x80cR\xD1\x90-\x14a\x01\x05W\x80cqP\x18\xA6\x14a\x01\0W\x80cx\x1C\xD9\x9D\x14a\0\xFBW\x80c\x81)\xFC\x1C\x14a\0\xF6W\x80c\x8D\xA5\xCB[\x14a\0\xF1W\x80c\xA7\x0B\x9F\x0C\x14a\0\xECW\x80c\xAD<\xB1\xCC\x14a\0\xE7W\x80c\xB2\xFE\"\xD5\x14a\0\xE2W\x80c\xB9}\xD9\xE2\x14a\0\xDDW\x80c\xCFj\xCD\xAC\x14a\0\xD8W\x80c\xD5\x17m#\x14a\0\xD3W\x80c\xF2\xFD\xE3\x8B\x14a\0\xCEWc\xFF\xA1\xADt\x14a\0\xC9W_\x80\xFD[a\n\xB2V[a\n\x89V[a\nBV[a\x08\xBDV[a\x08\x9BV[a\x08\x0BV[a\x07wV[a\x07ZV[a\x07\x08V[a\x04\xB8V[a\x04\x9AV[a\x03\xDEV[a\x03?V[a\x02\xC6V[a\x01\xBCV[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045\x80\x15a\x01\x90W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x01\x8BWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW`@Q\x90\x81R` \x90\xF3[a\n\xCFV[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Q\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\x87W`@RV[a\x02\x19V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\x87W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[`@`\x03\x196\x01\x12a\x01\xB8Wa\x02\xDAa\x01\xF6V[`$5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`#\x83\x01\x12\x15a\x01\xB8W\x81`\x04\x015\x90a\x03\x07\x82a\x02\x8CV[\x91a\x03\x15`@Q\x93\x84a\x02FV[\x80\x83R6`$\x82\x86\x01\x01\x11a\x01\xB8W` \x81_\x92`$a\x03=\x97\x01\x83\x87\x017\x84\x01\x01Ra\x0B\x1CV[\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x03\xB6W` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Wa\x03\xF6a\x0EZV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qch\x8DF\xF0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\r`\xFF`@\x84\x90\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x07\0W[`\x01\x14\x90\x81a\x06\xF6W[\x15\x90\x81a\x06\xEDW[Pa\x06\xC5W\x80a\x05\x9D`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x06JW[a\x05\xAAa\x0C\xD8V[a\x05\xB0W\0[a\x06\x1B\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1\0[a\x06\xC0h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x05\xA2V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x05)V[0;\x15\x91Pa\x05!V[\x82\x91Pa\x05\x17V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb'\x8D\0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W`@\x80Q\x90a\x07\x96\x81\x83a\x02FV[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x01\xB8W`@`\x03\x196\x01\x12a\x01\xB8W`$5`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8W` \x91a\x08\x92\x91_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x83R`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[T`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` a\x08\xB5a\x0C\xF1V[`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\xB8W6`#\x82\x01\x12\x15a\x01\xB8W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`$\x83\x83\x01\x01\x11a\x01\xB8W\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0\\a\n\x1AW_`$\x81\x92`\x01\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]Z\x94\x80`@Q\x93\x84\x93\x01\x837\x81\x01\x83\x81R\x03\x90\x823Z\xF1a\tza\r/V[\x90\x15a\n\x12WP::\x15a\n\nW[Z\x82\x03\x91\x82\x11a\x01\x8BWa\t\x9C\x91a\n\xFCV[a\t\xA4a\x0C\xF1V[_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0` Ra\n\0a\t\xF83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[\x91\x82Ta\x0B\x0FV[\x90Ua\x03=a\x0E\xC6V[P`\x01a\t\x89V[` \x81Q\x91\x01\xFD[\x7F>\xE5\xAE\xB5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW` \x90`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8Wa\x03=a\n\xA5a\x01\xF6V[a\n\xADa\x0EZV[a\r^V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x81\x81\x02\x92\x91\x81\x15\x91\x84\x04\x14\x17\x15a\x01\x8BWV[\x91\x90\x82\x01\x80\x92\x11a\x01\x8BWV[\x90\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0C\x96W[Pa\x03\xB6Wa\x0Bma\x0EZV[`@Q\x92\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` \x84`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x87\x16Z\xFA_\x94\x81a\x0CeW[Pa\x0C\x02W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16`\x04R`$_\xFD[\x90\x91\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x84\x03a\x0C8Wa\x0C6\x92\x93Pa\x0E\xEBV[V[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x84\x90R`$_\xFD[a\x0C\x88\x91\x95P` =` \x11a\x0C\x8FW[a\x0C\x80\x81\x83a\x02FV[\x81\x01\x90a\x0EKV[\x93_a\x0B\xBBV[P=a\x0CvV[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x0B`V[a\x0C\xE0a\x10\x1CV[a\x0C\xE8a\x10\x1CV[a\x0C63a\r^V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x01\x8BWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x01\x8BW\x90V[=\x15a\rYW=\x90a\r@\x82a\x02\x8CV[\x91a\rN`@Q\x93\x84a\x02FV[\x82R=_` \x84\x01>V[``\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x0E\x1FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90\x81` \x91\x03\x12a\x01\xB8WQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x0E\x9AWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[_\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]V[\x90\x81;\x15a\x0F\xDAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a\x0F\xA9Wa\x0F\xA6\x91a\x10sV[PV[PP4a\x0F\xB2WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x10KWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x10\x90\x93` \x81Q\x91\x01\x84Z\xF4a\x10\x8Aa\r/V[\x91a\x10\x93V[\x90V[\x90a\x10\xD0WP\x80Q\x15a\x10\xA8W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x11#W[a\x10\xE1WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x10\xD9V", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidInitialization { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for InvalidInitialization { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. +```solidity +error OwnableInvalidOwner(address owner); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableInvalidOwner { + #[allow(missing_docs)] + pub owner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OwnableInvalidOwner) -> Self { + (value.owner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OwnableInvalidOwner { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { owner: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableInvalidOwner { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; + const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.owner, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ReentrancyGuardReentrantCall()` and selector `0x3ee5aeb5`. +```solidity +error ReentrancyGuardReentrantCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ReentrancyGuardReentrantCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ReentrancyGuardReentrantCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ReentrancyGuardReentrantCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ReentrancyGuardReentrantCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ReentrancyGuardReentrantCall()"; + const SELECTOR: [u8; 4] = [62u8, 229u8, 174u8, 181u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. +```solidity +error UUPSUnauthorizedCallContext(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnauthorizedCallContext; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnauthorizedCallContext { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. +```solidity +error UUPSUnsupportedProxiableUUID(bytes32 slot); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnsupportedProxiableUUID { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { slot: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ZeroEpochIndex()` and selector `0xd69368d4`. +```solidity +error ZeroEpochIndex(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ZeroEpochIndex; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroEpochIndex) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ZeroEpochIndex { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ZeroEpochIndex { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ZeroEpochIndex()"; + const SELECTOR: [u8; 4] = [214u8, 147u8, 104u8, 212u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. +```solidity +event Initialized(uint64 version); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. +```solidity +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.previousOwner, + ); + out[2usize] = ::encode_topic( + &self.newOwner, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + /**Constructor`. +```solidity +constructor(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall {} + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `EPOCH_DURATION()` and selector `0xa70b9f0c`. +```solidity +function EPOCH_DURATION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`EPOCH_DURATION()`](EPOCH_DURATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for EPOCH_DURATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for EPOCH_DURATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for EPOCH_DURATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "EPOCH_DURATION()"; + const SELECTOR: [u8; 4] = [167u8, 11u8, 159u8, 12u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `GAS_METER_STORAGE_LOCATION()` and selector `0x1ef75037`. +```solidity +function GAS_METER_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_METER_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`GAS_METER_STORAGE_LOCATION()`](GAS_METER_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_METER_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_METER_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_METER_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_METER_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_METER_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for GAS_METER_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GAS_METER_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [30u8, 247u8, 80u8, 55u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: GAS_METER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: GAS_METER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `START_TIMESTAMP()` and selector `0x781cd99d`. +```solidity +function START_TIMESTAMP() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`START_TIMESTAMP()`](START_TIMESTAMPCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for START_TIMESTAMPCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for START_TIMESTAMPReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for START_TIMESTAMPCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "START_TIMESTAMP()"; + const SELECTOR: [u8; 4] = [120u8, 28u8, 217u8, 157u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. +```solidity +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `VERSION()` and selector `0xffa1ad74`. +```solidity +function VERSION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasUsed(uint256,address)` and selector `0xb2fe22d5`. +```solidity +function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub chainAddress: alloy::sol_types::private::Address, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasUsed(uint256,address)`](gasUsedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedCall) -> Self { + (value.epoch, value.chainAddress) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + epoch: tuple.0, + chainAddress: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasUsedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasUsed(uint256,address)"; + const SELECTOR: [u8; 4] = [178u8, 254u8, 34u8, 213u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ::tokenize( + &self.chainAddress, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getCurrentEpoch()` and selector `0xb97dd9e2`. +```solidity +function getCurrentEpoch() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getCurrentEpoch()`](getCurrentEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCurrentEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getCurrentEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getCurrentEpochCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getCurrentEpoch()"; + const SELECTOR: [u8; 4] = [185u8, 125u8, 217u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochEnd(uint256)` and selector `0xd5176d23`. +```solidity +function getEpochEnd(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochEnd(uint256)`](getEpochEndCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochEndCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochEnd(uint256)"; + const SELECTOR: [u8; 4] = [213u8, 23u8, 109u8, 35u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochStart(uint256)` and selector `0x0175e23b`. +```solidity +function getEpochStart(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochStart(uint256)`](getEpochStartCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochStartCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochStart(uint256)"; + const SELECTOR: [u8; 4] = [1u8, 117u8, 226u8, 59u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `initialize()` and selector `0x8129fc1c`. +```solidity +function initialize() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeCall; + ///Container type for the return parameters of the [`initialize()`](initializeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize()"; + const SELECTOR: [u8; 4] = [129u8, 41u8, 252u8, 28u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + initializeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `meterCall(bytes)` and selector `0xcf6acdac`. +```solidity +function meterCall(bytes memory meteredCall) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct meterCallCall { + #[allow(missing_docs)] + pub meteredCall: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`meterCall(bytes)`](meterCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct meterCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: meterCallCall) -> Self { + (value.meteredCall,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for meterCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { meteredCall: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: meterCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for meterCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl meterCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for meterCallCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = meterCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "meterCall(bytes)"; + const SELECTOR: [u8; 4] = [207u8, 106u8, 205u8, 172u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.meteredCall, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + meterCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `owner()` and selector `0x8da5cb5b`. +```solidity +function owner() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`owner()`](ownerCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. +```solidity +function proxiableUUID() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for proxiableUUIDCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. +```solidity +function renounceOwnership() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl renounceOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + renounceOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. +```solidity +function transferOwnership(address newOwner) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipCall { + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + transferOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. +```solidity +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newImplementation: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl upgradeToAndCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = upgradeToAndCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + upgradeToAndCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + ///Container for all the [`GasMeter`](self) function calls. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum GasMeterCalls { + #[allow(missing_docs)] + EPOCH_DURATION(EPOCH_DURATIONCall), + #[allow(missing_docs)] + GAS_METER_STORAGE_LOCATION(GAS_METER_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + START_TIMESTAMP(START_TIMESTAMPCall), + #[allow(missing_docs)] + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), + #[allow(missing_docs)] + VERSION(VERSIONCall), + #[allow(missing_docs)] + gasUsed(gasUsedCall), + #[allow(missing_docs)] + getCurrentEpoch(getCurrentEpochCall), + #[allow(missing_docs)] + getEpochEnd(getEpochEndCall), + #[allow(missing_docs)] + getEpochStart(getEpochStartCall), + #[allow(missing_docs)] + initialize(initializeCall), + #[allow(missing_docs)] + meterCall(meterCallCall), + #[allow(missing_docs)] + owner(ownerCall), + #[allow(missing_docs)] + proxiableUUID(proxiableUUIDCall), + #[allow(missing_docs)] + renounceOwnership(renounceOwnershipCall), + #[allow(missing_docs)] + transferOwnership(transferOwnershipCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), + } + impl GasMeterCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [1u8, 117u8, 226u8, 59u8], + [30u8, 247u8, 80u8, 55u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], + [113u8, 80u8, 24u8, 166u8], + [120u8, 28u8, 217u8, 157u8], + [129u8, 41u8, 252u8, 28u8], + [141u8, 165u8, 203u8, 91u8], + [167u8, 11u8, 159u8, 12u8], + [173u8, 60u8, 177u8, 204u8], + [178u8, 254u8, 34u8, 213u8], + [185u8, 125u8, 217u8, 226u8], + [207u8, 106u8, 205u8, 172u8], + [213u8, 23u8, 109u8, 35u8], + [242u8, 253u8, 227u8, 139u8], + [255u8, 161u8, 173u8, 116u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(getEpochStart), + ::core::stringify!(GAS_METER_STORAGE_LOCATION), + ::core::stringify!(upgradeToAndCall), + ::core::stringify!(proxiableUUID), + ::core::stringify!(renounceOwnership), + ::core::stringify!(START_TIMESTAMP), + ::core::stringify!(initialize), + ::core::stringify!(owner), + ::core::stringify!(EPOCH_DURATION), + ::core::stringify!(UPGRADE_INTERFACE_VERSION), + ::core::stringify!(gasUsed), + ::core::stringify!(getCurrentEpoch), + ::core::stringify!(meterCall), + ::core::stringify!(getEpochEnd), + ::core::stringify!(transferOwnership), + ::core::stringify!(VERSION), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for GasMeterCalls { + const NAME: &'static str = "GasMeterCalls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 16usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::EPOCH_DURATION(_) => { + ::SELECTOR + } + Self::GAS_METER_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::START_TIMESTAMP(_) => { + ::SELECTOR + } + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR + } + Self::VERSION(_) => ::SELECTOR, + Self::gasUsed(_) => ::SELECTOR, + Self::getCurrentEpoch(_) => { + ::SELECTOR + } + Self::getEpochEnd(_) => { + ::SELECTOR + } + Self::getEpochStart(_) => { + ::SELECTOR + } + Self::initialize(_) => { + ::SELECTOR + } + Self::meterCall(_) => { + ::SELECTOR + } + Self::owner(_) => ::SELECTOR, + Self::proxiableUUID(_) => { + ::SELECTOR + } + Self::renounceOwnership(_) => { + ::SELECTOR + } + Self::transferOwnership(_) => { + ::SELECTOR + } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::getEpochStart) + } + getEpochStart + }, + { + fn GAS_METER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::GAS_METER_STORAGE_LOCATION) + } + GAS_METER_STORAGE_LOCATION + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::upgradeToAndCall) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::proxiableUUID) + } + proxiableUUID + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::renounceOwnership) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::START_TIMESTAMP) + } + START_TIMESTAMP + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::initialize) + } + initialize + }, + { + fn owner(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::owner) + } + owner + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::EPOCH_DURATION) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::UPGRADE_INTERFACE_VERSION) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::gasUsed) + } + gasUsed + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::getCurrentEpoch) + } + getCurrentEpoch + }, + { + fn meterCall(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::meterCall) + } + meterCall + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::getEpochEnd) + } + getEpochEnd + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::transferOwnership) + } + transferOwnership + }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::getEpochStart) + } + getEpochStart + }, + { + fn GAS_METER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::GAS_METER_STORAGE_LOCATION) + } + GAS_METER_STORAGE_LOCATION + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::upgradeToAndCall) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::proxiableUUID) + } + proxiableUUID + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::renounceOwnership) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::START_TIMESTAMP) + } + START_TIMESTAMP + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::initialize) + } + initialize + }, + { + fn owner(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::owner) + } + owner + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::EPOCH_DURATION) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::UPGRADE_INTERFACE_VERSION) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::gasUsed) + } + gasUsed + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::getCurrentEpoch) + } + getCurrentEpoch + }, + { + fn meterCall(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::meterCall) + } + meterCall + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::getEpochEnd) + } + getEpochEnd + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::transferOwnership) + } + transferOwnership + }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::GAS_METER_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::VERSION(inner) => { + ::abi_encoded_size(inner) + } + Self::gasUsed(inner) => { + ::abi_encoded_size(inner) + } + Self::getCurrentEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochStart(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::initialize(inner) => { + ::abi_encoded_size(inner) + } + Self::meterCall(inner) => { + ::abi_encoded_size(inner) + } + Self::owner(inner) => { + ::abi_encoded_size(inner) + } + Self::proxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::transferOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::GAS_METER_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } + Self::gasUsed(inner) => { + ::abi_encode_raw(inner, out) + } + Self::getCurrentEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochStart(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::initialize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::meterCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::owner(inner) => { + ::abi_encode_raw(inner, out) + } + Self::proxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::transferOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`GasMeter`](self) custom errors. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum GasMeterErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] + OwnableInvalidOwner(OwnableInvalidOwner), + #[allow(missing_docs)] + OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), + #[allow(missing_docs)] + ReentrancyGuardReentrantCall(ReentrancyGuardReentrantCall), + #[allow(missing_docs)] + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroEpochIndex(ZeroEpochIndex), + } + impl GasMeterErrors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [17u8, 140u8, 218u8, 167u8], + [30u8, 79u8, 189u8, 247u8], + [62u8, 229u8, 174u8, 181u8], + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 147u8, 104u8, 212u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(OwnableUnauthorizedAccount), + ::core::stringify!(OwnableInvalidOwner), + ::core::stringify!(ReentrancyGuardReentrantCall), + ::core::stringify!(ERC1967InvalidImplementation), + ::core::stringify!(AddressEmptyCode), + ::core::stringify!(UUPSUnsupportedProxiableUUID), + ::core::stringify!(ERC1967NonPayable), + ::core::stringify!(ZeroEpochIndex), + ::core::stringify!(FailedCall), + ::core::stringify!(NotInitializing), + ::core::stringify!(UUPSUnauthorizedCallContext), + ::core::stringify!(InvalidInitialization), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for GasMeterErrors { + const NAME: &'static str = "GasMeterErrors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 12usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR + } + Self::NotInitializing(_) => { + ::SELECTOR + } + Self::OwnableInvalidOwner(_) => { + ::SELECTOR + } + Self::OwnableUnauthorizedAccount(_) => { + ::SELECTOR + } + Self::ReentrancyGuardReentrantCall(_) => { + ::SELECTOR + } + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroEpochIndex(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::OwnableUnauthorizedAccount) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::OwnableInvalidOwner) + } + OwnableInvalidOwner + }, + { + fn ReentrancyGuardReentrantCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ReentrancyGuardReentrantCall) + } + ReentrancyGuardReentrantCall + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::UUPSUnsupportedProxiableUUID) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ZeroEpochIndex) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::NotInitializing) + } + NotInitializing + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::UUPSUnauthorizedCallContext) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::InvalidInitialization) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::OwnableUnauthorizedAccount) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::OwnableInvalidOwner) + } + OwnableInvalidOwner + }, + { + fn ReentrancyGuardReentrantCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ReentrancyGuardReentrantCall) + } + ReentrancyGuardReentrantCall + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::UUPSUnsupportedProxiableUUID) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ZeroEpochIndex) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::NotInitializing) + } + NotInitializing + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::UUPSUnauthorizedCallContext) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::InvalidInitialization) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ReentrancyGuardReentrantCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ReentrancyGuardReentrantCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`GasMeter`](self) events. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum GasMeterEvents { + #[allow(missing_docs)] + Initialized(Initialized), + #[allow(missing_docs)] + OwnershipTransferred(OwnershipTransferred), + #[allow(missing_docs)] + Upgraded(Upgraded), + } + impl GasMeterEvents { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(OwnershipTransferred), + ::core::stringify!(Upgraded), + ::core::stringify!(Initialized), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for GasMeterEvents { + const NAME: &'static str = "GasMeterEvents"; + const COUNT: usize = 3usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::Initialized) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::OwnershipTransferred) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for GasMeterEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`GasMeter`](self) contract instance. + +See the [wrapper's documentation](`GasMeterInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> GasMeterInstance { + GasMeterInstance::::new(address, __provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + GasMeterInstance::::deploy(__provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(__provider: P) -> alloy_contract::RawCallBuilder { + GasMeterInstance::::deploy_builder(__provider) + } + /**A [`GasMeter`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`GasMeter`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct GasMeterInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for GasMeterInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("GasMeterInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > GasMeterInstance { + /**Creates a new wrapper around an on-chain [`GasMeter`](self) contract instance. + +See the [wrapper's documentation](`GasMeterInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> Self { + Self { + address, + provider: __provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + __provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(__provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + __provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl GasMeterInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> GasMeterInstance { + GasMeterInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > GasMeterInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`EPOCH_DURATION`] function. + pub fn EPOCH_DURATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, EPOCH_DURATIONCall, N> { + self.call_builder(&EPOCH_DURATIONCall) + } + ///Creates a new call builder for the [`GAS_METER_STORAGE_LOCATION`] function. + pub fn GAS_METER_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, GAS_METER_STORAGE_LOCATIONCall, N> { + self.call_builder(&GAS_METER_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`START_TIMESTAMP`] function. + pub fn START_TIMESTAMP( + &self, + ) -> alloy_contract::SolCallBuilder<&P, START_TIMESTAMPCall, N> { + self.call_builder(&START_TIMESTAMPCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) + } + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } + ///Creates a new call builder for the [`gasUsed`] function. + pub fn gasUsed( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + chainAddress: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, gasUsedCall, N> { + self.call_builder(&gasUsedCall { epoch, chainAddress }) + } + ///Creates a new call builder for the [`getCurrentEpoch`] function. + pub fn getCurrentEpoch( + &self, + ) -> alloy_contract::SolCallBuilder<&P, getCurrentEpochCall, N> { + self.call_builder(&getCurrentEpochCall) + } + ///Creates a new call builder for the [`getEpochEnd`] function. + pub fn getEpochEnd( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochEndCall, N> { + self.call_builder(&getEpochEndCall { epochIndex }) + } + ///Creates a new call builder for the [`getEpochStart`] function. + pub fn getEpochStart( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochStartCall, N> { + self.call_builder(&getEpochStartCall { epochIndex }) + } + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( + &self, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { + self.call_builder(&initializeCall) + } + ///Creates a new call builder for the [`meterCall`] function. + pub fn meterCall( + &self, + meteredCall: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, meterCallCall, N> { + self.call_builder(&meterCallCall { meteredCall }) + } + ///Creates a new call builder for the [`owner`] function. + pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> { + self.call_builder(&ownerCall) + } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } + ///Creates a new call builder for the [`renounceOwnership`] function. + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { + self.call_builder(&renounceOwnershipCall) + } + ///Creates a new call builder for the [`transferOwnership`] function. + pub fn transferOwnership( + &self, + newOwner: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> { + self.call_builder(&transferOwnershipCall { newOwner }) + } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } + } + /// Event filters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > GasMeterInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`OwnershipTransferred`] event. + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event<&P, OwnershipTransferred, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/contract-bindings/src/synd/i_gas_aggregator.rs b/shared/contract-bindings/src/synd/i_gas_aggregator.rs new file mode 100644 index 000000000..cf189e850 --- /dev/null +++ b/shared/contract-bindings/src/synd/i_gas_aggregator.rs @@ -0,0 +1,1010 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface IGasAggregator { + function allowedImplementations(address implementation) external view returns (bool); + function notifyChainUpgrade(uint256 chainId, address newImplementation) external; + function notifyNewImplementation(address newImplementation) external; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "allowedImplementations", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "notifyChainUpgrade", + "inputs": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "notifyNewImplementation", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod IGasAggregator { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `allowedImplementations(address)` and selector `0x2c696f46`. +```solidity +function allowedImplementations(address implementation) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct allowedImplementationsCall { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`allowedImplementations(address)`](allowedImplementationsCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct allowedImplementationsReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: allowedImplementationsCall) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for allowedImplementationsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: allowedImplementationsReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for allowedImplementationsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for allowedImplementationsCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "allowedImplementations(address)"; + const SELECTOR: [u8; 4] = [44u8, 105u8, 111u8, 70u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: allowedImplementationsReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: allowedImplementationsReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `notifyChainUpgrade(uint256,address)` and selector `0x07a9bee7`. +```solidity +function notifyChainUpgrade(uint256 chainId, address newImplementation) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyChainUpgradeCall { + #[allow(missing_docs)] + pub chainId: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`notifyChainUpgrade(uint256,address)`](notifyChainUpgradeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyChainUpgradeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyChainUpgradeCall) -> Self { + (value.chainId, value.newImplementation) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyChainUpgradeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + chainId: tuple.0, + newImplementation: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyChainUpgradeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyChainUpgradeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl notifyChainUpgradeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for notifyChainUpgradeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = notifyChainUpgradeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "notifyChainUpgrade(uint256,address)"; + const SELECTOR: [u8; 4] = [7u8, 169u8, 190u8, 231u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.chainId), + ::tokenize( + &self.newImplementation, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + notifyChainUpgradeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `notifyNewImplementation(address)` and selector `0x7432c9ca`. +```solidity +function notifyNewImplementation(address newImplementation) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyNewImplementationCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`notifyNewImplementation(address)`](notifyNewImplementationCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyNewImplementationReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyNewImplementationCall) -> Self { + (value.newImplementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyNewImplementationCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newImplementation: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyNewImplementationReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyNewImplementationReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl notifyNewImplementationReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for notifyNewImplementationCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = notifyNewImplementationReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "notifyNewImplementation(address)"; + const SELECTOR: [u8; 4] = [116u8, 50u8, 201u8, 202u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + notifyNewImplementationReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + ///Container for all the [`IGasAggregator`](self) function calls. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum IGasAggregatorCalls { + #[allow(missing_docs)] + allowedImplementations(allowedImplementationsCall), + #[allow(missing_docs)] + notifyChainUpgrade(notifyChainUpgradeCall), + #[allow(missing_docs)] + notifyNewImplementation(notifyNewImplementationCall), + } + impl IGasAggregatorCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [7u8, 169u8, 190u8, 231u8], + [44u8, 105u8, 111u8, 70u8], + [116u8, 50u8, 201u8, 202u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(notifyChainUpgrade), + ::core::stringify!(allowedImplementations), + ::core::stringify!(notifyNewImplementation), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for IGasAggregatorCalls { + const NAME: &'static str = "IGasAggregatorCalls"; + const MIN_DATA_LENGTH: usize = 32usize; + const COUNT: usize = 3usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::allowedImplementations(_) => { + ::SELECTOR + } + Self::notifyChainUpgrade(_) => { + ::SELECTOR + } + Self::notifyNewImplementation(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn notifyChainUpgrade( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(IGasAggregatorCalls::notifyChainUpgrade) + } + notifyChainUpgrade + }, + { + fn allowedImplementations( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(IGasAggregatorCalls::allowedImplementations) + } + allowedImplementations + }, + { + fn notifyNewImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(IGasAggregatorCalls::notifyNewImplementation) + } + notifyNewImplementation + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn notifyChainUpgrade( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasAggregatorCalls::notifyChainUpgrade) + } + notifyChainUpgrade + }, + { + fn allowedImplementations( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasAggregatorCalls::allowedImplementations) + } + allowedImplementations + }, + { + fn notifyNewImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasAggregatorCalls::notifyNewImplementation) + } + notifyNewImplementation + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::allowedImplementations(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::notifyChainUpgrade(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::notifyNewImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::allowedImplementations(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::notifyChainUpgrade(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::notifyNewImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`IGasAggregator`](self) contract instance. + +See the [wrapper's documentation](`IGasAggregatorInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> IGasAggregatorInstance { + IGasAggregatorInstance::::new(address, __provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + IGasAggregatorInstance::::deploy(__provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(__provider: P) -> alloy_contract::RawCallBuilder { + IGasAggregatorInstance::::deploy_builder(__provider) + } + /**A [`IGasAggregator`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`IGasAggregator`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct IGasAggregatorInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for IGasAggregatorInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("IGasAggregatorInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasAggregatorInstance { + /**Creates a new wrapper around an on-chain [`IGasAggregator`](self) contract instance. + +See the [wrapper's documentation](`IGasAggregatorInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> Self { + Self { + address, + provider: __provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + __provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(__provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + __provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl IGasAggregatorInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> IGasAggregatorInstance { + IGasAggregatorInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasAggregatorInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`allowedImplementations`] function. + pub fn allowedImplementations( + &self, + implementation: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, allowedImplementationsCall, N> { + self.call_builder( + &allowedImplementationsCall { + implementation, + }, + ) + } + ///Creates a new call builder for the [`notifyChainUpgrade`] function. + pub fn notifyChainUpgrade( + &self, + chainId: alloy::sol_types::private::primitives::aliases::U256, + newImplementation: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, notifyChainUpgradeCall, N> { + self.call_builder( + ¬ifyChainUpgradeCall { + chainId, + newImplementation, + }, + ) + } + ///Creates a new call builder for the [`notifyNewImplementation`] function. + pub fn notifyNewImplementation( + &self, + newImplementation: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, notifyNewImplementationCall, N> { + self.call_builder( + ¬ifyNewImplementationCall { + newImplementation, + }, + ) + } + } + /// Event filters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasAggregatorInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + } +} diff --git a/shared/contract-bindings/src/synd/i_gas_meter.rs b/shared/contract-bindings/src/synd/i_gas_meter.rs new file mode 100644 index 000000000..027108e43 --- /dev/null +++ b/shared/contract-bindings/src/synd/i_gas_meter.rs @@ -0,0 +1,558 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface IGasMeter { + function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "gasUsed", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "chainAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod IGasMeter { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasUsed(uint256,address)` and selector `0xb2fe22d5`. +```solidity +function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub chainAddress: alloy::sol_types::private::Address, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasUsed(uint256,address)`](gasUsedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedCall) -> Self { + (value.epoch, value.chainAddress) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + epoch: tuple.0, + chainAddress: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasUsedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasUsed(uint256,address)"; + const SELECTOR: [u8; 4] = [178u8, 254u8, 34u8, 213u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ::tokenize( + &self.chainAddress, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + } + }; + ///Container for all the [`IGasMeter`](self) function calls. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum IGasMeterCalls { + #[allow(missing_docs)] + gasUsed(gasUsedCall), + } + impl IGasMeterCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[[178u8, 254u8, 34u8, 213u8]]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(gasUsed), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for IGasMeterCalls { + const NAME: &'static str = "IGasMeterCalls"; + const MIN_DATA_LENGTH: usize = 64usize; + const COUNT: usize = 1usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::gasUsed(_) => ::SELECTOR, + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(IGasMeterCalls::gasUsed) + } + gasUsed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasMeterCalls::gasUsed) + } + gasUsed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::gasUsed(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::gasUsed(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`IGasMeter`](self) contract instance. + +See the [wrapper's documentation](`IGasMeterInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> IGasMeterInstance { + IGasMeterInstance::::new(address, __provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + IGasMeterInstance::::deploy(__provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(__provider: P) -> alloy_contract::RawCallBuilder { + IGasMeterInstance::::deploy_builder(__provider) + } + /**A [`IGasMeter`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`IGasMeter`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct IGasMeterInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for IGasMeterInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("IGasMeterInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasMeterInstance { + /**Creates a new wrapper around an on-chain [`IGasMeter`](self) contract instance. + +See the [wrapper's documentation](`IGasMeterInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> Self { + Self { + address, + provider: __provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + __provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(__provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + __provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl IGasMeterInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> IGasMeterInstance { + IGasMeterInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasMeterInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`gasUsed`] function. + pub fn gasUsed( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + chainAddress: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, gasUsedCall, N> { + self.call_builder(&gasUsedCall { epoch, chainAddress }) + } + } + /// Event filters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasMeterInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + } +} diff --git a/shared/contract-bindings/src/synd/mod.rs b/shared/contract-bindings/src/synd/mod.rs index 23fbfdbb4..20fb8df40 100644 --- a/shared/contract-bindings/src/synd/mod.rs +++ b/shared/contract-bindings/src/synd/mod.rs @@ -3,6 +3,7 @@ //! This is autogenerated code. //! Do not manually edit these files. //! These files may be overwritten by the codegen system at any time. +pub mod r#always_allowed_module; pub mod r#arb_chain_config; pub mod r#arb_config_manager; pub mod r#arb_config_manager_factory; @@ -14,17 +15,21 @@ pub mod r#assertion_poster; pub mod r#i_new_rollup; pub mod r#attestation_doc_verifier; pub mod r#block_hash_relayer; +pub mod r#erc1967_proxy; pub mod r#emissions_calculator; pub mod r#emissions_scheduler; pub mod r#gas_aggregator; pub mod r#gas_aggregator_utils; +pub mod r#i_gas_meter; pub mod r#gas_archive; +pub mod r#gas_meter; pub mod r#i_assertion_poster; pub mod r#i_attestation_doc_verifier; pub mod r#i_bridge; pub mod r#i_bridge_proxy; pub mod r#i_bridge_rate_limiter; pub mod r#i_delayed_message_provider; +pub mod r#i_gas_aggregator; pub mod r#i_gas_refunder; pub mod r#i_inbox; pub mod r#i_inbox_base; @@ -43,5 +48,7 @@ pub mod r#node_interface; pub mod r#refunder; pub mod r#rollup; pub mod r#syndicate_sequencing_chain; +pub mod r#syndicate_sequencing_chain_testing_upgradeability; +pub mod r#syndicate_sequencing_chain_upgrade_v2; pub mod r#tee_key_manager; pub mod r#tee_module; diff --git a/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs b/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs index bf8895b83..8c8fdb9e1 100644 --- a/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs +++ b/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs @@ -3,46 +3,52 @@ Generated by the following Solidity interface... ```solidity interface SyndicateSequencingChain { + error AddressEmptyCode(address target); error DataTooLarge(uint256 dataLength, uint256 maxDataLength); - error GasTrackingAlreadyDisabled(); - error GasTrackingAlreadyEnabled(); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error InvalidInitialization(); error NoTxData(); + error NotGasMeterContract(); + error NotInitializing(); error OwnableInvalidOwner(address owner); error OwnableUnauthorizedAccount(address account); error TransactionOrSenderNotAllowed(); - error ZeroEpochIndex(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroAddress(); - event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newReceiver); + event Initialized(uint64 version); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event RequirementModuleUpdated(address indexed newModule); event TransactionProcessed(address indexed sender, bytes data); + event Upgraded(address indexed implementation); - constructor(uint256 _appchainId); + constructor(address _gasMeter); - function EPOCH_DURATION() external view returns (uint256); - function START_TIMESTAMP() external view returns (uint256); + function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); + function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); + function _processTransaction(address sequencer, bytes memory data) external; + function _processTransactionsBulk(address sequencer, bytes[] memory data) external; function appchainId() external view returns (uint256); - function disableGasTracking() external; - function emissionsReceiver() external view returns (address); - function enableGasTracking() external; function encodeTransaction(bytes memory data) external pure returns (bytes memory); - function gasTrackingDisabled() external view returns (bool); - function getCurrentEpoch() external view returns (uint256); - function getEmissionsReceiver() external view returns (address); - function getEpochEnd(uint256 epochIndex) external pure returns (uint256); - function getEpochStart(uint256 epochIndex) external pure returns (uint256); - function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); + function gasMeter() external view returns (address); + function getInitializedVersion() external view returns (uint64); + function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); function maxDataSize() external view returns (uint256); function owner() external view returns (address); function permissionRequirementModule() external view returns (address); function processTransaction(bytes memory data) external; function processTransactionsBulk(bytes[] memory data) external; + function proxiableUUID() external view returns (bytes32); function renounceOwnership() external; - function setEmissionsReceiver(address _emissionsReceiver) external; - function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 tokensUsed); function transferOwnership(address newOwner) external; function updateRequirementModule(address _newModule) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; } ``` @@ -53,114 +59,104 @@ interface SyndicateSequencingChain { "type": "constructor", "inputs": [ { - "name": "_appchainId", - "type": "uint256", - "internalType": "uint256" + "name": "_gasMeter", + "type": "address", + "internalType": "address" } ], "stateMutability": "nonpayable" }, { "type": "function", - "name": "EPOCH_DURATION", + "name": "SEQUENCING_MODULE_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes32", + "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", - "name": "START_TIMESTAMP", + "name": "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes32", + "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", - "name": "appchainId", + "name": "UPGRADE_INTERFACE_VERSION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "string", + "internalType": "string" } ], "stateMutability": "view" }, { "type": "function", - "name": "disableGasTracking", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "emissionsReceiver", + "name": "VERSION", "inputs": [], "outputs": [ { "name": "", - "type": "address", - "internalType": "address" + "type": "uint256", + "internalType": "uint256" } ], "stateMutability": "view" }, { "type": "function", - "name": "enableGasTracking", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "encodeTransaction", + "name": "_processTransaction", "inputs": [ { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ + "name": "sequencer", + "type": "address", + "internalType": "address" + }, { - "name": "", + "name": "data", "type": "bytes", "internalType": "bytes" } ], - "stateMutability": "pure" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", - "name": "gasTrackingDisabled", - "inputs": [], - "outputs": [ + "name": "_processTransactionsBulk", + "inputs": [ { - "name": "", - "type": "bool", - "internalType": "bool" + "name": "sequencer", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" } ], - "stateMutability": "view" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", - "name": "getCurrentEpoch", + "name": "appchainId", "inputs": [], "outputs": [ { @@ -173,73 +169,71 @@ interface SyndicateSequencingChain { }, { "type": "function", - "name": "getEmissionsReceiver", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getEpochEnd", + "name": "encodeTransaction", "inputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" + "name": "data", + "type": "bytes", + "internalType": "bytes" } ], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes", + "internalType": "bytes" } ], "stateMutability": "pure" }, { "type": "function", - "name": "getEpochStart", - "inputs": [ + "name": "gasMeter", + "inputs": [], + "outputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInitializedVersion", + "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "pure" + "stateMutability": "view" }, { "type": "function", - "name": "getTokensForEpoch", + "name": "initialize", "inputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ + "name": "admin", + "type": "address", + "internalType": "address" + }, { - "name": "", + "name": "_permissionRequirementModule", + "type": "address", + "internalType": "address" + }, + { + "name": "_appchainId", "type": "uint256", "internalType": "uint256" } ], - "stateMutability": "view" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", @@ -337,42 +331,23 @@ interface SyndicateSequencingChain { }, { "type": "function", - "name": "renounceOwnership", + "name": "proxiableUUID", "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEmissionsReceiver", - "inputs": [ + "outputs": [ { - "name": "_emissionsReceiver", - "type": "address", - "internalType": "address" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "outputs": [], - "stateMutability": "nonpayable" + "stateMutability": "view" }, { "type": "function", - "name": "tokensUsedPerEpoch", - "inputs": [ - { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "tokensUsed", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", @@ -401,20 +376,32 @@ interface SyndicateSequencingChain { "stateMutability": "nonpayable" }, { - "type": "event", - "name": "EmissionsReceiverUpdated", + "type": "function", + "name": "upgradeToAndCall", "inputs": [ { - "name": "oldReceiver", + "name": "newImplementation", "type": "address", - "indexed": true, "internalType": "address" }, { - "name": "newReceiver", - "type": "address", - "indexed": true, - "internalType": "address" + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], "anonymous": false @@ -470,6 +457,30 @@ interface SyndicateSequencingChain { ], "anonymous": false }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, { "type": "error", "name": "DataTooLarge", @@ -488,12 +499,28 @@ interface SyndicateSequencingChain { }, { "type": "error", - "name": "GasTrackingAlreadyDisabled", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", "inputs": [] }, { "type": "error", - "name": "GasTrackingAlreadyEnabled", + "name": "InvalidInitialization", "inputs": [] }, { @@ -501,6 +528,16 @@ interface SyndicateSequencingChain { "name": "NoTxData", "inputs": [] }, + { + "type": "error", + "name": "NotGasMeterContract", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, { "type": "error", "name": "OwnableInvalidOwner", @@ -530,7 +567,23 @@ interface SyndicateSequencingChain { }, { "type": "error", - "name": "ZeroEpochIndex", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroAddress", "inputs": [] } ] @@ -548,36 +601,34 @@ pub mod SyndicateSequencingChain { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a03461010357601f61106a38819003918201601f19168301916001600160401b0383118484101761010757808492602094604052833981010312610103575133156100f0575f8054336001600160a01b03198216811783556040519290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a381156100ae5750608052604051610f4e908161011c8239608051816103330152f35b62461bcd60e51b815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152606490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14610940575080630c6723631461027c57806339698ac01461086957806346e2cc09146108525780635467cb48146107c65780635b3cd6e2146107935780635e7a7bdf14610760578063715018a6146106e4578063781cd99d146106c65780637a3979dc146105c35780637a8d41c21461055357806385074925146105215780638da5cb5b146104ef578063a70b9f0c146104d2578063b97dd9e2146104b0578063cdafb97814610451578063d4f0eb4d146103ca578063d5176d2314610356578063d87813421461031c578063de1f453e146102a6578063e03961661461027c578063e8eb1dc31461025f578063f2fde38b1461014d5763f9db709214610124575f80fd5b34610149575f60031936011261014957602060ff60015460a01c166040519015158152f35b5f80fd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff61017b6109dc565b610183610ed4565b81600354161561022e575b610196610ed4565b1680156102025773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b815f5416828216907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a361018e565b34610149575f60031936011261014957602060405162030d408152f35b34610149576020600319360112610149576004355f526002602052602060405f2054604051908152f35b34610149575f600319360112610149576102be610ed4565b60015460ff8160a01c16156102f4577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600155005b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149575f6003193601126101495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101495760206003193601126101495760043562278d0081029080820462278d00149015171561039d5763688d46f0018063688d46f01161039d57602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff6103f86109dc565b610400610ed4565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b346101495760206003193601126101495760043567ffffffffffffffff8111610149573660238201121561014957806004013567ffffffffffffffff8111610149573660248260051b840101116101495760246104ae9201610d92565b005b34610149575f6003193601126101495760206104ca610d54565b604051908152f35b34610149575f60031936011261014957602060405162278d008152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101495761054f61053b610535366109ff565b90610ce6565b604051918291602083526020830190610a91565b0390f35b34610149575f6003193601126101495760035473ffffffffffffffffffffffffffffffffffffffff16806105bb5750602073ffffffffffffffffffffffffffffffffffffffff5f54165b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60209061059d565b34610149576060600319360112610149576105dc6109dc565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610149576044359067ffffffffffffffff821161014957366023830112156101495781600401359267ffffffffffffffff8411610699576040519161066660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8801160184610a50565b8483523660248686010111610149575f6020868197602461068f98018388013785010152610bad565b6040519015158152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610149575f60031936011261014957602060405163688d46f08152f35b34610149575f600319360112610149576106fc610ed4565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610149575f600319360112610149576107de610ed4565b60015460ff8160a01c1661082a577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017600155005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149576104ae610863366109ff565b90610ad4565b34610149576020600319360112610149577fffffffffffffffffffffffff00000000000000000000000000000000000000006108a36109dc565b6108ab610ed4565b60035473ffffffffffffffffffffffffffffffffffffffff808216921692839116176003558115155f146108ff577f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b905073ffffffffffffffffffffffffffffffffffffffff5f5416907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b346101495760206003193601126101495760043580156109b4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161039d5762278d0081029080820462278d00149015171561039d5763688d46f001908163688d46f01161039d576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361014957565b9060206003198301126101495760043567ffffffffffffffff811161014957826023820112156101495780600401359267ffffffffffffffff84116101495760248483010111610149576024019190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761069957604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060ff60015460a01c16610afb5790610af1610af9925a92610b00565b5a9003610f20565b565b610af9915b908015610b8557610b1091610ce6565b610b1b813233610bad565b15610b5d577f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610b5833946020830190610a91565b0390a2565b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190815162030d408111610cb4575073ffffffffffffffffffffffffffffffffffffffff6001541660018114928315610be9575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94610c528692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190610a91565b03915afa908115610ca9575f91610c6e575b50805f8080610be1565b90506020813d602011610ca1575b81610c8960209383610a50565b8101031261014957518015158103610149575f610c64565b3d9150610c7c565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021610d5191836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610a50565b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161039d5762278d0090046001810180911161039d5790565b9060ff60015460a01c16610daf5790610af1610af9925a92610e45565b610af991610e45565b9190811015610e185760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014957019081359167ffffffffffffffff8311610149576020018236038113610149579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8115610b85575f5b828110610e5957505050565b610e64818484610db8565b905015610b855780610e7c6105356001938686610db8565b610e87813233610bad565b610e93575b5001610e4d565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610ecb33946020830190610a91565b0390a25f610e8c565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610ef457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b610f28610d54565b3a903a15610f45575b5f52600260205260405f2091028154019055565b60019150610f3156 + ///0x60c03461014757601f611ae038819003918201601f19168301916001600160401b0383118484101761014b5780849260209460405283398101031261014757516001600160a01b0381168082036101475730608052156101385760a0525f516020611ac05f395f51905f525460ff8160401c16610129576002600160401b03196001600160401b038216016100d3575b6040516119609081610160823960805181818161090201526109c7015260a0518181816101c90152818161043101528181610d0601528181610e2201526112390152f35b6001600160401b0319166001600160401b039081175f516020611ac05f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61008f565b63f92ee8a960e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146111e85780631794bb3c14610e805780632407f0b614610e4657806343f97ae514610df657806346e2cc0914610cba5780634f1ef2861461097a57806352d1902d146108da5780635b3cd6e214610887578063715018a6146107c95780637a3979dc1461076e578063850749251461071c5780638da5cb5b146106c957806395c5bf751461068e578063ad3cb1cc14610629578063b3c65015146105e2578063cdafb978146103e6578063d4f0eb4d1461031f578063d8781342146102e2578063e4a37d7a14610177578063e8eb1dc314610159578063f2fde38b1461012c5763ffa1ad741461010c575f80fd5b346101295780600319360112610129576020604051620f42408152f35b80fd5b503461012957602060031936011261012957610156610149611351565b610151611804565b611717565b80f35b5034610129578060031936011261012957602060405162030d408152f35b503461012957604060031936011261012957610191611351565b60243567ffffffffffffffff81116102de576101b19036906004016113c8565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036102b657811561028e57906101ff916116c7565b9061020b82328361157a565b156102665773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f9161026060405192839260208452169460208301906114a8565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461012957806003193601126101295760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101295760206003193601126101295773ffffffffffffffffffffffffffffffffffffffff61034e611351565b610356611804565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101295760206003193601126101295760043567ffffffffffffffff81116105de57610418903690600401611397565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b838310610561578880898c6104e4828c03601f1981018452836113f6565b803b1561055d5761053083929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610552576105415750f35b8161054b916113f6565b6101295780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c8882030186528635828112156105da57830160208135910167ffffffffffffffff82116105d65781360381136105d6576105c8600193602093849361155a565b9801960194930191906104c6565b8a80fd5b8980fd5b5080fd5b5034610129578060031936011261012957602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101295780600319360112610129575061068a60405161064c6040826113f6565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906114a8565b0390f35b503461012957806003193601126101295760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5034610129576020600319360112610129576004359067ffffffffffffffff82116101295761068a61075a61075436600486016113c8565b906116c7565b6040519182916020835260208301906114a8565b503461012957606060031936011261012957610788611351565b90610791611374565b906044359067ffffffffffffffff82116101295760206107bf85856107b93660048801611462565b9161157a565b6040519015158152f35b50346101295780600319360112610129576107e2611804565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461012957806003193601126101295773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036109525760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b5060406003193601126101295761098f611351565b9060243567ffffffffffffffff81116105de576109b0903690600401611462565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c78575b50610c50576109ff611804565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610c18575b50610a8157602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610bed5750813b15610bc257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610b8f5780836020610b8395519101845af43d15610b87573d91610b6783611446565b92610b7560405194856113f6565b83523d85602085013e6118c7565b5080f35b6060916118c7565b50505034610b9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610c48575b81610c34602093836113f6565b81010312610c445751945f610a50565b8480fd5b3d9150610c27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6109f2565b5034610df2576020600319360112610df25760043567ffffffffffffffff8111610df257610cec9036906004016113c8565b610d7b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691610d6d6040519485927fe4a37d7a00000000000000000000000000000000000000000000000000000000602085015233602485015260406044850152606484019161155a565b03601f1981018452836113f6565b803b15610df257610dc75f929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610de757610dd9575080f35b610de591505f906113f6565b005b6040513d5f823e3d90fd5b5f80fd5b34610df2575f600319360112610df257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610df2575f600319360112610df25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b34610df2576060600319360112610df257610e99611351565b610ea1611374565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff8116801590816111e0575b60011490816111d6575b1590816111cd575b506111a5578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611150575b5073ffffffffffffffffffffffffffffffffffffffff8216156111285782156110ca57610f9f73ffffffffffffffffffffffffffffffffffffffff92610f8f611870565b610f97611870565b610151611870565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005561100f611870565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4005561103757005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584610f4b565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586610ef8565b303b159150610ef0565b869150610ee6565b34610df2576040600319360112610df257611201611351565b60243567ffffffffffffffff8111610df257611221903690600401611397565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611329578215611301575f5b83811061127057005b61127b8185856114cd565b905015611301578061129361075460019387876114cd565b61129e81328661157a565b6112aa575b5001611267565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806112f873ffffffffffffffffffffffffffffffffffffffff88169460208301906114a8565b0390a2856112a3565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df2576020808501948460051b010111610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df25760208381860195010111610df257565b90601f601f19910116810190811067ffffffffffffffff82111761141957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161141957601f01601f191660200190565b81601f82011215610df25780359061147982611446565b9261148760405194856113f6565b82845260208383010111610df257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b919081101561152d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610df257019081359167ffffffffffffffff8311610df2576020018236038113610df2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611695575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416600181149283156115d5575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff9461163e8692604051978896879586957f7a3979dc0000000000000000000000000000000000000000000000000000000087521660048601521660248401526060604484015260648301906114a8565b03915afa908115610de7575f9161165a575b50805f80806115cd565b90506020813d60201161168d575b81611675602093836113f6565b81010312610df257518015158103610df2575f611650565b3d9150611668565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b602161171491836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826113f6565b90565b73ffffffffffffffffffffffffffffffffffffffff1680156117d85773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361184457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561189f57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061190457508051156118dc57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611957575b611915575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561190d56f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA04a\x01\x03W`\x1Fa\x10j8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01\x07W\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01\x03WQ3\x15a\0\xF0W_\x80T3`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U`@Q\x92\x90\x91`\x01`\x01`\xA0\x1B\x03\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x81\x15a\0\xAEWP`\x80R`@Qa\x0FN\x90\x81a\x01\x1C\x829`\x80Q\x81a\x033\x01R\xF3[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\t@WP\x80c\x0Cg#c\x14a\x02|W\x80c9i\x8A\xC0\x14a\x08iW\x80cF\xE2\xCC\t\x14a\x08RW\x80cTg\xCBH\x14a\x07\xC6W\x80c[<\xD6\xE2\x14a\x07\x93W\x80c^z{\xDF\x14a\x07`W\x80cqP\x18\xA6\x14a\x06\xE4W\x80cx\x1C\xD9\x9D\x14a\x06\xC6W\x80cz9y\xDC\x14a\x05\xC3W\x80cz\x8DA\xC2\x14a\x05SW\x80c\x85\x07I%\x14a\x05!W\x80c\x8D\xA5\xCB[\x14a\x04\xEFW\x80c\xA7\x0B\x9F\x0C\x14a\x04\xD2W\x80c\xB9}\xD9\xE2\x14a\x04\xB0W\x80c\xCD\xAF\xB9x\x14a\x04QW\x80c\xD4\xF0\xEBM\x14a\x03\xCAW\x80c\xD5\x17m#\x14a\x03VW\x80c\xD8x\x13B\x14a\x03\x1CW\x80c\xDE\x1FE>\x14a\x02\xA6W\x80c\xE09af\x14a\x02|W\x80c\xE8\xEB\x1D\xC3\x14a\x02_W\x80c\xF2\xFD\xE3\x8B\x14a\x01MWc\xF9\xDBp\x92\x14a\x01$W_\x80\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `\xFF`\x01T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[_\x80\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01{a\t\xDCV[a\x01\x83a\x0E\xD4V[\x81`\x03T\x16\x15a\x02.W[a\x01\x96a\x0E\xD4V[\x16\x80\x15a\x02\x02Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x81_T\x16\x82\x82\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3a\x01\x8EV[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb\x03\r@\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045_R`\x02` R` `@_ T`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x02\xBEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16\x15a\x02\xF4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01U\0[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Q\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\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x03\x9DW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xF8a\t\xDCV[a\x04\0a\x0E\xD4V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`$\x82`\x05\x1B\x84\x01\x01\x11a\x01IW`$a\x04\xAE\x92\x01a\r\x92V[\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` a\x04\xCAa\rTV[`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb'\x8D\0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01IWa\x05Oa\x05;a\x0556a\t\xFFV[\x90a\x0C\xE6V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\n\x91V[\x03\x90\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80a\x05\xBBWP` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[` \x90a\x05\x9DV[4a\x01IW```\x03\x196\x01\x12a\x01IWa\x05\xDCa\t\xDCV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IW`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01IW6`#\x83\x01\x12\x15a\x01IW\x81`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x06\x99W`@Q\x91a\x06f` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x88\x01\x16\x01\x84a\nPV[\x84\x83R6`$\x86\x86\x01\x01\x11a\x01IW_` \x86\x81\x97`$a\x06\x8F\x98\x01\x83\x88\x017\x85\x01\x01Ra\x0B\xADV[`@Q\x90\x15\x15\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qch\x8DF\xF0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x06\xFCa\x0E\xD4V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x07\xDEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16a\x08*W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x17`\x01U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IWa\x04\xAEa\x08c6a\t\xFFV[\x90a\n\xD4V[4a\x01IW` `\x03\x196\x01\x12a\x01IW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x08\xA3a\t\xDCV[a\x08\xABa\x0E\xD4V[`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x16\x92\x16\x92\x83\x91\x16\x17`\x03U\x81\x15\x15_\x14a\x08\xFFW\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045\x80\x15a\t\xB4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x03\x9DWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x03\x9DW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IWV[\x90` `\x03\x19\x83\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW\x82`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x01IW`$\x84\x83\x01\x01\x11a\x01IW`$\x01\x91\x90V[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\x99W`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\n\xFBW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0B\0V[Z\x90\x03a\x0F V[V[a\n\xF9\x91[\x90\x80\x15a\x0B\x85Wa\x0B\x10\x91a\x0C\xE6V[a\x0B\x1B\x8123a\x0B\xADV[\x15a\x0B]W\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0BX3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2V[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x91\x90\x81Qb\x03\r@\x81\x11a\x0C\xB4WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`\x01\x81\x14\x92\x83\x15a\x0B\xE9W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x0CR\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\n\x91V[\x03\x91Z\xFA\x90\x81\x15a\x0C\xA9W_\x91a\x0CnW[P\x80_\x80\x80a\x0B\xE1V[\x90P` \x81=` \x11a\x0C\xA1W[\x81a\x0C\x89` \x93\x83a\nPV[\x81\x01\x03\x12a\x01IWQ\x80\x15\x15\x81\x03a\x01IW_a\x0CdV[=\x91Pa\x0C|V[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\rQ\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\nPV[\x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x03\x9DWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x03\x9DW\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\r\xAFW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0EEV[a\n\xF9\x91a\x0EEV[\x91\x90\x81\x10\x15a\x0E\x18W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x01IW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01IW` \x01\x826\x03\x81\x13a\x01IW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x81\x15a\x0B\x85W_[\x82\x81\x10a\x0EYWPPPV[a\x0Ed\x81\x84\x84a\r\xB8V[\x90P\x15a\x0B\x85W\x80a\x0E|a\x055`\x01\x93\x86\x86a\r\xB8V[a\x0E\x87\x8123a\x0B\xADV[a\x0E\x93W[P\x01a\x0EMV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0E\xCB3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2_a\x0E\x8CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0E\xF4WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[a\x0F(a\rTV[:\x90:\x15a\x0FEW[_R`\x02` R`@_ \x91\x02\x81T\x01\x90UV[`\x01\x91Pa\x0F1V", + b"`\xC04a\x01GW`\x1Fa\x1A\xE08\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01KW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01GWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x80\x82\x03a\x01GW0`\x80R\x15a\x018W`\xA0R_Q` a\x1A\xC0_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01)W`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xD3W[`@Qa\x19`\x90\x81a\x01`\x829`\x80Q\x81\x81\x81a\t\x02\x01Ra\t\xC7\x01R`\xA0Q\x81\x81\x81a\x01\xC9\x01R\x81\x81a\x041\x01R\x81\x81a\r\x06\x01R\x81\x81a\x0E\"\x01Ra\x129\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x1A\xC0_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x8FV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x11\xE8W\x80c\x17\x94\xBB<\x14a\x0E\x80W\x80c$\x07\xF0\xB6\x14a\x0EFW\x80cC\xF9z\xE5\x14a\r\xF6W\x80cF\xE2\xCC\t\x14a\x0C\xBAW\x80cO\x1E\xF2\x86\x14a\tzW\x80cR\xD1\x90-\x14a\x08\xDAW\x80c[<\xD6\xE2\x14a\x08\x87W\x80cqP\x18\xA6\x14a\x07\xC9W\x80cz9y\xDC\x14a\x07nW\x80c\x85\x07I%\x14a\x07\x1CW\x80c\x8D\xA5\xCB[\x14a\x06\xC9W\x80c\x95\xC5\xBFu\x14a\x06\x8EW\x80c\xAD<\xB1\xCC\x14a\x06)W\x80c\xB3\xC6P\x15\x14a\x05\xE2W\x80c\xCD\xAF\xB9x\x14a\x03\xE6W\x80c\xD4\xF0\xEBM\x14a\x03\x1FW\x80c\xD8x\x13B\x14a\x02\xE2W\x80c\xE4\xA3}z\x14a\x01wW\x80c\xE8\xEB\x1D\xC3\x14a\x01YW\x80c\xF2\xFD\xE3\x8B\x14a\x01,Wc\xFF\xA1\xADt\x14a\x01\x0CW_\x80\xFD[4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01)W` `\x03\x196\x01\x12a\x01)Wa\x01Va\x01Ia\x13QV[a\x01Qa\x18\x04V[a\x17\x17V[\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x03\r@\x81R\xF3[P4a\x01)W`@`\x03\x196\x01\x12a\x01)Wa\x01\x91a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xDEWa\x01\xB1\x906\x90`\x04\x01a\x13\xC8V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x02\xB6W\x81\x15a\x02\x8EW\x90a\x01\xFF\x91a\x16\xC7V[\x90a\x02\x0B\x822\x83a\x15zV[\x15a\x02fWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02``@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03Na\x13QV[a\x03Va\x18\x04V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\x04\x18\x906\x90`\x04\x01a\x13\x97V[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05aW\x88\x80\x89\x8Ca\x04\xE4\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\x05]Wa\x050\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\x05RWa\x05AWP\xF3[\x81a\x05K\x91a\x13\xF6V[a\x01)W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x05\xDAW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\xD6W\x816\x03\x81\x13a\x05\xD6Wa\x05\xC8`\x01\x93` \x93\x84\x93a\x15ZV[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x04\xC6V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)WPa\x06\x8A`@Qa\x06L`@\x82a\x13\xF6V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[\x03\x90\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)Wa\x06\x8Aa\x07Za\x07T6`\x04\x86\x01a\x13\xC8V[\x90a\x16\xC7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[P4a\x01)W```\x03\x196\x01\x12a\x01)Wa\x07\x88a\x13QV[\x90a\x07\x91a\x13tV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)W` a\x07\xBF\x85\x85a\x07\xB96`\x04\x88\x01a\x14bV[\x91a\x15zV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Wa\x07\xE2a\x18\x04V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\tRW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01)Wa\t\x8Fa\x13QV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\t\xB0\x906\x90`\x04\x01a\x14bV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0CxW[Pa\x0CPWa\t\xFFa\x18\x04V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0C\x18W[Pa\n\x81W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0B\xEDWP\x81;\x15a\x0B\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0B\x8FW\x80\x83` a\x0B\x83\x95Q\x91\x01\x84Z\xF4=\x15a\x0B\x87W=\x91a\x0Bg\x83a\x14FV[\x92a\x0Bu`@Q\x94\x85a\x13\xF6V[\x83R=\x85` \x85\x01>a\x18\xC7V[P\x80\xF3[``\x91a\x18\xC7V[PPP4a\x0B\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0CHW[\x81a\x0C4` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\x0CDWQ\x94_a\nPV[\x84\x80\xFD[=\x91Pa\x0C'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\t\xF2V[P4a\r\xF2W` `\x03\x196\x01\x12a\r\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x0C\xEC\x906\x90`\x04\x01a\x13\xC8V[a\r{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\rm`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x15ZV[\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\r\xF2Wa\r\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\r\xE7Wa\r\xD9WP\x80\xF3[a\r\xE5\x91P_\x90a\x13\xF6V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\r\xF2W```\x03\x196\x01\x12a\r\xF2Wa\x0E\x99a\x13QV[a\x0E\xA1a\x13tV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x11\xE0W[`\x01\x14\x90\x81a\x11\xD6W[\x15\x90\x81a\x11\xCDW[Pa\x11\xA5W\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x11PW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x11(W\x82\x15a\x10\xCAWa\x0F\x9Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x0F\x8Fa\x18pV[a\x0F\x97a\x18pV[a\x01Qa\x18pV[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x10\x0Fa\x18pV[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x107W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x0FKV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x0E\xF8V[0;\x15\x91Pa\x0E\xF0V[\x86\x91Pa\x0E\xE6V[4a\r\xF2W`@`\x03\x196\x01\x12a\r\xF2Wa\x12\x01a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x12!\x906\x90`\x04\x01a\x13\x97V[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x13)W\x82\x15a\x13\x01W_[\x83\x81\x10a\x12pW\0[a\x12{\x81\x85\x85a\x14\xCDV[\x90P\x15a\x13\x01W\x80a\x12\x93a\x07T`\x01\x93\x87\x87a\x14\xCDV[a\x12\x9E\x812\x86a\x15zV[a\x12\xAAW[P\x01a\x12gV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x12\xF8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x85a\x12\xA3V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\r\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x14\x19W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x14\x19W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\r\xF2W\x805\x90a\x14y\x82a\x14FV[\x92a\x14\x87`@Q\x94\x85a\x13\xF6V[\x82\x84R` \x83\x83\x01\x01\x11a\r\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x15-W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\r\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x01\x826\x03\x81\x13a\r\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x16\x95WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x15\xD5W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x16>\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x14\xA8V[\x03\x91Z\xFA\x90\x81\x15a\r\xE7W_\x91a\x16ZW[P\x80_\x80\x80a\x15\xCDV[\x90P` \x81=` \x11a\x16\x8DW[\x81a\x16u` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\r\xF2WQ\x80\x15\x15\x81\x03a\r\xF2W_a\x16PV[=\x91Pa\x16hV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x17\x14\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x13\xF6V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x17\xD8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x18DWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x18\x9FWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x19\x04WP\x80Q\x15a\x18\xDCW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x19WW[a\x19\x15WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x19\rV\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14610940575080630c6723631461027c57806339698ac01461086957806346e2cc09146108525780635467cb48146107c65780635b3cd6e2146107935780635e7a7bdf14610760578063715018a6146106e4578063781cd99d146106c65780637a3979dc146105c35780637a8d41c21461055357806385074925146105215780638da5cb5b146104ef578063a70b9f0c146104d2578063b97dd9e2146104b0578063cdafb97814610451578063d4f0eb4d146103ca578063d5176d2314610356578063d87813421461031c578063de1f453e146102a6578063e03961661461027c578063e8eb1dc31461025f578063f2fde38b1461014d5763f9db709214610124575f80fd5b34610149575f60031936011261014957602060ff60015460a01c166040519015158152f35b5f80fd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff61017b6109dc565b610183610ed4565b81600354161561022e575b610196610ed4565b1680156102025773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b815f5416828216907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a361018e565b34610149575f60031936011261014957602060405162030d408152f35b34610149576020600319360112610149576004355f526002602052602060405f2054604051908152f35b34610149575f600319360112610149576102be610ed4565b60015460ff8160a01c16156102f4577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600155005b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149575f6003193601126101495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101495760206003193601126101495760043562278d0081029080820462278d00149015171561039d5763688d46f0018063688d46f01161039d57602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff6103f86109dc565b610400610ed4565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b346101495760206003193601126101495760043567ffffffffffffffff8111610149573660238201121561014957806004013567ffffffffffffffff8111610149573660248260051b840101116101495760246104ae9201610d92565b005b34610149575f6003193601126101495760206104ca610d54565b604051908152f35b34610149575f60031936011261014957602060405162278d008152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101495761054f61053b610535366109ff565b90610ce6565b604051918291602083526020830190610a91565b0390f35b34610149575f6003193601126101495760035473ffffffffffffffffffffffffffffffffffffffff16806105bb5750602073ffffffffffffffffffffffffffffffffffffffff5f54165b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60209061059d565b34610149576060600319360112610149576105dc6109dc565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610149576044359067ffffffffffffffff821161014957366023830112156101495781600401359267ffffffffffffffff8411610699576040519161066660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8801160184610a50565b8483523660248686010111610149575f6020868197602461068f98018388013785010152610bad565b6040519015158152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610149575f60031936011261014957602060405163688d46f08152f35b34610149575f600319360112610149576106fc610ed4565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610149575f600319360112610149576107de610ed4565b60015460ff8160a01c1661082a577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017600155005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149576104ae610863366109ff565b90610ad4565b34610149576020600319360112610149577fffffffffffffffffffffffff00000000000000000000000000000000000000006108a36109dc565b6108ab610ed4565b60035473ffffffffffffffffffffffffffffffffffffffff808216921692839116176003558115155f146108ff577f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b905073ffffffffffffffffffffffffffffffffffffffff5f5416907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b346101495760206003193601126101495760043580156109b4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161039d5762278d0081029080820462278d00149015171561039d5763688d46f001908163688d46f01161039d576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361014957565b9060206003198301126101495760043567ffffffffffffffff811161014957826023820112156101495780600401359267ffffffffffffffff84116101495760248483010111610149576024019190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761069957604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060ff60015460a01c16610afb5790610af1610af9925a92610b00565b5a9003610f20565b565b610af9915b908015610b8557610b1091610ce6565b610b1b813233610bad565b15610b5d577f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610b5833946020830190610a91565b0390a2565b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190815162030d408111610cb4575073ffffffffffffffffffffffffffffffffffffffff6001541660018114928315610be9575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94610c528692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190610a91565b03915afa908115610ca9575f91610c6e575b50805f8080610be1565b90506020813d602011610ca1575b81610c8960209383610a50565b8101031261014957518015158103610149575f610c64565b3d9150610c7c565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021610d5191836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610a50565b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161039d5762278d0090046001810180911161039d5790565b9060ff60015460a01c16610daf5790610af1610af9925a92610e45565b610af991610e45565b9190811015610e185760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014957019081359167ffffffffffffffff8311610149576020018236038113610149579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8115610b85575f5b828110610e5957505050565b610e64818484610db8565b905015610b855780610e7c6105356001938686610db8565b610e87813233610bad565b610e93575b5001610e4d565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610ecb33946020830190610a91565b0390a25f610e8c565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610ef457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b610f28610d54565b3a903a15610f45575b5f52600260205260405f2091028154019055565b60019150610f3156 + ///0x60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146111e85780631794bb3c14610e805780632407f0b614610e4657806343f97ae514610df657806346e2cc0914610cba5780634f1ef2861461097a57806352d1902d146108da5780635b3cd6e214610887578063715018a6146107c95780637a3979dc1461076e578063850749251461071c5780638da5cb5b146106c957806395c5bf751461068e578063ad3cb1cc14610629578063b3c65015146105e2578063cdafb978146103e6578063d4f0eb4d1461031f578063d8781342146102e2578063e4a37d7a14610177578063e8eb1dc314610159578063f2fde38b1461012c5763ffa1ad741461010c575f80fd5b346101295780600319360112610129576020604051620f42408152f35b80fd5b503461012957602060031936011261012957610156610149611351565b610151611804565b611717565b80f35b5034610129578060031936011261012957602060405162030d408152f35b503461012957604060031936011261012957610191611351565b60243567ffffffffffffffff81116102de576101b19036906004016113c8565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036102b657811561028e57906101ff916116c7565b9061020b82328361157a565b156102665773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f9161026060405192839260208452169460208301906114a8565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461012957806003193601126101295760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101295760206003193601126101295773ffffffffffffffffffffffffffffffffffffffff61034e611351565b610356611804565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101295760206003193601126101295760043567ffffffffffffffff81116105de57610418903690600401611397565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b838310610561578880898c6104e4828c03601f1981018452836113f6565b803b1561055d5761053083929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610552576105415750f35b8161054b916113f6565b6101295780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c8882030186528635828112156105da57830160208135910167ffffffffffffffff82116105d65781360381136105d6576105c8600193602093849361155a565b9801960194930191906104c6565b8a80fd5b8980fd5b5080fd5b5034610129578060031936011261012957602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101295780600319360112610129575061068a60405161064c6040826113f6565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906114a8565b0390f35b503461012957806003193601126101295760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5034610129576020600319360112610129576004359067ffffffffffffffff82116101295761068a61075a61075436600486016113c8565b906116c7565b6040519182916020835260208301906114a8565b503461012957606060031936011261012957610788611351565b90610791611374565b906044359067ffffffffffffffff82116101295760206107bf85856107b93660048801611462565b9161157a565b6040519015158152f35b50346101295780600319360112610129576107e2611804565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461012957806003193601126101295773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036109525760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b5060406003193601126101295761098f611351565b9060243567ffffffffffffffff81116105de576109b0903690600401611462565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c78575b50610c50576109ff611804565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610c18575b50610a8157602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610bed5750813b15610bc257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610b8f5780836020610b8395519101845af43d15610b87573d91610b6783611446565b92610b7560405194856113f6565b83523d85602085013e6118c7565b5080f35b6060916118c7565b50505034610b9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610c48575b81610c34602093836113f6565b81010312610c445751945f610a50565b8480fd5b3d9150610c27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6109f2565b5034610df2576020600319360112610df25760043567ffffffffffffffff8111610df257610cec9036906004016113c8565b610d7b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691610d6d6040519485927fe4a37d7a00000000000000000000000000000000000000000000000000000000602085015233602485015260406044850152606484019161155a565b03601f1981018452836113f6565b803b15610df257610dc75f929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610de757610dd9575080f35b610de591505f906113f6565b005b6040513d5f823e3d90fd5b5f80fd5b34610df2575f600319360112610df257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610df2575f600319360112610df25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b34610df2576060600319360112610df257610e99611351565b610ea1611374565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff8116801590816111e0575b60011490816111d6575b1590816111cd575b506111a5578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611150575b5073ffffffffffffffffffffffffffffffffffffffff8216156111285782156110ca57610f9f73ffffffffffffffffffffffffffffffffffffffff92610f8f611870565b610f97611870565b610151611870565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005561100f611870565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4005561103757005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584610f4b565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586610ef8565b303b159150610ef0565b869150610ee6565b34610df2576040600319360112610df257611201611351565b60243567ffffffffffffffff8111610df257611221903690600401611397565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611329578215611301575f5b83811061127057005b61127b8185856114cd565b905015611301578061129361075460019387876114cd565b61129e81328661157a565b6112aa575b5001611267565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806112f873ffffffffffffffffffffffffffffffffffffffff88169460208301906114a8565b0390a2856112a3565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df2576020808501948460051b010111610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df25760208381860195010111610df257565b90601f601f19910116810190811067ffffffffffffffff82111761141957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161141957601f01601f191660200190565b81601f82011215610df25780359061147982611446565b9261148760405194856113f6565b82845260208383010111610df257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b919081101561152d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610df257019081359167ffffffffffffffff8311610df2576020018236038113610df2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611695575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416600181149283156115d5575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff9461163e8692604051978896879586957f7a3979dc0000000000000000000000000000000000000000000000000000000087521660048601521660248401526060604484015260648301906114a8565b03915afa908115610de7575f9161165a575b50805f80806115cd565b90506020813d60201161168d575b81611675602093836113f6565b81010312610df257518015158103610df2575f611650565b3d9150611668565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b602161171491836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826113f6565b90565b73ffffffffffffffffffffffffffffffffffffffff1680156117d85773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361184457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561189f57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061190457508051156118dc57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611957575b611915575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561190d56 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\t@WP\x80c\x0Cg#c\x14a\x02|W\x80c9i\x8A\xC0\x14a\x08iW\x80cF\xE2\xCC\t\x14a\x08RW\x80cTg\xCBH\x14a\x07\xC6W\x80c[<\xD6\xE2\x14a\x07\x93W\x80c^z{\xDF\x14a\x07`W\x80cqP\x18\xA6\x14a\x06\xE4W\x80cx\x1C\xD9\x9D\x14a\x06\xC6W\x80cz9y\xDC\x14a\x05\xC3W\x80cz\x8DA\xC2\x14a\x05SW\x80c\x85\x07I%\x14a\x05!W\x80c\x8D\xA5\xCB[\x14a\x04\xEFW\x80c\xA7\x0B\x9F\x0C\x14a\x04\xD2W\x80c\xB9}\xD9\xE2\x14a\x04\xB0W\x80c\xCD\xAF\xB9x\x14a\x04QW\x80c\xD4\xF0\xEBM\x14a\x03\xCAW\x80c\xD5\x17m#\x14a\x03VW\x80c\xD8x\x13B\x14a\x03\x1CW\x80c\xDE\x1FE>\x14a\x02\xA6W\x80c\xE09af\x14a\x02|W\x80c\xE8\xEB\x1D\xC3\x14a\x02_W\x80c\xF2\xFD\xE3\x8B\x14a\x01MWc\xF9\xDBp\x92\x14a\x01$W_\x80\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `\xFF`\x01T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[_\x80\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01{a\t\xDCV[a\x01\x83a\x0E\xD4V[\x81`\x03T\x16\x15a\x02.W[a\x01\x96a\x0E\xD4V[\x16\x80\x15a\x02\x02Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x81_T\x16\x82\x82\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3a\x01\x8EV[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb\x03\r@\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045_R`\x02` R` `@_ T`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x02\xBEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16\x15a\x02\xF4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01U\0[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Q\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\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x03\x9DW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xF8a\t\xDCV[a\x04\0a\x0E\xD4V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`$\x82`\x05\x1B\x84\x01\x01\x11a\x01IW`$a\x04\xAE\x92\x01a\r\x92V[\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` a\x04\xCAa\rTV[`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb'\x8D\0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01IWa\x05Oa\x05;a\x0556a\t\xFFV[\x90a\x0C\xE6V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\n\x91V[\x03\x90\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80a\x05\xBBWP` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[` \x90a\x05\x9DV[4a\x01IW```\x03\x196\x01\x12a\x01IWa\x05\xDCa\t\xDCV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IW`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01IW6`#\x83\x01\x12\x15a\x01IW\x81`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x06\x99W`@Q\x91a\x06f` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x88\x01\x16\x01\x84a\nPV[\x84\x83R6`$\x86\x86\x01\x01\x11a\x01IW_` \x86\x81\x97`$a\x06\x8F\x98\x01\x83\x88\x017\x85\x01\x01Ra\x0B\xADV[`@Q\x90\x15\x15\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qch\x8DF\xF0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x06\xFCa\x0E\xD4V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x07\xDEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16a\x08*W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x17`\x01U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IWa\x04\xAEa\x08c6a\t\xFFV[\x90a\n\xD4V[4a\x01IW` `\x03\x196\x01\x12a\x01IW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x08\xA3a\t\xDCV[a\x08\xABa\x0E\xD4V[`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x16\x92\x16\x92\x83\x91\x16\x17`\x03U\x81\x15\x15_\x14a\x08\xFFW\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045\x80\x15a\t\xB4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x03\x9DWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x03\x9DW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IWV[\x90` `\x03\x19\x83\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW\x82`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x01IW`$\x84\x83\x01\x01\x11a\x01IW`$\x01\x91\x90V[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\x99W`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\n\xFBW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0B\0V[Z\x90\x03a\x0F V[V[a\n\xF9\x91[\x90\x80\x15a\x0B\x85Wa\x0B\x10\x91a\x0C\xE6V[a\x0B\x1B\x8123a\x0B\xADV[\x15a\x0B]W\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0BX3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2V[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x91\x90\x81Qb\x03\r@\x81\x11a\x0C\xB4WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`\x01\x81\x14\x92\x83\x15a\x0B\xE9W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x0CR\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\n\x91V[\x03\x91Z\xFA\x90\x81\x15a\x0C\xA9W_\x91a\x0CnW[P\x80_\x80\x80a\x0B\xE1V[\x90P` \x81=` \x11a\x0C\xA1W[\x81a\x0C\x89` \x93\x83a\nPV[\x81\x01\x03\x12a\x01IWQ\x80\x15\x15\x81\x03a\x01IW_a\x0CdV[=\x91Pa\x0C|V[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\rQ\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\nPV[\x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x03\x9DWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x03\x9DW\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\r\xAFW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0EEV[a\n\xF9\x91a\x0EEV[\x91\x90\x81\x10\x15a\x0E\x18W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x01IW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01IW` \x01\x826\x03\x81\x13a\x01IW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x81\x15a\x0B\x85W_[\x82\x81\x10a\x0EYWPPPV[a\x0Ed\x81\x84\x84a\r\xB8V[\x90P\x15a\x0B\x85W\x80a\x0E|a\x055`\x01\x93\x86\x86a\r\xB8V[a\x0E\x87\x8123a\x0B\xADV[a\x0E\x93W[P\x01a\x0EMV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0E\xCB3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2_a\x0E\x8CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0E\xF4WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[a\x0F(a\rTV[:\x90:\x15a\x0FEW[_R`\x02` R`@_ \x91\x02\x81T\x01\x90UV[`\x01\x91Pa\x0F1V", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x11\xE8W\x80c\x17\x94\xBB<\x14a\x0E\x80W\x80c$\x07\xF0\xB6\x14a\x0EFW\x80cC\xF9z\xE5\x14a\r\xF6W\x80cF\xE2\xCC\t\x14a\x0C\xBAW\x80cO\x1E\xF2\x86\x14a\tzW\x80cR\xD1\x90-\x14a\x08\xDAW\x80c[<\xD6\xE2\x14a\x08\x87W\x80cqP\x18\xA6\x14a\x07\xC9W\x80cz9y\xDC\x14a\x07nW\x80c\x85\x07I%\x14a\x07\x1CW\x80c\x8D\xA5\xCB[\x14a\x06\xC9W\x80c\x95\xC5\xBFu\x14a\x06\x8EW\x80c\xAD<\xB1\xCC\x14a\x06)W\x80c\xB3\xC6P\x15\x14a\x05\xE2W\x80c\xCD\xAF\xB9x\x14a\x03\xE6W\x80c\xD4\xF0\xEBM\x14a\x03\x1FW\x80c\xD8x\x13B\x14a\x02\xE2W\x80c\xE4\xA3}z\x14a\x01wW\x80c\xE8\xEB\x1D\xC3\x14a\x01YW\x80c\xF2\xFD\xE3\x8B\x14a\x01,Wc\xFF\xA1\xADt\x14a\x01\x0CW_\x80\xFD[4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01)W` `\x03\x196\x01\x12a\x01)Wa\x01Va\x01Ia\x13QV[a\x01Qa\x18\x04V[a\x17\x17V[\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x03\r@\x81R\xF3[P4a\x01)W`@`\x03\x196\x01\x12a\x01)Wa\x01\x91a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xDEWa\x01\xB1\x906\x90`\x04\x01a\x13\xC8V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x02\xB6W\x81\x15a\x02\x8EW\x90a\x01\xFF\x91a\x16\xC7V[\x90a\x02\x0B\x822\x83a\x15zV[\x15a\x02fWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02``@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03Na\x13QV[a\x03Va\x18\x04V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\x04\x18\x906\x90`\x04\x01a\x13\x97V[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05aW\x88\x80\x89\x8Ca\x04\xE4\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\x05]Wa\x050\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\x05RWa\x05AWP\xF3[\x81a\x05K\x91a\x13\xF6V[a\x01)W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x05\xDAW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\xD6W\x816\x03\x81\x13a\x05\xD6Wa\x05\xC8`\x01\x93` \x93\x84\x93a\x15ZV[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x04\xC6V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)WPa\x06\x8A`@Qa\x06L`@\x82a\x13\xF6V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[\x03\x90\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)Wa\x06\x8Aa\x07Za\x07T6`\x04\x86\x01a\x13\xC8V[\x90a\x16\xC7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[P4a\x01)W```\x03\x196\x01\x12a\x01)Wa\x07\x88a\x13QV[\x90a\x07\x91a\x13tV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)W` a\x07\xBF\x85\x85a\x07\xB96`\x04\x88\x01a\x14bV[\x91a\x15zV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Wa\x07\xE2a\x18\x04V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\tRW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01)Wa\t\x8Fa\x13QV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\t\xB0\x906\x90`\x04\x01a\x14bV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0CxW[Pa\x0CPWa\t\xFFa\x18\x04V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0C\x18W[Pa\n\x81W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0B\xEDWP\x81;\x15a\x0B\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0B\x8FW\x80\x83` a\x0B\x83\x95Q\x91\x01\x84Z\xF4=\x15a\x0B\x87W=\x91a\x0Bg\x83a\x14FV[\x92a\x0Bu`@Q\x94\x85a\x13\xF6V[\x83R=\x85` \x85\x01>a\x18\xC7V[P\x80\xF3[``\x91a\x18\xC7V[PPP4a\x0B\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0CHW[\x81a\x0C4` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\x0CDWQ\x94_a\nPV[\x84\x80\xFD[=\x91Pa\x0C'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\t\xF2V[P4a\r\xF2W` `\x03\x196\x01\x12a\r\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x0C\xEC\x906\x90`\x04\x01a\x13\xC8V[a\r{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\rm`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x15ZV[\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\r\xF2Wa\r\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\r\xE7Wa\r\xD9WP\x80\xF3[a\r\xE5\x91P_\x90a\x13\xF6V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\r\xF2W```\x03\x196\x01\x12a\r\xF2Wa\x0E\x99a\x13QV[a\x0E\xA1a\x13tV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x11\xE0W[`\x01\x14\x90\x81a\x11\xD6W[\x15\x90\x81a\x11\xCDW[Pa\x11\xA5W\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x11PW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x11(W\x82\x15a\x10\xCAWa\x0F\x9Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x0F\x8Fa\x18pV[a\x0F\x97a\x18pV[a\x01Qa\x18pV[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x10\x0Fa\x18pV[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x107W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x0FKV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x0E\xF8V[0;\x15\x91Pa\x0E\xF0V[\x86\x91Pa\x0E\xE6V[4a\r\xF2W`@`\x03\x196\x01\x12a\r\xF2Wa\x12\x01a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x12!\x906\x90`\x04\x01a\x13\x97V[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x13)W\x82\x15a\x13\x01W_[\x83\x81\x10a\x12pW\0[a\x12{\x81\x85\x85a\x14\xCDV[\x90P\x15a\x13\x01W\x80a\x12\x93a\x07T`\x01\x93\x87\x87a\x14\xCDV[a\x12\x9E\x812\x86a\x15zV[a\x12\xAAW[P\x01a\x12gV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x12\xF8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x85a\x12\xA3V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\r\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x14\x19W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x14\x19W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\r\xF2W\x805\x90a\x14y\x82a\x14FV[\x92a\x14\x87`@Q\x94\x85a\x13\xF6V[\x82\x84R` \x83\x83\x01\x01\x11a\r\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x15-W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\r\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x01\x826\x03\x81\x13a\r\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x16\x95WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x15\xD5W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x16>\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x14\xA8V[\x03\x91Z\xFA\x90\x81\x15a\r\xE7W_\x91a\x16ZW[P\x80_\x80\x80a\x15\xCDV[\x90P` \x81=` \x11a\x16\x8DW[\x81a\x16u` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\r\xF2WQ\x80\x15\x15\x81\x03a\r\xF2W_a\x16PV[=\x91Pa\x16hV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x17\x14\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x13\xF6V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x17\xD8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x18DWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x18\x9FWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x19\x04WP\x80Q\x15a\x18\xDCW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x19WW[a\x19\x15WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x19\rV", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. ```solidity -error DataTooLarge(uint256 dataLength, uint256 maxDataLength); +error AddressEmptyCode(address target); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct DataTooLarge { + pub struct AddressEmptyCode { #[allow(missing_docs)] - pub dataLength: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + pub target: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -589,15 +640,9 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); use alloy::sol_types as alloy_sol_types; #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - alloy::sol_types::sol_data::Uint<256>, - ); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -611,29 +656,26 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: DataTooLarge) -> Self { - (value.dataLength, value.maxDataLength) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for DataTooLarge { + impl ::core::convert::From> for AddressEmptyCode { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - dataLength: tuple.0, - maxDataLength: tuple.1, - } + Self { target: tuple.0 } } } #[automatically_derived] - impl alloy_sol_types::SolError for DataTooLarge { + impl alloy_sol_types::SolError for AddressEmptyCode { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; - const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -643,12 +685,9 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.dataLength), - as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ::tokenize( + &self.target, + ), ) } #[inline] @@ -662,15 +701,341 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `GasTrackingAlreadyDisabled()` and selector `0xcd60c3ca`. + /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. ```solidity -error GasTrackingAlreadyDisabled(); +error DataTooLarge(uint256 dataLength, uint256 maxDataLength); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct GasTrackingAlreadyDisabled; - #[allow( - non_camel_case_types, + pub struct DataTooLarge { + #[allow(missing_docs)] + pub dataLength: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: DataTooLarge) -> Self { + (value.dataLength, value.maxDataLength) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for DataTooLarge { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + dataLength: tuple.0, + maxDataLength: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for DataTooLarge { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; + const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.dataLength), + as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, non_snake_case, clippy::pub_underscore_fields, clippy::style @@ -695,28 +1060,26 @@ error GasTrackingAlreadyDisabled(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: GasTrackingAlreadyDisabled) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for GasTrackingAlreadyDisabled { + impl ::core::convert::From> for InvalidInitialization { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } } #[automatically_derived] - impl alloy_sol_types::SolError for GasTrackingAlreadyDisabled { + impl alloy_sol_types::SolError for InvalidInitialization { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "GasTrackingAlreadyDisabled()"; - const SELECTOR: [u8; 4] = [205u8, 96u8, 195u8, 202u8]; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -738,13 +1101,13 @@ error GasTrackingAlreadyDisabled(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `GasTrackingAlreadyEnabled()` and selector `0x7679400d`. + /**Custom error with signature `NoTxData()` and selector `0xdc37f51d`. ```solidity -error GasTrackingAlreadyEnabled(); +error NoTxData(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct GasTrackingAlreadyEnabled; + pub struct NoTxData; #[allow( non_camel_case_types, non_snake_case, @@ -771,28 +1134,26 @@ error GasTrackingAlreadyEnabled(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: GasTrackingAlreadyEnabled) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NoTxData) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for GasTrackingAlreadyEnabled { + impl ::core::convert::From> for NoTxData { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } } #[automatically_derived] - impl alloy_sol_types::SolError for GasTrackingAlreadyEnabled { + impl alloy_sol_types::SolError for NoTxData { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "GasTrackingAlreadyEnabled()"; - const SELECTOR: [u8; 4] = [118u8, 121u8, 64u8, 13u8]; + const SIGNATURE: &'static str = "NoTxData()"; + const SELECTOR: [u8; 4] = [220u8, 55u8, 245u8, 29u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -814,13 +1175,13 @@ error GasTrackingAlreadyEnabled(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `NoTxData()` and selector `0xdc37f51d`. + /**Custom error with signature `NotGasMeterContract()` and selector `0xdaf9861c`. ```solidity -error NoTxData(); +error NotGasMeterContract(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct NoTxData; + pub struct NotGasMeterContract; #[allow( non_camel_case_types, non_snake_case, @@ -847,26 +1208,100 @@ error NoTxData(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: NoTxData) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotGasMeterContract) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for NoTxData { + impl ::core::convert::From> for NotGasMeterContract { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } } #[automatically_derived] - impl alloy_sol_types::SolError for NoTxData { + impl alloy_sol_types::SolError for NotGasMeterContract { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "NoTxData()"; - const SELECTOR: [u8; 4] = [220u8, 55u8, 245u8, 29u8]; + const SIGNATURE: &'static str = "NotGasMeterContract()"; + const SELECTOR: [u8; 4] = [218u8, 249u8, 134u8, 28u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -969,16 +1404,172 @@ error OwnableInvalidOwner(address owner); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. +```solidity +error TransactionOrSenderNotAllowed(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct TransactionOrSenderNotAllowed; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: TransactionOrSenderNotAllowed) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for TransactionOrSenderNotAllowed { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; + const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. ```solidity -error OwnableUnauthorizedAccount(address account); +error UUPSUnauthorizedCallContext(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct OwnableUnauthorizedAccount { - #[allow(missing_docs)] - pub account: alloy::sol_types::private::Address, - } + pub struct UUPSUnauthorizedCallContext; #[allow( non_camel_case_types, non_snake_case, @@ -989,9 +1580,9 @@ error OwnableUnauthorizedAccount(address account); use alloy::sol_types as alloy_sol_types; #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1005,28 +1596,28 @@ error OwnableUnauthorizedAccount(address account); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: OwnableUnauthorizedAccount) -> Self { - (value.account,) + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for OwnableUnauthorizedAccount { + for UUPSUnauthorizedCallContext { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { account: tuple.0 } + Self } } #[automatically_derived] - impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; - const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1035,11 +1626,7 @@ error OwnableUnauthorizedAccount(address account); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self.account, - ), - ) + () } #[inline] fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { @@ -1052,13 +1639,16 @@ error OwnableUnauthorizedAccount(address account); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. ```solidity -error TransactionOrSenderNotAllowed(); +error UUPSUnsupportedProxiableUUID(bytes32 slot); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct TransactionOrSenderNotAllowed; + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } #[allow( non_camel_case_types, non_snake_case, @@ -1069,9 +1659,9 @@ error TransactionOrSenderNotAllowed(); use alloy::sol_types as alloy_sol_types; #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1085,28 +1675,28 @@ error TransactionOrSenderNotAllowed(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: TransactionOrSenderNotAllowed) -> Self { - () + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for TransactionOrSenderNotAllowed { + for UUPSUnsupportedProxiableUUID { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + Self { slot: tuple.0 } } } #[automatically_derived] - impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; - const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1115,7 +1705,11 @@ error TransactionOrSenderNotAllowed(); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) } #[inline] fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { @@ -1128,13 +1722,13 @@ error TransactionOrSenderNotAllowed(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `ZeroEpochIndex()` and selector `0xd69368d4`. + /**Custom error with signature `ZeroAddress()` and selector `0xd92e233d`. ```solidity -error ZeroEpochIndex(); +error ZeroAddress(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct ZeroEpochIndex; + pub struct ZeroAddress; #[allow( non_camel_case_types, non_snake_case, @@ -1161,26 +1755,26 @@ error ZeroEpochIndex(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: ZeroEpochIndex) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroAddress) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for ZeroEpochIndex { + impl ::core::convert::From> for ZeroAddress { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } } #[automatically_derived] - impl alloy_sol_types::SolError for ZeroEpochIndex { + impl alloy_sol_types::SolError for ZeroAddress { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "ZeroEpochIndex()"; - const SELECTOR: [u8; 4] = [214u8, 147u8, 104u8, 212u8]; + const SIGNATURE: &'static str = "ZeroAddress()"; + const SELECTOR: [u8; 4] = [217u8, 46u8, 35u8, 61u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1202,9 +1796,9 @@ error ZeroEpochIndex(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Event with signature `EmissionsReceiverUpdated(address,address)` and selector `0x16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a`. + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. ```solidity -event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newReceiver); +event Initialized(uint64 version); ```*/ #[allow( non_camel_case_types, @@ -1213,11 +1807,9 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR clippy::style )] #[derive(Clone)] - pub struct EmissionsReceiverUpdated { - #[allow(missing_docs)] - pub oldReceiver: alloy::sol_types::private::Address, + pub struct Initialized { #[allow(missing_docs)] - pub newReceiver: alloy::sol_types::private::Address, + pub version: u64, } #[allow( non_camel_case_types, @@ -1228,21 +1820,17 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR const _: () = { use alloy::sol_types as alloy_sol_types; #[automatically_derived] - impl alloy_sol_types::SolEvent for EmissionsReceiverUpdated { - type DataTuple<'a> = (); + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - type TopicList = ( - alloy_sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Address, - ); - const SIGNATURE: &'static str = "EmissionsReceiverUpdated(address,address)"; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ - 22u8, 174u8, 49u8, 121u8, 97u8, 90u8, 40u8, 21u8, 88u8, 59u8, 101u8, - 102u8, 234u8, 230u8, 247u8, 131u8, 178u8, 84u8, 25u8, 69u8, 44u8, 0u8, - 89u8, 154u8, 238u8, 176u8, 16u8, 136u8, 241u8, 62u8, 202u8, 26u8, + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, ]); const ANONYMOUS: bool = false; #[allow(unused_variables)] @@ -1251,10 +1839,7 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR topics: ::RustType, data: as alloy_sol_types::SolType>::RustType, ) -> Self { - Self { - oldReceiver: topics.1, - newReceiver: topics.2, - } + Self { version: data.0 } } #[inline] fn check_signature( @@ -1273,15 +1858,15 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR } #[inline] fn tokenize_body(&self) -> Self::DataToken<'_> { - () + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) } #[inline] fn topics(&self) -> ::RustType { - ( - Self::SIGNATURE_HASH.into(), - self.oldReceiver.clone(), - self.newReceiver.clone(), - ) + (Self::SIGNATURE_HASH.into(),) } #[inline] fn encode_topics_raw( @@ -1294,17 +1879,11 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR out[0usize] = alloy_sol_types::abi::token::WordToken( Self::SIGNATURE_HASH, ); - out[1usize] = ::encode_topic( - &self.oldReceiver, - ); - out[2usize] = ::encode_topic( - &self.newReceiver, - ); Ok(()) } } #[automatically_derived] - impl alloy_sol_types::private::IntoLogData for EmissionsReceiverUpdated { + impl alloy_sol_types::private::IntoLogData for Initialized { fn to_log_data(&self) -> alloy_sol_types::private::LogData { From::from(self) } @@ -1313,11 +1892,9 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR } } #[automatically_derived] - impl From<&EmissionsReceiverUpdated> for alloy_sol_types::private::LogData { + impl From<&Initialized> for alloy_sol_types::private::LogData { #[inline] - fn from( - this: &EmissionsReceiverUpdated, - ) -> alloy_sol_types::private::LogData { + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { alloy_sol_types::SolEvent::encode_log_data(this) } } @@ -1655,252 +2232,34 @@ event TransactionProcessed(address indexed sender, bytes data); fn to_log_data(&self) -> alloy_sol_types::private::LogData { From::from(self) } - fn into_log_data(self) -> alloy_sol_types::private::LogData { - From::from(&self) - } - } - #[automatically_derived] - impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { - #[inline] - fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { - alloy_sol_types::SolEvent::encode_log_data(this) - } - } - }; - /**Constructor`. -```solidity -constructor(uint256 _appchainId); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct constructorCall { - #[allow(missing_docs)] - pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, - } - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: constructorCall) -> Self { - (value._appchainId,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for constructorCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _appchainId: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolConstructor for constructorCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self._appchainId), - ) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `EPOCH_DURATION()` and selector `0xa70b9f0c`. -```solidity -function EPOCH_DURATION() external view returns (uint256); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct EPOCH_DURATIONCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`EPOCH_DURATION()`](EPOCH_DURATIONCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct EPOCH_DURATIONReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: EPOCH_DURATIONCall) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for EPOCH_DURATIONCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - } - { - #[doc(hidden)] - #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: EPOCH_DURATIONReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for EPOCH_DURATIONReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for EPOCH_DURATIONCall { - type Parameters<'a> = (); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "EPOCH_DURATION()"; - const SELECTOR: [u8; 4] = [167u8, 11u8, 159u8, 12u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: EPOCH_DURATIONReturn = r.into(); - r._0 - }) + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) } + } + #[automatically_derived] + impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: EPOCH_DURATIONReturn = r.into(); - r._0 - }) + fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `START_TIMESTAMP()` and selector `0x781cd99d`. + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. ```solidity -function START_TIMESTAMP() external view returns (uint256); +event Upgraded(address indexed implementation); ```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct START_TIMESTAMPCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`START_TIMESTAMP()`](START_TIMESTAMPCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] #[derive(Clone)] - pub struct START_TIMESTAMPReturn { + pub struct Upgraded { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub implementation: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -1910,46 +2269,106 @@ function START_TIMESTAMP() external view returns (uint256); )] const _: () = { use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: START_TIMESTAMPCall) -> Self { - () + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); } + Ok(()) } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for START_TIMESTAMPCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) } } + }; + /**Constructor`. +```solidity +constructor(address _gasMeter); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall { + #[allow(missing_docs)] + pub _gasMeter: alloy::sol_types::private::Address, + } + const _: () = { + use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1963,34 +2382,25 @@ function START_TIMESTAMP() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: START_TIMESTAMPReturn) -> Self { - (value._0,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value._gasMeter,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for START_TIMESTAMPReturn { + impl ::core::convert::From> for constructorCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self { _gasMeter: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for START_TIMESTAMPCall { - type Parameters<'a> = (); + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "START_TIMESTAMP()"; - const SELECTOR: [u8; 4] = [120u8, 28u8, 217u8, 157u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1999,57 +2409,31 @@ function START_TIMESTAMP() external view returns (uint256); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - as alloy_sol_types::SolType>::tokenize(ret), + ::tokenize( + &self._gasMeter, + ), ) } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: START_TIMESTAMPReturn = r.into(); - r._0 - }) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: START_TIMESTAMPReturn = r.into(); - r._0 - }) - } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `appchainId()` and selector `0xd8781342`. + /**Function with signature `SEQUENCING_MODULE_STORAGE_LOCATION()` and selector `0x2407f0b6`. ```solidity -function appchainId() external view returns (uint256); +function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct appchainIdCall; + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. + ///Container type for the return parameters of the [`SEQUENCING_MODULE_STORAGE_LOCATION()`](SEQUENCING_MODULE_STORAGE_LOCATIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct appchainIdReturn { + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::FixedBytes<32>, } #[allow( non_camel_case_types, @@ -2078,14 +2462,16 @@ function appchainId() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: appchainIdCall) -> Self { + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for appchainIdCall { + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2094,11 +2480,9 @@ function appchainId() external view returns (uint256); { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2112,32 +2496,34 @@ function appchainId() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: appchainIdReturn) -> Self { + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for appchainIdReturn { + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for appchainIdCall { + impl alloy_sol_types::SolCall for SEQUENCING_MODULE_STORAGE_LOCATIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "appchainId()"; - const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; + const SIGNATURE: &'static str = "SEQUENCING_MODULE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [36u8, 7u8, 240u8, 182u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2151,8 +2537,8 @@ function appchainId() external view returns (uint256); #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - as alloy_sol_types::SolType>::tokenize(ret), ) } @@ -2162,7 +2548,7 @@ function appchainId() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: appchainIdReturn = r.into(); + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); r._0 }) } @@ -2174,7 +2560,7 @@ function appchainId() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: appchainIdReturn = r.into(); + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); r._0 }) } @@ -2182,17 +2568,22 @@ function appchainId() external view returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `disableGasTracking()` and selector `0x5467cb48`. + /**Function with signature `SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()` and selector `0x95c5bf75`. ```solidity -function disableGasTracking() external; +function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct disableGasTrackingCall; - ///Container type for the return parameters of the [`disableGasTracking()`](disableGasTrackingCall) function. + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()`](SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct disableGasTrackingReturn {} + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } #[allow( non_camel_case_types, non_snake_case, @@ -2220,16 +2611,16 @@ function disableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: disableGasTrackingCall) -> Self { + fn from(value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for disableGasTrackingCall { + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2238,9 +2629,9 @@ function disableGasTracking() external; { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2254,41 +2645,37 @@ function disableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: disableGasTrackingReturn) -> Self { - () + fn from( + value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn, + ) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for disableGasTrackingReturn { + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl disableGasTrackingReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for disableGasTrackingCall { + impl alloy_sol_types::SolCall + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = disableGasTrackingReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "disableGasTracking()"; - const SELECTOR: [u8; 4] = [84u8, 103u8, 203u8, 72u8]; + const SIGNATURE: &'static str = "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [149u8, 197u8, 191u8, 117u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2301,14 +2688,22 @@ function disableGasTracking() external; } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - disableGasTrackingReturn::_tokenize(ret) + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) } #[inline] fn abi_decode_returns_validate( @@ -2317,27 +2712,31 @@ function disableGasTracking() external; as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `emissionsReceiver()` and selector `0x5e7a7bdf`. + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. ```solidity -function emissionsReceiver() external view returns (address); +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct emissionsReceiverCall; + pub struct UPGRADE_INTERFACE_VERSIONCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`emissionsReceiver()`](emissionsReceiverCall) function. + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct emissionsReceiverReturn { + pub struct UPGRADE_INTERFACE_VERSIONReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::String, } #[allow( non_camel_case_types, @@ -2366,16 +2765,16 @@ function emissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: emissionsReceiverCall) -> Self { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for emissionsReceiverCall { + for UPGRADE_INTERFACE_VERSIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2384,9 +2783,9 @@ function emissionsReceiver() external view returns (address); { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2400,34 +2799,34 @@ function emissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: emissionsReceiverReturn) -> Self { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for emissionsReceiverReturn { + for UPGRADE_INTERFACE_VERSIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for emissionsReceiverCall { + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Address; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "emissionsReceiver()"; - const SELECTOR: [u8; 4] = [94u8, 122u8, 123u8, 223u8]; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2441,7 +2840,7 @@ function emissionsReceiver() external view returns (address); #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( + ::tokenize( ret, ), ) @@ -2452,7 +2851,7 @@ function emissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: emissionsReceiverReturn = r.into(); + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); r._0 }) } @@ -2464,7 +2863,7 @@ function emissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: emissionsReceiverReturn = r.into(); + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); r._0 }) } @@ -2472,17 +2871,22 @@ function emissionsReceiver() external view returns (address); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `enableGasTracking()` and selector `0xde1f453e`. + /**Function with signature `VERSION()` and selector `0xffa1ad74`. ```solidity -function enableGasTracking() external; +function VERSION() external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct enableGasTrackingCall; - ///Container type for the return parameters of the [`enableGasTracking()`](enableGasTrackingCall) function. + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct enableGasTrackingReturn {} + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } #[allow( non_camel_case_types, non_snake_case, @@ -2510,16 +2914,14 @@ function enableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: enableGasTrackingCall) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for enableGasTrackingCall { + impl ::core::convert::From> for VERSIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2528,9 +2930,11 @@ function enableGasTracking() external; { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2544,41 +2948,32 @@ function enableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: enableGasTrackingReturn) -> Self { - () + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for enableGasTrackingReturn { + impl ::core::convert::From> for VERSIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl enableGasTrackingReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for enableGasTrackingCall { + impl alloy_sol_types::SolCall for VERSIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = enableGasTrackingReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "enableGasTracking()"; - const SELECTOR: [u8; 4] = [222u8, 31u8, 69u8, 62u8]; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2591,14 +2986,21 @@ function enableGasTracking() external; } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - enableGasTrackingReturn::_tokenize(ret) + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) } #[inline] fn abi_decode_returns_validate( @@ -2607,31 +3009,31 @@ function enableGasTracking() external; as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. + /**Function with signature `_processTransaction(address,bytes)` and selector `0xe4a37d7a`. ```solidity -function encodeTransaction(bytes memory data) external pure returns (bytes memory); +function _processTransaction(address sequencer, bytes memory data) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct encodeTransactionCall { + pub struct _processTransactionCall { + #[allow(missing_docs)] + pub sequencer: alloy::sol_types::private::Address, #[allow(missing_docs)] pub data: alloy::sol_types::private::Bytes, } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. + ///Container type for the return parameters of the [`_processTransaction(address,bytes)`](_processTransactionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct encodeTransactionReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Bytes, - } + pub struct _processTransactionReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -2643,9 +3045,15 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2659,27 +3067,30 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionCall> for UnderlyingRustTuple<'_> { - fn from(value: encodeTransactionCall) -> Self { - (value.data,) + fn from(value: _processTransactionCall) -> Self { + (value.sequencer, value.data) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for encodeTransactionCall { + for _processTransactionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { data: tuple.0 } + Self { + sequencer: tuple.0, + data: tuple.1, + } } } } { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2693,34 +3104,44 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionReturn> for UnderlyingRustTuple<'_> { - fn from(value: encodeTransactionReturn) -> Self { - (value._0,) + fn from(value: _processTransactionReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for encodeTransactionReturn { + for _processTransactionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl _processTransactionReturn { + fn _tokenize( + &self, + ) -> <_processTransactionCall as alloy_sol_types::SolCall>::ReturnToken<'_> { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for encodeTransactionCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + impl alloy_sol_types::SolCall for _processTransactionCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Bytes; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type Return = _processTransactionReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "encodeTransaction(bytes)"; - const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; + const SIGNATURE: &'static str = "_processTransaction(address,bytes)"; + const SELECTOR: [u8; 4] = [228u8, 163u8, 125u8, 122u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2730,6 +3151,9 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor #[inline] fn tokenize(&self) -> Self::Token<'_> { ( + ::tokenize( + &self.sequencer, + ), ::tokenize( &self.data, ), @@ -2737,21 +3161,14 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - ::tokenize( - ret, - ), - ) + _processTransactionReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: encodeTransactionReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -2760,31 +3177,28 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: encodeTransactionReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `gasTrackingDisabled()` and selector `0xf9db7092`. + /**Function with signature `_processTransactionsBulk(address,bytes[])` and selector `0x12281983`. ```solidity -function gasTrackingDisabled() external view returns (bool); +function _processTransactionsBulk(address sequencer, bytes[] memory data) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct gasTrackingDisabledCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`gasTrackingDisabled()`](gasTrackingDisabledCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct gasTrackingDisabledReturn { + pub struct _processTransactionsBulkCall { #[allow(missing_docs)] - pub _0: bool, + pub sequencer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, } + ///Container type for the return parameters of the [`_processTransactionsBulk(address,bytes[])`](_processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionsBulkReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -2796,9 +3210,15 @@ function gasTrackingDisabled() external view returns (bool); { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Vec, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2812,27 +3232,30 @@ function gasTrackingDisabled() external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionsBulkCall> for UnderlyingRustTuple<'_> { - fn from(value: gasTrackingDisabledCall) -> Self { - () + fn from(value: _processTransactionsBulkCall) -> Self { + (value.sequencer, value.data) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for gasTrackingDisabledCall { + for _processTransactionsBulkCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + Self { + sequencer: tuple.0, + data: tuple.1, + } } } } { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (bool,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2846,34 +3269,46 @@ function gasTrackingDisabled() external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionsBulkReturn> for UnderlyingRustTuple<'_> { - fn from(value: gasTrackingDisabledReturn) -> Self { - (value._0,) + fn from(value: _processTransactionsBulkReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for gasTrackingDisabledReturn { + for _processTransactionsBulkReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl _processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> <_processTransactionsBulkCall as alloy_sol_types::SolCall>::ReturnToken< + '_, + > { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for gasTrackingDisabledCall { - type Parameters<'a> = (); + impl alloy_sol_types::SolCall for _processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = bool; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type Return = _processTransactionsBulkReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "gasTrackingDisabled()"; - const SELECTOR: [u8; 4] = [249u8, 219u8, 112u8, 146u8]; + const SIGNATURE: &'static str = "_processTransactionsBulk(address,bytes[])"; + const SELECTOR: [u8; 4] = [18u8, 40u8, 25u8, 131u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2882,25 +3317,25 @@ function gasTrackingDisabled() external view returns (bool); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( - ret, + ::tokenize( + &self.sequencer, ), + as alloy_sol_types::SolType>::tokenize(&self.data), ) } #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + _processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: gasTrackingDisabledReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -2909,28 +3344,25 @@ function gasTrackingDisabled() external view returns (bool); as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: gasTrackingDisabledReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getCurrentEpoch()` and selector `0xb97dd9e2`. + /**Function with signature `appchainId()` and selector `0xd8781342`. ```solidity -function getCurrentEpoch() external view returns (uint256); +function appchainId() external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getCurrentEpochCall; + pub struct appchainIdCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getCurrentEpoch()`](getCurrentEpochCall) function. + ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getCurrentEpochReturn { + pub struct appchainIdReturn { #[allow(missing_docs)] pub _0: alloy::sol_types::private::primitives::aliases::U256, } @@ -2961,14 +3393,14 @@ function getCurrentEpoch() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getCurrentEpochCall) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getCurrentEpochCall { + impl ::core::convert::From> for appchainIdCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2995,23 +3427,21 @@ function getCurrentEpoch() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getCurrentEpochReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getCurrentEpochReturn { + impl ::core::convert::From> for appchainIdReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getCurrentEpochCall { + impl alloy_sol_types::SolCall for appchainIdCall { type Parameters<'a> = (); type Token<'a> = = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getCurrentEpoch()"; - const SELECTOR: [u8; 4] = [185u8, 125u8, 217u8, 226u8]; + const SIGNATURE: &'static str = "appchainId()"; + const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3047,7 +3477,7 @@ function getCurrentEpoch() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getCurrentEpochReturn = r.into(); + let r: appchainIdReturn = r.into(); r._0 }) } @@ -3059,7 +3489,7 @@ function getCurrentEpoch() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getCurrentEpochReturn = r.into(); + let r: appchainIdReturn = r.into(); r._0 }) } @@ -3067,21 +3497,24 @@ function getCurrentEpoch() external view returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getEmissionsReceiver()` and selector `0x7a8d41c2`. + /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. ```solidity -function getEmissionsReceiver() external view returns (address); +function encodeTransaction(bytes memory data) external pure returns (bytes memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEmissionsReceiverCall; + pub struct encodeTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getEmissionsReceiver()`](getEmissionsReceiverCall) function. + ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEmissionsReceiverReturn { + pub struct encodeTransactionReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::Bytes, } #[allow( non_camel_case_types, @@ -3094,9 +3527,9 @@ function getEmissionsReceiver() external view returns (address); { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3110,27 +3543,27 @@ function getEmissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEmissionsReceiverCall) -> Self { - () + fn from(value: encodeTransactionCall) -> Self { + (value.data,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for getEmissionsReceiverCall { + for encodeTransactionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + Self { data: tuple.0 } } } } { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3144,34 +3577,34 @@ function getEmissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEmissionsReceiverReturn) -> Self { + fn from(value: encodeTransactionReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for getEmissionsReceiverReturn { + for encodeTransactionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getEmissionsReceiverCall { - type Parameters<'a> = (); + impl alloy_sol_types::SolCall for encodeTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Address; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type Return = alloy::sol_types::private::Bytes; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getEmissionsReceiver()"; - const SELECTOR: [u8; 4] = [122u8, 141u8, 65u8, 194u8]; + const SIGNATURE: &'static str = "encodeTransaction(bytes)"; + const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3180,12 +3613,16 @@ function getEmissionsReceiver() external view returns (address); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () + ( + ::tokenize( + &self.data, + ), + ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( + ::tokenize( ret, ), ) @@ -3196,7 +3633,7 @@ function getEmissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getEmissionsReceiverReturn = r.into(); + let r: encodeTransactionReturn = r.into(); r._0 }) } @@ -3208,7 +3645,7 @@ function getEmissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getEmissionsReceiverReturn = r.into(); + let r: encodeTransactionReturn = r.into(); r._0 }) } @@ -3216,24 +3653,21 @@ function getEmissionsReceiver() external view returns (address); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getEpochEnd(uint256)` and selector `0xd5176d23`. + /**Function with signature `gasMeter()` and selector `0x43f97ae5`. ```solidity -function getEpochEnd(uint256 epochIndex) external pure returns (uint256); +function gasMeter() external view returns (address); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochEndCall { - #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct gasMeterCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getEpochEnd(uint256)`](getEpochEndCall) function. + ///Container type for the return parameters of the [`gasMeter()`](gasMeterCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochEndReturn { + pub struct gasMeterReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -3246,11 +3680,9 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3264,27 +3696,25 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochEndCall) -> Self { - (value.epochIndex,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochEndCall { + impl ::core::convert::From> for gasMeterCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self } } } { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3298,32 +3728,32 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochEndReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochEndReturn { + impl ::core::convert::From> for gasMeterReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getEpochEndCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for gasMeterCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getEpochEnd(uint256)"; - const SELECTOR: [u8; 4] = [213u8, 23u8, 109u8, 35u8]; + const SIGNATURE: &'static str = "gasMeter()"; + const SELECTOR: [u8; 4] = [67u8, 249u8, 122u8, 229u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3332,18 +3762,14 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.epochIndex), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - as alloy_sol_types::SolType>::tokenize(ret), + ::tokenize( + ret, + ), ) } #[inline] @@ -3352,7 +3778,7 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getEpochEndReturn = r.into(); + let r: gasMeterReturn = r.into(); r._0 }) } @@ -3364,7 +3790,7 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getEpochEndReturn = r.into(); + let r: gasMeterReturn = r.into(); r._0 }) } @@ -3372,24 +3798,21 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getEpochStart(uint256)` and selector `0x0175e23b`. + /**Function with signature `getInitializedVersion()` and selector `0xb3c65015`. ```solidity -function getEpochStart(uint256 epochIndex) external pure returns (uint256); +function getInitializedVersion() external view returns (uint64); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochStartCall { - #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct getInitializedVersionCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getEpochStart(uint256)`](getEpochStartCall) function. + ///Container type for the return parameters of the [`getInitializedVersion()`](getInitializedVersionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochStartReturn { + pub struct getInitializedVersionReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub _0: u64, } #[allow( non_camel_case_types, @@ -3402,11 +3825,9 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3420,27 +3841,27 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochStartCall) -> Self { - (value.epochIndex,) + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochStartCall { + impl ::core::convert::From> + for getInitializedVersionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self } } } { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (u64,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3454,32 +3875,34 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochStartReturn) -> Self { + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochStartReturn { + impl ::core::convert::From> + for getInitializedVersionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getEpochStartCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for getInitializedVersionCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = u64; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getEpochStart(uint256)"; - const SELECTOR: [u8; 4] = [1u8, 117u8, 226u8, 59u8]; + const SIGNATURE: &'static str = "getInitializedVersion()"; + const SELECTOR: [u8; 4] = [179u8, 198u8, 80u8, 21u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3488,17 +3911,13 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.epochIndex), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( as alloy_sol_types::SolType>::tokenize(ret), ) } @@ -3508,7 +3927,7 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getEpochStartReturn = r.into(); + let r: getInitializedVersionReturn = r.into(); r._0 }) } @@ -3520,7 +3939,7 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getEpochStartReturn = r.into(); + let r: getInitializedVersionReturn = r.into(); r._0 }) } @@ -3528,25 +3947,24 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getTokensForEpoch(uint256)` and selector `0xe0396166`. + /**Function with signature `initialize(address,address,uint256)` and selector `0x1794bb3c`. ```solidity -function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); +function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getTokensForEpochCall { + pub struct initializeCall { #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + pub admin: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _permissionRequirementModule: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getTokensForEpoch(uint256)`](getTokensForEpochCall) function. + ///Container type for the return parameters of the [`initialize(address,address,uint256)`](initializeCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getTokensForEpochReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct initializeReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -3558,9 +3976,15 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, alloy::sol_types::private::primitives::aliases::U256, ); #[cfg(test)] @@ -3576,29 +4000,29 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getTokensForEpochCall) -> Self { - (value.epochIndex,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + (value.admin, value._permissionRequirementModule, value._appchainId) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getTokensForEpochCall { + impl ::core::convert::From> for initializeCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self { + admin: tuple.0, + _permissionRequirementModule: tuple.1, + _appchainId: tuple.2, + } } } } { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3612,34 +4036,43 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getTokensForEpochReturn) -> Self { - (value._0,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getTokensForEpochReturn { + impl ::core::convert::From> for initializeReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for getTokensForEpochCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = initializeReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getTokensForEpoch(uint256)"; - const SELECTOR: [u8; 4] = [224u8, 57u8, 97u8, 102u8]; + const SIGNATURE: &'static str = "initialize(address,address,uint256)"; + const SELECTOR: [u8; 4] = [23u8, 148u8, 187u8, 60u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3649,28 +4082,27 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); #[inline] fn tokenize(&self) -> Self::Token<'_> { ( + ::tokenize( + &self.admin, + ), + ::tokenize( + &self._permissionRequirementModule, + ), as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + > as alloy_sol_types::SolType>::tokenize(&self._appchainId), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) + initializeReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: getTokensForEpochReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -3679,10 +4111,7 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: getTokensForEpochReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; @@ -4611,17 +5040,22 @@ function processTransactionsBulk(bytes[] memory data) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `renounceOwnership()` and selector `0x715018a6`. + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. ```solidity -function renounceOwnership() external; +function proxiableUUID() external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct renounceOwnershipCall; - ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct renounceOwnershipReturn {} + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } #[allow( non_camel_case_types, non_snake_case, @@ -4649,16 +5083,14 @@ function renounceOwnership() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: renounceOwnershipCall) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for renounceOwnershipCall { + impl ::core::convert::From> for proxiableUUIDCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -4667,9 +5099,9 @@ function renounceOwnership() external; { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4683,41 +5115,32 @@ function renounceOwnership() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: renounceOwnershipReturn) -> Self { - () + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for renounceOwnershipReturn { + impl ::core::convert::From> for proxiableUUIDReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl renounceOwnershipReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for renounceOwnershipCall { + impl alloy_sol_types::SolCall for proxiableUUIDCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = renounceOwnershipReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "renounceOwnership()"; - const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4730,14 +5153,21 @@ function renounceOwnership() external; } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - renounceOwnershipReturn::_tokenize(ret) + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) } #[inline] fn abi_decode_returns_validate( @@ -4746,26 +5176,26 @@ function renounceOwnership() external; as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `setEmissionsReceiver(address)` and selector `0x39698ac0`. + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. ```solidity -function setEmissionsReceiver(address _emissionsReceiver) external; +function renounceOwnership() external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct setEmissionsReceiverCall { - #[allow(missing_docs)] - pub _emissionsReceiver: alloy::sol_types::private::Address, - } - ///Container type for the return parameters of the [`setEmissionsReceiver(address)`](setEmissionsReceiverCall) function. + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct setEmissionsReceiverReturn {} + pub struct renounceOwnershipReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -4777,9 +5207,9 @@ function setEmissionsReceiver(address _emissionsReceiver) external; { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4793,20 +5223,18 @@ function setEmissionsReceiver(address _emissionsReceiver) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: setEmissionsReceiverCall) -> Self { - (value._emissionsReceiver,) + fn from(value: renounceOwnershipCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for setEmissionsReceiverCall { + for renounceOwnershipCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - _emissionsReceiver: tuple.0, - } + Self } } } @@ -4829,43 +5257,41 @@ function setEmissionsReceiver(address _emissionsReceiver) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: setEmissionsReceiverReturn) -> Self { + fn from(value: renounceOwnershipReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for setEmissionsReceiverReturn { + for renounceOwnershipReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl setEmissionsReceiverReturn { + impl renounceOwnershipReturn { fn _tokenize( &self, - ) -> ::ReturnToken< - '_, - > { + ) -> ::ReturnToken<'_> { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for setEmissionsReceiverCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = setEmissionsReceiverReturn; + type Return = renounceOwnershipReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "setEmissionsReceiver(address)"; - const SELECTOR: [u8; 4] = [57u8, 105u8, 138u8, 192u8]; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4874,15 +5300,11 @@ function setEmissionsReceiver(address _emissionsReceiver) external; } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self._emissionsReceiver, - ), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - setEmissionsReceiverReturn::_tokenize(ret) + renounceOwnershipReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -4904,25 +5326,20 @@ function setEmissionsReceiver(address _emissionsReceiver) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `tokensUsedPerEpoch(uint256)` and selector `0x0c672363`. + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. ```solidity -function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 tokensUsed); +function transferOwnership(address newOwner) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct tokensUsedPerEpochCall { + pub struct transferOwnershipCall { #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + pub newOwner: alloy::sol_types::private::Address, } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`tokensUsedPerEpoch(uint256)`](tokensUsedPerEpochCall) function. + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct tokensUsedPerEpochReturn { - #[allow(missing_docs)] - pub tokensUsed: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct transferOwnershipReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -4934,11 +5351,9 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4952,29 +5367,27 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: tokensUsedPerEpochCall) -> Self { - (value.epochIndex,) + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for tokensUsedPerEpochCall { + for transferOwnershipCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self { newOwner: tuple.0 } } } } { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4988,34 +5401,41 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: tokensUsedPerEpochReturn) -> Self { - (value.tokensUsed,) + fn from(value: transferOwnershipReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for tokensUsedPerEpochReturn { + for transferOwnershipReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { tokensUsed: tuple.0 } + Self {} } } } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for tokensUsedPerEpochCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "tokensUsedPerEpoch(uint256)"; - const SELECTOR: [u8; 4] = [12u8, 103u8, 35u8, 99u8]; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -5025,28 +5445,21 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ::tokenize( + &self.newOwner, + ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) + transferOwnershipReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: tokensUsedPerEpochReturn = r.into(); - r.tokensUsed - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -5055,29 +5468,26 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: tokensUsedPerEpochReturn = r.into(); - r.tokensUsed - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. + /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. ```solidity -function transferOwnership(address newOwner) external; +function updateRequirementModule(address _newModule) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct transferOwnershipCall { + pub struct updateRequirementModuleCall { #[allow(missing_docs)] - pub newOwner: alloy::sol_types::private::Address, + pub _newModule: alloy::sol_types::private::Address, } - ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct transferOwnershipReturn {} + pub struct updateRequirementModuleReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -5105,18 +5515,18 @@ function transferOwnership(address newOwner) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: transferOwnershipCall) -> Self { - (value.newOwner,) + fn from(value: updateRequirementModuleCall) -> Self { + (value._newModule,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for transferOwnershipCall { + for updateRequirementModuleCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { newOwner: tuple.0 } + Self { _newModule: tuple.0 } } } } @@ -5139,41 +5549,43 @@ function transferOwnership(address newOwner) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: transferOwnershipReturn) -> Self { + fn from(value: updateRequirementModuleReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for transferOwnershipReturn { + for updateRequirementModuleReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl transferOwnershipReturn { + impl updateRequirementModuleReturn { fn _tokenize( &self, - ) -> ::ReturnToken<'_> { + ) -> ::ReturnToken< + '_, + > { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for transferOwnershipCall { + impl alloy_sol_types::SolCall for updateRequirementModuleCall { type Parameters<'a> = (alloy::sol_types::sol_data::Address,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = transferOwnershipReturn; + type Return = updateRequirementModuleReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "transferOwnership(address)"; - const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + const SIGNATURE: &'static str = "updateRequirementModule(address)"; + const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -5184,13 +5596,13 @@ function transferOwnership(address newOwner) external; fn tokenize(&self) -> Self::Token<'_> { ( ::tokenize( - &self.newOwner, + &self._newModule, ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - transferOwnershipReturn::_tokenize(ret) + updateRequirementModuleReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -5212,20 +5624,22 @@ function transferOwnership(address newOwner) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. ```solidity -function updateRequirementModule(address _newModule) external; +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct updateRequirementModuleCall { + pub struct upgradeToAndCallCall { #[allow(missing_docs)] - pub _newModule: alloy::sol_types::private::Address, + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, } - ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct updateRequirementModuleReturn {} + pub struct upgradeToAndCallReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -5237,9 +5651,15 @@ function updateRequirementModule(address _newModule) external; { #[doc(hidden)] #[allow(dead_code)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -5253,18 +5673,21 @@ function updateRequirementModule(address _newModule) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: updateRequirementModuleCall) -> Self { - (value._newModule,) + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for updateRequirementModuleCall { + for upgradeToAndCallCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _newModule: tuple.0 } + Self { + newImplementation: tuple.0, + data: tuple.1, + } } } } @@ -5287,43 +5710,44 @@ function updateRequirementModule(address _newModule) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: updateRequirementModuleReturn) -> Self { + fn from(value: upgradeToAndCallReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for updateRequirementModuleReturn { + for upgradeToAndCallReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl updateRequirementModuleReturn { + impl upgradeToAndCallReturn { fn _tokenize( &self, - ) -> ::ReturnToken< - '_, - > { + ) -> ::ReturnToken<'_> { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for updateRequirementModuleCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = updateRequirementModuleReturn; + type Return = upgradeToAndCallReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "updateRequirementModule(address)"; - const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -5334,13 +5758,16 @@ function updateRequirementModule(address _newModule) external; fn tokenize(&self) -> Self::Token<'_> { ( ::tokenize( - &self._newModule, + &self.newImplementation, + ), + ::tokenize( + &self.data, ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - updateRequirementModuleReturn::_tokenize(ret) + upgradeToAndCallReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -5366,31 +5793,29 @@ function updateRequirementModule(address _newModule) external; #[derive()] pub enum SyndicateSequencingChainCalls { #[allow(missing_docs)] - EPOCH_DURATION(EPOCH_DURATIONCall), - #[allow(missing_docs)] - START_TIMESTAMP(START_TIMESTAMPCall), + SEQUENCING_MODULE_STORAGE_LOCATION(SEQUENCING_MODULE_STORAGE_LOCATIONCall), #[allow(missing_docs)] - appchainId(appchainIdCall), - #[allow(missing_docs)] - disableGasTracking(disableGasTrackingCall), + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + ), #[allow(missing_docs)] - emissionsReceiver(emissionsReceiverCall), + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), #[allow(missing_docs)] - enableGasTracking(enableGasTrackingCall), + VERSION(VERSIONCall), #[allow(missing_docs)] - encodeTransaction(encodeTransactionCall), + _processTransaction(_processTransactionCall), #[allow(missing_docs)] - gasTrackingDisabled(gasTrackingDisabledCall), + _processTransactionsBulk(_processTransactionsBulkCall), #[allow(missing_docs)] - getCurrentEpoch(getCurrentEpochCall), + appchainId(appchainIdCall), #[allow(missing_docs)] - getEmissionsReceiver(getEmissionsReceiverCall), + encodeTransaction(encodeTransactionCall), #[allow(missing_docs)] - getEpochEnd(getEpochEndCall), + gasMeter(gasMeterCall), #[allow(missing_docs)] - getEpochStart(getEpochStartCall), + getInitializedVersion(getInitializedVersionCall), #[allow(missing_docs)] - getTokensForEpoch(getTokensForEpochCall), + initialize(initializeCall), #[allow(missing_docs)] isAllowed(isAllowedCall), #[allow(missing_docs)] @@ -5404,15 +5829,15 @@ function updateRequirementModule(address _newModule) external; #[allow(missing_docs)] processTransactionsBulk(processTransactionsBulkCall), #[allow(missing_docs)] - renounceOwnership(renounceOwnershipCall), - #[allow(missing_docs)] - setEmissionsReceiver(setEmissionsReceiverCall), + proxiableUUID(proxiableUUIDCall), #[allow(missing_docs)] - tokensUsedPerEpoch(tokensUsedPerEpochCall), + renounceOwnership(renounceOwnershipCall), #[allow(missing_docs)] transferOwnership(transferOwnershipCall), #[allow(missing_docs)] updateRequirementModule(updateRequirementModuleCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), } impl SyndicateSequencingChainCalls { /// All the selectors of this enum. @@ -5422,84 +5847,78 @@ function updateRequirementModule(address _newModule) external; /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ - [1u8, 117u8, 226u8, 59u8], - [12u8, 103u8, 35u8, 99u8], - [57u8, 105u8, 138u8, 192u8], + [18u8, 40u8, 25u8, 131u8], + [23u8, 148u8, 187u8, 60u8], + [36u8, 7u8, 240u8, 182u8], + [67u8, 249u8, 122u8, 229u8], [70u8, 226u8, 204u8, 9u8], - [84u8, 103u8, 203u8, 72u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], [91u8, 60u8, 214u8, 226u8], - [94u8, 122u8, 123u8, 223u8], [113u8, 80u8, 24u8, 166u8], - [120u8, 28u8, 217u8, 157u8], [122u8, 57u8, 121u8, 220u8], - [122u8, 141u8, 65u8, 194u8], [133u8, 7u8, 73u8, 37u8], [141u8, 165u8, 203u8, 91u8], - [167u8, 11u8, 159u8, 12u8], - [185u8, 125u8, 217u8, 226u8], + [149u8, 197u8, 191u8, 117u8], + [173u8, 60u8, 177u8, 204u8], + [179u8, 198u8, 80u8, 21u8], [205u8, 175u8, 185u8, 120u8], [212u8, 240u8, 235u8, 77u8], - [213u8, 23u8, 109u8, 35u8], [216u8, 120u8, 19u8, 66u8], - [222u8, 31u8, 69u8, 62u8], - [224u8, 57u8, 97u8, 102u8], + [228u8, 163u8, 125u8, 122u8], [232u8, 235u8, 29u8, 195u8], [242u8, 253u8, 227u8, 139u8], - [249u8, 219u8, 112u8, 146u8], + [255u8, 161u8, 173u8, 116u8], ]; /// The names of the variants in the same order as `SELECTORS`. pub const VARIANT_NAMES: &'static [&'static str] = &[ - ::core::stringify!(getEpochStart), - ::core::stringify!(tokensUsedPerEpoch), - ::core::stringify!(setEmissionsReceiver), + ::core::stringify!(_processTransactionsBulk), + ::core::stringify!(initialize), + ::core::stringify!(SEQUENCING_MODULE_STORAGE_LOCATION), + ::core::stringify!(gasMeter), ::core::stringify!(processTransaction), - ::core::stringify!(disableGasTracking), + ::core::stringify!(upgradeToAndCall), + ::core::stringify!(proxiableUUID), ::core::stringify!(permissionRequirementModule), - ::core::stringify!(emissionsReceiver), ::core::stringify!(renounceOwnership), - ::core::stringify!(START_TIMESTAMP), ::core::stringify!(isAllowed), - ::core::stringify!(getEmissionsReceiver), ::core::stringify!(encodeTransaction), ::core::stringify!(owner), - ::core::stringify!(EPOCH_DURATION), - ::core::stringify!(getCurrentEpoch), + ::core::stringify!(SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION), + ::core::stringify!(UPGRADE_INTERFACE_VERSION), + ::core::stringify!(getInitializedVersion), ::core::stringify!(processTransactionsBulk), ::core::stringify!(updateRequirementModule), - ::core::stringify!(getEpochEnd), ::core::stringify!(appchainId), - ::core::stringify!(enableGasTracking), - ::core::stringify!(getTokensForEpoch), + ::core::stringify!(_processTransaction), ::core::stringify!(maxDataSize), ::core::stringify!(transferOwnership), - ::core::stringify!(gasTrackingDisabled), + ::core::stringify!(VERSION), ]; /// The signatures in the same order as `SELECTORS`. pub const SIGNATURES: &'static [&'static str] = &[ - ::SIGNATURE, - ::SIGNATURE, - ::SIGNATURE, + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, - ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, - ::SIGNATURE, + <_processTransactionCall as alloy_sol_types::SolCall>::SIGNATURE, ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, + ::SIGNATURE, ]; /// Returns the signature for the given selector, if known. #[inline] @@ -5526,48 +5945,38 @@ function updateRequirementModule(address _newModule) external; impl alloy_sol_types::SolInterface for SyndicateSequencingChainCalls { const NAME: &'static str = "SyndicateSequencingChainCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 24usize; + const COUNT: usize = 22usize; #[inline] fn selector(&self) -> [u8; 4] { match self { - Self::EPOCH_DURATION(_) => { - ::SELECTOR + Self::SEQUENCING_MODULE_STORAGE_LOCATION(_) => { + ::SELECTOR } - Self::START_TIMESTAMP(_) => { - ::SELECTOR + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(_) => { + ::SELECTOR } - Self::appchainId(_) => { - ::SELECTOR + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR } - Self::disableGasTracking(_) => { - ::SELECTOR + Self::VERSION(_) => ::SELECTOR, + Self::_processTransaction(_) => { + <_processTransactionCall as alloy_sol_types::SolCall>::SELECTOR } - Self::emissionsReceiver(_) => { - ::SELECTOR + Self::_processTransactionsBulk(_) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::SELECTOR } - Self::enableGasTracking(_) => { - ::SELECTOR + Self::appchainId(_) => { + ::SELECTOR } Self::encodeTransaction(_) => { ::SELECTOR } - Self::gasTrackingDisabled(_) => { - ::SELECTOR - } - Self::getCurrentEpoch(_) => { - ::SELECTOR - } - Self::getEmissionsReceiver(_) => { - ::SELECTOR - } - Self::getEpochEnd(_) => { - ::SELECTOR + Self::gasMeter(_) => ::SELECTOR, + Self::getInitializedVersion(_) => { + ::SELECTOR } - Self::getEpochStart(_) => { - ::SELECTOR - } - Self::getTokensForEpoch(_) => { - ::SELECTOR + Self::initialize(_) => { + ::SELECTOR } Self::isAllowed(_) => { ::SELECTOR @@ -5585,21 +5994,21 @@ function updateRequirementModule(address _newModule) external; Self::processTransactionsBulk(_) => { ::SELECTOR } + Self::proxiableUUID(_) => { + ::SELECTOR + } Self::renounceOwnership(_) => { ::SELECTOR } - Self::setEmissionsReceiver(_) => { - ::SELECTOR - } - Self::tokensUsedPerEpoch(_) => { - ::SELECTOR - } Self::transferOwnership(_) => { ::SELECTOR } Self::updateRequirementModule(_) => { ::SELECTOR } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } } } #[inline] @@ -5620,37 +6029,48 @@ function updateRequirementModule(address _newModule) external; &[u8], ) -> alloy_sol_types::Result] = &[ { - fn getEpochStart( + fn _processTransactionsBulk( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::getEpochStart) + .map(SyndicateSequencingChainCalls::_processTransactionsBulk) } - getEpochStart + _processTransactionsBulk }, { - fn tokensUsedPerEpoch( + fn initialize( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::tokensUsedPerEpoch) + .map(SyndicateSequencingChainCalls::initialize) } - tokensUsedPerEpoch + initialize }, { - fn setEmissionsReceiver( + fn SEQUENCING_MODULE_STORAGE_LOCATION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::setEmissionsReceiver) + .map( + SyndicateSequencingChainCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn gasMeter( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainCalls::gasMeter) } - setEmissionsReceiver + gasMeter }, { fn processTransaction( @@ -5664,39 +6084,39 @@ function updateRequirementModule(address _newModule) external; processTransaction }, { - fn disableGasTracking( + fn upgradeToAndCall( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::disableGasTracking) + .map(SyndicateSequencingChainCalls::upgradeToAndCall) } - disableGasTracking + upgradeToAndCall }, { - fn permissionRequirementModule( + fn proxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map( - SyndicateSequencingChainCalls::permissionRequirementModule, - ) + .map(SyndicateSequencingChainCalls::proxiableUUID) } - permissionRequirementModule + proxiableUUID }, { - fn emissionsReceiver( + fn permissionRequirementModule( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::emissionsReceiver) + .map( + SyndicateSequencingChainCalls::permissionRequirementModule, + ) } - emissionsReceiver + permissionRequirementModule }, { fn renounceOwnership( @@ -5709,17 +6129,6 @@ function updateRequirementModule(address _newModule) external; } renounceOwnership }, - { - fn START_TIMESTAMP( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::START_TIMESTAMP) - } - START_TIMESTAMP - }, { fn isAllowed( data: &[u8], @@ -5729,17 +6138,6 @@ function updateRequirementModule(address _newModule) external; } isAllowed }, - { - fn getEmissionsReceiver( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::getEmissionsReceiver) - } - getEmissionsReceiver - }, { fn encodeTransaction( data: &[u8], @@ -5761,26 +6159,41 @@ function updateRequirementModule(address _newModule) external; owner }, { - fn EPOCH_DURATION( + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn UPGRADE_INTERFACE_VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::EPOCH_DURATION) + .map( + SyndicateSequencingChainCalls::UPGRADE_INTERFACE_VERSION, + ) } - EPOCH_DURATION + UPGRADE_INTERFACE_VERSION }, { - fn getCurrentEpoch( + fn getInitializedVersion( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::getCurrentEpoch) + .map(SyndicateSequencingChainCalls::getInitializedVersion) } - getCurrentEpoch + getInitializedVersion }, { fn processTransactionsBulk( @@ -5804,17 +6217,6 @@ function updateRequirementModule(address _newModule) external; } updateRequirementModule }, - { - fn getEpochEnd( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::getEpochEnd) - } - getEpochEnd - }, { fn appchainId( data: &[u8], @@ -5827,26 +6229,15 @@ function updateRequirementModule(address _newModule) external; appchainId }, { - fn enableGasTracking( + fn _processTransaction( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::enableGasTracking) + .map(SyndicateSequencingChainCalls::_processTransaction) } - enableGasTracking - }, - { - fn getTokensForEpoch( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::getTokensForEpoch) - } - getTokensForEpoch + _processTransaction }, { fn maxDataSize( @@ -5871,15 +6262,13 @@ function updateRequirementModule(address _newModule) external; transferOwnership }, { - fn gasTrackingDisabled( + fn VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::gasTrackingDisabled) + ::abi_decode_raw(data) + .map(SyndicateSequencingChainCalls::VERSION) } - gasTrackingDisabled + VERSION }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { @@ -5902,37 +6291,50 @@ function updateRequirementModule(address _newModule) external; &[u8], ) -> alloy_sol_types::Result] = &[ { - fn getEpochStart( + fn _processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainCalls::_processTransactionsBulk) + } + _processTransactionsBulk + }, + { + fn initialize( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::getEpochStart) + .map(SyndicateSequencingChainCalls::initialize) } - getEpochStart + initialize }, { - fn tokensUsedPerEpoch( + fn SEQUENCING_MODULE_STORAGE_LOCATION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::tokensUsedPerEpoch) + .map( + SyndicateSequencingChainCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) } - tokensUsedPerEpoch + SEQUENCING_MODULE_STORAGE_LOCATION }, { - fn setEmissionsReceiver( + fn gasMeter( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::setEmissionsReceiver) + .map(SyndicateSequencingChainCalls::gasMeter) } - setEmissionsReceiver + gasMeter }, { fn processTransaction( @@ -5946,39 +6348,39 @@ function updateRequirementModule(address _newModule) external; processTransaction }, { - fn disableGasTracking( + fn upgradeToAndCall( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::disableGasTracking) + .map(SyndicateSequencingChainCalls::upgradeToAndCall) } - disableGasTracking + upgradeToAndCall }, { - fn permissionRequirementModule( + fn proxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map( - SyndicateSequencingChainCalls::permissionRequirementModule, - ) + .map(SyndicateSequencingChainCalls::proxiableUUID) } - permissionRequirementModule + proxiableUUID }, { - fn emissionsReceiver( + fn permissionRequirementModule( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::emissionsReceiver) + .map( + SyndicateSequencingChainCalls::permissionRequirementModule, + ) } - emissionsReceiver + permissionRequirementModule }, { fn renounceOwnership( @@ -5991,17 +6393,6 @@ function updateRequirementModule(address _newModule) external; } renounceOwnership }, - { - fn START_TIMESTAMP( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::START_TIMESTAMP) - } - START_TIMESTAMP - }, { fn isAllowed( data: &[u8], @@ -6013,17 +6404,6 @@ function updateRequirementModule(address _newModule) external; } isAllowed }, - { - fn getEmissionsReceiver( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::getEmissionsReceiver) - } - getEmissionsReceiver - }, { fn encodeTransaction( data: &[u8], @@ -6047,26 +6427,41 @@ function updateRequirementModule(address _newModule) external; owner }, { - fn EPOCH_DURATION( + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn UPGRADE_INTERFACE_VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::EPOCH_DURATION) + .map( + SyndicateSequencingChainCalls::UPGRADE_INTERFACE_VERSION, + ) } - EPOCH_DURATION + UPGRADE_INTERFACE_VERSION }, { - fn getCurrentEpoch( + fn getInitializedVersion( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::getCurrentEpoch) + .map(SyndicateSequencingChainCalls::getInitializedVersion) } - getCurrentEpoch + getInitializedVersion }, { fn processTransactionsBulk( @@ -6090,17 +6485,6 @@ function updateRequirementModule(address _newModule) external; } updateRequirementModule }, - { - fn getEpochEnd( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::getEpochEnd) - } - getEpochEnd - }, { fn appchainId( data: &[u8], @@ -6113,26 +6497,15 @@ function updateRequirementModule(address _newModule) external; appchainId }, { - fn enableGasTracking( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::enableGasTracking) - } - enableGasTracking - }, - { - fn getTokensForEpoch( + fn _processTransaction( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::getTokensForEpoch) + .map(SyndicateSequencingChainCalls::_processTransaction) } - getTokensForEpoch + _processTransaction }, { fn maxDataSize( @@ -6157,15 +6530,15 @@ function updateRequirementModule(address _newModule) external; transferOwnership }, { - fn gasTrackingDisabled( + fn VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::gasTrackingDisabled) + .map(SyndicateSequencingChainCalls::VERSION) } - gasTrackingDisabled + VERSION }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { @@ -6181,68 +6554,52 @@ function updateRequirementModule(address _newModule) external; #[inline] fn abi_encoded_size(&self) -> usize { match self { - Self::EPOCH_DURATION(inner) => { - ::abi_encoded_size( - inner, - ) - } - Self::START_TIMESTAMP(inner) => { - ::abi_encoded_size( + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( inner, ) } - Self::appchainId(inner) => { - ::abi_encoded_size(inner) - } - Self::disableGasTracking(inner) => { - ::abi_encoded_size( + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( inner, ) } - Self::emissionsReceiver(inner) => { - ::abi_encoded_size( + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( inner, ) } - Self::enableGasTracking(inner) => { - ::abi_encoded_size( - inner, - ) + Self::VERSION(inner) => { + ::abi_encoded_size(inner) } - Self::encodeTransaction(inner) => { - ::abi_encoded_size( + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encoded_size( inner, ) } - Self::gasTrackingDisabled(inner) => { - ::abi_encoded_size( + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encoded_size( inner, ) } - Self::getCurrentEpoch(inner) => { - ::abi_encoded_size( - inner, - ) + Self::appchainId(inner) => { + ::abi_encoded_size(inner) } - Self::getEmissionsReceiver(inner) => { - ::abi_encoded_size( + Self::encodeTransaction(inner) => { + ::abi_encoded_size( inner, ) } - Self::getEpochEnd(inner) => { - ::abi_encoded_size( - inner, - ) + Self::gasMeter(inner) => { + ::abi_encoded_size(inner) } - Self::getEpochStart(inner) => { - ::abi_encoded_size( + Self::getInitializedVersion(inner) => { + ::abi_encoded_size( inner, ) } - Self::getTokensForEpoch(inner) => { - ::abi_encoded_size( - inner, - ) + Self::initialize(inner) => { + ::abi_encoded_size(inner) } Self::isAllowed(inner) => { ::abi_encoded_size(inner) @@ -6265,23 +6622,18 @@ function updateRequirementModule(address _newModule) external; inner, ) } - Self::processTransactionsBulk(inner) => { - ::abi_encoded_size( - inner, - ) - } - Self::renounceOwnership(inner) => { - ::abi_encoded_size( + Self::processTransactionsBulk(inner) => { + ::abi_encoded_size( inner, ) } - Self::setEmissionsReceiver(inner) => { - ::abi_encoded_size( + Self::proxiableUUID(inner) => { + ::abi_encoded_size( inner, ) } - Self::tokensUsedPerEpoch(inner) => { - ::abi_encoded_size( + Self::renounceOwnership(inner) => { + ::abi_encoded_size( inner, ) } @@ -6295,43 +6647,51 @@ function updateRequirementModule(address _newModule) external; inner, ) } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } } } #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { - Self::EPOCH_DURATION(inner) => { - ::abi_encode_raw( + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::START_TIMESTAMP(inner) => { - ::abi_encode_raw( + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::appchainId(inner) => { - ::abi_encode_raw( + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::disableGasTracking(inner) => { - ::abi_encode_raw( + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encode_raw( inner, out, ) } - Self::emissionsReceiver(inner) => { - ::abi_encode_raw( + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encode_raw( inner, out, ) } - Self::enableGasTracking(inner) => { - ::abi_encode_raw( + Self::appchainId(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6342,38 +6702,20 @@ function updateRequirementModule(address _newModule) external; out, ) } - Self::gasTrackingDisabled(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::getCurrentEpoch(inner) => { - ::abi_encode_raw( + Self::gasMeter(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::getEmissionsReceiver(inner) => { - ::abi_encode_raw( + Self::getInitializedVersion(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::getEpochEnd(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::getEpochStart(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::getTokensForEpoch(inner) => { - ::abi_encode_raw( + Self::initialize(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6411,20 +6753,14 @@ function updateRequirementModule(address _newModule) external; out, ) } - Self::renounceOwnership(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::setEmissionsReceiver(inner) => { - ::abi_encode_raw( + Self::proxiableUUID(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::tokensUsedPerEpoch(inner) => { - ::abi_encode_raw( + Self::renounceOwnership(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6441,6 +6777,12 @@ function updateRequirementModule(address _newModule) external; out, ) } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } } } } @@ -6449,22 +6791,36 @@ function updateRequirementModule(address _newModule) external; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Debug, PartialEq, Eq, Hash)] pub enum SyndicateSequencingChainErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), #[allow(missing_docs)] DataTooLarge(DataTooLarge), #[allow(missing_docs)] - GasTrackingAlreadyDisabled(GasTrackingAlreadyDisabled), + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), #[allow(missing_docs)] - GasTrackingAlreadyEnabled(GasTrackingAlreadyEnabled), + FailedCall(FailedCall), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), #[allow(missing_docs)] NoTxData(NoTxData), #[allow(missing_docs)] + NotGasMeterContract(NotGasMeterContract), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] OwnableInvalidOwner(OwnableInvalidOwner), #[allow(missing_docs)] OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), #[allow(missing_docs)] TransactionOrSenderNotAllowed(TransactionOrSenderNotAllowed), #[allow(missing_docs)] - ZeroEpochIndex(ZeroEpochIndex), + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroAddress(ZeroAddress), } impl SyndicateSequencingChainErrors { /// All the selectors of this enum. @@ -6477,33 +6833,54 @@ function updateRequirementModule(address _newModule) external; [17u8, 140u8, 218u8, 167u8], [30u8, 79u8, 189u8, 247u8], [70u8, 52u8, 105u8, 27u8], - [118u8, 121u8, 64u8, 13u8], - [205u8, 96u8, 195u8, 202u8], - [214u8, 147u8, 104u8, 212u8], + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [217u8, 46u8, 35u8, 61u8], + [218u8, 249u8, 134u8, 28u8], [220u8, 55u8, 245u8, 29u8], [220u8, 116u8, 20u8, 88u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], ]; /// The names of the variants in the same order as `SELECTORS`. pub const VARIANT_NAMES: &'static [&'static str] = &[ ::core::stringify!(OwnableUnauthorizedAccount), ::core::stringify!(OwnableInvalidOwner), ::core::stringify!(DataTooLarge), - ::core::stringify!(GasTrackingAlreadyEnabled), - ::core::stringify!(GasTrackingAlreadyDisabled), - ::core::stringify!(ZeroEpochIndex), + ::core::stringify!(ERC1967InvalidImplementation), + ::core::stringify!(AddressEmptyCode), + ::core::stringify!(UUPSUnsupportedProxiableUUID), + ::core::stringify!(ERC1967NonPayable), + ::core::stringify!(FailedCall), + ::core::stringify!(NotInitializing), + ::core::stringify!(ZeroAddress), + ::core::stringify!(NotGasMeterContract), ::core::stringify!(NoTxData), ::core::stringify!(TransactionOrSenderNotAllowed), + ::core::stringify!(UUPSUnauthorizedCallContext), + ::core::stringify!(InvalidInitialization), ]; /// The signatures in the same order as `SELECTORS`. pub const SIGNATURES: &'static [&'static str] = &[ ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, - ::SIGNATURE, - ::SIGNATURE, - ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, ]; /// Returns the signature for the given selector, if known. #[inline] @@ -6530,20 +6907,35 @@ function updateRequirementModule(address _newModule) external; impl alloy_sol_types::SolInterface for SyndicateSequencingChainErrors { const NAME: &'static str = "SyndicateSequencingChainErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 8usize; + const COUNT: usize = 15usize; #[inline] fn selector(&self) -> [u8; 4] { match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } Self::DataTooLarge(_) => { ::SELECTOR } - Self::GasTrackingAlreadyDisabled(_) => { - ::SELECTOR + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR } - Self::GasTrackingAlreadyEnabled(_) => { - ::SELECTOR + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR } Self::NoTxData(_) => ::SELECTOR, + Self::NotGasMeterContract(_) => { + ::SELECTOR + } + Self::NotInitializing(_) => { + ::SELECTOR + } Self::OwnableInvalidOwner(_) => { ::SELECTOR } @@ -6553,8 +6945,14 @@ function updateRequirementModule(address _newModule) external; Self::TransactionOrSenderNotAllowed(_) => { ::SELECTOR } - Self::ZeroEpochIndex(_) => { - ::SELECTOR + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroAddress(_) => { + ::SELECTOR } } } @@ -6609,41 +7007,92 @@ function updateRequirementModule(address _newModule) external; DataTooLarge }, { - fn GasTrackingAlreadyEnabled( + fn ERC1967InvalidImplementation( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyEnabled, + SyndicateSequencingChainErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, ) + .map(SyndicateSequencingChainErrors::AddressEmptyCode) } - GasTrackingAlreadyEnabled + AddressEmptyCode }, { - fn GasTrackingAlreadyDisabled( + fn UUPSUnsupportedProxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyDisabled, + SyndicateSequencingChainErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, ) + .map(SyndicateSequencingChainErrors::ERC1967NonPayable) } - GasTrackingAlreadyDisabled + ERC1967NonPayable }, { - fn ZeroEpochIndex( + fn FailedCall( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw(data) + .map(SyndicateSequencingChainErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainErrors::NotInitializing) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainErrors::ZeroAddress) + } + ZeroAddress + }, + { + fn NotGasMeterContract( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainErrors::ZeroEpochIndex) + .map(SyndicateSequencingChainErrors::NotGasMeterContract) } - ZeroEpochIndex + NotGasMeterContract }, { fn NoTxData( @@ -6667,6 +7116,30 @@ function updateRequirementModule(address _newModule) external; } TransactionOrSenderNotAllowed }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainErrors::InvalidInitialization) + } + InvalidInitialization + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -6723,41 +7196,96 @@ function updateRequirementModule(address _newModule) external; DataTooLarge }, { - fn GasTrackingAlreadyEnabled( + fn ERC1967InvalidImplementation( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyEnabled, + SyndicateSequencingChainErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, ) + .map(SyndicateSequencingChainErrors::AddressEmptyCode) } - GasTrackingAlreadyEnabled + AddressEmptyCode }, { - fn GasTrackingAlreadyDisabled( + fn UUPSUnsupportedProxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyDisabled, + SyndicateSequencingChainErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::NotInitializing) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, ) + .map(SyndicateSequencingChainErrors::ZeroAddress) } - GasTrackingAlreadyDisabled + ZeroAddress }, { - fn ZeroEpochIndex( + fn NotGasMeterContract( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainErrors::ZeroEpochIndex) + .map(SyndicateSequencingChainErrors::NotGasMeterContract) } - ZeroEpochIndex + NotGasMeterContract }, { fn NoTxData( @@ -6783,6 +7311,30 @@ function updateRequirementModule(address _newModule) external; } TransactionOrSenderNotAllowed }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::InvalidInitialization) + } + InvalidInitialization + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -6797,22 +7349,45 @@ function updateRequirementModule(address _newModule) external; #[inline] fn abi_encoded_size(&self) -> usize { match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::DataTooLarge(inner) => { ::abi_encoded_size(inner) } - Self::GasTrackingAlreadyDisabled(inner) => { - ::abi_encoded_size( + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( inner, ) } - Self::GasTrackingAlreadyEnabled(inner) => { - ::abi_encoded_size( + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( inner, ) } Self::NoTxData(inner) => { ::abi_encoded_size(inner) } + Self::NotGasMeterContract(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::OwnableInvalidOwner(inner) => { ::abi_encoded_size( inner, @@ -6828,30 +7403,53 @@ function updateRequirementModule(address _newModule) external; inner, ) } - Self::ZeroEpochIndex(inner) => { - ::abi_encoded_size( + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( inner, ) } + Self::ZeroAddress(inner) => { + ::abi_encoded_size(inner) + } } } #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::DataTooLarge(inner) => { ::abi_encode_raw( inner, out, ) } - Self::GasTrackingAlreadyDisabled(inner) => { - ::abi_encode_raw( + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::GasTrackingAlreadyEnabled(inner) => { - ::abi_encode_raw( + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6859,6 +7457,18 @@ function updateRequirementModule(address _newModule) external; Self::NoTxData(inner) => { ::abi_encode_raw(inner, out) } + Self::NotGasMeterContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::OwnableInvalidOwner(inner) => { ::abi_encode_raw( inner, @@ -6877,8 +7487,20 @@ function updateRequirementModule(address _newModule) external; out, ) } - Self::ZeroEpochIndex(inner) => { - ::abi_encode_raw( + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroAddress(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6892,13 +7514,15 @@ function updateRequirementModule(address _newModule) external; #[derive(Debug, PartialEq, Eq, Hash)] pub enum SyndicateSequencingChainEvents { #[allow(missing_docs)] - EmissionsReceiverUpdated(EmissionsReceiverUpdated), + Initialized(Initialized), #[allow(missing_docs)] OwnershipTransferred(OwnershipTransferred), #[allow(missing_docs)] RequirementModuleUpdated(RequirementModuleUpdated), #[allow(missing_docs)] TransactionProcessed(TransactionProcessed), + #[allow(missing_docs)] + Upgraded(Upgraded), } impl SyndicateSequencingChainEvents { /// All the selectors of this enum. @@ -6908,11 +7532,6 @@ function updateRequirementModule(address _newModule) external; /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 32usize]] = &[ - [ - 22u8, 174u8, 49u8, 121u8, 97u8, 90u8, 40u8, 21u8, 88u8, 59u8, 101u8, - 102u8, 234u8, 230u8, 247u8, 131u8, 178u8, 84u8, 25u8, 69u8, 44u8, 0u8, - 89u8, 154u8, 238u8, 176u8, 16u8, 136u8, 241u8, 62u8, 202u8, 26u8, - ], [ 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, @@ -6928,20 +7547,32 @@ function updateRequirementModule(address _newModule) external; 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], ]; /// The names of the variants in the same order as `SELECTORS`. pub const VARIANT_NAMES: &'static [&'static str] = &[ - ::core::stringify!(EmissionsReceiverUpdated), ::core::stringify!(RequirementModuleUpdated), ::core::stringify!(TransactionProcessed), ::core::stringify!(OwnershipTransferred), + ::core::stringify!(Upgraded), + ::core::stringify!(Initialized), ]; /// The signatures in the same order as `SELECTORS`. pub const SIGNATURES: &'static [&'static str] = &[ - ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, ]; /// Returns the signature for the given selector, if known. #[inline] @@ -6967,20 +7598,18 @@ function updateRequirementModule(address _newModule) external; #[automatically_derived] impl alloy_sol_types::SolEventInterface for SyndicateSequencingChainEvents { const NAME: &'static str = "SyndicateSequencingChainEvents"; - const COUNT: usize = 4usize; + const COUNT: usize = 5usize; fn decode_raw_log( topics: &[alloy_sol_types::Word], data: &[u8], ) -> alloy_sol_types::Result { match topics.first().copied() { - Some( - ::SIGNATURE_HASH, - ) => { - ::decode_raw_log( + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( topics, data, ) - .map(Self::EmissionsReceiverUpdated) + .map(Self::Initialized) } Some( ::SIGNATURE_HASH, @@ -7009,6 +7638,10 @@ function updateRequirementModule(address _newModule) external; ) .map(Self::TransactionProcessed) } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } _ => { alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { name: ::NAME, @@ -7027,7 +7660,7 @@ function updateRequirementModule(address _newModule) external; impl alloy_sol_types::private::IntoLogData for SyndicateSequencingChainEvents { fn to_log_data(&self) -> alloy_sol_types::private::LogData { match self { - Self::EmissionsReceiverUpdated(inner) => { + Self::Initialized(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } Self::OwnershipTransferred(inner) => { @@ -7039,11 +7672,14 @@ function updateRequirementModule(address _newModule) external; Self::TransactionProcessed(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } } } fn into_log_data(self) -> alloy_sol_types::private::LogData { match self { - Self::EmissionsReceiverUpdated(inner) => { + Self::Initialized(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } Self::OwnershipTransferred(inner) => { @@ -7055,6 +7691,9 @@ function updateRequirementModule(address _newModule) external; Self::TransactionProcessed(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } } } } @@ -7083,11 +7722,11 @@ For more fine-grained control over the deployment process, use [`deploy_builder` N: alloy_contract::private::Network, >( __provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> impl ::core::future::Future< Output = alloy_contract::Result>, > { - SyndicateSequencingChainInstance::::deploy(__provider, _appchainId) + SyndicateSequencingChainInstance::::deploy(__provider, _gasMeter) } /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` and constructor arguments, if any. @@ -7100,9 +7739,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ N: alloy_contract::private::Network, >( __provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> alloy_contract::RawCallBuilder { - SyndicateSequencingChainInstance::::deploy_builder(__provider, _appchainId) + SyndicateSequencingChainInstance::::deploy_builder(__provider, _gasMeter) } /**A [`SyndicateSequencingChain`](self) instance. @@ -7160,9 +7799,9 @@ For more fine-grained control over the deployment process, use [`deploy_builder` #[inline] pub async fn deploy( __provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> alloy_contract::Result> { - let call_builder = Self::deploy_builder(__provider, _appchainId); + let call_builder = Self::deploy_builder(__provider, _gasMeter); let contract_address = call_builder.deploy().await?; Ok(Self::new(contract_address, call_builder.provider)) } @@ -7174,14 +7813,14 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ #[inline] pub fn deploy_builder( __provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> alloy_contract::RawCallBuilder { alloy_contract::RawCallBuilder::new_raw_deploy( __provider, [ &BYTECODE[..], &alloy_sol_types::SolConstructor::abi_encode( - &constructorCall { _appchainId }, + &constructorCall { _gasMeter }, )[..], ] .concat() @@ -7235,41 +7874,67 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, C, N> { alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) } - ///Creates a new call builder for the [`EPOCH_DURATION`] function. - pub fn EPOCH_DURATION( + ///Creates a new call builder for the [`SEQUENCING_MODULE_STORAGE_LOCATION`] function. + pub fn SEQUENCING_MODULE_STORAGE_LOCATION( &self, - ) -> alloy_contract::SolCallBuilder<&P, EPOCH_DURATIONCall, N> { - self.call_builder(&EPOCH_DURATIONCall) - } - ///Creates a new call builder for the [`START_TIMESTAMP`] function. - pub fn START_TIMESTAMP( + ) -> alloy_contract::SolCallBuilder< + &P, + SEQUENCING_MODULE_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SEQUENCING_MODULE_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION`] function. + pub fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( &self, - ) -> alloy_contract::SolCallBuilder<&P, START_TIMESTAMPCall, N> { - self.call_builder(&START_TIMESTAMPCall) - } - ///Creates a new call builder for the [`appchainId`] function. - pub fn appchainId( + ) -> alloy_contract::SolCallBuilder< + &P, + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( &self, - ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { - self.call_builder(&appchainIdCall) + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) } - ///Creates a new call builder for the [`disableGasTracking`] function. - pub fn disableGasTracking( + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } + ///Creates a new call builder for the [`_processTransaction`] function. + pub fn _processTransaction( &self, - ) -> alloy_contract::SolCallBuilder<&P, disableGasTrackingCall, N> { - self.call_builder(&disableGasTrackingCall) + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionCall, N> { + self.call_builder( + &_processTransactionCall { + sequencer, + data, + }, + ) } - ///Creates a new call builder for the [`emissionsReceiver`] function. - pub fn emissionsReceiver( + ///Creates a new call builder for the [`_processTransactionsBulk`] function. + pub fn _processTransactionsBulk( &self, - ) -> alloy_contract::SolCallBuilder<&P, emissionsReceiverCall, N> { - self.call_builder(&emissionsReceiverCall) + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionsBulkCall, N> { + self.call_builder( + &_processTransactionsBulkCall { + sequencer, + data, + }, + ) } - ///Creates a new call builder for the [`enableGasTracking`] function. - pub fn enableGasTracking( + ///Creates a new call builder for the [`appchainId`] function. + pub fn appchainId( &self, - ) -> alloy_contract::SolCallBuilder<&P, enableGasTrackingCall, N> { - self.call_builder(&enableGasTrackingCall) + ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { + self.call_builder(&appchainIdCall) } ///Creates a new call builder for the [`encodeTransaction`] function. pub fn encodeTransaction( @@ -7278,46 +7943,28 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, encodeTransactionCall, N> { self.call_builder(&encodeTransactionCall { data }) } - ///Creates a new call builder for the [`gasTrackingDisabled`] function. - pub fn gasTrackingDisabled( - &self, - ) -> alloy_contract::SolCallBuilder<&P, gasTrackingDisabledCall, N> { - self.call_builder(&gasTrackingDisabledCall) - } - ///Creates a new call builder for the [`getCurrentEpoch`] function. - pub fn getCurrentEpoch( - &self, - ) -> alloy_contract::SolCallBuilder<&P, getCurrentEpochCall, N> { - self.call_builder(&getCurrentEpochCall) - } - ///Creates a new call builder for the [`getEmissionsReceiver`] function. - pub fn getEmissionsReceiver( - &self, - ) -> alloy_contract::SolCallBuilder<&P, getEmissionsReceiverCall, N> { - self.call_builder(&getEmissionsReceiverCall) - } - ///Creates a new call builder for the [`getEpochEnd`] function. - pub fn getEpochEnd( - &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, getEpochEndCall, N> { - self.call_builder(&getEpochEndCall { epochIndex }) + ///Creates a new call builder for the [`gasMeter`] function. + pub fn gasMeter(&self) -> alloy_contract::SolCallBuilder<&P, gasMeterCall, N> { + self.call_builder(&gasMeterCall) } - ///Creates a new call builder for the [`getEpochStart`] function. - pub fn getEpochStart( + ///Creates a new call builder for the [`getInitializedVersion`] function. + pub fn getInitializedVersion( &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, getEpochStartCall, N> { - self.call_builder(&getEpochStartCall { epochIndex }) + ) -> alloy_contract::SolCallBuilder<&P, getInitializedVersionCall, N> { + self.call_builder(&getInitializedVersionCall) } - ///Creates a new call builder for the [`getTokensForEpoch`] function. - pub fn getTokensForEpoch( + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, getTokensForEpochCall, N> { + admin: alloy::sol_types::private::Address, + _permissionRequirementModule: alloy::sol_types::private::Address, + _appchainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { self.call_builder( - &getTokensForEpochCall { - epochIndex, + &initializeCall { + admin, + _permissionRequirementModule, + _appchainId, }, ) } @@ -7370,34 +8017,18 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } ///Creates a new call builder for the [`renounceOwnership`] function. pub fn renounceOwnership( &self, ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { self.call_builder(&renounceOwnershipCall) } - ///Creates a new call builder for the [`setEmissionsReceiver`] function. - pub fn setEmissionsReceiver( - &self, - _emissionsReceiver: alloy::sol_types::private::Address, - ) -> alloy_contract::SolCallBuilder<&P, setEmissionsReceiverCall, N> { - self.call_builder( - &setEmissionsReceiverCall { - _emissionsReceiver, - }, - ) - } - ///Creates a new call builder for the [`tokensUsedPerEpoch`] function. - pub fn tokensUsedPerEpoch( - &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, tokensUsedPerEpochCall, N> { - self.call_builder( - &tokensUsedPerEpochCall { - epochIndex, - }, - ) - } ///Creates a new call builder for the [`transferOwnership`] function. pub fn transferOwnership( &self, @@ -7416,6 +8047,19 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } } /// Event filters. impl< @@ -7431,11 +8075,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::Event<&P, E, N> { alloy_contract::Event::new_sol(&self.provider, &self.address) } - ///Creates a new event filter for the [`EmissionsReceiverUpdated`] event. - pub fn EmissionsReceiverUpdated_filter( - &self, - ) -> alloy_contract::Event<&P, EmissionsReceiverUpdated, N> { - self.event_filter::() + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() } ///Creates a new event filter for the [`OwnershipTransferred`] event. pub fn OwnershipTransferred_filter( @@ -7455,5 +8097,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::Event<&P, TransactionProcessed, N> { self.event_filter::() } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } } } diff --git a/shared/contract-bindings/src/synd/syndicate_sequencing_chain_testing_upgradeability.rs b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_testing_upgradeability.rs new file mode 100644 index 000000000..384503534 --- /dev/null +++ b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_testing_upgradeability.rs @@ -0,0 +1,13381 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface SyndicateSequencingChainTestingUpgradeability { + error AddressEmptyCode(address target); + error DataTooLarge(uint256 dataLength, uint256 maxDataLength); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error GasTrackingAlreadyDisabled(); + error GasTrackingAlreadyEnabled(); + error InvalidInitialization(); + error NoTxData(); + error NotInitializing(); + error OwnableInvalidOwner(address owner); + error OwnableUnauthorizedAccount(address account); + error TransactionOrSenderNotAllowed(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroEpochIndex(); + + event BatchProcessingToggled(bool enabled); + event Initialized(uint64 version); + event MaxGasPerTransactionUpdated(uint256 newMax); + event MaxTransactionsPerBatchUpdated(uint256 newMax); + event MinTimeBetweenTxsUpdated(uint256 newMin); + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + event ReplayProtectionToggled(bool enabled); + event RequirementModuleUpdated(address indexed newModule); + event TransactionProcessed(address indexed sender, bytes data); + event Upgraded(address indexed implementation); + + function EPOCH_DURATION() external view returns (uint256); + function GAS_COUNTER_STORAGE_LOCATION() external view returns (bytes32); + function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); + function START_TIMESTAMP() external view returns (uint256); + function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function appchainId() external view returns (uint256); + function batchProcessingEnabled() external view returns (bool); + function disableGasTracking() external; + function enableGasTracking() external; + function encodeTransaction(bytes memory data) external pure returns (bytes memory); + function gasTrackingEnabled() external view returns (bool); + function getCurrentEpoch() external view returns (uint256); + function getEpochEnd(uint256 epochIndex) external pure returns (uint256); + function getEpochStart(uint256 epochIndex) external pure returns (uint256); + function getTokensForEpoch(uint256 epoch) external view returns (uint256); + function initialize(address admin, address, address _permissionRequirementModule, address, uint256 _appchainId) external; + function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); + function lastPermissionUpdate() external view returns (uint256); + function lastTransactionTime(address) external view returns (uint256); + function maxDataSize() external view returns (uint256); + function maxGasPerTransaction() external view returns (uint256); + function maxTransactionsPerBatch() external view returns (uint256); + function minTimeBetweenTxs() external view returns (uint256); + function owner() external view returns (address); + function permissionRequirementModule() external view returns (address); + function processTransaction(bytes memory data) external; + function processTransactionsBulk(bytes[] memory data) external; + function proxiableUUID() external view returns (bytes32); + function renounceOwnership() external; + function replayProtectionEnabled() external view returns (bool); + function setMaxGasPerTransaction(uint256 _maxGas) external; + function setMaxTransactionsPerBatch(uint256 _max) external; + function setMinTimeBetweenTxs(uint256 _minTime) external; + function toggleBatchProcessing() external; + function toggleReplayProtection() external; + function tokensUsedPerEpoch(uint256 epoch) external view returns (uint256); + function transferOwnership(address newOwner) external; + function updateRequirementModule(address _newModule) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; + function version() external view returns (uint256); +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "EPOCH_DURATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "GAS_COUNTER_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SEQUENCING_MODULE_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "START_TIMESTAMP", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "appchainId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "batchProcessingEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "disableGasTracking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "enableGasTracking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "encodeTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "gasTrackingEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurrentEpoch", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getEpochEnd", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getEpochStart", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getTokensForEpoch", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "admin", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "_permissionRequirementModule", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "_appchainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAllowed", + "inputs": [ + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "originator", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "lastPermissionUpdate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "lastTransactionTime", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxDataSize", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxGasPerTransaction", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxTransactionsPerBatch", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minTimeBetweenTxs", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permissionRequirementModule", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPermissionModule" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "processTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "processTransactionsBulk", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "replayProtectionEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setMaxGasPerTransaction", + "inputs": [ + { + "name": "_maxGas", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setMaxTransactionsPerBatch", + "inputs": [ + { + "name": "_max", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setMinTimeBetweenTxs", + "inputs": [ + { + "name": "_minTime", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "toggleBatchProcessing", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "toggleReplayProtection", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tokensUsedPerEpoch", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateRequirementModule", + "inputs": [ + { + "name": "_newModule", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BatchProcessingToggled", + "inputs": [ + { + "name": "enabled", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxGasPerTransactionUpdated", + "inputs": [ + { + "name": "newMax", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxTransactionsPerBatchUpdated", + "inputs": [ + { + "name": "newMax", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MinTimeBetweenTxsUpdated", + "inputs": [ + { + "name": "newMin", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReplayProtectionToggled", + "inputs": [ + { + "name": "enabled", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RequirementModuleUpdated", + "inputs": [ + { + "name": "newModule", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TransactionProcessed", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "DataTooLarge", + "inputs": [ + { + "name": "dataLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxDataLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + }, + { + "type": "error", + "name": "GasTrackingAlreadyDisabled", + "inputs": [] + }, + { + "type": "error", + "name": "GasTrackingAlreadyEnabled", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NoTxData", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TransactionOrSenderNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroEpochIndex", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod SyndicateSequencingChainTestingUpgradeability { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60a080604052346029573060805261219e908161002e823960805181818161128f01526113520152f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14611983575080630c6723631461065957806317cb741f146118d35780631a8b91e8146118b15780632407f0b6146118775780632bff3d4c146117995780633b8308891461175d57806346e2cc091461160f5780634f1ef2861461130757806352d1902d146112685780635467cb48146111d557806354fd4d5014611199578063598c8be6146110c95780635b3cd6e214611077578063715018a614610fbb578063781cd99d14610f9d5780637a3979dc14610f4457806384fab62b14610f035780638507492514610ed45780638da5cb5b14610e825780638e6ae22914610e365780638e99f92914610e1a57806395c5bf7514610de05780639a6c01bf14610d85578063a70b9f0c14610d68578063ad3cb1cc14610d05578063b747b70b14610ce8578063b97dd9e214610c92578063b9f7f26014610c58578063ca600aa814610c1c578063cdafb9781461085a578063d4f0eb4d14610772578063d5176d23146106fe578063d8781342146106c2578063de1f453e146106a2578063e039616614610659578063e057fd0814610618578063e75b2073146105d3578063e8eb1dc3146105b6578063f2fde38b146105905763f7013ef6146101df575f80fd5b3461058c5760a060031936011261058c576101f8611a70565b610200611a93565b5060443573ffffffffffffffffffffffffffffffffffffffff811680910361058c5761022a611ab6565b507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081610584575b600114908161057a575b159081610571575b5061054957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006102f19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556104f4575b506102dc6120ae565b6102e46120ae565b6102ec6120ae565b611ed3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005560647f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155600160ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5025416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50255427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503556103f26120ae565b6084357fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40055620f42407fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4015561044561202c565b620f42405f55600160ff19815416176001555f60025561046157005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6102d3565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61027c565b303b159150610274565b85915061026a565b5f80fd5b3461058c57602060031936011261058c576105b46105ac611a70565b6102ec611fc0565b005b3461058c575f60031936011261058c57602060405162030d408152f35b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff610601611a70565b165f526003602052602060405f2054604051908152f35b3461058c575f60031936011261058c57602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152f35b3461058c57602060031936011261058c576004355f527f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b14801602052602060405f2054604051908152f35b3461058c575f60031936011261058c576106ba611fc0565b6105b461202c565b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b3461058c57602060031936011261058c5760043562278d0081029080820462278d0014901517156107455763688d46f0018063688d46f01161074557602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff6107a0611a70565b6107a8611fc0565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b3461058c57602060031936011261058c5760043567ffffffffffffffff811161058c573660238201121561058c5780600401359067ffffffffffffffff821161058c5760248101908260051b90366024838301011161058c5760ff6001541680610c11575b610bda575b90604051918460408401602080860152526060808401928401019184915f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd82360301915b888210610b6257888861094e89610947818b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611ad9565b3233611cee565b15610b3a5760ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502541615610adc578115610a7e577f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d501548211610a20575f5b8281106109b657005b806109c46001928585611e46565b90506109d1575b016109ad565b610a187f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f610a00838787611e46565b92906040519182916020835233956020840191611cb0565b0390a26109cb565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f546f6f206d616e79207472616e73616374696f6e7320696e20626174636800006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e6f207472616e73616374696f6e732070726f766964656400000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f42617463682070726f63657373696e672069732064697361626c6564000000006044820152fd5b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087820301855285358481121561058c578201906044602483013592019167ffffffffffffffff811161058c57803603831361058c57610bcd6020928392600195611cb0565b9701950193920190610909565b335f526003602052610bfe610bf660405f205460025490611c18565b421015611c25565b335f5260036020524260405f20556108c4565b5060025415156108bf565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50154604051908152f35b3461058c575f60031936011261058c5760206040517f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148008152f35b3461058c575f60031936011261058c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116107455762278d0090046001810180911161074557602090604051908152f35b3461058c575f60031936011261058c576020600254604051908152f35b3461058c575f60031936011261058c57610d64604051610d26604082611ad9565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611bd5565b0390f35b3461058c575f60031936011261058c57602060405162278d008152f35b3461058c575f60031936011261058c57610d9d611fc0565b7f359ed1295f5093274b6ca6a37945b86cac4f0e2def43afd3a2c8a1290923f242602060ff1960015460ff808216151691829116176001556040519015158152a1005b3461058c575f60031936011261058c5760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b3461058c575f60031936011261058c5760205f54604051908152f35b3461058c57602060031936011261058c577f388cac5665b362f381dd96c7c6cde0499ff225b776c3bd646b1fe04ebfd903a56020600435610e75611fc0565b80600255604051908152a1005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461058c57610d64610eef610ee836611a1f565b3691611b81565b604051918291602083526020830190611bd5565b3461058c575f60031936011261058c57602060ff7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054166040519015158152f35b3461058c57606060031936011261058c57610f5d611a70565b610f65611a93565b906044359067ffffffffffffffff821161058c57602092610f8d610f93933690600401611bb7565b91611cee565b6040519015158152f35b3461058c575f60031936011261058c57602060405163688d46f08152f35b3461058c575f60031936011261058c57610fd3611fc0565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b3461058c57602060031936011261058c576004356110e5611fc0565b801561113b576020817ff01ac6cf9d7e78a809ecb6d0a29ea0813dd23067a630105fceb96df27e923fe1927f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d6178206d7573742062652067726561746572207468616e20300000000000006044820152fd5b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40154604051908152f35b3461058c575f60031936011261058c576111ed611fc0565b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148005460ff8116156112405760ff19167f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461058c575f60031936011261058c5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036112df5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b604060031936011261058c5761131b611a70565b60243567ffffffffffffffff811161058c5761133b903690600401611bb7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156115cd575b506112df5761138a611fc0565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181611599575b5061140a57837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc85920361156e5750813b1561154357807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611512575f808360206105b495519101845af43d1561150a573d916114ee83611b47565b926114fc6040519485611ad9565b83523d5f602085013e612105565b606091612105565b50503461151b57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116115c5575b816115b560209383611ad9565b8101031261058c575190856113d9565b3d91506115a8565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614158361137d565b3461058c5761161d36611a1f565b9061162c610947368484611b81565b15610b3a5760ff6001541680611752575b611723575b81156116fb575f5480611691575b5061168c7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916040519182916020835233956020840191611cb0565b0390a2005b5a1161169d5782611650565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5472616e73616374696f6e206578636565647320676173206c696d69740000006044820152fd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600360205261173f610bf660405f205460025490611c18565b335f5260036020524260405f2055611642565b50600254151561163d565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50354604051908152f35b3461058c575f60031936011261058c576117b1611fc0565b60ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254161560ff60ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254169116177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502557fce2dc796d081c9c190146a304ec3b75ad6ace03c37c87c8d8f88c8b15dd8184c602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152a1005b3461058c575f60031936011261058c5760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b3461058c575f60031936011261058c57602060ff600154166040519015158152f35b3461058c57602060031936011261058c576004356118ef611fc0565b8015611925576020817f75fb1dcaa01cb4ae892a3f40a33cbbb2473f434a8319c52d2d185fe13caa135d925f55604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d617820676173206d7573742062652067726561746572207468616e203000006044820152fd5b3461058c57602060031936011261058c5760043580156119f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116107455762278d0081029080820462278d0014901517156107455763688d46f001908163688d46f011610745576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b90602060031983011261058c5760043567ffffffffffffffff811161058c578260238201121561058c5780600401359267ffffffffffffffff841161058c576024848301011161058c576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611b1a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611b1a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192611b8d82611b47565b91611b9b6040519384611ad9565b82948184528183011161058c578281602093845f960137010152565b9080601f8301121561058c57816020611bd293359101611b81565b90565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9190820180921161074557565b15611c2c57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e73616374696f6e20746f6f20736f6f6e20616674657220707265766960448201527f6f757300000000000000000000000000000000000000000000000000000000006064820152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b9190815162030d408111611e14575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611d49575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611db28692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190611bd5565b03915afa908115611e09575f91611dce575b50805f8080611d41565b90506020813d602011611e01575b81611de960209383611ad9565b8101031261058c5751801515810361058c575f611dc4565b3d9150611ddc565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b9190811015611ea65760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561058c57019081359167ffffffffffffffff831161058c57602001823603811361058c579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff168015611f945773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361200057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054600160ff82161515146120865760ff19166001177f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055565b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156120dd57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90612142575080511561211a57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612195575b612153575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561214b56 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\xA0\x80`@R4`)W0`\x80Ra!\x9E\x90\x81a\0.\x829`\x80Q\x81\x81\x81a\x12\x8F\x01Ra\x13R\x01R\xF3[_\x80\xFD\xFE`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\x19\x83WP\x80c\x0Cg#c\x14a\x06YW\x80c\x17\xCBt\x1F\x14a\x18\xD3W\x80c\x1A\x8B\x91\xE8\x14a\x18\xB1W\x80c$\x07\xF0\xB6\x14a\x18wW\x80c+\xFF=L\x14a\x17\x99W\x80c;\x83\x08\x89\x14a\x17]W\x80cF\xE2\xCC\t\x14a\x16\x0FW\x80cO\x1E\xF2\x86\x14a\x13\x07W\x80cR\xD1\x90-\x14a\x12hW\x80cTg\xCBH\x14a\x11\xD5W\x80cT\xFDMP\x14a\x11\x99W\x80cY\x8C\x8B\xE6\x14a\x10\xC9W\x80c[<\xD6\xE2\x14a\x10wW\x80cqP\x18\xA6\x14a\x0F\xBBW\x80cx\x1C\xD9\x9D\x14a\x0F\x9DW\x80cz9y\xDC\x14a\x0FDW\x80c\x84\xFA\xB6+\x14a\x0F\x03W\x80c\x85\x07I%\x14a\x0E\xD4W\x80c\x8D\xA5\xCB[\x14a\x0E\x82W\x80c\x8Ej\xE2)\x14a\x0E6W\x80c\x8E\x99\xF9)\x14a\x0E\x1AW\x80c\x95\xC5\xBFu\x14a\r\xE0W\x80c\x9Al\x01\xBF\x14a\r\x85W\x80c\xA7\x0B\x9F\x0C\x14a\rhW\x80c\xAD<\xB1\xCC\x14a\r\x05W\x80c\xB7G\xB7\x0B\x14a\x0C\xE8W\x80c\xB9}\xD9\xE2\x14a\x0C\x92W\x80c\xB9\xF7\xF2`\x14a\x0CXW\x80c\xCA`\n\xA8\x14a\x0C\x1CW\x80c\xCD\xAF\xB9x\x14a\x08ZW\x80c\xD4\xF0\xEBM\x14a\x07rW\x80c\xD5\x17m#\x14a\x06\xFEW\x80c\xD8x\x13B\x14a\x06\xC2W\x80c\xDE\x1FE>\x14a\x06\xA2W\x80c\xE09af\x14a\x06YW\x80c\xE0W\xFD\x08\x14a\x06\x18W\x80c\xE7[ s\x14a\x05\xD3W\x80c\xE8\xEB\x1D\xC3\x14a\x05\xB6W\x80c\xF2\xFD\xE3\x8B\x14a\x05\x90Wc\xF7\x01>\xF6\x14a\x01\xDFW_\x80\xFD[4a\x05\x8CW`\xA0`\x03\x196\x01\x12a\x05\x8CWa\x01\xF8a\x1ApV[a\x02\0a\x1A\x93V[P`D5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x05\x8CWa\x02*a\x1A\xB6V[P\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\xFF\x81`@\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x15\x90\x81a\x05\x84W[`\x01\x14\x90\x81a\x05zW[\x15\x90\x81a\x05qW[Pa\x05IW\x81\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0a\x02\xF1\x95\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x04\xF4W[Pa\x02\xDCa \xAEV[a\x02\xE4a \xAEV[a\x02\xECa \xAEV[a\x1E\xD3V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U`d\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`\x01`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03Ua\x03\xF2a \xAEV[`\x845\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ub\x0FB@\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01Ua\x04Ea ,V[b\x0FB@_U`\x01`\xFF\x19\x81T\x16\x17`\x01U_`\x02Ua\x04aW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U_a\x02\xD3V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x02|V[0;\x15\x91Pa\x02tV[\x85\x91Pa\x02jV[_\x80\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWa\x05\xB4a\x05\xACa\x1ApV[a\x02\xECa\x1F\xC0V[\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb\x03\r@\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06\x01a\x1ApV[\x16_R`\x03` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045_R\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\x01` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x06\xBAa\x1F\xC0V[a\x05\xB4a ,V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x07EW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x07\xA0a\x1ApV[a\x07\xA8a\x1F\xC0V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW6`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW`$\x81\x01\x90\x82`\x05\x1B\x906`$\x83\x83\x01\x01\x11a\x05\x8CW`\xFF`\x01T\x16\x80a\x0C\x11W[a\x0B\xDAW[\x90`@Q\x91\x84`@\x84\x01` \x80\x86\x01RR``\x80\x84\x01\x92\x84\x01\x01\x91\x84\x91_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBD\x826\x03\x01\x91[\x88\x82\x10a\x0BbW\x88\x88a\tN\x89a\tG\x81\x8B\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x1A\xD9V[23a\x1C\xEEV[\x15a\x0B:W`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15a\n\xDCW\x81\x15a\n~W\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T\x82\x11a\n W_[\x82\x81\x10a\t\xB6W\0[\x80a\t\xC4`\x01\x92\x85\x85a\x1EFV[\x90Pa\t\xD1W[\x01a\t\xADV[a\n\x18\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7Fa\n\0\x83\x87\x87a\x1EFV[\x92\x90`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2a\t\xCBV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FToo many transactions in batch\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FNo transactions provided\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBatch processing is disabled\0\0\0\0`D\x82\x01R\xFD[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x92\x93\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x87\x82\x03\x01\x85R\x855\x84\x81\x12\x15a\x05\x8CW\x82\x01\x90`D`$\x83\x015\x92\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x806\x03\x83\x13a\x05\x8CWa\x0B\xCD` \x92\x83\x92`\x01\x95a\x1C\xB0V[\x97\x01\x95\x01\x93\x92\x01\x90a\t\tV[3_R`\x03` Ra\x0B\xFEa\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[B\x10\x15a\x1C%V[3_R`\x03` RB`@_ Ua\x08\xC4V[P`\x02T\x15\x15a\x08\xBFV[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x07EWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x07EW` \x90`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\x02T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\rd`@Qa\r&`@\x82a\x1A\xD9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[\x03\x90\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb'\x8D\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\r\x9Da\x1F\xC0V[\x7F5\x9E\xD1)_P\x93'Kl\xA6\xA3yE\xB8l\xACO\x0E-\xEFC\xAF\xD3\xA2\xC8\xA1)\t#\xF2B` `\xFF\x19`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` _T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW\x7F8\x8C\xACVe\xB3b\xF3\x81\xDD\x96\xC7\xC6\xCD\xE0I\x9F\xF2%\xB7v\xC3\xBDdk\x1F\xE0N\xBF\xD9\x03\xA5` `\x045a\x0Eua\x1F\xC0V[\x80`\x02U`@Q\x90\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CWa\rda\x0E\xEFa\x0E\xE86a\x1A\x1FV[6\x91a\x1B\x81V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW```\x03\x196\x01\x12a\x05\x8CWa\x0F]a\x1ApV[a\x0Fea\x1A\x93V[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW` \x92a\x0F\x8Da\x0F\x93\x936\x90`\x04\x01a\x1B\xB7V[\x91a\x1C\xEEV[`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qch\x8DF\xF0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x0F\xD3a\x1F\xC0V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x10\xE5a\x1F\xC0V[\x80\x15a\x11;W` \x81\x7F\xF0\x1A\xC6\xCF\x9D~x\xA8\t\xEC\xB6\xD0\xA2\x9E\xA0\x81=\xD20g\xA60\x10_\xCE\xB9m\xF2~\x92?\xE1\x92\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7FMax must be greater than 0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x11\xEDa\x1F\xC0V[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\xFF\x81\x16\x15a\x12@W`\xFF\x19\x16\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x12\xDFW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`@`\x03\x196\x01\x12a\x05\x8CWa\x13\x1Ba\x1ApV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CWa\x13;\x906\x90`\x04\x01a\x1B\xB7V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x15\xCDW[Pa\x12\xDFWa\x13\x8Aa\x1F\xC0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x91`@Q\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` \x81`\x04\x81\x87Z\xFA_\x91\x81a\x15\x99W[Pa\x14\nW\x83\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x80\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x85\x92\x03a\x15nWP\x81;\x15a\x15CW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x81Q\x15a\x15\x12W_\x80\x83` a\x05\xB4\x95Q\x91\x01\x84Z\xF4=\x15a\x15\nW=\x91a\x14\xEE\x83a\x1BGV[\x92a\x14\xFC`@Q\x94\x85a\x1A\xD9V[\x83R=_` \x85\x01>a!\x05V[``\x91a!\x05V[PP4a\x15\x1BW\0[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x90\x91P` \x81=` \x11a\x15\xC5W[\x81a\x15\xB5` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x90\x85a\x13\xD9V[=\x91Pa\x15\xA8V[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15\x83a\x13}V[4a\x05\x8CWa\x16\x1D6a\x1A\x1FV[\x90a\x16,a\tG6\x84\x84a\x1B\x81V[\x15a\x0B:W`\xFF`\x01T\x16\x80a\x17RW[a\x17#W[\x81\x15a\x16\xFBW_T\x80a\x16\x91W[Pa\x16\x8C\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2\0[Z\x11a\x16\x9DW\x82a\x16PV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FTransaction exceeds gas limit\0\0\0`D\x82\x01R\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[3_R`\x03` Ra\x17?a\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[3_R`\x03` RB`@_ Ua\x16BV[P`\x02T\x15\x15a\x16=V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x17\xB1a\x1F\xC0V[`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15`\xFF`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x91\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02U\x7F\xCE-\xC7\x96\xD0\x81\xC9\xC1\x90\x14j0N\xC3\xB7Z\xD6\xAC\xE0<7\xC8|\x8D\x8F\x88\xC8\xB1]\xD8\x18L` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x18\xEFa\x1F\xC0V[\x80\x15a\x19%W` \x81\x7Fu\xFB\x1D\xCA\xA0\x1C\xB4\xAE\x89*?@\xA3<\xBB\xB2G?CJ\x83\x19\xC5--\x18_\xE1<\xAA\x13]\x92_U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FMax gas must be greater than 0\0\0`D\x82\x01R\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045\x80\x15a\x19\xF7W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x07EWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x07EW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90` `\x03\x19\x83\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x82`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x05\x8CW`$\x84\x83\x01\x01\x11a\x05\x8CW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`d5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x1B\x1AW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x1B\x1AW`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x1B\x8D\x82a\x1BGV[\x91a\x1B\x9B`@Q\x93\x84a\x1A\xD9V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x05\x8CW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x05\x8CW\x81` a\x1B\xD2\x935\x91\x01a\x1B\x81V[\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x82\x01\x80\x92\x11a\x07EWV[\x15a\x1C,WV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FTransaction too soon after previ`D\x82\x01R\x7Fous\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1E\x14WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1DIW[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1D\xB2\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x1B\xD5V[\x03\x91Z\xFA\x90\x81\x15a\x1E\tW_\x91a\x1D\xCEW[P\x80_\x80\x80a\x1DAV[\x90P` \x81=` \x11a\x1E\x01W[\x81a\x1D\xE9` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x80\x15\x15\x81\x03a\x05\x8CW_a\x1D\xC4V[=\x91Pa\x1D\xDCV[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[\x91\x90\x81\x10\x15a\x1E\xA6W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x05\x8CW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x8CW` \x01\x826\x03\x81\x13a\x05\x8CW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1F\x94Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a \0WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\x01`\xFF\x82\x16\x15\x15\x14a \x86W`\xFF\x19\x16`\x01\x17\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0UV[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a \xDDWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a!BWP\x80Q\x15a!\x1AW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a!\x95W[a!SWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a!KV", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14611983575080630c6723631461065957806317cb741f146118d35780631a8b91e8146118b15780632407f0b6146118775780632bff3d4c146117995780633b8308891461175d57806346e2cc091461160f5780634f1ef2861461130757806352d1902d146112685780635467cb48146111d557806354fd4d5014611199578063598c8be6146110c95780635b3cd6e214611077578063715018a614610fbb578063781cd99d14610f9d5780637a3979dc14610f4457806384fab62b14610f035780638507492514610ed45780638da5cb5b14610e825780638e6ae22914610e365780638e99f92914610e1a57806395c5bf7514610de05780639a6c01bf14610d85578063a70b9f0c14610d68578063ad3cb1cc14610d05578063b747b70b14610ce8578063b97dd9e214610c92578063b9f7f26014610c58578063ca600aa814610c1c578063cdafb9781461085a578063d4f0eb4d14610772578063d5176d23146106fe578063d8781342146106c2578063de1f453e146106a2578063e039616614610659578063e057fd0814610618578063e75b2073146105d3578063e8eb1dc3146105b6578063f2fde38b146105905763f7013ef6146101df575f80fd5b3461058c5760a060031936011261058c576101f8611a70565b610200611a93565b5060443573ffffffffffffffffffffffffffffffffffffffff811680910361058c5761022a611ab6565b507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081610584575b600114908161057a575b159081610571575b5061054957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006102f19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556104f4575b506102dc6120ae565b6102e46120ae565b6102ec6120ae565b611ed3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005560647f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155600160ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5025416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50255427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503556103f26120ae565b6084357fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40055620f42407fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4015561044561202c565b620f42405f55600160ff19815416176001555f60025561046157005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6102d3565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61027c565b303b159150610274565b85915061026a565b5f80fd5b3461058c57602060031936011261058c576105b46105ac611a70565b6102ec611fc0565b005b3461058c575f60031936011261058c57602060405162030d408152f35b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff610601611a70565b165f526003602052602060405f2054604051908152f35b3461058c575f60031936011261058c57602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152f35b3461058c57602060031936011261058c576004355f527f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b14801602052602060405f2054604051908152f35b3461058c575f60031936011261058c576106ba611fc0565b6105b461202c565b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b3461058c57602060031936011261058c5760043562278d0081029080820462278d0014901517156107455763688d46f0018063688d46f01161074557602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff6107a0611a70565b6107a8611fc0565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b3461058c57602060031936011261058c5760043567ffffffffffffffff811161058c573660238201121561058c5780600401359067ffffffffffffffff821161058c5760248101908260051b90366024838301011161058c5760ff6001541680610c11575b610bda575b90604051918460408401602080860152526060808401928401019184915f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd82360301915b888210610b6257888861094e89610947818b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611ad9565b3233611cee565b15610b3a5760ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502541615610adc578115610a7e577f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d501548211610a20575f5b8281106109b657005b806109c46001928585611e46565b90506109d1575b016109ad565b610a187f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f610a00838787611e46565b92906040519182916020835233956020840191611cb0565b0390a26109cb565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f546f6f206d616e79207472616e73616374696f6e7320696e20626174636800006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e6f207472616e73616374696f6e732070726f766964656400000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f42617463682070726f63657373696e672069732064697361626c6564000000006044820152fd5b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087820301855285358481121561058c578201906044602483013592019167ffffffffffffffff811161058c57803603831361058c57610bcd6020928392600195611cb0565b9701950193920190610909565b335f526003602052610bfe610bf660405f205460025490611c18565b421015611c25565b335f5260036020524260405f20556108c4565b5060025415156108bf565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50154604051908152f35b3461058c575f60031936011261058c5760206040517f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148008152f35b3461058c575f60031936011261058c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116107455762278d0090046001810180911161074557602090604051908152f35b3461058c575f60031936011261058c576020600254604051908152f35b3461058c575f60031936011261058c57610d64604051610d26604082611ad9565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611bd5565b0390f35b3461058c575f60031936011261058c57602060405162278d008152f35b3461058c575f60031936011261058c57610d9d611fc0565b7f359ed1295f5093274b6ca6a37945b86cac4f0e2def43afd3a2c8a1290923f242602060ff1960015460ff808216151691829116176001556040519015158152a1005b3461058c575f60031936011261058c5760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b3461058c575f60031936011261058c5760205f54604051908152f35b3461058c57602060031936011261058c577f388cac5665b362f381dd96c7c6cde0499ff225b776c3bd646b1fe04ebfd903a56020600435610e75611fc0565b80600255604051908152a1005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461058c57610d64610eef610ee836611a1f565b3691611b81565b604051918291602083526020830190611bd5565b3461058c575f60031936011261058c57602060ff7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054166040519015158152f35b3461058c57606060031936011261058c57610f5d611a70565b610f65611a93565b906044359067ffffffffffffffff821161058c57602092610f8d610f93933690600401611bb7565b91611cee565b6040519015158152f35b3461058c575f60031936011261058c57602060405163688d46f08152f35b3461058c575f60031936011261058c57610fd3611fc0565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b3461058c57602060031936011261058c576004356110e5611fc0565b801561113b576020817ff01ac6cf9d7e78a809ecb6d0a29ea0813dd23067a630105fceb96df27e923fe1927f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d6178206d7573742062652067726561746572207468616e20300000000000006044820152fd5b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40154604051908152f35b3461058c575f60031936011261058c576111ed611fc0565b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148005460ff8116156112405760ff19167f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461058c575f60031936011261058c5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036112df5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b604060031936011261058c5761131b611a70565b60243567ffffffffffffffff811161058c5761133b903690600401611bb7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156115cd575b506112df5761138a611fc0565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181611599575b5061140a57837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc85920361156e5750813b1561154357807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611512575f808360206105b495519101845af43d1561150a573d916114ee83611b47565b926114fc6040519485611ad9565b83523d5f602085013e612105565b606091612105565b50503461151b57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116115c5575b816115b560209383611ad9565b8101031261058c575190856113d9565b3d91506115a8565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614158361137d565b3461058c5761161d36611a1f565b9061162c610947368484611b81565b15610b3a5760ff6001541680611752575b611723575b81156116fb575f5480611691575b5061168c7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916040519182916020835233956020840191611cb0565b0390a2005b5a1161169d5782611650565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5472616e73616374696f6e206578636565647320676173206c696d69740000006044820152fd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600360205261173f610bf660405f205460025490611c18565b335f5260036020524260405f2055611642565b50600254151561163d565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50354604051908152f35b3461058c575f60031936011261058c576117b1611fc0565b60ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254161560ff60ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254169116177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502557fce2dc796d081c9c190146a304ec3b75ad6ace03c37c87c8d8f88c8b15dd8184c602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152a1005b3461058c575f60031936011261058c5760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b3461058c575f60031936011261058c57602060ff600154166040519015158152f35b3461058c57602060031936011261058c576004356118ef611fc0565b8015611925576020817f75fb1dcaa01cb4ae892a3f40a33cbbb2473f434a8319c52d2d185fe13caa135d925f55604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d617820676173206d7573742062652067726561746572207468616e203000006044820152fd5b3461058c57602060031936011261058c5760043580156119f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116107455762278d0081029080820462278d0014901517156107455763688d46f001908163688d46f011610745576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b90602060031983011261058c5760043567ffffffffffffffff811161058c578260238201121561058c5780600401359267ffffffffffffffff841161058c576024848301011161058c576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611b1a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611b1a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192611b8d82611b47565b91611b9b6040519384611ad9565b82948184528183011161058c578281602093845f960137010152565b9080601f8301121561058c57816020611bd293359101611b81565b90565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9190820180921161074557565b15611c2c57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e73616374696f6e20746f6f20736f6f6e20616674657220707265766960448201527f6f757300000000000000000000000000000000000000000000000000000000006064820152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b9190815162030d408111611e14575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611d49575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611db28692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190611bd5565b03915afa908115611e09575f91611dce575b50805f8080611d41565b90506020813d602011611e01575b81611de960209383611ad9565b8101031261058c5751801515810361058c575f611dc4565b3d9150611ddc565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b9190811015611ea65760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561058c57019081359167ffffffffffffffff831161058c57602001823603811361058c579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff168015611f945773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361200057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054600160ff82161515146120865760ff19166001177f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055565b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156120dd57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90612142575080511561211a57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612195575b612153575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561214b56 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\x19\x83WP\x80c\x0Cg#c\x14a\x06YW\x80c\x17\xCBt\x1F\x14a\x18\xD3W\x80c\x1A\x8B\x91\xE8\x14a\x18\xB1W\x80c$\x07\xF0\xB6\x14a\x18wW\x80c+\xFF=L\x14a\x17\x99W\x80c;\x83\x08\x89\x14a\x17]W\x80cF\xE2\xCC\t\x14a\x16\x0FW\x80cO\x1E\xF2\x86\x14a\x13\x07W\x80cR\xD1\x90-\x14a\x12hW\x80cTg\xCBH\x14a\x11\xD5W\x80cT\xFDMP\x14a\x11\x99W\x80cY\x8C\x8B\xE6\x14a\x10\xC9W\x80c[<\xD6\xE2\x14a\x10wW\x80cqP\x18\xA6\x14a\x0F\xBBW\x80cx\x1C\xD9\x9D\x14a\x0F\x9DW\x80cz9y\xDC\x14a\x0FDW\x80c\x84\xFA\xB6+\x14a\x0F\x03W\x80c\x85\x07I%\x14a\x0E\xD4W\x80c\x8D\xA5\xCB[\x14a\x0E\x82W\x80c\x8Ej\xE2)\x14a\x0E6W\x80c\x8E\x99\xF9)\x14a\x0E\x1AW\x80c\x95\xC5\xBFu\x14a\r\xE0W\x80c\x9Al\x01\xBF\x14a\r\x85W\x80c\xA7\x0B\x9F\x0C\x14a\rhW\x80c\xAD<\xB1\xCC\x14a\r\x05W\x80c\xB7G\xB7\x0B\x14a\x0C\xE8W\x80c\xB9}\xD9\xE2\x14a\x0C\x92W\x80c\xB9\xF7\xF2`\x14a\x0CXW\x80c\xCA`\n\xA8\x14a\x0C\x1CW\x80c\xCD\xAF\xB9x\x14a\x08ZW\x80c\xD4\xF0\xEBM\x14a\x07rW\x80c\xD5\x17m#\x14a\x06\xFEW\x80c\xD8x\x13B\x14a\x06\xC2W\x80c\xDE\x1FE>\x14a\x06\xA2W\x80c\xE09af\x14a\x06YW\x80c\xE0W\xFD\x08\x14a\x06\x18W\x80c\xE7[ s\x14a\x05\xD3W\x80c\xE8\xEB\x1D\xC3\x14a\x05\xB6W\x80c\xF2\xFD\xE3\x8B\x14a\x05\x90Wc\xF7\x01>\xF6\x14a\x01\xDFW_\x80\xFD[4a\x05\x8CW`\xA0`\x03\x196\x01\x12a\x05\x8CWa\x01\xF8a\x1ApV[a\x02\0a\x1A\x93V[P`D5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x05\x8CWa\x02*a\x1A\xB6V[P\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\xFF\x81`@\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x15\x90\x81a\x05\x84W[`\x01\x14\x90\x81a\x05zW[\x15\x90\x81a\x05qW[Pa\x05IW\x81\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0a\x02\xF1\x95\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x04\xF4W[Pa\x02\xDCa \xAEV[a\x02\xE4a \xAEV[a\x02\xECa \xAEV[a\x1E\xD3V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U`d\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`\x01`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03Ua\x03\xF2a \xAEV[`\x845\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ub\x0FB@\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01Ua\x04Ea ,V[b\x0FB@_U`\x01`\xFF\x19\x81T\x16\x17`\x01U_`\x02Ua\x04aW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U_a\x02\xD3V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x02|V[0;\x15\x91Pa\x02tV[\x85\x91Pa\x02jV[_\x80\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWa\x05\xB4a\x05\xACa\x1ApV[a\x02\xECa\x1F\xC0V[\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb\x03\r@\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06\x01a\x1ApV[\x16_R`\x03` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045_R\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\x01` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x06\xBAa\x1F\xC0V[a\x05\xB4a ,V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x07EW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x07\xA0a\x1ApV[a\x07\xA8a\x1F\xC0V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW6`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW`$\x81\x01\x90\x82`\x05\x1B\x906`$\x83\x83\x01\x01\x11a\x05\x8CW`\xFF`\x01T\x16\x80a\x0C\x11W[a\x0B\xDAW[\x90`@Q\x91\x84`@\x84\x01` \x80\x86\x01RR``\x80\x84\x01\x92\x84\x01\x01\x91\x84\x91_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBD\x826\x03\x01\x91[\x88\x82\x10a\x0BbW\x88\x88a\tN\x89a\tG\x81\x8B\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x1A\xD9V[23a\x1C\xEEV[\x15a\x0B:W`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15a\n\xDCW\x81\x15a\n~W\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T\x82\x11a\n W_[\x82\x81\x10a\t\xB6W\0[\x80a\t\xC4`\x01\x92\x85\x85a\x1EFV[\x90Pa\t\xD1W[\x01a\t\xADV[a\n\x18\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7Fa\n\0\x83\x87\x87a\x1EFV[\x92\x90`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2a\t\xCBV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FToo many transactions in batch\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FNo transactions provided\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBatch processing is disabled\0\0\0\0`D\x82\x01R\xFD[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x92\x93\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x87\x82\x03\x01\x85R\x855\x84\x81\x12\x15a\x05\x8CW\x82\x01\x90`D`$\x83\x015\x92\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x806\x03\x83\x13a\x05\x8CWa\x0B\xCD` \x92\x83\x92`\x01\x95a\x1C\xB0V[\x97\x01\x95\x01\x93\x92\x01\x90a\t\tV[3_R`\x03` Ra\x0B\xFEa\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[B\x10\x15a\x1C%V[3_R`\x03` RB`@_ Ua\x08\xC4V[P`\x02T\x15\x15a\x08\xBFV[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x07EWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x07EW` \x90`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\x02T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\rd`@Qa\r&`@\x82a\x1A\xD9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[\x03\x90\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb'\x8D\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\r\x9Da\x1F\xC0V[\x7F5\x9E\xD1)_P\x93'Kl\xA6\xA3yE\xB8l\xACO\x0E-\xEFC\xAF\xD3\xA2\xC8\xA1)\t#\xF2B` `\xFF\x19`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` _T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW\x7F8\x8C\xACVe\xB3b\xF3\x81\xDD\x96\xC7\xC6\xCD\xE0I\x9F\xF2%\xB7v\xC3\xBDdk\x1F\xE0N\xBF\xD9\x03\xA5` `\x045a\x0Eua\x1F\xC0V[\x80`\x02U`@Q\x90\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CWa\rda\x0E\xEFa\x0E\xE86a\x1A\x1FV[6\x91a\x1B\x81V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW```\x03\x196\x01\x12a\x05\x8CWa\x0F]a\x1ApV[a\x0Fea\x1A\x93V[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW` \x92a\x0F\x8Da\x0F\x93\x936\x90`\x04\x01a\x1B\xB7V[\x91a\x1C\xEEV[`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qch\x8DF\xF0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x0F\xD3a\x1F\xC0V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x10\xE5a\x1F\xC0V[\x80\x15a\x11;W` \x81\x7F\xF0\x1A\xC6\xCF\x9D~x\xA8\t\xEC\xB6\xD0\xA2\x9E\xA0\x81=\xD20g\xA60\x10_\xCE\xB9m\xF2~\x92?\xE1\x92\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7FMax must be greater than 0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x11\xEDa\x1F\xC0V[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\xFF\x81\x16\x15a\x12@W`\xFF\x19\x16\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x12\xDFW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`@`\x03\x196\x01\x12a\x05\x8CWa\x13\x1Ba\x1ApV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CWa\x13;\x906\x90`\x04\x01a\x1B\xB7V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x15\xCDW[Pa\x12\xDFWa\x13\x8Aa\x1F\xC0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x91`@Q\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` \x81`\x04\x81\x87Z\xFA_\x91\x81a\x15\x99W[Pa\x14\nW\x83\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x80\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x85\x92\x03a\x15nWP\x81;\x15a\x15CW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x81Q\x15a\x15\x12W_\x80\x83` a\x05\xB4\x95Q\x91\x01\x84Z\xF4=\x15a\x15\nW=\x91a\x14\xEE\x83a\x1BGV[\x92a\x14\xFC`@Q\x94\x85a\x1A\xD9V[\x83R=_` \x85\x01>a!\x05V[``\x91a!\x05V[PP4a\x15\x1BW\0[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x90\x91P` \x81=` \x11a\x15\xC5W[\x81a\x15\xB5` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x90\x85a\x13\xD9V[=\x91Pa\x15\xA8V[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15\x83a\x13}V[4a\x05\x8CWa\x16\x1D6a\x1A\x1FV[\x90a\x16,a\tG6\x84\x84a\x1B\x81V[\x15a\x0B:W`\xFF`\x01T\x16\x80a\x17RW[a\x17#W[\x81\x15a\x16\xFBW_T\x80a\x16\x91W[Pa\x16\x8C\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2\0[Z\x11a\x16\x9DW\x82a\x16PV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FTransaction exceeds gas limit\0\0\0`D\x82\x01R\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[3_R`\x03` Ra\x17?a\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[3_R`\x03` RB`@_ Ua\x16BV[P`\x02T\x15\x15a\x16=V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x17\xB1a\x1F\xC0V[`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15`\xFF`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x91\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02U\x7F\xCE-\xC7\x96\xD0\x81\xC9\xC1\x90\x14j0N\xC3\xB7Z\xD6\xAC\xE0<7\xC8|\x8D\x8F\x88\xC8\xB1]\xD8\x18L` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x18\xEFa\x1F\xC0V[\x80\x15a\x19%W` \x81\x7Fu\xFB\x1D\xCA\xA0\x1C\xB4\xAE\x89*?@\xA3<\xBB\xB2G?CJ\x83\x19\xC5--\x18_\xE1<\xAA\x13]\x92_U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FMax gas must be greater than 0\0\0`D\x82\x01R\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045\x80\x15a\x19\xF7W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x07EWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x07EW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90` `\x03\x19\x83\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x82`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x05\x8CW`$\x84\x83\x01\x01\x11a\x05\x8CW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`d5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x1B\x1AW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x1B\x1AW`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x1B\x8D\x82a\x1BGV[\x91a\x1B\x9B`@Q\x93\x84a\x1A\xD9V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x05\x8CW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x05\x8CW\x81` a\x1B\xD2\x935\x91\x01a\x1B\x81V[\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x82\x01\x80\x92\x11a\x07EWV[\x15a\x1C,WV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FTransaction too soon after previ`D\x82\x01R\x7Fous\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1E\x14WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1DIW[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1D\xB2\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x1B\xD5V[\x03\x91Z\xFA\x90\x81\x15a\x1E\tW_\x91a\x1D\xCEW[P\x80_\x80\x80a\x1DAV[\x90P` \x81=` \x11a\x1E\x01W[\x81a\x1D\xE9` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x80\x15\x15\x81\x03a\x05\x8CW_a\x1D\xC4V[=\x91Pa\x1D\xDCV[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[\x91\x90\x81\x10\x15a\x1E\xA6W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x05\x8CW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x8CW` \x01\x826\x03\x81\x13a\x05\x8CW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1F\x94Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a \0WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\x01`\xFF\x82\x16\x15\x15\x14a \x86W`\xFF\x19\x16`\x01\x17\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0UV[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a \xDDWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a!BWP\x80Q\x15a!\x1AW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a!\x95W[a!SWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a!KV", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. +```solidity +error DataTooLarge(uint256 dataLength, uint256 maxDataLength); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct DataTooLarge { + #[allow(missing_docs)] + pub dataLength: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: DataTooLarge) -> Self { + (value.dataLength, value.maxDataLength) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for DataTooLarge { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + dataLength: tuple.0, + maxDataLength: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for DataTooLarge { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; + const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.dataLength), + as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `GasTrackingAlreadyDisabled()` and selector `0xcd60c3ca`. +```solidity +error GasTrackingAlreadyDisabled(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GasTrackingAlreadyDisabled; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GasTrackingAlreadyDisabled) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GasTrackingAlreadyDisabled { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for GasTrackingAlreadyDisabled { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GasTrackingAlreadyDisabled()"; + const SELECTOR: [u8; 4] = [205u8, 96u8, 195u8, 202u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `GasTrackingAlreadyEnabled()` and selector `0x7679400d`. +```solidity +error GasTrackingAlreadyEnabled(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GasTrackingAlreadyEnabled; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GasTrackingAlreadyEnabled) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GasTrackingAlreadyEnabled { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for GasTrackingAlreadyEnabled { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GasTrackingAlreadyEnabled()"; + const SELECTOR: [u8; 4] = [118u8, 121u8, 64u8, 13u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidInitialization { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for InvalidInitialization { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NoTxData()` and selector `0xdc37f51d`. +```solidity +error NoTxData(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NoTxData; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NoTxData) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NoTxData { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NoTxData { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NoTxData()"; + const SELECTOR: [u8; 4] = [220u8, 55u8, 245u8, 29u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. +```solidity +error OwnableInvalidOwner(address owner); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableInvalidOwner { + #[allow(missing_docs)] + pub owner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OwnableInvalidOwner) -> Self { + (value.owner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OwnableInvalidOwner { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { owner: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableInvalidOwner { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; + const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.owner, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. +```solidity +error TransactionOrSenderNotAllowed(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct TransactionOrSenderNotAllowed; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: TransactionOrSenderNotAllowed) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for TransactionOrSenderNotAllowed { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; + const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. +```solidity +error UUPSUnauthorizedCallContext(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnauthorizedCallContext; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnauthorizedCallContext { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. +```solidity +error UUPSUnsupportedProxiableUUID(bytes32 slot); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnsupportedProxiableUUID { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { slot: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ZeroEpochIndex()` and selector `0xd69368d4`. +```solidity +error ZeroEpochIndex(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ZeroEpochIndex; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroEpochIndex) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ZeroEpochIndex { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ZeroEpochIndex { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ZeroEpochIndex()"; + const SELECTOR: [u8; 4] = [214u8, 147u8, 104u8, 212u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `BatchProcessingToggled(bool)` and selector `0xce2dc796d081c9c190146a304ec3b75ad6ace03c37c87c8d8f88c8b15dd8184c`. +```solidity +event BatchProcessingToggled(bool enabled); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct BatchProcessingToggled { + #[allow(missing_docs)] + pub enabled: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for BatchProcessingToggled { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "BatchProcessingToggled(bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 206u8, 45u8, 199u8, 150u8, 208u8, 129u8, 201u8, 193u8, 144u8, 20u8, + 106u8, 48u8, 78u8, 195u8, 183u8, 90u8, 214u8, 172u8, 224u8, 60u8, 55u8, + 200u8, 124u8, 141u8, 143u8, 136u8, 200u8, 177u8, 93u8, 216u8, 24u8, 76u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { enabled: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.enabled, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for BatchProcessingToggled { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&BatchProcessingToggled> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &BatchProcessingToggled) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. +```solidity +event Initialized(uint64 version); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `MaxGasPerTransactionUpdated(uint256)` and selector `0x75fb1dcaa01cb4ae892a3f40a33cbbb2473f434a8319c52d2d185fe13caa135d`. +```solidity +event MaxGasPerTransactionUpdated(uint256 newMax); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct MaxGasPerTransactionUpdated { + #[allow(missing_docs)] + pub newMax: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for MaxGasPerTransactionUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "MaxGasPerTransactionUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 117u8, 251u8, 29u8, 202u8, 160u8, 28u8, 180u8, 174u8, 137u8, 42u8, 63u8, + 64u8, 163u8, 60u8, 187u8, 178u8, 71u8, 63u8, 67u8, 74u8, 131u8, 25u8, + 197u8, 45u8, 45u8, 24u8, 95u8, 225u8, 60u8, 170u8, 19u8, 93u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newMax: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newMax), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for MaxGasPerTransactionUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&MaxGasPerTransactionUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &MaxGasPerTransactionUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `MaxTransactionsPerBatchUpdated(uint256)` and selector `0xf01ac6cf9d7e78a809ecb6d0a29ea0813dd23067a630105fceb96df27e923fe1`. +```solidity +event MaxTransactionsPerBatchUpdated(uint256 newMax); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct MaxTransactionsPerBatchUpdated { + #[allow(missing_docs)] + pub newMax: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for MaxTransactionsPerBatchUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "MaxTransactionsPerBatchUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 240u8, 26u8, 198u8, 207u8, 157u8, 126u8, 120u8, 168u8, 9u8, 236u8, 182u8, + 208u8, 162u8, 158u8, 160u8, 129u8, 61u8, 210u8, 48u8, 103u8, 166u8, 48u8, + 16u8, 95u8, 206u8, 185u8, 109u8, 242u8, 126u8, 146u8, 63u8, 225u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newMax: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newMax), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for MaxTransactionsPerBatchUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&MaxTransactionsPerBatchUpdated> + for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &MaxTransactionsPerBatchUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `MinTimeBetweenTxsUpdated(uint256)` and selector `0x388cac5665b362f381dd96c7c6cde0499ff225b776c3bd646b1fe04ebfd903a5`. +```solidity +event MinTimeBetweenTxsUpdated(uint256 newMin); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct MinTimeBetweenTxsUpdated { + #[allow(missing_docs)] + pub newMin: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for MinTimeBetweenTxsUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "MinTimeBetweenTxsUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 56u8, 140u8, 172u8, 86u8, 101u8, 179u8, 98u8, 243u8, 129u8, 221u8, 150u8, + 199u8, 198u8, 205u8, 224u8, 73u8, 159u8, 242u8, 37u8, 183u8, 118u8, + 195u8, 189u8, 100u8, 107u8, 31u8, 224u8, 78u8, 191u8, 217u8, 3u8, 165u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newMin: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newMin), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for MinTimeBetweenTxsUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&MinTimeBetweenTxsUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &MinTimeBetweenTxsUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. +```solidity +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.previousOwner, + ); + out[2usize] = ::encode_topic( + &self.newOwner, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `ReplayProtectionToggled(bool)` and selector `0x359ed1295f5093274b6ca6a37945b86cac4f0e2def43afd3a2c8a1290923f242`. +```solidity +event ReplayProtectionToggled(bool enabled); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct ReplayProtectionToggled { + #[allow(missing_docs)] + pub enabled: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for ReplayProtectionToggled { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "ReplayProtectionToggled(bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 53u8, 158u8, 209u8, 41u8, 95u8, 80u8, 147u8, 39u8, 75u8, 108u8, 166u8, + 163u8, 121u8, 69u8, 184u8, 108u8, 172u8, 79u8, 14u8, 45u8, 239u8, 67u8, + 175u8, 211u8, 162u8, 200u8, 161u8, 41u8, 9u8, 35u8, 242u8, 66u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { enabled: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.enabled, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for ReplayProtectionToggled { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&ReplayProtectionToggled> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &ReplayProtectionToggled, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `RequirementModuleUpdated(address)` and selector `0x253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b9`. +```solidity +event RequirementModuleUpdated(address indexed newModule); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct RequirementModuleUpdated { + #[allow(missing_docs)] + pub newModule: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for RequirementModuleUpdated { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "RequirementModuleUpdated(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newModule: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.newModule.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.newModule, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for RequirementModuleUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&RequirementModuleUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &RequirementModuleUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `TransactionProcessed(address,bytes)` and selector `0x83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f`. +```solidity +event TransactionProcessed(address indexed sender, bytes data); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct TransactionProcessed { + #[allow(missing_docs)] + pub sender: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TransactionProcessed { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "TransactionProcessed(address,bytes)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + sender: topics.1, + data: data.0, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.sender.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.sender, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TransactionProcessed { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `EPOCH_DURATION()` and selector `0xa70b9f0c`. +```solidity +function EPOCH_DURATION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`EPOCH_DURATION()`](EPOCH_DURATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for EPOCH_DURATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for EPOCH_DURATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for EPOCH_DURATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "EPOCH_DURATION()"; + const SELECTOR: [u8; 4] = [167u8, 11u8, 159u8, 12u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `GAS_COUNTER_STORAGE_LOCATION()` and selector `0xb9f7f260`. +```solidity +function GAS_COUNTER_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_COUNTER_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`GAS_COUNTER_STORAGE_LOCATION()`](GAS_COUNTER_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_COUNTER_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_COUNTER_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_COUNTER_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_COUNTER_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_COUNTER_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for GAS_COUNTER_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GAS_COUNTER_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [185u8, 247u8, 242u8, 96u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: GAS_COUNTER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: GAS_COUNTER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SEQUENCING_MODULE_STORAGE_LOCATION()` and selector `0x2407f0b6`. +```solidity +function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SEQUENCING_MODULE_STORAGE_LOCATION()`](SEQUENCING_MODULE_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SEQUENCING_MODULE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [36u8, 7u8, 240u8, 182u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `START_TIMESTAMP()` and selector `0x781cd99d`. +```solidity +function START_TIMESTAMP() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`START_TIMESTAMP()`](START_TIMESTAMPCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for START_TIMESTAMPCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for START_TIMESTAMPReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for START_TIMESTAMPCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "START_TIMESTAMP()"; + const SELECTOR: [u8; 4] = [120u8, 28u8, 217u8, 157u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()` and selector `0x95c5bf75`. +```solidity +function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()`](SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from( + value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn, + ) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [149u8, 197u8, 191u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. +```solidity +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `appchainId()` and selector `0xd8781342`. +```solidity +function appchainId() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for appchainIdCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "appchainId()"; + const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `batchProcessingEnabled()` and selector `0xe057fd08`. +```solidity +function batchProcessingEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct batchProcessingEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`batchProcessingEnabled()`](batchProcessingEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct batchProcessingEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: batchProcessingEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for batchProcessingEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: batchProcessingEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for batchProcessingEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for batchProcessingEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "batchProcessingEnabled()"; + const SELECTOR: [u8; 4] = [224u8, 87u8, 253u8, 8u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: batchProcessingEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: batchProcessingEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `disableGasTracking()` and selector `0x5467cb48`. +```solidity +function disableGasTracking() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct disableGasTrackingCall; + ///Container type for the return parameters of the [`disableGasTracking()`](disableGasTrackingCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct disableGasTrackingReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: disableGasTrackingCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for disableGasTrackingCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: disableGasTrackingReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for disableGasTrackingReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl disableGasTrackingReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for disableGasTrackingCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = disableGasTrackingReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "disableGasTracking()"; + const SELECTOR: [u8; 4] = [84u8, 103u8, 203u8, 72u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + disableGasTrackingReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `enableGasTracking()` and selector `0xde1f453e`. +```solidity +function enableGasTracking() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct enableGasTrackingCall; + ///Container type for the return parameters of the [`enableGasTracking()`](enableGasTrackingCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct enableGasTrackingReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: enableGasTrackingCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for enableGasTrackingCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: enableGasTrackingReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for enableGasTrackingReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl enableGasTrackingReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for enableGasTrackingCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = enableGasTrackingReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "enableGasTracking()"; + const SELECTOR: [u8; 4] = [222u8, 31u8, 69u8, 62u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + enableGasTrackingReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. +```solidity +function encodeTransaction(bytes memory data) external pure returns (bytes memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for encodeTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Bytes; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "encodeTransaction(bytes)"; + const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasTrackingEnabled()` and selector `0x84fab62b`. +```solidity +function gasTrackingEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasTrackingEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasTrackingEnabled()`](gasTrackingEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasTrackingEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasTrackingEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasTrackingEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasTrackingEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasTrackingEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasTrackingEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasTrackingEnabled()"; + const SELECTOR: [u8; 4] = [132u8, 250u8, 182u8, 43u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasTrackingEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasTrackingEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getCurrentEpoch()` and selector `0xb97dd9e2`. +```solidity +function getCurrentEpoch() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getCurrentEpoch()`](getCurrentEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCurrentEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getCurrentEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getCurrentEpochCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getCurrentEpoch()"; + const SELECTOR: [u8; 4] = [185u8, 125u8, 217u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochEnd(uint256)` and selector `0xd5176d23`. +```solidity +function getEpochEnd(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochEnd(uint256)`](getEpochEndCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochEndCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochEnd(uint256)"; + const SELECTOR: [u8; 4] = [213u8, 23u8, 109u8, 35u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochStart(uint256)` and selector `0x0175e23b`. +```solidity +function getEpochStart(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochStart(uint256)`](getEpochStartCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochStartCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochStart(uint256)"; + const SELECTOR: [u8; 4] = [1u8, 117u8, 226u8, 59u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getTokensForEpoch(uint256)` and selector `0xe0396166`. +```solidity +function getTokensForEpoch(uint256 epoch) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getTokensForEpochCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getTokensForEpoch(uint256)`](getTokensForEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getTokensForEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getTokensForEpochCall) -> Self { + (value.epoch,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getTokensForEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epoch: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getTokensForEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getTokensForEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getTokensForEpochCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getTokensForEpoch(uint256)"; + const SELECTOR: [u8; 4] = [224u8, 57u8, 97u8, 102u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getTokensForEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getTokensForEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `initialize(address,address,address,address,uint256)` and selector `0xf7013ef6`. +```solidity +function initialize(address admin, address, address _permissionRequirementModule, address, uint256 _appchainId) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeCall { + #[allow(missing_docs)] + pub admin: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _1: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _permissionRequirementModule: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _3: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`initialize(address,address,address,address,uint256)`](initializeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + ( + value.admin, + value._1, + value._permissionRequirementModule, + value._3, + value._appchainId, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + admin: tuple.0, + _1: tuple.1, + _permissionRequirementModule: tuple.2, + _3: tuple.3, + _appchainId: tuple.4, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize(address,address,address,address,uint256)"; + const SELECTOR: [u8; 4] = [247u8, 1u8, 62u8, 246u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.admin, + ), + ::tokenize( + &self._1, + ), + ::tokenize( + &self._permissionRequirementModule, + ), + ::tokenize( + &self._3, + ), + as alloy_sol_types::SolType>::tokenize(&self._appchainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + initializeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isAllowed(address,address,bytes)` and selector `0x7a3979dc`. +```solidity +function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedCall { + #[allow(missing_docs)] + pub proposer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub originator: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isAllowed(address,address,bytes)`](isAllowedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedCall) -> Self { + (value.proposer, value.originator, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + proposer: tuple.0, + originator: tuple.1, + data: tuple.2, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isAllowedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isAllowed(address,address,bytes)"; + const SELECTOR: [u8; 4] = [122u8, 57u8, 121u8, 220u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.proposer, + ), + ::tokenize( + &self.originator, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `lastPermissionUpdate()` and selector `0x3b830889`. +```solidity +function lastPermissionUpdate() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastPermissionUpdateCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`lastPermissionUpdate()`](lastPermissionUpdateCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastPermissionUpdateReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastPermissionUpdateCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastPermissionUpdateCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastPermissionUpdateReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastPermissionUpdateReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for lastPermissionUpdateCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "lastPermissionUpdate()"; + const SELECTOR: [u8; 4] = [59u8, 131u8, 8u8, 137u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: lastPermissionUpdateReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: lastPermissionUpdateReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `lastTransactionTime(address)` and selector `0xe75b2073`. +```solidity +function lastTransactionTime(address) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastTransactionTimeCall(pub alloy::sol_types::private::Address); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`lastTransactionTime(address)`](lastTransactionTimeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastTransactionTimeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastTransactionTimeCall) -> Self { + (value.0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastTransactionTimeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self(tuple.0) + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastTransactionTimeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastTransactionTimeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for lastTransactionTimeCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "lastTransactionTime(address)"; + const SELECTOR: [u8; 4] = [231u8, 91u8, 32u8, 115u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.0, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: lastTransactionTimeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: lastTransactionTimeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxDataSize()` and selector `0xe8eb1dc3`. +```solidity +function maxDataSize() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxDataSize()`](maxDataSizeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxDataSizeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxDataSize()"; + const SELECTOR: [u8; 4] = [232u8, 235u8, 29u8, 195u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxGasPerTransaction()` and selector `0x8e99f929`. +```solidity +function maxGasPerTransaction() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxGasPerTransactionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxGasPerTransaction()`](maxGasPerTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxGasPerTransactionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxGasPerTransactionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxGasPerTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxGasPerTransactionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxGasPerTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxGasPerTransactionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxGasPerTransaction()"; + const SELECTOR: [u8; 4] = [142u8, 153u8, 249u8, 41u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxGasPerTransactionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxGasPerTransactionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxTransactionsPerBatch()` and selector `0xca600aa8`. +```solidity +function maxTransactionsPerBatch() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxTransactionsPerBatchCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxTransactionsPerBatch()`](maxTransactionsPerBatchCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxTransactionsPerBatchReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxTransactionsPerBatchCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxTransactionsPerBatchCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxTransactionsPerBatchReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxTransactionsPerBatchReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxTransactionsPerBatchCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxTransactionsPerBatch()"; + const SELECTOR: [u8; 4] = [202u8, 96u8, 10u8, 168u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxTransactionsPerBatchReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxTransactionsPerBatchReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `minTimeBetweenTxs()` and selector `0xb747b70b`. +```solidity +function minTimeBetweenTxs() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct minTimeBetweenTxsCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`minTimeBetweenTxs()`](minTimeBetweenTxsCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct minTimeBetweenTxsReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: minTimeBetweenTxsCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for minTimeBetweenTxsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: minTimeBetweenTxsReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for minTimeBetweenTxsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for minTimeBetweenTxsCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "minTimeBetweenTxs()"; + const SELECTOR: [u8; 4] = [183u8, 71u8, 183u8, 11u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: minTimeBetweenTxsReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: minTimeBetweenTxsReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `owner()` and selector `0x8da5cb5b`. +```solidity +function owner() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`owner()`](ownerCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `permissionRequirementModule()` and selector `0x5b3cd6e2`. +```solidity +function permissionRequirementModule() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`permissionRequirementModule()`](permissionRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for permissionRequirementModuleCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "permissionRequirementModule()"; + const SELECTOR: [u8; 4] = [91u8, 60u8, 214u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransaction(bytes)` and selector `0x46e2cc09`. +```solidity +function processTransaction(bytes memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`processTransaction(bytes)`](processTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransaction(bytes)"; + const SELECTOR: [u8; 4] = [70u8, 226u8, 204u8, 9u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransactionsBulk(bytes[])` and selector `0xcdafb978`. +```solidity +function processTransactionsBulk(bytes[] memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, + } + ///Container type for the return parameters of the [`processTransactionsBulk(bytes[])`](processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Vec, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionsBulkReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransactionsBulk(bytes[])"; + const SELECTOR: [u8; 4] = [205u8, 175u8, 185u8, 120u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.data), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. +```solidity +function proxiableUUID() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for proxiableUUIDCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. +```solidity +function renounceOwnership() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl renounceOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + renounceOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `replayProtectionEnabled()` and selector `0x1a8b91e8`. +```solidity +function replayProtectionEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct replayProtectionEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`replayProtectionEnabled()`](replayProtectionEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct replayProtectionEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: replayProtectionEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for replayProtectionEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: replayProtectionEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for replayProtectionEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for replayProtectionEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "replayProtectionEnabled()"; + const SELECTOR: [u8; 4] = [26u8, 139u8, 145u8, 232u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: replayProtectionEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: replayProtectionEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setMaxGasPerTransaction(uint256)` and selector `0x17cb741f`. +```solidity +function setMaxGasPerTransaction(uint256 _maxGas) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxGasPerTransactionCall { + #[allow(missing_docs)] + pub _maxGas: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setMaxGasPerTransaction(uint256)`](setMaxGasPerTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxGasPerTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxGasPerTransactionCall) -> Self { + (value._maxGas,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxGasPerTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _maxGas: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxGasPerTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxGasPerTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setMaxGasPerTransactionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setMaxGasPerTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setMaxGasPerTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setMaxGasPerTransaction(uint256)"; + const SELECTOR: [u8; 4] = [23u8, 203u8, 116u8, 31u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._maxGas), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setMaxGasPerTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setMaxTransactionsPerBatch(uint256)` and selector `0x598c8be6`. +```solidity +function setMaxTransactionsPerBatch(uint256 _max) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxTransactionsPerBatchCall { + #[allow(missing_docs)] + pub _max: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setMaxTransactionsPerBatch(uint256)`](setMaxTransactionsPerBatchCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxTransactionsPerBatchReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxTransactionsPerBatchCall) -> Self { + (value._max,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxTransactionsPerBatchCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _max: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxTransactionsPerBatchReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxTransactionsPerBatchReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setMaxTransactionsPerBatchReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setMaxTransactionsPerBatchCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setMaxTransactionsPerBatchReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setMaxTransactionsPerBatch(uint256)"; + const SELECTOR: [u8; 4] = [89u8, 140u8, 139u8, 230u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._max), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setMaxTransactionsPerBatchReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setMinTimeBetweenTxs(uint256)` and selector `0x8e6ae229`. +```solidity +function setMinTimeBetweenTxs(uint256 _minTime) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMinTimeBetweenTxsCall { + #[allow(missing_docs)] + pub _minTime: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setMinTimeBetweenTxs(uint256)`](setMinTimeBetweenTxsCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMinTimeBetweenTxsReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMinTimeBetweenTxsCall) -> Self { + (value._minTime,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMinTimeBetweenTxsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _minTime: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMinTimeBetweenTxsReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMinTimeBetweenTxsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setMinTimeBetweenTxsReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setMinTimeBetweenTxsCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setMinTimeBetweenTxsReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setMinTimeBetweenTxs(uint256)"; + const SELECTOR: [u8; 4] = [142u8, 106u8, 226u8, 41u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._minTime), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setMinTimeBetweenTxsReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `toggleBatchProcessing()` and selector `0x2bff3d4c`. +```solidity +function toggleBatchProcessing() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleBatchProcessingCall; + ///Container type for the return parameters of the [`toggleBatchProcessing()`](toggleBatchProcessingCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleBatchProcessingReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleBatchProcessingCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleBatchProcessingCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleBatchProcessingReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleBatchProcessingReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl toggleBatchProcessingReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for toggleBatchProcessingCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = toggleBatchProcessingReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "toggleBatchProcessing()"; + const SELECTOR: [u8; 4] = [43u8, 255u8, 61u8, 76u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + toggleBatchProcessingReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `toggleReplayProtection()` and selector `0x9a6c01bf`. +```solidity +function toggleReplayProtection() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleReplayProtectionCall; + ///Container type for the return parameters of the [`toggleReplayProtection()`](toggleReplayProtectionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleReplayProtectionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleReplayProtectionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleReplayProtectionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleReplayProtectionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleReplayProtectionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl toggleReplayProtectionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for toggleReplayProtectionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = toggleReplayProtectionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "toggleReplayProtection()"; + const SELECTOR: [u8; 4] = [154u8, 108u8, 1u8, 191u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + toggleReplayProtectionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `tokensUsedPerEpoch(uint256)` and selector `0x0c672363`. +```solidity +function tokensUsedPerEpoch(uint256 epoch) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct tokensUsedPerEpochCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`tokensUsedPerEpoch(uint256)`](tokensUsedPerEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct tokensUsedPerEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: tokensUsedPerEpochCall) -> Self { + (value.epoch,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for tokensUsedPerEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epoch: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: tokensUsedPerEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for tokensUsedPerEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for tokensUsedPerEpochCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "tokensUsedPerEpoch(uint256)"; + const SELECTOR: [u8; 4] = [12u8, 103u8, 35u8, 99u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: tokensUsedPerEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: tokensUsedPerEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. +```solidity +function transferOwnership(address newOwner) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipCall { + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + transferOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. +```solidity +function updateRequirementModule(address _newModule) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleCall { + #[allow(missing_docs)] + pub _newModule: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleCall) -> Self { + (value._newModule,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _newModule: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl updateRequirementModuleReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateRequirementModuleCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateRequirementModuleReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateRequirementModule(address)"; + const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._newModule, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + updateRequirementModuleReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. +```solidity +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newImplementation: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl upgradeToAndCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = upgradeToAndCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + upgradeToAndCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `version()` and selector `0x54fd4d50`. +```solidity +function version() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct versionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`version()`](versionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct versionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: versionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for versionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: versionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for versionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for versionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "version()"; + const SELECTOR: [u8; 4] = [84u8, 253u8, 77u8, 80u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: versionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: versionReturn = r.into(); + r._0 + }) + } + } + }; + ///Container for all the [`SyndicateSequencingChainTestingUpgradeability`](self) function calls. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum SyndicateSequencingChainTestingUpgradeabilityCalls { + #[allow(missing_docs)] + EPOCH_DURATION(EPOCH_DURATIONCall), + #[allow(missing_docs)] + GAS_COUNTER_STORAGE_LOCATION(GAS_COUNTER_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + SEQUENCING_MODULE_STORAGE_LOCATION(SEQUENCING_MODULE_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + START_TIMESTAMP(START_TIMESTAMPCall), + #[allow(missing_docs)] + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + ), + #[allow(missing_docs)] + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), + #[allow(missing_docs)] + appchainId(appchainIdCall), + #[allow(missing_docs)] + batchProcessingEnabled(batchProcessingEnabledCall), + #[allow(missing_docs)] + disableGasTracking(disableGasTrackingCall), + #[allow(missing_docs)] + enableGasTracking(enableGasTrackingCall), + #[allow(missing_docs)] + encodeTransaction(encodeTransactionCall), + #[allow(missing_docs)] + gasTrackingEnabled(gasTrackingEnabledCall), + #[allow(missing_docs)] + getCurrentEpoch(getCurrentEpochCall), + #[allow(missing_docs)] + getEpochEnd(getEpochEndCall), + #[allow(missing_docs)] + getEpochStart(getEpochStartCall), + #[allow(missing_docs)] + getTokensForEpoch(getTokensForEpochCall), + #[allow(missing_docs)] + initialize(initializeCall), + #[allow(missing_docs)] + isAllowed(isAllowedCall), + #[allow(missing_docs)] + lastPermissionUpdate(lastPermissionUpdateCall), + #[allow(missing_docs)] + lastTransactionTime(lastTransactionTimeCall), + #[allow(missing_docs)] + maxDataSize(maxDataSizeCall), + #[allow(missing_docs)] + maxGasPerTransaction(maxGasPerTransactionCall), + #[allow(missing_docs)] + maxTransactionsPerBatch(maxTransactionsPerBatchCall), + #[allow(missing_docs)] + minTimeBetweenTxs(minTimeBetweenTxsCall), + #[allow(missing_docs)] + owner(ownerCall), + #[allow(missing_docs)] + permissionRequirementModule(permissionRequirementModuleCall), + #[allow(missing_docs)] + processTransaction(processTransactionCall), + #[allow(missing_docs)] + processTransactionsBulk(processTransactionsBulkCall), + #[allow(missing_docs)] + proxiableUUID(proxiableUUIDCall), + #[allow(missing_docs)] + renounceOwnership(renounceOwnershipCall), + #[allow(missing_docs)] + replayProtectionEnabled(replayProtectionEnabledCall), + #[allow(missing_docs)] + setMaxGasPerTransaction(setMaxGasPerTransactionCall), + #[allow(missing_docs)] + setMaxTransactionsPerBatch(setMaxTransactionsPerBatchCall), + #[allow(missing_docs)] + setMinTimeBetweenTxs(setMinTimeBetweenTxsCall), + #[allow(missing_docs)] + toggleBatchProcessing(toggleBatchProcessingCall), + #[allow(missing_docs)] + toggleReplayProtection(toggleReplayProtectionCall), + #[allow(missing_docs)] + tokensUsedPerEpoch(tokensUsedPerEpochCall), + #[allow(missing_docs)] + transferOwnership(transferOwnershipCall), + #[allow(missing_docs)] + updateRequirementModule(updateRequirementModuleCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), + #[allow(missing_docs)] + version(versionCall), + } + impl SyndicateSequencingChainTestingUpgradeabilityCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [1u8, 117u8, 226u8, 59u8], + [12u8, 103u8, 35u8, 99u8], + [23u8, 203u8, 116u8, 31u8], + [26u8, 139u8, 145u8, 232u8], + [36u8, 7u8, 240u8, 182u8], + [43u8, 255u8, 61u8, 76u8], + [59u8, 131u8, 8u8, 137u8], + [70u8, 226u8, 204u8, 9u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], + [84u8, 103u8, 203u8, 72u8], + [84u8, 253u8, 77u8, 80u8], + [89u8, 140u8, 139u8, 230u8], + [91u8, 60u8, 214u8, 226u8], + [113u8, 80u8, 24u8, 166u8], + [120u8, 28u8, 217u8, 157u8], + [122u8, 57u8, 121u8, 220u8], + [132u8, 250u8, 182u8, 43u8], + [133u8, 7u8, 73u8, 37u8], + [141u8, 165u8, 203u8, 91u8], + [142u8, 106u8, 226u8, 41u8], + [142u8, 153u8, 249u8, 41u8], + [149u8, 197u8, 191u8, 117u8], + [154u8, 108u8, 1u8, 191u8], + [167u8, 11u8, 159u8, 12u8], + [173u8, 60u8, 177u8, 204u8], + [183u8, 71u8, 183u8, 11u8], + [185u8, 125u8, 217u8, 226u8], + [185u8, 247u8, 242u8, 96u8], + [202u8, 96u8, 10u8, 168u8], + [205u8, 175u8, 185u8, 120u8], + [212u8, 240u8, 235u8, 77u8], + [213u8, 23u8, 109u8, 35u8], + [216u8, 120u8, 19u8, 66u8], + [222u8, 31u8, 69u8, 62u8], + [224u8, 57u8, 97u8, 102u8], + [224u8, 87u8, 253u8, 8u8], + [231u8, 91u8, 32u8, 115u8], + [232u8, 235u8, 29u8, 195u8], + [242u8, 253u8, 227u8, 139u8], + [247u8, 1u8, 62u8, 246u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(getEpochStart), + ::core::stringify!(tokensUsedPerEpoch), + ::core::stringify!(setMaxGasPerTransaction), + ::core::stringify!(replayProtectionEnabled), + ::core::stringify!(SEQUENCING_MODULE_STORAGE_LOCATION), + ::core::stringify!(toggleBatchProcessing), + ::core::stringify!(lastPermissionUpdate), + ::core::stringify!(processTransaction), + ::core::stringify!(upgradeToAndCall), + ::core::stringify!(proxiableUUID), + ::core::stringify!(disableGasTracking), + ::core::stringify!(version), + ::core::stringify!(setMaxTransactionsPerBatch), + ::core::stringify!(permissionRequirementModule), + ::core::stringify!(renounceOwnership), + ::core::stringify!(START_TIMESTAMP), + ::core::stringify!(isAllowed), + ::core::stringify!(gasTrackingEnabled), + ::core::stringify!(encodeTransaction), + ::core::stringify!(owner), + ::core::stringify!(setMinTimeBetweenTxs), + ::core::stringify!(maxGasPerTransaction), + ::core::stringify!(SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION), + ::core::stringify!(toggleReplayProtection), + ::core::stringify!(EPOCH_DURATION), + ::core::stringify!(UPGRADE_INTERFACE_VERSION), + ::core::stringify!(minTimeBetweenTxs), + ::core::stringify!(getCurrentEpoch), + ::core::stringify!(GAS_COUNTER_STORAGE_LOCATION), + ::core::stringify!(maxTransactionsPerBatch), + ::core::stringify!(processTransactionsBulk), + ::core::stringify!(updateRequirementModule), + ::core::stringify!(getEpochEnd), + ::core::stringify!(appchainId), + ::core::stringify!(enableGasTracking), + ::core::stringify!(getTokensForEpoch), + ::core::stringify!(batchProcessingEnabled), + ::core::stringify!(lastTransactionTime), + ::core::stringify!(maxDataSize), + ::core::stringify!(transferOwnership), + ::core::stringify!(initialize), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface + for SyndicateSequencingChainTestingUpgradeabilityCalls { + const NAME: &'static str = "SyndicateSequencingChainTestingUpgradeabilityCalls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 41usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::EPOCH_DURATION(_) => { + ::SELECTOR + } + Self::GAS_COUNTER_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::SEQUENCING_MODULE_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::START_TIMESTAMP(_) => { + ::SELECTOR + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR + } + Self::appchainId(_) => { + ::SELECTOR + } + Self::batchProcessingEnabled(_) => { + ::SELECTOR + } + Self::disableGasTracking(_) => { + ::SELECTOR + } + Self::enableGasTracking(_) => { + ::SELECTOR + } + Self::encodeTransaction(_) => { + ::SELECTOR + } + Self::gasTrackingEnabled(_) => { + ::SELECTOR + } + Self::getCurrentEpoch(_) => { + ::SELECTOR + } + Self::getEpochEnd(_) => { + ::SELECTOR + } + Self::getEpochStart(_) => { + ::SELECTOR + } + Self::getTokensForEpoch(_) => { + ::SELECTOR + } + Self::initialize(_) => { + ::SELECTOR + } + Self::isAllowed(_) => { + ::SELECTOR + } + Self::lastPermissionUpdate(_) => { + ::SELECTOR + } + Self::lastTransactionTime(_) => { + ::SELECTOR + } + Self::maxDataSize(_) => { + ::SELECTOR + } + Self::maxGasPerTransaction(_) => { + ::SELECTOR + } + Self::maxTransactionsPerBatch(_) => { + ::SELECTOR + } + Self::minTimeBetweenTxs(_) => { + ::SELECTOR + } + Self::owner(_) => ::SELECTOR, + Self::permissionRequirementModule(_) => { + ::SELECTOR + } + Self::processTransaction(_) => { + ::SELECTOR + } + Self::processTransactionsBulk(_) => { + ::SELECTOR + } + Self::proxiableUUID(_) => { + ::SELECTOR + } + Self::renounceOwnership(_) => { + ::SELECTOR + } + Self::replayProtectionEnabled(_) => { + ::SELECTOR + } + Self::setMaxGasPerTransaction(_) => { + ::SELECTOR + } + Self::setMaxTransactionsPerBatch(_) => { + ::SELECTOR + } + Self::setMinTimeBetweenTxs(_) => { + ::SELECTOR + } + Self::toggleBatchProcessing(_) => { + ::SELECTOR + } + Self::toggleReplayProtection(_) => { + ::SELECTOR + } + Self::tokensUsedPerEpoch(_) => { + ::SELECTOR + } + Self::transferOwnership(_) => { + ::SELECTOR + } + Self::updateRequirementModule(_) => { + ::SELECTOR + } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } + Self::version(_) => ::SELECTOR, + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + >] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochStart, + ) + } + getEpochStart + }, + { + fn tokensUsedPerEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::tokensUsedPerEpoch, + ) + } + tokensUsedPerEpoch + }, + { + fn setMaxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxGasPerTransaction, + ) + } + setMaxGasPerTransaction + }, + { + fn replayProtectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::replayProtectionEnabled, + ) + } + replayProtectionEnabled + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn toggleBatchProcessing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleBatchProcessing, + ) + } + toggleBatchProcessing + }, + { + fn lastPermissionUpdate( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastPermissionUpdate, + ) + } + lastPermissionUpdate + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::proxiableUUID, + ) + } + proxiableUUID + }, + { + fn disableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::disableGasTracking, + ) + } + disableGasTracking + }, + { + fn version( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::version, + ) + } + version + }, + { + fn setMaxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxTransactionsPerBatch, + ) + } + setMaxTransactionsPerBatch + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::START_TIMESTAMP, + ) + } + START_TIMESTAMP + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::isAllowed, + ) + } + isAllowed + }, + { + fn gasTrackingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::gasTrackingEnabled, + ) + } + gasTrackingEnabled + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::owner, + ) + } + owner + }, + { + fn setMinTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMinTimeBetweenTxs, + ) + } + setMinTimeBetweenTxs + }, + { + fn maxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxGasPerTransaction, + ) + } + maxGasPerTransaction + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn toggleReplayProtection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleReplayProtection, + ) + } + toggleReplayProtection + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::EPOCH_DURATION, + ) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn minTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::minTimeBetweenTxs, + ) + } + minTimeBetweenTxs + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getCurrentEpoch, + ) + } + getCurrentEpoch + }, + { + fn GAS_COUNTER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::GAS_COUNTER_STORAGE_LOCATION, + ) + } + GAS_COUNTER_STORAGE_LOCATION + }, + { + fn maxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxTransactionsPerBatch, + ) + } + maxTransactionsPerBatch + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochEnd, + ) + } + getEpochEnd + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::appchainId, + ) + } + appchainId + }, + { + fn enableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::enableGasTracking, + ) + } + enableGasTracking + }, + { + fn getTokensForEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getTokensForEpoch, + ) + } + getTokensForEpoch + }, + { + fn batchProcessingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::batchProcessingEnabled, + ) + } + batchProcessingEnabled + }, + { + fn lastTransactionTime( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastTransactionTime, + ) + } + lastTransactionTime + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxDataSize, + ) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::transferOwnership, + ) + } + transferOwnership + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::initialize, + ) + } + initialize + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + >] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochStart, + ) + } + getEpochStart + }, + { + fn tokensUsedPerEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::tokensUsedPerEpoch, + ) + } + tokensUsedPerEpoch + }, + { + fn setMaxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxGasPerTransaction, + ) + } + setMaxGasPerTransaction + }, + { + fn replayProtectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::replayProtectionEnabled, + ) + } + replayProtectionEnabled + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn toggleBatchProcessing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleBatchProcessing, + ) + } + toggleBatchProcessing + }, + { + fn lastPermissionUpdate( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastPermissionUpdate, + ) + } + lastPermissionUpdate + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::proxiableUUID, + ) + } + proxiableUUID + }, + { + fn disableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::disableGasTracking, + ) + } + disableGasTracking + }, + { + fn version( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::version, + ) + } + version + }, + { + fn setMaxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxTransactionsPerBatch, + ) + } + setMaxTransactionsPerBatch + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::START_TIMESTAMP, + ) + } + START_TIMESTAMP + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::isAllowed, + ) + } + isAllowed + }, + { + fn gasTrackingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::gasTrackingEnabled, + ) + } + gasTrackingEnabled + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::owner, + ) + } + owner + }, + { + fn setMinTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMinTimeBetweenTxs, + ) + } + setMinTimeBetweenTxs + }, + { + fn maxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxGasPerTransaction, + ) + } + maxGasPerTransaction + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn toggleReplayProtection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleReplayProtection, + ) + } + toggleReplayProtection + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::EPOCH_DURATION, + ) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn minTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::minTimeBetweenTxs, + ) + } + minTimeBetweenTxs + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getCurrentEpoch, + ) + } + getCurrentEpoch + }, + { + fn GAS_COUNTER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::GAS_COUNTER_STORAGE_LOCATION, + ) + } + GAS_COUNTER_STORAGE_LOCATION + }, + { + fn maxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxTransactionsPerBatch, + ) + } + maxTransactionsPerBatch + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochEnd, + ) + } + getEpochEnd + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::appchainId, + ) + } + appchainId + }, + { + fn enableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::enableGasTracking, + ) + } + enableGasTracking + }, + { + fn getTokensForEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getTokensForEpoch, + ) + } + getTokensForEpoch + }, + { + fn batchProcessingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::batchProcessingEnabled, + ) + } + batchProcessingEnabled + }, + { + fn lastTransactionTime( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastTransactionTime, + ) + } + lastTransactionTime + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxDataSize, + ) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::transferOwnership, + ) + } + transferOwnership + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::initialize, + ) + } + initialize + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::GAS_COUNTER_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::appchainId(inner) => { + ::abi_encoded_size(inner) + } + Self::batchProcessingEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::disableGasTracking(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::enableGasTracking(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::gasTrackingEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getCurrentEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochStart(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getTokensForEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::initialize(inner) => { + ::abi_encoded_size(inner) + } + Self::isAllowed(inner) => { + ::abi_encoded_size(inner) + } + Self::lastPermissionUpdate(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::lastTransactionTime(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::maxDataSize(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::maxGasPerTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::maxTransactionsPerBatch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::minTimeBetweenTxs(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::owner(inner) => { + ::abi_encoded_size(inner) + } + Self::permissionRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::replayProtectionEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setMaxGasPerTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setMaxTransactionsPerBatch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setMinTimeBetweenTxs(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::toggleBatchProcessing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::toggleReplayProtection(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::tokensUsedPerEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::transferOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::version(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::GAS_COUNTER_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::appchainId(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::batchProcessingEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::disableGasTracking(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::enableGasTracking(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::gasTrackingEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getCurrentEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochStart(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getTokensForEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::initialize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::isAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::lastPermissionUpdate(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::lastTransactionTime(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxDataSize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxGasPerTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxTransactionsPerBatch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::minTimeBetweenTxs(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::owner(inner) => { + ::abi_encode_raw(inner, out) + } + Self::permissionRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::replayProtectionEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setMaxGasPerTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setMaxTransactionsPerBatch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setMinTimeBetweenTxs(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::toggleBatchProcessing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::toggleReplayProtection(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::tokensUsedPerEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::transferOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::version(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainTestingUpgradeability`](self) custom errors. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainTestingUpgradeabilityErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + DataTooLarge(DataTooLarge), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + #[allow(missing_docs)] + GasTrackingAlreadyDisabled(GasTrackingAlreadyDisabled), + #[allow(missing_docs)] + GasTrackingAlreadyEnabled(GasTrackingAlreadyEnabled), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), + #[allow(missing_docs)] + NoTxData(NoTxData), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] + OwnableInvalidOwner(OwnableInvalidOwner), + #[allow(missing_docs)] + OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), + #[allow(missing_docs)] + TransactionOrSenderNotAllowed(TransactionOrSenderNotAllowed), + #[allow(missing_docs)] + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroEpochIndex(ZeroEpochIndex), + } + impl SyndicateSequencingChainTestingUpgradeabilityErrors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [17u8, 140u8, 218u8, 167u8], + [30u8, 79u8, 189u8, 247u8], + [70u8, 52u8, 105u8, 27u8], + [76u8, 156u8, 140u8, 227u8], + [118u8, 121u8, 64u8, 13u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [205u8, 96u8, 195u8, 202u8], + [214u8, 147u8, 104u8, 212u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [220u8, 55u8, 245u8, 29u8], + [220u8, 116u8, 20u8, 88u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(OwnableUnauthorizedAccount), + ::core::stringify!(OwnableInvalidOwner), + ::core::stringify!(DataTooLarge), + ::core::stringify!(ERC1967InvalidImplementation), + ::core::stringify!(GasTrackingAlreadyEnabled), + ::core::stringify!(AddressEmptyCode), + ::core::stringify!(UUPSUnsupportedProxiableUUID), + ::core::stringify!(ERC1967NonPayable), + ::core::stringify!(GasTrackingAlreadyDisabled), + ::core::stringify!(ZeroEpochIndex), + ::core::stringify!(FailedCall), + ::core::stringify!(NotInitializing), + ::core::stringify!(NoTxData), + ::core::stringify!(TransactionOrSenderNotAllowed), + ::core::stringify!(UUPSUnauthorizedCallContext), + ::core::stringify!(InvalidInitialization), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface + for SyndicateSequencingChainTestingUpgradeabilityErrors { + const NAME: &'static str = "SyndicateSequencingChainTestingUpgradeabilityErrors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 16usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::DataTooLarge(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::GasTrackingAlreadyDisabled(_) => { + ::SELECTOR + } + Self::GasTrackingAlreadyEnabled(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR + } + Self::NoTxData(_) => ::SELECTOR, + Self::NotInitializing(_) => { + ::SELECTOR + } + Self::OwnableInvalidOwner(_) => { + ::SELECTOR + } + Self::OwnableUnauthorizedAccount(_) => { + ::SELECTOR + } + Self::TransactionOrSenderNotAllowed(_) => { + ::SELECTOR + } + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroEpochIndex(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + >] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::DataTooLarge, + ) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn GasTrackingAlreadyEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyEnabled, + ) + } + GasTrackingAlreadyEnabled + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn GasTrackingAlreadyDisabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyDisabled, + ) + } + GasTrackingAlreadyDisabled + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ZeroEpochIndex, + ) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::FailedCall, + ) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NotInitializing, + ) + } + NotInitializing + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NoTxData, + ) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + >] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::DataTooLarge, + ) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn GasTrackingAlreadyEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyEnabled, + ) + } + GasTrackingAlreadyEnabled + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn GasTrackingAlreadyDisabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyDisabled, + ) + } + GasTrackingAlreadyDisabled + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ZeroEpochIndex, + ) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::FailedCall, + ) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NotInitializing, + ) + } + NotInitializing + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NoTxData, + ) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encoded_size(inner) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::GasTrackingAlreadyDisabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::GasTrackingAlreadyEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NoTxData(inner) => { + ::abi_encoded_size(inner) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::GasTrackingAlreadyDisabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::GasTrackingAlreadyEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NoTxData(inner) => { + ::abi_encode_raw(inner, out) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainTestingUpgradeability`](self) events. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainTestingUpgradeabilityEvents { + #[allow(missing_docs)] + BatchProcessingToggled(BatchProcessingToggled), + #[allow(missing_docs)] + Initialized(Initialized), + #[allow(missing_docs)] + MaxGasPerTransactionUpdated(MaxGasPerTransactionUpdated), + #[allow(missing_docs)] + MaxTransactionsPerBatchUpdated(MaxTransactionsPerBatchUpdated), + #[allow(missing_docs)] + MinTimeBetweenTxsUpdated(MinTimeBetweenTxsUpdated), + #[allow(missing_docs)] + OwnershipTransferred(OwnershipTransferred), + #[allow(missing_docs)] + ReplayProtectionToggled(ReplayProtectionToggled), + #[allow(missing_docs)] + RequirementModuleUpdated(RequirementModuleUpdated), + #[allow(missing_docs)] + TransactionProcessed(TransactionProcessed), + #[allow(missing_docs)] + Upgraded(Upgraded), + } + impl SyndicateSequencingChainTestingUpgradeabilityEvents { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ], + [ + 53u8, 158u8, 209u8, 41u8, 95u8, 80u8, 147u8, 39u8, 75u8, 108u8, 166u8, + 163u8, 121u8, 69u8, 184u8, 108u8, 172u8, 79u8, 14u8, 45u8, 239u8, 67u8, + 175u8, 211u8, 162u8, 200u8, 161u8, 41u8, 9u8, 35u8, 242u8, 66u8, + ], + [ + 56u8, 140u8, 172u8, 86u8, 101u8, 179u8, 98u8, 243u8, 129u8, 221u8, 150u8, + 199u8, 198u8, 205u8, 224u8, 73u8, 159u8, 242u8, 37u8, 183u8, 118u8, + 195u8, 189u8, 100u8, 107u8, 31u8, 224u8, 78u8, 191u8, 217u8, 3u8, 165u8, + ], + [ + 117u8, 251u8, 29u8, 202u8, 160u8, 28u8, 180u8, 174u8, 137u8, 42u8, 63u8, + 64u8, 163u8, 60u8, 187u8, 178u8, 71u8, 63u8, 67u8, 74u8, 131u8, 25u8, + 197u8, 45u8, 45u8, 24u8, 95u8, 225u8, 60u8, 170u8, 19u8, 93u8, + ], + [ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ], + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], + [ + 206u8, 45u8, 199u8, 150u8, 208u8, 129u8, 201u8, 193u8, 144u8, 20u8, + 106u8, 48u8, 78u8, 195u8, 183u8, 90u8, 214u8, 172u8, 224u8, 60u8, 55u8, + 200u8, 124u8, 141u8, 143u8, 136u8, 200u8, 177u8, 93u8, 216u8, 24u8, 76u8, + ], + [ + 240u8, 26u8, 198u8, 207u8, 157u8, 126u8, 120u8, 168u8, 9u8, 236u8, 182u8, + 208u8, 162u8, 158u8, 160u8, 129u8, 61u8, 210u8, 48u8, 103u8, 166u8, 48u8, + 16u8, 95u8, 206u8, 185u8, 109u8, 242u8, 126u8, 146u8, 63u8, 225u8, + ], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(RequirementModuleUpdated), + ::core::stringify!(ReplayProtectionToggled), + ::core::stringify!(MinTimeBetweenTxsUpdated), + ::core::stringify!(MaxGasPerTransactionUpdated), + ::core::stringify!(TransactionProcessed), + ::core::stringify!(OwnershipTransferred), + ::core::stringify!(Upgraded), + ::core::stringify!(Initialized), + ::core::stringify!(BatchProcessingToggled), + ::core::stringify!(MaxTransactionsPerBatchUpdated), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface + for SyndicateSequencingChainTestingUpgradeabilityEvents { + const NAME: &'static str = "SyndicateSequencingChainTestingUpgradeabilityEvents"; + const COUNT: usize = 10usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::BatchProcessingToggled) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::Initialized) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::MaxGasPerTransactionUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::MaxTransactionsPerBatchUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::MinTimeBetweenTxsUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::OwnershipTransferred) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::ReplayProtectionToggled) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::RequirementModuleUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::TransactionProcessed) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData + for SyndicateSequencingChainTestingUpgradeabilityEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::BatchProcessingToggled(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::MaxGasPerTransactionUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::MaxTransactionsPerBatchUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::MinTimeBetweenTxsUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::ReplayProtectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::BatchProcessingToggled(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::MaxGasPerTransactionUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::MaxTransactionsPerBatchUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::MinTimeBetweenTxsUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::ReplayProtectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainTestingUpgradeability`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainTestingUpgradeabilityInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> SyndicateSequencingChainTestingUpgradeabilityInstance { + SyndicateSequencingChainTestingUpgradeabilityInstance::< + P, + N, + >::new(address, __provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result< + SyndicateSequencingChainTestingUpgradeabilityInstance, + >, + > { + SyndicateSequencingChainTestingUpgradeabilityInstance::::deploy(__provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(__provider: P) -> alloy_contract::RawCallBuilder { + SyndicateSequencingChainTestingUpgradeabilityInstance::< + P, + N, + >::deploy_builder(__provider) + } + /**A [`SyndicateSequencingChainTestingUpgradeability`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`SyndicateSequencingChainTestingUpgradeability`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct SyndicateSequencingChainTestingUpgradeabilityInstance< + P, + N = alloy_contract::private::Ethereum, + > { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug + for SyndicateSequencingChainTestingUpgradeabilityInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("SyndicateSequencingChainTestingUpgradeabilityInstance") + .field(&self.address) + .finish() + } + } + /// Instantiation and getters/setters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainTestingUpgradeabilityInstance { + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainTestingUpgradeability`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainTestingUpgradeabilityInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> Self { + Self { + address, + provider: __provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + __provider: P, + ) -> alloy_contract::Result< + SyndicateSequencingChainTestingUpgradeabilityInstance, + > { + let call_builder = Self::deploy_builder(__provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + __provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl< + P: ::core::clone::Clone, + N, + > SyndicateSequencingChainTestingUpgradeabilityInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider( + self, + ) -> SyndicateSequencingChainTestingUpgradeabilityInstance { + SyndicateSequencingChainTestingUpgradeabilityInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainTestingUpgradeabilityInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`EPOCH_DURATION`] function. + pub fn EPOCH_DURATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, EPOCH_DURATIONCall, N> { + self.call_builder(&EPOCH_DURATIONCall) + } + ///Creates a new call builder for the [`GAS_COUNTER_STORAGE_LOCATION`] function. + pub fn GAS_COUNTER_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, GAS_COUNTER_STORAGE_LOCATIONCall, N> { + self.call_builder(&GAS_COUNTER_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`SEQUENCING_MODULE_STORAGE_LOCATION`] function. + pub fn SEQUENCING_MODULE_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SEQUENCING_MODULE_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SEQUENCING_MODULE_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`START_TIMESTAMP`] function. + pub fn START_TIMESTAMP( + &self, + ) -> alloy_contract::SolCallBuilder<&P, START_TIMESTAMPCall, N> { + self.call_builder(&START_TIMESTAMPCall) + } + ///Creates a new call builder for the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION`] function. + pub fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) + } + ///Creates a new call builder for the [`appchainId`] function. + pub fn appchainId( + &self, + ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { + self.call_builder(&appchainIdCall) + } + ///Creates a new call builder for the [`batchProcessingEnabled`] function. + pub fn batchProcessingEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, batchProcessingEnabledCall, N> { + self.call_builder(&batchProcessingEnabledCall) + } + ///Creates a new call builder for the [`disableGasTracking`] function. + pub fn disableGasTracking( + &self, + ) -> alloy_contract::SolCallBuilder<&P, disableGasTrackingCall, N> { + self.call_builder(&disableGasTrackingCall) + } + ///Creates a new call builder for the [`enableGasTracking`] function. + pub fn enableGasTracking( + &self, + ) -> alloy_contract::SolCallBuilder<&P, enableGasTrackingCall, N> { + self.call_builder(&enableGasTrackingCall) + } + ///Creates a new call builder for the [`encodeTransaction`] function. + pub fn encodeTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, encodeTransactionCall, N> { + self.call_builder(&encodeTransactionCall { data }) + } + ///Creates a new call builder for the [`gasTrackingEnabled`] function. + pub fn gasTrackingEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, gasTrackingEnabledCall, N> { + self.call_builder(&gasTrackingEnabledCall) + } + ///Creates a new call builder for the [`getCurrentEpoch`] function. + pub fn getCurrentEpoch( + &self, + ) -> alloy_contract::SolCallBuilder<&P, getCurrentEpochCall, N> { + self.call_builder(&getCurrentEpochCall) + } + ///Creates a new call builder for the [`getEpochEnd`] function. + pub fn getEpochEnd( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochEndCall, N> { + self.call_builder(&getEpochEndCall { epochIndex }) + } + ///Creates a new call builder for the [`getEpochStart`] function. + pub fn getEpochStart( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochStartCall, N> { + self.call_builder(&getEpochStartCall { epochIndex }) + } + ///Creates a new call builder for the [`getTokensForEpoch`] function. + pub fn getTokensForEpoch( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getTokensForEpochCall, N> { + self.call_builder(&getTokensForEpochCall { epoch }) + } + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( + &self, + admin: alloy::sol_types::private::Address, + _1: alloy::sol_types::private::Address, + _permissionRequirementModule: alloy::sol_types::private::Address, + _3: alloy::sol_types::private::Address, + _appchainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { + self.call_builder( + &initializeCall { + admin, + _1, + _permissionRequirementModule, + _3, + _appchainId, + }, + ) + } + ///Creates a new call builder for the [`isAllowed`] function. + pub fn isAllowed( + &self, + proposer: alloy::sol_types::private::Address, + originator: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, isAllowedCall, N> { + self.call_builder( + &isAllowedCall { + proposer, + originator, + data, + }, + ) + } + ///Creates a new call builder for the [`lastPermissionUpdate`] function. + pub fn lastPermissionUpdate( + &self, + ) -> alloy_contract::SolCallBuilder<&P, lastPermissionUpdateCall, N> { + self.call_builder(&lastPermissionUpdateCall) + } + ///Creates a new call builder for the [`lastTransactionTime`] function. + pub fn lastTransactionTime( + &self, + _0: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, lastTransactionTimeCall, N> { + self.call_builder(&lastTransactionTimeCall(_0)) + } + ///Creates a new call builder for the [`maxDataSize`] function. + pub fn maxDataSize( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxDataSizeCall, N> { + self.call_builder(&maxDataSizeCall) + } + ///Creates a new call builder for the [`maxGasPerTransaction`] function. + pub fn maxGasPerTransaction( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxGasPerTransactionCall, N> { + self.call_builder(&maxGasPerTransactionCall) + } + ///Creates a new call builder for the [`maxTransactionsPerBatch`] function. + pub fn maxTransactionsPerBatch( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxTransactionsPerBatchCall, N> { + self.call_builder(&maxTransactionsPerBatchCall) + } + ///Creates a new call builder for the [`minTimeBetweenTxs`] function. + pub fn minTimeBetweenTxs( + &self, + ) -> alloy_contract::SolCallBuilder<&P, minTimeBetweenTxsCall, N> { + self.call_builder(&minTimeBetweenTxsCall) + } + ///Creates a new call builder for the [`owner`] function. + pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> { + self.call_builder(&ownerCall) + } + ///Creates a new call builder for the [`permissionRequirementModule`] function. + pub fn permissionRequirementModule( + &self, + ) -> alloy_contract::SolCallBuilder<&P, permissionRequirementModuleCall, N> { + self.call_builder(&permissionRequirementModuleCall) + } + ///Creates a new call builder for the [`processTransaction`] function. + pub fn processTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionCall, N> { + self.call_builder(&processTransactionCall { data }) + } + ///Creates a new call builder for the [`processTransactionsBulk`] function. + pub fn processTransactionsBulk( + &self, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionsBulkCall, N> { + self.call_builder( + &processTransactionsBulkCall { + data, + }, + ) + } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } + ///Creates a new call builder for the [`renounceOwnership`] function. + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { + self.call_builder(&renounceOwnershipCall) + } + ///Creates a new call builder for the [`replayProtectionEnabled`] function. + pub fn replayProtectionEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, replayProtectionEnabledCall, N> { + self.call_builder(&replayProtectionEnabledCall) + } + ///Creates a new call builder for the [`setMaxGasPerTransaction`] function. + pub fn setMaxGasPerTransaction( + &self, + _maxGas: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setMaxGasPerTransactionCall, N> { + self.call_builder( + &setMaxGasPerTransactionCall { + _maxGas, + }, + ) + } + ///Creates a new call builder for the [`setMaxTransactionsPerBatch`] function. + pub fn setMaxTransactionsPerBatch( + &self, + _max: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setMaxTransactionsPerBatchCall, N> { + self.call_builder( + &setMaxTransactionsPerBatchCall { + _max, + }, + ) + } + ///Creates a new call builder for the [`setMinTimeBetweenTxs`] function. + pub fn setMinTimeBetweenTxs( + &self, + _minTime: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setMinTimeBetweenTxsCall, N> { + self.call_builder( + &setMinTimeBetweenTxsCall { + _minTime, + }, + ) + } + ///Creates a new call builder for the [`toggleBatchProcessing`] function. + pub fn toggleBatchProcessing( + &self, + ) -> alloy_contract::SolCallBuilder<&P, toggleBatchProcessingCall, N> { + self.call_builder(&toggleBatchProcessingCall) + } + ///Creates a new call builder for the [`toggleReplayProtection`] function. + pub fn toggleReplayProtection( + &self, + ) -> alloy_contract::SolCallBuilder<&P, toggleReplayProtectionCall, N> { + self.call_builder(&toggleReplayProtectionCall) + } + ///Creates a new call builder for the [`tokensUsedPerEpoch`] function. + pub fn tokensUsedPerEpoch( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, tokensUsedPerEpochCall, N> { + self.call_builder(&tokensUsedPerEpochCall { epoch }) + } + ///Creates a new call builder for the [`transferOwnership`] function. + pub fn transferOwnership( + &self, + newOwner: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> { + self.call_builder(&transferOwnershipCall { newOwner }) + } + ///Creates a new call builder for the [`updateRequirementModule`] function. + pub fn updateRequirementModule( + &self, + _newModule: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, updateRequirementModuleCall, N> { + self.call_builder( + &updateRequirementModuleCall { + _newModule, + }, + ) + } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } + ///Creates a new call builder for the [`version`] function. + pub fn version(&self) -> alloy_contract::SolCallBuilder<&P, versionCall, N> { + self.call_builder(&versionCall) + } + } + /// Event filters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainTestingUpgradeabilityInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`BatchProcessingToggled`] event. + pub fn BatchProcessingToggled_filter( + &self, + ) -> alloy_contract::Event<&P, BatchProcessingToggled, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`MaxGasPerTransactionUpdated`] event. + pub fn MaxGasPerTransactionUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, MaxGasPerTransactionUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`MaxTransactionsPerBatchUpdated`] event. + pub fn MaxTransactionsPerBatchUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, MaxTransactionsPerBatchUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`MinTimeBetweenTxsUpdated`] event. + pub fn MinTimeBetweenTxsUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, MinTimeBetweenTxsUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`OwnershipTransferred`] event. + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event<&P, OwnershipTransferred, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`ReplayProtectionToggled`] event. + pub fn ReplayProtectionToggled_filter( + &self, + ) -> alloy_contract::Event<&P, ReplayProtectionToggled, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`RequirementModuleUpdated`] event. + pub fn RequirementModuleUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, RequirementModuleUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`TransactionProcessed`] event. + pub fn TransactionProcessed_filter( + &self, + ) -> alloy_contract::Event<&P, TransactionProcessed, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/contract-bindings/src/synd/syndicate_sequencing_chain_upgrade_v2.rs b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_upgrade_v2.rs new file mode 100644 index 000000000..7e477947e --- /dev/null +++ b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_upgrade_v2.rs @@ -0,0 +1,10503 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface SyndicateSequencingChainUpgradeV2 { + error AddressEmptyCode(address target); + error DataTooLarge(uint256 dataLength, uint256 maxDataLength); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error InvalidInitialization(); + error NoTxData(); + error NotGasMeterContract(); + error NotInitializing(); + error OwnableInvalidOwner(address owner); + error OwnableUnauthorizedAccount(address account); + error TransactionOrSenderNotAllowed(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroAddress(); + + event FeeCollected(address indexed payer, uint256 amount); + event FeeCollectionToggled(bool enabled); + event Initialized(uint64 version); + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + event ProcessingFeeUpdated(uint256 newFee); + event RequirementModuleUpdated(address indexed newModule); + event TransactionProcessed(address indexed sender, bytes data); + event Upgraded(address indexed implementation); + + constructor(address _gasMeter); + + function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); + function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); + function _processTransaction(address sequencer, bytes memory data) external; + function _processTransactionsBulk(address sequencer, bytes[] memory data) external; + function appchainId() external view returns (uint256); + function contractVersion() external pure returns (string memory); + function encodeTransaction(bytes memory data) external pure returns (bytes memory); + function feeCollectionEnabled() external view returns (bool); + function gasMeter() external view returns (address); + function getInitializedVersion() external view returns (uint64); + function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; + function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); + function maxDataSize() external view returns (uint256); + function owner() external view returns (address); + function permissionRequirementModule() external view returns (address); + function processTransaction(bytes memory data) external; + function processTransactionWithFee(bytes memory data) external payable; + function processTransactionsBulk(bytes[] memory data) external; + function processingFee() external view returns (uint256); + function proxiableUUID() external view returns (bytes32); + function renounceOwnership() external; + function setProcessingFee(uint256 _fee) external; + function toggleFeeCollection() external; + function totalFeesCollected() external view returns (uint256); + function transferOwnership(address newOwner) external; + function updateRequirementModule(address _newModule) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; + function withdrawFees(address payable recipient) external; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_gasMeter", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "SEQUENCING_MODULE_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_processTransaction", + "inputs": [ + { + "name": "sequencer", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_processTransactionsBulk", + "inputs": [ + { + "name": "sequencer", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "appchainId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "contractVersion", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "encodeTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "feeCollectionEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gasMeter", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInitializedVersion", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_permissionRequirementModule", + "type": "address", + "internalType": "address" + }, + { + "name": "_appchainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAllowed", + "inputs": [ + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "originator", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxDataSize", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permissionRequirementModule", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPermissionModule" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "processTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "processTransactionWithFee", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "processTransactionsBulk", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "processingFee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setProcessingFee", + "inputs": [ + { + "name": "_fee", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "toggleFeeCollection", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "totalFeesCollected", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateRequirementModule", + "inputs": [ + { + "name": "_newModule", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "withdrawFees", + "inputs": [ + { + "name": "recipient", + "type": "address", + "internalType": "address payable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "FeeCollected", + "inputs": [ + { + "name": "payer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FeeCollectionToggled", + "inputs": [ + { + "name": "enabled", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProcessingFeeUpdated", + "inputs": [ + { + "name": "newFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RequirementModuleUpdated", + "inputs": [ + { + "name": "newModule", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TransactionProcessed", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "DataTooLarge", + "inputs": [ + { + "name": "dataLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxDataLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NoTxData", + "inputs": [] + }, + { + "type": "error", + "name": "NotGasMeterContract", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TransactionOrSenderNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroAddress", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod SyndicateSequencingChainUpgradeV2 { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60c03461014757601f61200238819003918201601f19168301916001600160401b0383118484101761014b5780849260209460405283398101031261014757516001600160a01b0381168082036101475730608052156101385760a0525f516020611fe25f395f51905f525460ff8160401c16610129576002600160401b03196001600160401b038216016100d3575b604051611e8290816101608239608051818181610c290152610cee015260a051818181610221015281816104a6015281816110060152818161119b015261172c0152f35b6001600160401b0319166001600160401b039081175f516020611fe25f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61008f565b63f92ee8a960e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146116db578063164e68de146115615780631794bb3c146111f95780632407f0b6146111bf57806343f97ae51461116f5780634513ed15146110f657806346e2cc0914610fba5780634f1ef28614610ca157806352d1902d14610c015780635b3cd6e214610bae57806360c6d8ae14610b90578063715018a614610ad25780637a3979dc14610a775780638507492514610a255780638c242bce146108605780638da5cb5b1461080d5780639461446d146107c057806395c5bf7514610785578063a0a8e46014610725578063ad3cb1cc146106c1578063b3c650151461067a578063cc8552e914610657578063cdafb9781461045b578063d4f0eb4d14610394578063d878134214610357578063de1881a81461033a578063e4a37d7a146101cf578063e8eb1dc3146101b1578063f2fde38b146101845763ffa1ad7414610164575f80fd5b346101815780600319360112610181576020604051620f42408152f35b80fd5b5034610181576020600319360112610181576101ae6101a1611844565b6101a9611d26565b611c39565b80f35b5034610181578060031936011261018157602060405162030d408152f35b5034610181576040600319360112610181576101e9611844565b60243567ffffffffffffffff8111610336576102099036906004016118bb565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361030e5781156102e6579061025791611be9565b90610263823283611a9c565b156102be5773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916102b8604051928392602084521694602083019061199b565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461018157806003193601126101815760209054604051908152f35b503461018157806003193601126101815760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101815760206003193601126101815773ffffffffffffffffffffffffffffffffffffffff6103c3611844565b6103cb611d26565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101815760206003193601126101815760043567ffffffffffffffff81116106535761048d90369060040161188a565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b8383106105d6578880898c610559828c03601f1981018452836118e9565b803b156105d2576105a583929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156105c7576105b65750f35b816105c0916118e9565b6101815780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c88820301865286358281121561064f57830160208135910167ffffffffffffffff821161064b57813603811361064b5761063d6001936020938493611a7c565b98019601949301919061053b565b8a80fd5b8980fd5b5080fd5b5034610181578060031936011261018157602060ff600154166040519015158152f35b5034610181578060031936011261018157602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101815780600319360112610181576107216040516106e36040826118e9565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b0390f35b50346101815780600319360112610181576107216040516107476040826118e9565b600581527f322e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b503461018157806003193601126101815760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610181576020600319360112610181577fd6670e3553251b4182025cba6c3e105a9e3fd89063232891411780ac3d1c27e36020600435610800611d26565b808455604051908152a180f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5060206003193601126101815760043567ffffffffffffffff81116106535761088d9036906004016118bb565b9081156109fd579061089e91611be9565b6108a9813233611a9c565b156109d55760ff60015416806109cb575b6108f7575b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806102b83394602083019061199b565b8154341061096d57600254348101809111610940576002556040513481527f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df60203392a26108bf565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e73756666696369656e7420666565000000000000000000000000000000006044820152fd5b50815415156108ba565b6004827fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004837fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b5034610181576020600319360112610181576004359067ffffffffffffffff821161018157610721610a63610a5d36600486016118bb565b90611be9565b60405191829160208352602083019061199b565b503461018157606060031936011261018157610a91611844565b90610a9a611867565b906044359067ffffffffffffffff8211610181576020610ac88585610ac23660048801611955565b91611a9c565b6040519015158152f35b5034610181578060031936011261018157610aeb611d26565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101815780600319360112610181576020600254604051908152f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461018157806003193601126101815773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c795760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b50604060031936011261018157610cb6611844565b9060243567ffffffffffffffff811161065357610cd7903690600401611955565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610f78575b50610f5057610d26611d26565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610f18575b50610da857602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610eed5750813b15610ec257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610e8f5780836020610e8b95519101845af4610e85611a4d565b91611de9565b5080f35b50505034610e9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610f48575b81610f34602093836118e9565b81010312610f445751945f610d77565b8480fd5b3d9150610f27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610d19565b50346110f25760206003193601126110f25760043567ffffffffffffffff81116110f257610fec9036906004016118bb565b61107b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169161106d6040519485927fe4a37d7a000000000000000000000000000000000000000000000000000000006020850152336024850152604060448501526064840191611a7c565b03601f1981018452836118e9565b803b156110f2576110c75f929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156110e7576110d9575080f35b6110e591505f906118e9565b005b6040513d5f823e3d90fd5b5f80fd5b346110f2575f6003193601126110f25761110e611d26565b7fb8e2aca102a1597f1cf2663b55e6eea08f4690c2bbd4b86b04d3ff308a65365260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060015460ff808216151691829116176001556040519015158152a1005b346110f2575f6003193601126110f257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346110f2575f6003193601126110f25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b346110f25760606003193601126110f257611212611844565b61121a611867565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff811680159081611559575b600114908161154f575b159081611546575b5061151e578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556114c9575b5073ffffffffffffffffffffffffffffffffffffffff8216156114a15782156114435761131873ffffffffffffffffffffffffffffffffffffffff92611308611d92565b611310611d92565b6101a9611d92565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055611388611d92565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400556113b057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846112c4565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586611271565b303b159150611269565b86915061125f565b346110f25760206003193601126110f25760043573ffffffffffffffffffffffffffffffffffffffff81168091036110f25761159b611d26565b801561167d574790811561161f575f80809381935af16115b9611a4d565b50156115c157005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206665657320746f207769746864726177000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152fd5b346110f25760406003193601126110f2576116f4611844565b60243567ffffffffffffffff81116110f25761171490369060040161188a565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361181c5782156117f4575f5b83811061176357005b61176e8185856119c0565b9050156117f45780611786610a5d60019387876119c0565b611791813286611a9c565b61179d575b500161175a565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806117eb73ffffffffffffffffffffffffffffffffffffffff881694602083019061199b565b0390a285611796565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f2576020808501948460051b0101116110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f257602083818601950101116110f257565b90601f601f19910116810190811067ffffffffffffffff82111761190c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161190c57601f01601f191660200190565b81601f820112156110f25780359061196c82611939565b9261197a60405194856118e9565b828452602083830101116110f257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9190811015611a205760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156110f257019081359167ffffffffffffffff83116110f25760200182360381136110f2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3d15611a77573d90611a5e82611939565b91611a6c60405193846118e9565b82523d5f602084013e565b606090565b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611bb7575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611af7575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611b608692604051978896879586957f7a3979dc00000000000000000000000000000000000000000000000000000000875216600486015216602484015260606044840152606483019061199b565b03915afa9081156110e7575f91611b7c575b50805f8080611aef565b90506020813d602011611baf575b81611b97602093836118e9565b810103126110f2575180151581036110f2575f611b72565b3d9150611b8a565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021611c3691836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826118e9565b90565b73ffffffffffffffffffffffffffffffffffffffff168015611cfa5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303611d6657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611dc157565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90611e265750805115611dfe57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611e79575b611e37575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611e2f56f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\xC04a\x01GW`\x1Fa \x028\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01KW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01GWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x80\x82\x03a\x01GW0`\x80R\x15a\x018W`\xA0R_Q` a\x1F\xE2_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01)W`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xD3W[`@Qa\x1E\x82\x90\x81a\x01`\x829`\x80Q\x81\x81\x81a\x0C)\x01Ra\x0C\xEE\x01R`\xA0Q\x81\x81\x81a\x02!\x01R\x81\x81a\x04\xA6\x01R\x81\x81a\x10\x06\x01R\x81\x81a\x11\x9B\x01Ra\x17,\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x1F\xE2_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x8FV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x16\xDBW\x80c\x16Nh\xDE\x14a\x15aW\x80c\x17\x94\xBB<\x14a\x11\xF9W\x80c$\x07\xF0\xB6\x14a\x11\xBFW\x80cC\xF9z\xE5\x14a\x11oW\x80cE\x13\xED\x15\x14a\x10\xF6W\x80cF\xE2\xCC\t\x14a\x0F\xBAW\x80cO\x1E\xF2\x86\x14a\x0C\xA1W\x80cR\xD1\x90-\x14a\x0C\x01W\x80c[<\xD6\xE2\x14a\x0B\xAEW\x80c`\xC6\xD8\xAE\x14a\x0B\x90W\x80cqP\x18\xA6\x14a\n\xD2W\x80cz9y\xDC\x14a\nwW\x80c\x85\x07I%\x14a\n%W\x80c\x8C$+\xCE\x14a\x08`W\x80c\x8D\xA5\xCB[\x14a\x08\rW\x80c\x94aDm\x14a\x07\xC0W\x80c\x95\xC5\xBFu\x14a\x07\x85W\x80c\xA0\xA8\xE4`\x14a\x07%W\x80c\xAD<\xB1\xCC\x14a\x06\xC1W\x80c\xB3\xC6P\x15\x14a\x06zW\x80c\xCC\x85R\xE9\x14a\x06WW\x80c\xCD\xAF\xB9x\x14a\x04[W\x80c\xD4\xF0\xEBM\x14a\x03\x94W\x80c\xD8x\x13B\x14a\x03WW\x80c\xDE\x18\x81\xA8\x14a\x03:W\x80c\xE4\xA3}z\x14a\x01\xCFW\x80c\xE8\xEB\x1D\xC3\x14a\x01\xB1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x84Wc\xFF\xA1\xADt\x14a\x01dW_\x80\xFD[4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Wa\x01\xAEa\x01\xA1a\x18DV[a\x01\xA9a\x1D&V[a\x1C9V[\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x03\r@\x81R\xF3[P4a\x01\x81W`@`\x03\x196\x01\x12a\x01\x81Wa\x01\xE9a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x036Wa\x02\t\x906\x90`\x04\x01a\x18\xBBV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x03\x0EW\x81\x15a\x02\xE6W\x90a\x02W\x91a\x1B\xE9V[\x90a\x02c\x822\x83a\x1A\x9CV[\x15a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02\xB8`@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x90T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xC3a\x18DV[a\x03\xCBa\x1D&V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x04\x8D\x906\x90`\x04\x01a\x18\x8AV[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05\xD6W\x88\x80\x89\x8Ca\x05Y\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x05\xD2Wa\x05\xA5\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x05\xC7Wa\x05\xB6WP\xF3[\x81a\x05\xC0\x91a\x18\xE9V[a\x01\x81W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x06OW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06KW\x816\x03\x81\x13a\x06KWa\x06=`\x01\x93` \x93\x84\x93a\x1A|V[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x05;V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x06\xE3`@\x82a\x18\xE9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[\x03\x90\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x07G`@\x82a\x18\xE9V[`\x05\x81R\x7F2.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W\x7F\xD6g\x0E5S%\x1BA\x82\x02\\\xBAl>\x10Z\x9E?\xD8\x90c#(\x91A\x17\x80\xAC=\x1C'\xE3` `\x045a\x08\0a\x1D&V[\x80\x84U`@Q\x90\x81R\xA1\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x08\x8D\x906\x90`\x04\x01a\x18\xBBV[\x90\x81\x15a\t\xFDW\x90a\x08\x9E\x91a\x1B\xE9V[a\x08\xA9\x8123a\x1A\x9CV[\x15a\t\xD5W`\xFF`\x01T\x16\x80a\t\xCBW[a\x08\xF7W[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x02\xB83\x94` \x83\x01\x90a\x19\x9BV[\x81T4\x10a\tmW`\x02T4\x81\x01\x80\x91\x11a\t@W`\x02U`@Q4\x81R\x7F\x06\xC5\xEF\xEF\xF5\xC3 \x94=&]\xC4\xE5\xF1\xAF\x95\xADR5U\xCE\x0C\x19W\xE3g\xDD\xA5QEr\xDF` 3\x92\xA2a\x08\xBFV[`$\x83\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x11`\x04R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInsufficient fee\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[P\x81T\x15\x15a\x08\xBAV[`\x04\x82\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x83\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81Wa\x07!a\nca\n]6`\x04\x86\x01a\x18\xBBV[\x90a\x1B\xE9V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W```\x03\x196\x01\x12a\x01\x81Wa\n\x91a\x18DV[\x90a\n\x9Aa\x18gV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81W` a\n\xC8\x85\x85a\n\xC26`\x04\x88\x01a\x19UV[\x91a\x1A\x9CV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\n\xEBa\x1D&V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\x02T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x0CyW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01\x81Wa\x0C\xB6a\x18DV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x0C\xD7\x906\x90`\x04\x01a\x19UV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0FxW[Pa\x0FPWa\r&a\x1D&V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0F\x18W[Pa\r\xA8W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0E\xEDWP\x81;\x15a\x0E\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0E\x8FW\x80\x83` a\x0E\x8B\x95Q\x91\x01\x84Z\xF4a\x0E\x85a\x1AMV[\x91a\x1D\xE9V[P\x80\xF3[PPP4a\x0E\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0FHW[\x81a\x0F4` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x0FDWQ\x94_a\rwV[\x84\x80\xFD[=\x91Pa\x0F'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\r\x19V[P4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x0F\xEC\x906\x90`\x04\x01a\x18\xBBV[a\x10{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\x10m`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x1A|V[\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x10\xF2Wa\x10\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x10\xE7Wa\x10\xD9WP\x80\xF3[a\x10\xE5\x91P_\x90a\x18\xE9V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2Wa\x11\x0Ea\x1D&V[\x7F\xB8\xE2\xAC\xA1\x02\xA1Y\x7F\x1C\xF2f;U\xE6\xEE\xA0\x8FF\x90\xC2\xBB\xD4\xB8k\x04\xD3\xFF0\x8Ae6R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x10\xF2W```\x03\x196\x01\x12a\x10\xF2Wa\x12\x12a\x18DV[a\x12\x1Aa\x18gV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x15YW[`\x01\x14\x90\x81a\x15OW[\x15\x90\x81a\x15FW[Pa\x15\x1EW\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x14\xC9W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x14\xA1W\x82\x15a\x14CWa\x13\x18s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x13\x08a\x1D\x92V[a\x13\x10a\x1D\x92V[a\x01\xA9a\x1D\x92V[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x13\x88a\x1D\x92V[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x13\xB0W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x12\xC4V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x12qV[0;\x15\x91Pa\x12iV[\x86\x91Pa\x12_V[4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x10\xF2Wa\x15\x9Ba\x1D&V[\x80\x15a\x16}WG\x90\x81\x15a\x16\x1FW_\x80\x80\x93\x81\x93Z\xF1a\x15\xB9a\x1AMV[P\x15a\x15\xC1W\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x13`$\x82\x01R\x7FNo fees to withdraw\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid recipient\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x10\xF2W`@`\x03\x196\x01\x12a\x10\xF2Wa\x16\xF4a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x17\x14\x906\x90`\x04\x01a\x18\x8AV[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x18\x1CW\x82\x15a\x17\xF4W_[\x83\x81\x10a\x17cW\0[a\x17n\x81\x85\x85a\x19\xC0V[\x90P\x15a\x17\xF4W\x80a\x17\x86a\n]`\x01\x93\x87\x87a\x19\xC0V[a\x17\x91\x812\x86a\x1A\x9CV[a\x17\x9DW[P\x01a\x17ZV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x17\xEBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x85a\x17\x96V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\x10\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x19\x0CW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x19\x0CW`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\x10\xF2W\x805\x90a\x19l\x82a\x199V[\x92a\x19z`@Q\x94\x85a\x18\xE9V[\x82\x84R` \x83\x83\x01\x01\x11a\x10\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x1A W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x10\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x01\x826\x03\x81\x13a\x10\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[=\x15a\x1AwW=\x90a\x1A^\x82a\x199V[\x91a\x1Al`@Q\x93\x84a\x18\xE9V[\x82R=_` \x84\x01>V[``\x90V[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1B\xB7WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1A\xF7W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1B`\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x19\x9BV[\x03\x91Z\xFA\x90\x81\x15a\x10\xE7W_\x91a\x1B|W[P\x80_\x80\x80a\x1A\xEFV[\x90P` \x81=` \x11a\x1B\xAFW[\x81a\x1B\x97` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x10\xF2WQ\x80\x15\x15\x81\x03a\x10\xF2W_a\x1BrV[=\x91Pa\x1B\x8AV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x1C6\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x18\xE9V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1C\xFAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x1DfWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x1D\xC1WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x1E&WP\x80Q\x15a\x1D\xFEW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x1EyW[a\x1E7WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x1E/V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146116db578063164e68de146115615780631794bb3c146111f95780632407f0b6146111bf57806343f97ae51461116f5780634513ed15146110f657806346e2cc0914610fba5780634f1ef28614610ca157806352d1902d14610c015780635b3cd6e214610bae57806360c6d8ae14610b90578063715018a614610ad25780637a3979dc14610a775780638507492514610a255780638c242bce146108605780638da5cb5b1461080d5780639461446d146107c057806395c5bf7514610785578063a0a8e46014610725578063ad3cb1cc146106c1578063b3c650151461067a578063cc8552e914610657578063cdafb9781461045b578063d4f0eb4d14610394578063d878134214610357578063de1881a81461033a578063e4a37d7a146101cf578063e8eb1dc3146101b1578063f2fde38b146101845763ffa1ad7414610164575f80fd5b346101815780600319360112610181576020604051620f42408152f35b80fd5b5034610181576020600319360112610181576101ae6101a1611844565b6101a9611d26565b611c39565b80f35b5034610181578060031936011261018157602060405162030d408152f35b5034610181576040600319360112610181576101e9611844565b60243567ffffffffffffffff8111610336576102099036906004016118bb565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361030e5781156102e6579061025791611be9565b90610263823283611a9c565b156102be5773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916102b8604051928392602084521694602083019061199b565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461018157806003193601126101815760209054604051908152f35b503461018157806003193601126101815760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101815760206003193601126101815773ffffffffffffffffffffffffffffffffffffffff6103c3611844565b6103cb611d26565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101815760206003193601126101815760043567ffffffffffffffff81116106535761048d90369060040161188a565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b8383106105d6578880898c610559828c03601f1981018452836118e9565b803b156105d2576105a583929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156105c7576105b65750f35b816105c0916118e9565b6101815780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c88820301865286358281121561064f57830160208135910167ffffffffffffffff821161064b57813603811361064b5761063d6001936020938493611a7c565b98019601949301919061053b565b8a80fd5b8980fd5b5080fd5b5034610181578060031936011261018157602060ff600154166040519015158152f35b5034610181578060031936011261018157602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101815780600319360112610181576107216040516106e36040826118e9565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b0390f35b50346101815780600319360112610181576107216040516107476040826118e9565b600581527f322e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b503461018157806003193601126101815760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610181576020600319360112610181577fd6670e3553251b4182025cba6c3e105a9e3fd89063232891411780ac3d1c27e36020600435610800611d26565b808455604051908152a180f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5060206003193601126101815760043567ffffffffffffffff81116106535761088d9036906004016118bb565b9081156109fd579061089e91611be9565b6108a9813233611a9c565b156109d55760ff60015416806109cb575b6108f7575b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806102b83394602083019061199b565b8154341061096d57600254348101809111610940576002556040513481527f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df60203392a26108bf565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e73756666696369656e7420666565000000000000000000000000000000006044820152fd5b50815415156108ba565b6004827fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004837fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b5034610181576020600319360112610181576004359067ffffffffffffffff821161018157610721610a63610a5d36600486016118bb565b90611be9565b60405191829160208352602083019061199b565b503461018157606060031936011261018157610a91611844565b90610a9a611867565b906044359067ffffffffffffffff8211610181576020610ac88585610ac23660048801611955565b91611a9c565b6040519015158152f35b5034610181578060031936011261018157610aeb611d26565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101815780600319360112610181576020600254604051908152f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461018157806003193601126101815773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c795760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b50604060031936011261018157610cb6611844565b9060243567ffffffffffffffff811161065357610cd7903690600401611955565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610f78575b50610f5057610d26611d26565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610f18575b50610da857602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610eed5750813b15610ec257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610e8f5780836020610e8b95519101845af4610e85611a4d565b91611de9565b5080f35b50505034610e9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610f48575b81610f34602093836118e9565b81010312610f445751945f610d77565b8480fd5b3d9150610f27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610d19565b50346110f25760206003193601126110f25760043567ffffffffffffffff81116110f257610fec9036906004016118bb565b61107b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169161106d6040519485927fe4a37d7a000000000000000000000000000000000000000000000000000000006020850152336024850152604060448501526064840191611a7c565b03601f1981018452836118e9565b803b156110f2576110c75f929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156110e7576110d9575080f35b6110e591505f906118e9565b005b6040513d5f823e3d90fd5b5f80fd5b346110f2575f6003193601126110f25761110e611d26565b7fb8e2aca102a1597f1cf2663b55e6eea08f4690c2bbd4b86b04d3ff308a65365260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060015460ff808216151691829116176001556040519015158152a1005b346110f2575f6003193601126110f257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346110f2575f6003193601126110f25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b346110f25760606003193601126110f257611212611844565b61121a611867565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff811680159081611559575b600114908161154f575b159081611546575b5061151e578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556114c9575b5073ffffffffffffffffffffffffffffffffffffffff8216156114a15782156114435761131873ffffffffffffffffffffffffffffffffffffffff92611308611d92565b611310611d92565b6101a9611d92565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055611388611d92565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400556113b057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846112c4565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586611271565b303b159150611269565b86915061125f565b346110f25760206003193601126110f25760043573ffffffffffffffffffffffffffffffffffffffff81168091036110f25761159b611d26565b801561167d574790811561161f575f80809381935af16115b9611a4d565b50156115c157005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206665657320746f207769746864726177000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152fd5b346110f25760406003193601126110f2576116f4611844565b60243567ffffffffffffffff81116110f25761171490369060040161188a565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361181c5782156117f4575f5b83811061176357005b61176e8185856119c0565b9050156117f45780611786610a5d60019387876119c0565b611791813286611a9c565b61179d575b500161175a565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806117eb73ffffffffffffffffffffffffffffffffffffffff881694602083019061199b565b0390a285611796565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f2576020808501948460051b0101116110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f257602083818601950101116110f257565b90601f601f19910116810190811067ffffffffffffffff82111761190c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161190c57601f01601f191660200190565b81601f820112156110f25780359061196c82611939565b9261197a60405194856118e9565b828452602083830101116110f257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9190811015611a205760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156110f257019081359167ffffffffffffffff83116110f25760200182360381136110f2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3d15611a77573d90611a5e82611939565b91611a6c60405193846118e9565b82523d5f602084013e565b606090565b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611bb7575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611af7575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611b608692604051978896879586957f7a3979dc00000000000000000000000000000000000000000000000000000000875216600486015216602484015260606044840152606483019061199b565b03915afa9081156110e7575f91611b7c575b50805f8080611aef565b90506020813d602011611baf575b81611b97602093836118e9565b810103126110f2575180151581036110f2575f611b72565b3d9150611b8a565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021611c3691836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826118e9565b90565b73ffffffffffffffffffffffffffffffffffffffff168015611cfa5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303611d6657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611dc157565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90611e265750805115611dfe57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611e79575b611e37575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611e2f56 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x16\xDBW\x80c\x16Nh\xDE\x14a\x15aW\x80c\x17\x94\xBB<\x14a\x11\xF9W\x80c$\x07\xF0\xB6\x14a\x11\xBFW\x80cC\xF9z\xE5\x14a\x11oW\x80cE\x13\xED\x15\x14a\x10\xF6W\x80cF\xE2\xCC\t\x14a\x0F\xBAW\x80cO\x1E\xF2\x86\x14a\x0C\xA1W\x80cR\xD1\x90-\x14a\x0C\x01W\x80c[<\xD6\xE2\x14a\x0B\xAEW\x80c`\xC6\xD8\xAE\x14a\x0B\x90W\x80cqP\x18\xA6\x14a\n\xD2W\x80cz9y\xDC\x14a\nwW\x80c\x85\x07I%\x14a\n%W\x80c\x8C$+\xCE\x14a\x08`W\x80c\x8D\xA5\xCB[\x14a\x08\rW\x80c\x94aDm\x14a\x07\xC0W\x80c\x95\xC5\xBFu\x14a\x07\x85W\x80c\xA0\xA8\xE4`\x14a\x07%W\x80c\xAD<\xB1\xCC\x14a\x06\xC1W\x80c\xB3\xC6P\x15\x14a\x06zW\x80c\xCC\x85R\xE9\x14a\x06WW\x80c\xCD\xAF\xB9x\x14a\x04[W\x80c\xD4\xF0\xEBM\x14a\x03\x94W\x80c\xD8x\x13B\x14a\x03WW\x80c\xDE\x18\x81\xA8\x14a\x03:W\x80c\xE4\xA3}z\x14a\x01\xCFW\x80c\xE8\xEB\x1D\xC3\x14a\x01\xB1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x84Wc\xFF\xA1\xADt\x14a\x01dW_\x80\xFD[4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Wa\x01\xAEa\x01\xA1a\x18DV[a\x01\xA9a\x1D&V[a\x1C9V[\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x03\r@\x81R\xF3[P4a\x01\x81W`@`\x03\x196\x01\x12a\x01\x81Wa\x01\xE9a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x036Wa\x02\t\x906\x90`\x04\x01a\x18\xBBV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x03\x0EW\x81\x15a\x02\xE6W\x90a\x02W\x91a\x1B\xE9V[\x90a\x02c\x822\x83a\x1A\x9CV[\x15a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02\xB8`@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x90T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xC3a\x18DV[a\x03\xCBa\x1D&V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x04\x8D\x906\x90`\x04\x01a\x18\x8AV[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05\xD6W\x88\x80\x89\x8Ca\x05Y\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x05\xD2Wa\x05\xA5\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x05\xC7Wa\x05\xB6WP\xF3[\x81a\x05\xC0\x91a\x18\xE9V[a\x01\x81W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x06OW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06KW\x816\x03\x81\x13a\x06KWa\x06=`\x01\x93` \x93\x84\x93a\x1A|V[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x05;V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x06\xE3`@\x82a\x18\xE9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[\x03\x90\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x07G`@\x82a\x18\xE9V[`\x05\x81R\x7F2.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W\x7F\xD6g\x0E5S%\x1BA\x82\x02\\\xBAl>\x10Z\x9E?\xD8\x90c#(\x91A\x17\x80\xAC=\x1C'\xE3` `\x045a\x08\0a\x1D&V[\x80\x84U`@Q\x90\x81R\xA1\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x08\x8D\x906\x90`\x04\x01a\x18\xBBV[\x90\x81\x15a\t\xFDW\x90a\x08\x9E\x91a\x1B\xE9V[a\x08\xA9\x8123a\x1A\x9CV[\x15a\t\xD5W`\xFF`\x01T\x16\x80a\t\xCBW[a\x08\xF7W[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x02\xB83\x94` \x83\x01\x90a\x19\x9BV[\x81T4\x10a\tmW`\x02T4\x81\x01\x80\x91\x11a\t@W`\x02U`@Q4\x81R\x7F\x06\xC5\xEF\xEF\xF5\xC3 \x94=&]\xC4\xE5\xF1\xAF\x95\xADR5U\xCE\x0C\x19W\xE3g\xDD\xA5QEr\xDF` 3\x92\xA2a\x08\xBFV[`$\x83\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x11`\x04R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInsufficient fee\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[P\x81T\x15\x15a\x08\xBAV[`\x04\x82\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x83\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81Wa\x07!a\nca\n]6`\x04\x86\x01a\x18\xBBV[\x90a\x1B\xE9V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W```\x03\x196\x01\x12a\x01\x81Wa\n\x91a\x18DV[\x90a\n\x9Aa\x18gV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81W` a\n\xC8\x85\x85a\n\xC26`\x04\x88\x01a\x19UV[\x91a\x1A\x9CV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\n\xEBa\x1D&V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\x02T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x160\x03a\x0CyW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01\x81Wa\x0C\xB6a\x18DV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x0C\xD7\x906\x90`\x04\x01a\x19UV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0FxW[Pa\x0FPWa\r&a\x1D&V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0F\x18W[Pa\r\xA8W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0E\xEDWP\x81;\x15a\x0E\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0E\x8FW\x80\x83` a\x0E\x8B\x95Q\x91\x01\x84Z\xF4a\x0E\x85a\x1AMV[\x91a\x1D\xE9V[P\x80\xF3[PPP4a\x0E\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0FHW[\x81a\x0F4` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x0FDWQ\x94_a\rwV[\x84\x80\xFD[=\x91Pa\x0F'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\r\x19V[P4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x0F\xEC\x906\x90`\x04\x01a\x18\xBBV[a\x10{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\x10m`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x1A|V[\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x10\xF2Wa\x10\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x10\xE7Wa\x10\xD9WP\x80\xF3[a\x10\xE5\x91P_\x90a\x18\xE9V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2Wa\x11\x0Ea\x1D&V[\x7F\xB8\xE2\xAC\xA1\x02\xA1Y\x7F\x1C\xF2f;U\xE6\xEE\xA0\x8FF\x90\xC2\xBB\xD4\xB8k\x04\xD3\xFF0\x8Ae6R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x10\xF2W```\x03\x196\x01\x12a\x10\xF2Wa\x12\x12a\x18DV[a\x12\x1Aa\x18gV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x15YW[`\x01\x14\x90\x81a\x15OW[\x15\x90\x81a\x15FW[Pa\x15\x1EW\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x14\xC9W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x14\xA1W\x82\x15a\x14CWa\x13\x18s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x13\x08a\x1D\x92V[a\x13\x10a\x1D\x92V[a\x01\xA9a\x1D\x92V[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x13\x88a\x1D\x92V[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x13\xB0W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x12\xC4V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x12qV[0;\x15\x91Pa\x12iV[\x86\x91Pa\x12_V[4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x10\xF2Wa\x15\x9Ba\x1D&V[\x80\x15a\x16}WG\x90\x81\x15a\x16\x1FW_\x80\x80\x93\x81\x93Z\xF1a\x15\xB9a\x1AMV[P\x15a\x15\xC1W\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x13`$\x82\x01R\x7FNo fees to withdraw\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid recipient\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x10\xF2W`@`\x03\x196\x01\x12a\x10\xF2Wa\x16\xF4a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x17\x14\x906\x90`\x04\x01a\x18\x8AV[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\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\x163\x03a\x18\x1CW\x82\x15a\x17\xF4W_[\x83\x81\x10a\x17cW\0[a\x17n\x81\x85\x85a\x19\xC0V[\x90P\x15a\x17\xF4W\x80a\x17\x86a\n]`\x01\x93\x87\x87a\x19\xC0V[a\x17\x91\x812\x86a\x1A\x9CV[a\x17\x9DW[P\x01a\x17ZV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x17\xEBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x85a\x17\x96V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\x10\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x19\x0CW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x19\x0CW`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\x10\xF2W\x805\x90a\x19l\x82a\x199V[\x92a\x19z`@Q\x94\x85a\x18\xE9V[\x82\x84R` \x83\x83\x01\x01\x11a\x10\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x1A W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x10\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x01\x826\x03\x81\x13a\x10\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[=\x15a\x1AwW=\x90a\x1A^\x82a\x199V[\x91a\x1Al`@Q\x93\x84a\x18\xE9V[\x82R=_` \x84\x01>V[``\x90V[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1B\xB7WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1A\xF7W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1B`\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x19\x9BV[\x03\x91Z\xFA\x90\x81\x15a\x10\xE7W_\x91a\x1B|W[P\x80_\x80\x80a\x1A\xEFV[\x90P` \x81=` \x11a\x1B\xAFW[\x81a\x1B\x97` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x10\xF2WQ\x80\x15\x15\x81\x03a\x10\xF2W_a\x1BrV[=\x91Pa\x1B\x8AV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x1C6\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x18\xE9V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1C\xFAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x1DfWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x1D\xC1WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x1E&WP\x80Q\x15a\x1D\xFEW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x1EyW[a\x1E7WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x1E/V", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. +```solidity +error DataTooLarge(uint256 dataLength, uint256 maxDataLength); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct DataTooLarge { + #[allow(missing_docs)] + pub dataLength: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: DataTooLarge) -> Self { + (value.dataLength, value.maxDataLength) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for DataTooLarge { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + dataLength: tuple.0, + maxDataLength: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for DataTooLarge { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; + const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.dataLength), + as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidInitialization { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for InvalidInitialization { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NoTxData()` and selector `0xdc37f51d`. +```solidity +error NoTxData(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NoTxData; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NoTxData) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NoTxData { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NoTxData { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NoTxData()"; + const SELECTOR: [u8; 4] = [220u8, 55u8, 245u8, 29u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotGasMeterContract()` and selector `0xdaf9861c`. +```solidity +error NotGasMeterContract(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotGasMeterContract; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotGasMeterContract) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotGasMeterContract { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotGasMeterContract { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotGasMeterContract()"; + const SELECTOR: [u8; 4] = [218u8, 249u8, 134u8, 28u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. +```solidity +error OwnableInvalidOwner(address owner); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableInvalidOwner { + #[allow(missing_docs)] + pub owner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OwnableInvalidOwner) -> Self { + (value.owner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OwnableInvalidOwner { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { owner: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableInvalidOwner { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; + const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.owner, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. +```solidity +error TransactionOrSenderNotAllowed(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct TransactionOrSenderNotAllowed; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: TransactionOrSenderNotAllowed) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for TransactionOrSenderNotAllowed { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; + const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. +```solidity +error UUPSUnauthorizedCallContext(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnauthorizedCallContext; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnauthorizedCallContext { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. +```solidity +error UUPSUnsupportedProxiableUUID(bytes32 slot); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnsupportedProxiableUUID { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { slot: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ZeroAddress()` and selector `0xd92e233d`. +```solidity +error ZeroAddress(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ZeroAddress; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroAddress) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ZeroAddress { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ZeroAddress { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ZeroAddress()"; + const SELECTOR: [u8; 4] = [217u8, 46u8, 35u8, 61u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `FeeCollected(address,uint256)` and selector `0x06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df`. +```solidity +event FeeCollected(address indexed payer, uint256 amount); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct FeeCollected { + #[allow(missing_docs)] + pub payer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub amount: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for FeeCollected { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "FeeCollected(address,uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 6u8, 197u8, 239u8, 239u8, 245u8, 195u8, 32u8, 148u8, 61u8, 38u8, 93u8, + 196u8, 229u8, 241u8, 175u8, 149u8, 173u8, 82u8, 53u8, 85u8, 206u8, 12u8, + 25u8, 87u8, 227u8, 103u8, 221u8, 165u8, 81u8, 69u8, 114u8, 223u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + payer: topics.1, + amount: data.0, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.amount), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.payer.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.payer, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for FeeCollected { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&FeeCollected> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &FeeCollected) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `FeeCollectionToggled(bool)` and selector `0xb8e2aca102a1597f1cf2663b55e6eea08f4690c2bbd4b86b04d3ff308a653652`. +```solidity +event FeeCollectionToggled(bool enabled); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct FeeCollectionToggled { + #[allow(missing_docs)] + pub enabled: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for FeeCollectionToggled { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "FeeCollectionToggled(bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 184u8, 226u8, 172u8, 161u8, 2u8, 161u8, 89u8, 127u8, 28u8, 242u8, 102u8, + 59u8, 85u8, 230u8, 238u8, 160u8, 143u8, 70u8, 144u8, 194u8, 187u8, 212u8, + 184u8, 107u8, 4u8, 211u8, 255u8, 48u8, 138u8, 101u8, 54u8, 82u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { enabled: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.enabled, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for FeeCollectionToggled { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&FeeCollectionToggled> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &FeeCollectionToggled) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. +```solidity +event Initialized(uint64 version); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. +```solidity +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.previousOwner, + ); + out[2usize] = ::encode_topic( + &self.newOwner, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `ProcessingFeeUpdated(uint256)` and selector `0xd6670e3553251b4182025cba6c3e105a9e3fd89063232891411780ac3d1c27e3`. +```solidity +event ProcessingFeeUpdated(uint256 newFee); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct ProcessingFeeUpdated { + #[allow(missing_docs)] + pub newFee: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for ProcessingFeeUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "ProcessingFeeUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 214u8, 103u8, 14u8, 53u8, 83u8, 37u8, 27u8, 65u8, 130u8, 2u8, 92u8, + 186u8, 108u8, 62u8, 16u8, 90u8, 158u8, 63u8, 216u8, 144u8, 99u8, 35u8, + 40u8, 145u8, 65u8, 23u8, 128u8, 172u8, 61u8, 28u8, 39u8, 227u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newFee: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newFee), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for ProcessingFeeUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&ProcessingFeeUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &ProcessingFeeUpdated) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `RequirementModuleUpdated(address)` and selector `0x253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b9`. +```solidity +event RequirementModuleUpdated(address indexed newModule); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct RequirementModuleUpdated { + #[allow(missing_docs)] + pub newModule: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for RequirementModuleUpdated { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "RequirementModuleUpdated(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newModule: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.newModule.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.newModule, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for RequirementModuleUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&RequirementModuleUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &RequirementModuleUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `TransactionProcessed(address,bytes)` and selector `0x83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f`. +```solidity +event TransactionProcessed(address indexed sender, bytes data); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct TransactionProcessed { + #[allow(missing_docs)] + pub sender: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TransactionProcessed { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "TransactionProcessed(address,bytes)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + sender: topics.1, + data: data.0, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.sender.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.sender, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TransactionProcessed { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + /**Constructor`. +```solidity +constructor(address _gasMeter); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall { + #[allow(missing_docs)] + pub _gasMeter: alloy::sol_types::private::Address, + } + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value._gasMeter,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _gasMeter: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._gasMeter, + ), + ) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SEQUENCING_MODULE_STORAGE_LOCATION()` and selector `0x2407f0b6`. +```solidity +function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SEQUENCING_MODULE_STORAGE_LOCATION()`](SEQUENCING_MODULE_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SEQUENCING_MODULE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [36u8, 7u8, 240u8, 182u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()` and selector `0x95c5bf75`. +```solidity +function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()`](SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from( + value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn, + ) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [149u8, 197u8, 191u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. +```solidity +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `VERSION()` and selector `0xffa1ad74`. +```solidity +function VERSION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `_processTransaction(address,bytes)` and selector `0xe4a37d7a`. +```solidity +function _processTransaction(address sequencer, bytes memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionCall { + #[allow(missing_docs)] + pub sequencer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`_processTransaction(address,bytes)`](_processTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionCall> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionCall) -> Self { + (value.sequencer, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + sequencer: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionReturn> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl _processTransactionReturn { + fn _tokenize( + &self, + ) -> <_processTransactionCall as alloy_sol_types::SolCall>::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for _processTransactionCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = _processTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "_processTransaction(address,bytes)"; + const SELECTOR: [u8; 4] = [228u8, 163u8, 125u8, 122u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.sequencer, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + _processTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `_processTransactionsBulk(address,bytes[])` and selector `0x12281983`. +```solidity +function _processTransactionsBulk(address sequencer, bytes[] memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionsBulkCall { + #[allow(missing_docs)] + pub sequencer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, + } + ///Container type for the return parameters of the [`_processTransactionsBulk(address,bytes[])`](_processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionsBulkReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Vec, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionsBulkCall> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionsBulkCall) -> Self { + (value.sequencer, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionsBulkCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + sequencer: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionsBulkReturn> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionsBulkReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionsBulkReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl _processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> <_processTransactionsBulkCall as alloy_sol_types::SolCall>::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for _processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = _processTransactionsBulkReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "_processTransactionsBulk(address,bytes[])"; + const SELECTOR: [u8; 4] = [18u8, 40u8, 25u8, 131u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.sequencer, + ), + as alloy_sol_types::SolType>::tokenize(&self.data), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + _processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `appchainId()` and selector `0xd8781342`. +```solidity +function appchainId() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for appchainIdCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "appchainId()"; + const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `contractVersion()` and selector `0xa0a8e460`. +```solidity +function contractVersion() external pure returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct contractVersionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`contractVersion()`](contractVersionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct contractVersionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: contractVersionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for contractVersionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: contractVersionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for contractVersionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for contractVersionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "contractVersion()"; + const SELECTOR: [u8; 4] = [160u8, 168u8, 228u8, 96u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: contractVersionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: contractVersionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. +```solidity +function encodeTransaction(bytes memory data) external pure returns (bytes memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for encodeTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Bytes; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "encodeTransaction(bytes)"; + const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `feeCollectionEnabled()` and selector `0xcc8552e9`. +```solidity +function feeCollectionEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct feeCollectionEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`feeCollectionEnabled()`](feeCollectionEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct feeCollectionEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: feeCollectionEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for feeCollectionEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: feeCollectionEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for feeCollectionEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for feeCollectionEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "feeCollectionEnabled()"; + const SELECTOR: [u8; 4] = [204u8, 133u8, 82u8, 233u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: feeCollectionEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: feeCollectionEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasMeter()` and selector `0x43f97ae5`. +```solidity +function gasMeter() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasMeter()`](gasMeterCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasMeterCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasMeterReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasMeterCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasMeter()"; + const SELECTOR: [u8; 4] = [67u8, 249u8, 122u8, 229u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasMeterReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasMeterReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getInitializedVersion()` and selector `0xb3c65015`. +```solidity +function getInitializedVersion() external view returns (uint64); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getInitializedVersionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getInitializedVersion()`](getInitializedVersionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getInitializedVersionReturn { + #[allow(missing_docs)] + pub _0: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getInitializedVersionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u64,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getInitializedVersionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getInitializedVersionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = u64; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getInitializedVersion()"; + const SELECTOR: [u8; 4] = [179u8, 198u8, 80u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getInitializedVersionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getInitializedVersionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `initialize(address,address,uint256)` and selector `0x1794bb3c`. +```solidity +function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeCall { + #[allow(missing_docs)] + pub admin: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _permissionRequirementModule: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`initialize(address,address,uint256)`](initializeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + (value.admin, value._permissionRequirementModule, value._appchainId) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + admin: tuple.0, + _permissionRequirementModule: tuple.1, + _appchainId: tuple.2, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize(address,address,uint256)"; + const SELECTOR: [u8; 4] = [23u8, 148u8, 187u8, 60u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.admin, + ), + ::tokenize( + &self._permissionRequirementModule, + ), + as alloy_sol_types::SolType>::tokenize(&self._appchainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + initializeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isAllowed(address,address,bytes)` and selector `0x7a3979dc`. +```solidity +function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedCall { + #[allow(missing_docs)] + pub proposer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub originator: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isAllowed(address,address,bytes)`](isAllowedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedCall) -> Self { + (value.proposer, value.originator, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + proposer: tuple.0, + originator: tuple.1, + data: tuple.2, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isAllowedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isAllowed(address,address,bytes)"; + const SELECTOR: [u8; 4] = [122u8, 57u8, 121u8, 220u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.proposer, + ), + ::tokenize( + &self.originator, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxDataSize()` and selector `0xe8eb1dc3`. +```solidity +function maxDataSize() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxDataSize()`](maxDataSizeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxDataSizeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxDataSize()"; + const SELECTOR: [u8; 4] = [232u8, 235u8, 29u8, 195u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `owner()` and selector `0x8da5cb5b`. +```solidity +function owner() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`owner()`](ownerCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `permissionRequirementModule()` and selector `0x5b3cd6e2`. +```solidity +function permissionRequirementModule() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`permissionRequirementModule()`](permissionRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for permissionRequirementModuleCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "permissionRequirementModule()"; + const SELECTOR: [u8; 4] = [91u8, 60u8, 214u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransaction(bytes)` and selector `0x46e2cc09`. +```solidity +function processTransaction(bytes memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`processTransaction(bytes)`](processTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransaction(bytes)"; + const SELECTOR: [u8; 4] = [70u8, 226u8, 204u8, 9u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransactionWithFee(bytes)` and selector `0x8c242bce`. +```solidity +function processTransactionWithFee(bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionWithFeeCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`processTransactionWithFee(bytes)`](processTransactionWithFeeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionWithFeeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionWithFeeCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionWithFeeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionWithFeeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionWithFeeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionWithFeeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionWithFeeCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionWithFeeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransactionWithFee(bytes)"; + const SELECTOR: [u8; 4] = [140u8, 36u8, 43u8, 206u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionWithFeeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransactionsBulk(bytes[])` and selector `0xcdafb978`. +```solidity +function processTransactionsBulk(bytes[] memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, + } + ///Container type for the return parameters of the [`processTransactionsBulk(bytes[])`](processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Vec, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionsBulkReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransactionsBulk(bytes[])"; + const SELECTOR: [u8; 4] = [205u8, 175u8, 185u8, 120u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.data), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processingFee()` and selector `0xde1881a8`. +```solidity +function processingFee() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processingFeeCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`processingFee()`](processingFeeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processingFeeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: processingFeeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for processingFeeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: processingFeeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for processingFeeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processingFeeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processingFee()"; + const SELECTOR: [u8; 4] = [222u8, 24u8, 129u8, 168u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: processingFeeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: processingFeeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. +```solidity +function proxiableUUID() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for proxiableUUIDCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. +```solidity +function renounceOwnership() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl renounceOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + renounceOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setProcessingFee(uint256)` and selector `0x9461446d`. +```solidity +function setProcessingFee(uint256 _fee) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setProcessingFeeCall { + #[allow(missing_docs)] + pub _fee: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setProcessingFee(uint256)`](setProcessingFeeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setProcessingFeeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setProcessingFeeCall) -> Self { + (value._fee,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setProcessingFeeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _fee: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setProcessingFeeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setProcessingFeeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setProcessingFeeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setProcessingFeeCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setProcessingFeeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setProcessingFee(uint256)"; + const SELECTOR: [u8; 4] = [148u8, 97u8, 68u8, 109u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._fee), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setProcessingFeeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `toggleFeeCollection()` and selector `0x4513ed15`. +```solidity +function toggleFeeCollection() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleFeeCollectionCall; + ///Container type for the return parameters of the [`toggleFeeCollection()`](toggleFeeCollectionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleFeeCollectionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleFeeCollectionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleFeeCollectionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleFeeCollectionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleFeeCollectionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl toggleFeeCollectionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for toggleFeeCollectionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = toggleFeeCollectionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "toggleFeeCollection()"; + const SELECTOR: [u8; 4] = [69u8, 19u8, 237u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + toggleFeeCollectionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `totalFeesCollected()` and selector `0x60c6d8ae`. +```solidity +function totalFeesCollected() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct totalFeesCollectedCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`totalFeesCollected()`](totalFeesCollectedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct totalFeesCollectedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: totalFeesCollectedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for totalFeesCollectedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: totalFeesCollectedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for totalFeesCollectedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for totalFeesCollectedCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "totalFeesCollected()"; + const SELECTOR: [u8; 4] = [96u8, 198u8, 216u8, 174u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: totalFeesCollectedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: totalFeesCollectedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. +```solidity +function transferOwnership(address newOwner) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipCall { + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + transferOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. +```solidity +function updateRequirementModule(address _newModule) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleCall { + #[allow(missing_docs)] + pub _newModule: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleCall) -> Self { + (value._newModule,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _newModule: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl updateRequirementModuleReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateRequirementModuleCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateRequirementModuleReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateRequirementModule(address)"; + const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._newModule, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + updateRequirementModuleReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. +```solidity +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newImplementation: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl upgradeToAndCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = upgradeToAndCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + upgradeToAndCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `withdrawFees(address)` and selector `0x164e68de`. +```solidity +function withdrawFees(address recipient) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct withdrawFeesCall { + #[allow(missing_docs)] + pub recipient: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`withdrawFees(address)`](withdrawFeesCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct withdrawFeesReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: withdrawFeesCall) -> Self { + (value.recipient,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for withdrawFeesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { recipient: tuple.0 } + } + } + } + { + #[doc(hidden)] + #[allow(dead_code)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: withdrawFeesReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for withdrawFeesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl withdrawFeesReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for withdrawFeesCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = withdrawFeesReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "withdrawFees(address)"; + const SELECTOR: [u8; 4] = [22u8, 78u8, 104u8, 222u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.recipient, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + withdrawFeesReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + ///Container for all the [`SyndicateSequencingChainUpgradeV2`](self) function calls. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum SyndicateSequencingChainUpgradeV2Calls { + #[allow(missing_docs)] + SEQUENCING_MODULE_STORAGE_LOCATION(SEQUENCING_MODULE_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + ), + #[allow(missing_docs)] + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), + #[allow(missing_docs)] + VERSION(VERSIONCall), + #[allow(missing_docs)] + _processTransaction(_processTransactionCall), + #[allow(missing_docs)] + _processTransactionsBulk(_processTransactionsBulkCall), + #[allow(missing_docs)] + appchainId(appchainIdCall), + #[allow(missing_docs)] + contractVersion(contractVersionCall), + #[allow(missing_docs)] + encodeTransaction(encodeTransactionCall), + #[allow(missing_docs)] + feeCollectionEnabled(feeCollectionEnabledCall), + #[allow(missing_docs)] + gasMeter(gasMeterCall), + #[allow(missing_docs)] + getInitializedVersion(getInitializedVersionCall), + #[allow(missing_docs)] + initialize(initializeCall), + #[allow(missing_docs)] + isAllowed(isAllowedCall), + #[allow(missing_docs)] + maxDataSize(maxDataSizeCall), + #[allow(missing_docs)] + owner(ownerCall), + #[allow(missing_docs)] + permissionRequirementModule(permissionRequirementModuleCall), + #[allow(missing_docs)] + processTransaction(processTransactionCall), + #[allow(missing_docs)] + processTransactionWithFee(processTransactionWithFeeCall), + #[allow(missing_docs)] + processTransactionsBulk(processTransactionsBulkCall), + #[allow(missing_docs)] + processingFee(processingFeeCall), + #[allow(missing_docs)] + proxiableUUID(proxiableUUIDCall), + #[allow(missing_docs)] + renounceOwnership(renounceOwnershipCall), + #[allow(missing_docs)] + setProcessingFee(setProcessingFeeCall), + #[allow(missing_docs)] + toggleFeeCollection(toggleFeeCollectionCall), + #[allow(missing_docs)] + totalFeesCollected(totalFeesCollectedCall), + #[allow(missing_docs)] + transferOwnership(transferOwnershipCall), + #[allow(missing_docs)] + updateRequirementModule(updateRequirementModuleCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), + #[allow(missing_docs)] + withdrawFees(withdrawFeesCall), + } + impl SyndicateSequencingChainUpgradeV2Calls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [18u8, 40u8, 25u8, 131u8], + [22u8, 78u8, 104u8, 222u8], + [23u8, 148u8, 187u8, 60u8], + [36u8, 7u8, 240u8, 182u8], + [67u8, 249u8, 122u8, 229u8], + [69u8, 19u8, 237u8, 21u8], + [70u8, 226u8, 204u8, 9u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], + [91u8, 60u8, 214u8, 226u8], + [96u8, 198u8, 216u8, 174u8], + [113u8, 80u8, 24u8, 166u8], + [122u8, 57u8, 121u8, 220u8], + [133u8, 7u8, 73u8, 37u8], + [140u8, 36u8, 43u8, 206u8], + [141u8, 165u8, 203u8, 91u8], + [148u8, 97u8, 68u8, 109u8], + [149u8, 197u8, 191u8, 117u8], + [160u8, 168u8, 228u8, 96u8], + [173u8, 60u8, 177u8, 204u8], + [179u8, 198u8, 80u8, 21u8], + [204u8, 133u8, 82u8, 233u8], + [205u8, 175u8, 185u8, 120u8], + [212u8, 240u8, 235u8, 77u8], + [216u8, 120u8, 19u8, 66u8], + [222u8, 24u8, 129u8, 168u8], + [228u8, 163u8, 125u8, 122u8], + [232u8, 235u8, 29u8, 195u8], + [242u8, 253u8, 227u8, 139u8], + [255u8, 161u8, 173u8, 116u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(_processTransactionsBulk), + ::core::stringify!(withdrawFees), + ::core::stringify!(initialize), + ::core::stringify!(SEQUENCING_MODULE_STORAGE_LOCATION), + ::core::stringify!(gasMeter), + ::core::stringify!(toggleFeeCollection), + ::core::stringify!(processTransaction), + ::core::stringify!(upgradeToAndCall), + ::core::stringify!(proxiableUUID), + ::core::stringify!(permissionRequirementModule), + ::core::stringify!(totalFeesCollected), + ::core::stringify!(renounceOwnership), + ::core::stringify!(isAllowed), + ::core::stringify!(encodeTransaction), + ::core::stringify!(processTransactionWithFee), + ::core::stringify!(owner), + ::core::stringify!(setProcessingFee), + ::core::stringify!(SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION), + ::core::stringify!(contractVersion), + ::core::stringify!(UPGRADE_INTERFACE_VERSION), + ::core::stringify!(getInitializedVersion), + ::core::stringify!(feeCollectionEnabled), + ::core::stringify!(processTransactionsBulk), + ::core::stringify!(updateRequirementModule), + ::core::stringify!(appchainId), + ::core::stringify!(processingFee), + ::core::stringify!(_processTransaction), + ::core::stringify!(maxDataSize), + ::core::stringify!(transferOwnership), + ::core::stringify!(VERSION), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + <_processTransactionCall as alloy_sol_types::SolCall>::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for SyndicateSequencingChainUpgradeV2Calls { + const NAME: &'static str = "SyndicateSequencingChainUpgradeV2Calls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 30usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::SEQUENCING_MODULE_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR + } + Self::VERSION(_) => ::SELECTOR, + Self::_processTransaction(_) => { + <_processTransactionCall as alloy_sol_types::SolCall>::SELECTOR + } + Self::_processTransactionsBulk(_) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::SELECTOR + } + Self::appchainId(_) => { + ::SELECTOR + } + Self::contractVersion(_) => { + ::SELECTOR + } + Self::encodeTransaction(_) => { + ::SELECTOR + } + Self::feeCollectionEnabled(_) => { + ::SELECTOR + } + Self::gasMeter(_) => ::SELECTOR, + Self::getInitializedVersion(_) => { + ::SELECTOR + } + Self::initialize(_) => { + ::SELECTOR + } + Self::isAllowed(_) => { + ::SELECTOR + } + Self::maxDataSize(_) => { + ::SELECTOR + } + Self::owner(_) => ::SELECTOR, + Self::permissionRequirementModule(_) => { + ::SELECTOR + } + Self::processTransaction(_) => { + ::SELECTOR + } + Self::processTransactionWithFee(_) => { + ::SELECTOR + } + Self::processTransactionsBulk(_) => { + ::SELECTOR + } + Self::processingFee(_) => { + ::SELECTOR + } + Self::proxiableUUID(_) => { + ::SELECTOR + } + Self::renounceOwnership(_) => { + ::SELECTOR + } + Self::setProcessingFee(_) => { + ::SELECTOR + } + Self::toggleFeeCollection(_) => { + ::SELECTOR + } + Self::totalFeesCollected(_) => { + ::SELECTOR + } + Self::transferOwnership(_) => { + ::SELECTOR + } + Self::updateRequirementModule(_) => { + ::SELECTOR + } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } + Self::withdrawFees(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn _processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransactionsBulk, + ) + } + _processTransactionsBulk + }, + { + fn withdrawFees( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::withdrawFees) + } + withdrawFees + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::initialize) + } + initialize + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn gasMeter( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::gasMeter) + } + gasMeter + }, + { + fn toggleFeeCollection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::toggleFeeCollection, + ) + } + toggleFeeCollection + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::proxiableUUID) + } + proxiableUUID + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn totalFeesCollected( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::totalFeesCollected, + ) + } + totalFeesCollected + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::isAllowed) + } + isAllowed + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn processTransactionWithFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionWithFee, + ) + } + processTransactionWithFee + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::owner) + } + owner + }, + { + fn setProcessingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::setProcessingFee, + ) + } + setProcessingFee + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn contractVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::contractVersion) + } + contractVersion + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn getInitializedVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::getInitializedVersion, + ) + } + getInitializedVersion + }, + { + fn feeCollectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::feeCollectionEnabled, + ) + } + feeCollectionEnabled + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::appchainId) + } + appchainId + }, + { + fn processingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::processingFee) + } + processingFee + }, + { + fn _processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransaction, + ) + } + _processTransaction + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::maxDataSize) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::transferOwnership, + ) + } + transferOwnership + }, + { + fn VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn _processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransactionsBulk, + ) + } + _processTransactionsBulk + }, + { + fn withdrawFees( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::withdrawFees) + } + withdrawFees + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::initialize) + } + initialize + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn gasMeter( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::gasMeter) + } + gasMeter + }, + { + fn toggleFeeCollection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::toggleFeeCollection, + ) + } + toggleFeeCollection + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::proxiableUUID) + } + proxiableUUID + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn totalFeesCollected( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::totalFeesCollected, + ) + } + totalFeesCollected + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::isAllowed) + } + isAllowed + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn processTransactionWithFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionWithFee, + ) + } + processTransactionWithFee + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::owner) + } + owner + }, + { + fn setProcessingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::setProcessingFee, + ) + } + setProcessingFee + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn contractVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::contractVersion) + } + contractVersion + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn getInitializedVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::getInitializedVersion, + ) + } + getInitializedVersion + }, + { + fn feeCollectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::feeCollectionEnabled, + ) + } + feeCollectionEnabled + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::appchainId) + } + appchainId + }, + { + fn processingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::processingFee) + } + processingFee + }, + { + fn _processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransaction, + ) + } + _processTransaction + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::maxDataSize) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::transferOwnership, + ) + } + transferOwnership + }, + { + fn VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::VERSION(inner) => { + ::abi_encoded_size(inner) + } + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encoded_size( + inner, + ) + } + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encoded_size( + inner, + ) + } + Self::appchainId(inner) => { + ::abi_encoded_size(inner) + } + Self::contractVersion(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::feeCollectionEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::gasMeter(inner) => { + ::abi_encoded_size(inner) + } + Self::getInitializedVersion(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::initialize(inner) => { + ::abi_encoded_size(inner) + } + Self::isAllowed(inner) => { + ::abi_encoded_size(inner) + } + Self::maxDataSize(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::owner(inner) => { + ::abi_encoded_size(inner) + } + Self::permissionRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransactionWithFee(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processingFee(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setProcessingFee(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::toggleFeeCollection(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::totalFeesCollected(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::transferOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::withdrawFees(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encode_raw( + inner, + out, + ) + } + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encode_raw( + inner, + out, + ) + } + Self::appchainId(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::contractVersion(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::feeCollectionEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::gasMeter(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getInitializedVersion(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::initialize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::isAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxDataSize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::owner(inner) => { + ::abi_encode_raw(inner, out) + } + Self::permissionRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransactionWithFee(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processingFee(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setProcessingFee(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::toggleFeeCollection(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::totalFeesCollected(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::transferOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::withdrawFees(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainUpgradeV2`](self) custom errors. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainUpgradeV2Errors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + DataTooLarge(DataTooLarge), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), + #[allow(missing_docs)] + NoTxData(NoTxData), + #[allow(missing_docs)] + NotGasMeterContract(NotGasMeterContract), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] + OwnableInvalidOwner(OwnableInvalidOwner), + #[allow(missing_docs)] + OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), + #[allow(missing_docs)] + TransactionOrSenderNotAllowed(TransactionOrSenderNotAllowed), + #[allow(missing_docs)] + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroAddress(ZeroAddress), + } + impl SyndicateSequencingChainUpgradeV2Errors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [17u8, 140u8, 218u8, 167u8], + [30u8, 79u8, 189u8, 247u8], + [70u8, 52u8, 105u8, 27u8], + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [217u8, 46u8, 35u8, 61u8], + [218u8, 249u8, 134u8, 28u8], + [220u8, 55u8, 245u8, 29u8], + [220u8, 116u8, 20u8, 88u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(OwnableUnauthorizedAccount), + ::core::stringify!(OwnableInvalidOwner), + ::core::stringify!(DataTooLarge), + ::core::stringify!(ERC1967InvalidImplementation), + ::core::stringify!(AddressEmptyCode), + ::core::stringify!(UUPSUnsupportedProxiableUUID), + ::core::stringify!(ERC1967NonPayable), + ::core::stringify!(FailedCall), + ::core::stringify!(NotInitializing), + ::core::stringify!(ZeroAddress), + ::core::stringify!(NotGasMeterContract), + ::core::stringify!(NoTxData), + ::core::stringify!(TransactionOrSenderNotAllowed), + ::core::stringify!(UUPSUnauthorizedCallContext), + ::core::stringify!(InvalidInitialization), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 4usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for SyndicateSequencingChainUpgradeV2Errors { + const NAME: &'static str = "SyndicateSequencingChainUpgradeV2Errors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 15usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::DataTooLarge(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR + } + Self::NoTxData(_) => ::SELECTOR, + Self::NotGasMeterContract(_) => { + ::SELECTOR + } + Self::NotInitializing(_) => { + ::SELECTOR + } + Self::OwnableInvalidOwner(_) => { + ::SELECTOR + } + Self::OwnableUnauthorizedAccount(_) => { + ::SELECTOR + } + Self::TransactionOrSenderNotAllowed(_) => { + ::SELECTOR + } + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroAddress(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::DataTooLarge) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotInitializing, + ) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::ZeroAddress) + } + ZeroAddress + }, + { + fn NotGasMeterContract( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotGasMeterContract, + ) + } + NotGasMeterContract + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::NoTxData) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::DataTooLarge) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotInitializing, + ) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::ZeroAddress) + } + ZeroAddress + }, + { + fn NotGasMeterContract( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotGasMeterContract, + ) + } + NotGasMeterContract + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::NoTxData) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encoded_size(inner) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NoTxData(inner) => { + ::abi_encoded_size(inner) + } + Self::NotGasMeterContract(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ZeroAddress(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NoTxData(inner) => { + ::abi_encode_raw(inner, out) + } + Self::NotGasMeterContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroAddress(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainUpgradeV2`](self) events. + #[derive(Clone)] + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainUpgradeV2Events { + #[allow(missing_docs)] + FeeCollected(FeeCollected), + #[allow(missing_docs)] + FeeCollectionToggled(FeeCollectionToggled), + #[allow(missing_docs)] + Initialized(Initialized), + #[allow(missing_docs)] + OwnershipTransferred(OwnershipTransferred), + #[allow(missing_docs)] + ProcessingFeeUpdated(ProcessingFeeUpdated), + #[allow(missing_docs)] + RequirementModuleUpdated(RequirementModuleUpdated), + #[allow(missing_docs)] + TransactionProcessed(TransactionProcessed), + #[allow(missing_docs)] + Upgraded(Upgraded), + } + impl SyndicateSequencingChainUpgradeV2Events { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 6u8, 197u8, 239u8, 239u8, 245u8, 195u8, 32u8, 148u8, 61u8, 38u8, 93u8, + 196u8, 229u8, 241u8, 175u8, 149u8, 173u8, 82u8, 53u8, 85u8, 206u8, 12u8, + 25u8, 87u8, 227u8, 103u8, 221u8, 165u8, 81u8, 69u8, 114u8, 223u8, + ], + [ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ], + [ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ], + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 184u8, 226u8, 172u8, 161u8, 2u8, 161u8, 89u8, 127u8, 28u8, 242u8, 102u8, + 59u8, 85u8, 230u8, 238u8, 160u8, 143u8, 70u8, 144u8, 194u8, 187u8, 212u8, + 184u8, 107u8, 4u8, 211u8, 255u8, 48u8, 138u8, 101u8, 54u8, 82u8, + ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], + [ + 214u8, 103u8, 14u8, 53u8, 83u8, 37u8, 27u8, 65u8, 130u8, 2u8, 92u8, + 186u8, 108u8, 62u8, 16u8, 90u8, 158u8, 63u8, 216u8, 144u8, 99u8, 35u8, + 40u8, 145u8, 65u8, 23u8, 128u8, 172u8, 61u8, 28u8, 39u8, 227u8, + ], + ]; + /// The names of the variants in the same order as `SELECTORS`. + pub const VARIANT_NAMES: &'static [&'static str] = &[ + ::core::stringify!(FeeCollected), + ::core::stringify!(RequirementModuleUpdated), + ::core::stringify!(TransactionProcessed), + ::core::stringify!(OwnershipTransferred), + ::core::stringify!(FeeCollectionToggled), + ::core::stringify!(Upgraded), + ::core::stringify!(Initialized), + ::core::stringify!(ProcessingFeeUpdated), + ]; + /// The signatures in the same order as `SELECTORS`. + pub const SIGNATURES: &'static [&'static str] = &[ + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ::SIGNATURE, + ]; + /// Returns the signature for the given selector, if known. + #[inline] + pub fn signature_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + match Self::SELECTORS.binary_search(&selector) { + ::core::result::Result::Ok(idx) => { + ::core::option::Option::Some(Self::SIGNATURES[idx]) + } + ::core::result::Result::Err(_) => ::core::option::Option::None, + } + } + /// Returns the enum variant name for the given selector, if known. + #[inline] + pub fn name_by_selector( + selector: [u8; 32usize], + ) -> ::core::option::Option<&'static str> { + let sig = Self::signature_by_selector(selector)?; + sig.split_once('(').map(|(name, _)| name) + } + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for SyndicateSequencingChainUpgradeV2Events { + const NAME: &'static str = "SyndicateSequencingChainUpgradeV2Events"; + const COUNT: usize = 8usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::FeeCollected) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::FeeCollectionToggled) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::Initialized) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::OwnershipTransferred) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::ProcessingFeeUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::RequirementModuleUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::TransactionProcessed) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData + for SyndicateSequencingChainUpgradeV2Events { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::FeeCollected(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::FeeCollectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::ProcessingFeeUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::FeeCollected(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::FeeCollectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::ProcessingFeeUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainUpgradeV2`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainUpgradeV2Instance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> SyndicateSequencingChainUpgradeV2Instance { + SyndicateSequencingChainUpgradeV2Instance::::new(address, __provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + SyndicateSequencingChainUpgradeV2Instance::::deploy(__provider, _gasMeter) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + __provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> alloy_contract::RawCallBuilder { + SyndicateSequencingChainUpgradeV2Instance::< + P, + N, + >::deploy_builder(__provider, _gasMeter) + } + /**A [`SyndicateSequencingChainUpgradeV2`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`SyndicateSequencingChainUpgradeV2`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct SyndicateSequencingChainUpgradeV2Instance< + P, + N = alloy_contract::private::Ethereum, + > { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for SyndicateSequencingChainUpgradeV2Instance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("SyndicateSequencingChainUpgradeV2Instance") + .field(&self.address) + .finish() + } + } + /// Instantiation and getters/setters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainUpgradeV2Instance { + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainUpgradeV2`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainUpgradeV2Instance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + __provider: P, + ) -> Self { + Self { + address, + provider: __provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + __provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(__provider, _gasMeter); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder( + __provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + __provider, + [ + &BYTECODE[..], + &alloy_sol_types::SolConstructor::abi_encode( + &constructorCall { _gasMeter }, + )[..], + ] + .concat() + .into(), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl SyndicateSequencingChainUpgradeV2Instance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider( + self, + ) -> SyndicateSequencingChainUpgradeV2Instance { + SyndicateSequencingChainUpgradeV2Instance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainUpgradeV2Instance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`SEQUENCING_MODULE_STORAGE_LOCATION`] function. + pub fn SEQUENCING_MODULE_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SEQUENCING_MODULE_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SEQUENCING_MODULE_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION`] function. + pub fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) + } + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } + ///Creates a new call builder for the [`_processTransaction`] function. + pub fn _processTransaction( + &self, + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionCall, N> { + self.call_builder( + &_processTransactionCall { + sequencer, + data, + }, + ) + } + ///Creates a new call builder for the [`_processTransactionsBulk`] function. + pub fn _processTransactionsBulk( + &self, + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionsBulkCall, N> { + self.call_builder( + &_processTransactionsBulkCall { + sequencer, + data, + }, + ) + } + ///Creates a new call builder for the [`appchainId`] function. + pub fn appchainId( + &self, + ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { + self.call_builder(&appchainIdCall) + } + ///Creates a new call builder for the [`contractVersion`] function. + pub fn contractVersion( + &self, + ) -> alloy_contract::SolCallBuilder<&P, contractVersionCall, N> { + self.call_builder(&contractVersionCall) + } + ///Creates a new call builder for the [`encodeTransaction`] function. + pub fn encodeTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, encodeTransactionCall, N> { + self.call_builder(&encodeTransactionCall { data }) + } + ///Creates a new call builder for the [`feeCollectionEnabled`] function. + pub fn feeCollectionEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, feeCollectionEnabledCall, N> { + self.call_builder(&feeCollectionEnabledCall) + } + ///Creates a new call builder for the [`gasMeter`] function. + pub fn gasMeter(&self) -> alloy_contract::SolCallBuilder<&P, gasMeterCall, N> { + self.call_builder(&gasMeterCall) + } + ///Creates a new call builder for the [`getInitializedVersion`] function. + pub fn getInitializedVersion( + &self, + ) -> alloy_contract::SolCallBuilder<&P, getInitializedVersionCall, N> { + self.call_builder(&getInitializedVersionCall) + } + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( + &self, + admin: alloy::sol_types::private::Address, + _permissionRequirementModule: alloy::sol_types::private::Address, + _appchainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { + self.call_builder( + &initializeCall { + admin, + _permissionRequirementModule, + _appchainId, + }, + ) + } + ///Creates a new call builder for the [`isAllowed`] function. + pub fn isAllowed( + &self, + proposer: alloy::sol_types::private::Address, + originator: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, isAllowedCall, N> { + self.call_builder( + &isAllowedCall { + proposer, + originator, + data, + }, + ) + } + ///Creates a new call builder for the [`maxDataSize`] function. + pub fn maxDataSize( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxDataSizeCall, N> { + self.call_builder(&maxDataSizeCall) + } + ///Creates a new call builder for the [`owner`] function. + pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> { + self.call_builder(&ownerCall) + } + ///Creates a new call builder for the [`permissionRequirementModule`] function. + pub fn permissionRequirementModule( + &self, + ) -> alloy_contract::SolCallBuilder<&P, permissionRequirementModuleCall, N> { + self.call_builder(&permissionRequirementModuleCall) + } + ///Creates a new call builder for the [`processTransaction`] function. + pub fn processTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionCall, N> { + self.call_builder(&processTransactionCall { data }) + } + ///Creates a new call builder for the [`processTransactionWithFee`] function. + pub fn processTransactionWithFee( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionWithFeeCall, N> { + self.call_builder( + &processTransactionWithFeeCall { + data, + }, + ) + } + ///Creates a new call builder for the [`processTransactionsBulk`] function. + pub fn processTransactionsBulk( + &self, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionsBulkCall, N> { + self.call_builder( + &processTransactionsBulkCall { + data, + }, + ) + } + ///Creates a new call builder for the [`processingFee`] function. + pub fn processingFee( + &self, + ) -> alloy_contract::SolCallBuilder<&P, processingFeeCall, N> { + self.call_builder(&processingFeeCall) + } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } + ///Creates a new call builder for the [`renounceOwnership`] function. + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { + self.call_builder(&renounceOwnershipCall) + } + ///Creates a new call builder for the [`setProcessingFee`] function. + pub fn setProcessingFee( + &self, + _fee: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setProcessingFeeCall, N> { + self.call_builder(&setProcessingFeeCall { _fee }) + } + ///Creates a new call builder for the [`toggleFeeCollection`] function. + pub fn toggleFeeCollection( + &self, + ) -> alloy_contract::SolCallBuilder<&P, toggleFeeCollectionCall, N> { + self.call_builder(&toggleFeeCollectionCall) + } + ///Creates a new call builder for the [`totalFeesCollected`] function. + pub fn totalFeesCollected( + &self, + ) -> alloy_contract::SolCallBuilder<&P, totalFeesCollectedCall, N> { + self.call_builder(&totalFeesCollectedCall) + } + ///Creates a new call builder for the [`transferOwnership`] function. + pub fn transferOwnership( + &self, + newOwner: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> { + self.call_builder(&transferOwnershipCall { newOwner }) + } + ///Creates a new call builder for the [`updateRequirementModule`] function. + pub fn updateRequirementModule( + &self, + _newModule: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, updateRequirementModuleCall, N> { + self.call_builder( + &updateRequirementModuleCall { + _newModule, + }, + ) + } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } + ///Creates a new call builder for the [`withdrawFees`] function. + pub fn withdrawFees( + &self, + recipient: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, withdrawFeesCall, N> { + self.call_builder(&withdrawFeesCall { recipient }) + } + } + /// Event filters. + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainUpgradeV2Instance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`FeeCollected`] event. + pub fn FeeCollected_filter(&self) -> alloy_contract::Event<&P, FeeCollected, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`FeeCollectionToggled`] event. + pub fn FeeCollectionToggled_filter( + &self, + ) -> alloy_contract::Event<&P, FeeCollectionToggled, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`OwnershipTransferred`] event. + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event<&P, OwnershipTransferred, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`ProcessingFeeUpdated`] event. + pub fn ProcessingFeeUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, ProcessingFeeUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`RequirementModuleUpdated`] event. + pub fn RequirementModuleUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, RequirementModuleUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`TransactionProcessed`] event. + pub fn TransactionProcessed_filter( + &self, + ) -> alloy_contract::Event<&P, TransactionProcessed, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/src/multi_rpc_provider.rs b/shared/src/multi_rpc_provider.rs index 9a81dfad2..7b874ed70 100644 --- a/shared/src/multi_rpc_provider.rs +++ b/shared/src/multi_rpc_provider.rs @@ -41,7 +41,7 @@ use std::{ Arc, }, }; -use tracing::{debug, error, info, warn}; +use tracing::{debug, info, warn}; use url::Url; /// Multi-RPC provider that handles multiple RPC endpoints with automatic failover diff --git a/shared/test-utils/src/anvil.rs b/shared/test-utils/src/anvil.rs index f3419bf6d..25f031574 100644 --- a/shared/test-utils/src/anvil.rs +++ b/shared/test-utils/src/anvil.rs @@ -47,3 +47,9 @@ pub async fn mine_block(provider: &FilledProvider, delay: u64) -> Result<()> { .unwrap(); Ok(()) } + +/// mine a block at a specific timestamp +pub async fn mine_block_at_ts(provider: &FilledProvider, absolute_ts: u64) -> Result<()> { + provider.evm_mine(Some(MineOptions::Timestamp(Some(absolute_ts)))).await.unwrap(); + Ok(()) +} diff --git a/synd-batch-sequencer/src/batcher.rs b/synd-batch-sequencer/src/batcher.rs index c4dce72ca..d5a02aac2 100644 --- a/synd-batch-sequencer/src/batcher.rs +++ b/synd-batch-sequencer/src/batcher.rs @@ -212,7 +212,7 @@ impl Batcher { Ok(instance) => instance, Err(e) => { error!("Failed to reset sequencing contract instance: {:?}", e); - return + return; } }; diff --git a/synd-cli/Makefile b/synd-cli/Makefile index 602e44765..0d187df1f 100644 --- a/synd-cli/Makefile +++ b/synd-cli/Makefile @@ -27,16 +27,11 @@ generate-contract-abis: @echo "Generating RequireAndModule..." @cd ../synd-contracts && \ - echo "export const requireAndModuleABI = $$(forge inspect src/requirement-modules/RequireAndModule.sol:RequireAndModule abi --json) as const" > ../synd-cli/src/abi/synd/RequireAndModule.ts - - @echo "Generating RequireAndModuleFactory..." - @cd ../synd-contracts && \ - echo "export const requireAndModuleFactoryABI = $$(forge inspect src/factory/PermissionModuleFactories.sol:RequireAndModuleFactory abi --json) as const" > ../synd-cli/src/abi/synd/RequireAndModuleFactory.ts - - @echo "Generating SyndicateFactory..." - @cd ../synd-contracts && \ - echo "export const syndicateFactoryABI = $$(forge inspect src/factory/SyndicateFactory.sol:SyndicateFactory abi --json) as const" > ../synd-cli/src/abi/synd/SyndicateFactory.ts - + echo "export const requireAndModuleABI = $$(forge inspect src/requirement-modules/RequireAndModule.sol:RequireAndModule abi --json) as const" > ../synd-cli/src/abi/synd/RequireAndModule.ts && \ + echo "" >> ../synd-cli/src/abi/synd/RequireAndModule.ts && \ + echo "export const requireAndModuleBytecode =" >> ../synd-cli/src/abi/synd/RequireAndModule.ts && \ + echo " \"$$(forge inspect src/requirement-modules/RequireAndModule.sol:RequireAndModule bytecode)\"" >> ../synd-cli/src/abi/synd/RequireAndModule.ts + @echo "Generating SyndicateSequencingChain..." @cd ../synd-contracts && \ echo "export const syndicateSequencingChainABI = $$(forge inspect src/SyndicateSequencingChain.sol:SyndicateSequencingChain abi --json) as const" > ../synd-cli/src/abi/synd/SyndicateSequencingChain.ts @@ -51,7 +46,11 @@ generate-contract-abis: echo "" >> ../synd-cli/src/abi/synd/TeeModule.ts && \ echo "export const teeModuleBytecode =" >> ../synd-cli/src/abi/synd/TeeModule.ts && \ echo " \"$$(forge inspect src/withdrawal/TeeModule.sol:TeeModule bytecode)\"" >> ../synd-cli/src/abi/synd/TeeModule.ts - + + @echo "Generating SyndForwarder..." + @cd ../synd-contracts && \ + echo "export const syndForwarderABI = $$(forge inspect src/deployment/SyndForwarder.sol:SyndForwarder abi --json) as const" > ../synd-cli/src/abi/synd/SyndForwarder.ts + @echo "Formatting generated ABI files..." @bunx @biomejs/biome format --write src/abi/synd/ diff --git a/synd-cli/bun.lock b/synd-cli/bun.lock index d764d124a..cb32c85f0 100644 --- a/synd-cli/bun.lock +++ b/synd-cli/bun.lock @@ -2,7 +2,7 @@ "lockfileVersion": 1, "workspaces": { "": { - "name": "create-chain", + "name": "synd-cli", "dependencies": { "@arbitrum/orbit-sdk": "^0.23.3", "@arbitrum/sdk": "^4.0.4", @@ -22,17 +22,17 @@ }, }, "packages": { - "@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.0", "", {}, "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg=="], + "@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.11.1", "", {}, "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ=="], "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], "@arbitrum/nitro-contracts": ["@arbitrum/nitro-contracts@1.1.1", "", { "dependencies": { "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", "patch-package": "^6.4.7" } }, "sha512-4Tyk3XVHz+bm8UujUC78LYSw3xAxyYvBCxfEX4z3qE4/ww7Qck/rmce5gbHMzQjArEAzAP2YSfYIFuIFuRXtfg=="], - "@arbitrum/orbit-sdk": ["@arbitrum/orbit-sdk@0.23.3", "", { "dependencies": { "@arbitrum/sdk": "^4.0.4", "@arbitrum/token-bridge-contracts": "^1.2.2", "@offchainlabs/fund-distribution-contracts": "^1.0.1", "@safe-global/protocol-kit": "^4.1.7", "ethers": "^5.7.2" }, "peerDependencies": { "viem": "^1.20.0" } }, "sha512-qlzAEeJfle6b1+WOQwOkWIFDE/gha/Ruxu9en5bG7lJoPBaV6p8hYKoo7AzoObRgOdzeZUD65HYlwMv6zWD+4Q=="], + "@arbitrum/orbit-sdk": ["@arbitrum/orbit-sdk@0.23.5", "", { "dependencies": { "@arbitrum/sdk": "^4.0.4", "@arbitrum/token-bridge-contracts": "^1.2.2", "@offchainlabs/fund-distribution-contracts": "^1.0.1", "@safe-global/protocol-kit": "^4.1.7", "ethers": "^5.7.2" }, "peerDependencies": { "viem": "^1.20.0" } }, "sha512-68GWNQwD+5qLznDbF0bmLzHB2ANfGs8juYRvL5id87IT0BXndlkZy2ddTFb0yQ/YOq5p3kyzyw3fXl8l+mR6Fw=="], "@arbitrum/sdk": ["@arbitrum/sdk@4.0.4", "", { "dependencies": { "@ethersproject/address": "^5.0.8", "@ethersproject/bignumber": "^5.1.1", "@ethersproject/bytes": "^5.0.8", "async-mutex": "^0.4.0", "ethers": "^5.1.0" } }, "sha512-GscwlkHYmPzRKs9huDHntbqx1xMRhTraTUvTC9exu+prjndKxHe9ZORuIcqmtEqwLwma/l8nqxI+k+pEEdIO6Q=="], - "@arbitrum/token-bridge-contracts": ["@arbitrum/token-bridge-contracts@1.2.3", "", { "dependencies": { "@arbitrum/nitro-contracts": "1.1.1", "@offchainlabs/stablecoin-evm": "1.0.0-orbit-alpha.2", "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.8.3", "@openzeppelin/contracts-upgradeable": "4.8.3" }, "optionalDependencies": { "@openzeppelin/upgrades-core": "^1.24.1" } }, "sha512-Gpw0vGv7oS9tgPMb0JfWW6Ve7yOvcmTdfhuxCgvCOG6ntVoJVhB030RhhfIV9jSpDatQi0T1Jqq2RIMXJIxqyQ=="], + "@arbitrum/token-bridge-contracts": ["@arbitrum/token-bridge-contracts@1.2.5", "", { "dependencies": { "@arbitrum/nitro-contracts": "1.1.1", "@offchainlabs/stablecoin-evm": "1.0.0-orbit-alpha.2", "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.8.3", "@openzeppelin/contracts-upgradeable": "4.8.3" }, "optionalDependencies": { "@openzeppelin/upgrades-core": "^1.24.1" } }, "sha512-wIekHs2hNGt0uxlKN8NiEcAoiN1Y4rN9jhbx/BX8T6E1B6XsabrLNVRs0lbsn7uLhV5Z61OaRTy9HirGmTs5+A=="], "@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="], @@ -56,69 +56,81 @@ "@commander-js/extra-typings": ["@commander-js/extra-typings@14.0.0", "", { "peerDependencies": { "commander": "~14.0.0" } }, "sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg=="], - "@ethersproject/abi": ["@ethersproject/abi@5.7.0", "", { "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA=="], + "@ethersproject/abi": ["@ethersproject/abi@5.8.0", "", { "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q=="], - "@ethersproject/abstract-provider": ["@ethersproject/abstract-provider@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/web": "^5.7.0" } }, "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw=="], + "@ethersproject/abstract-provider": ["@ethersproject/abstract-provider@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/web": "^5.8.0" } }, "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg=="], - "@ethersproject/abstract-signer": ["@ethersproject/abstract-signer@5.7.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0" } }, "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ=="], + "@ethersproject/abstract-signer": ["@ethersproject/abstract-signer@5.8.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0" } }, "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA=="], - "@ethersproject/address": ["@ethersproject/address@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/rlp": "^5.7.0" } }, "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA=="], + "@ethersproject/address": ["@ethersproject/address@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/rlp": "^5.8.0" } }, "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA=="], - "@ethersproject/base64": ["@ethersproject/base64@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0" } }, "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ=="], + "@ethersproject/base64": ["@ethersproject/base64@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0" } }, "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ=="], - "@ethersproject/basex": ["@ethersproject/basex@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/properties": "^5.7.0" } }, "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw=="], + "@ethersproject/basex": ["@ethersproject/basex@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/properties": "^5.8.0" } }, "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q=="], - "@ethersproject/bignumber": ["@ethersproject/bignumber@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "bn.js": "^5.2.1" } }, "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw=="], + "@ethersproject/bignumber": ["@ethersproject/bignumber@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "bn.js": "^5.2.1" } }, "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA=="], - "@ethersproject/bytes": ["@ethersproject/bytes@5.7.0", "", { "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A=="], + "@ethersproject/bytes": ["@ethersproject/bytes@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A=="], - "@ethersproject/constants": ["@ethersproject/constants@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0" } }, "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA=="], + "@ethersproject/constants": ["@ethersproject/constants@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0" } }, "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg=="], - "@ethersproject/contracts": ["@ethersproject/contracts@5.7.0", "", { "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/transactions": "^5.7.0" } }, "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg=="], + "@ethersproject/contracts": ["@ethersproject/contracts@5.8.0", "", { "dependencies": { "@ethersproject/abi": "^5.8.0", "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/transactions": "^5.8.0" } }, "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ=="], - "@ethersproject/hash": ["@ethersproject/hash@5.7.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/base64": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g=="], + "@ethersproject/hash": ["@ethersproject/hash@5.8.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/base64": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA=="], - "@ethersproject/hdnode": ["@ethersproject/hdnode@5.7.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/pbkdf2": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/sha2": "^5.7.0", "@ethersproject/signing-key": "^5.7.0", "@ethersproject/strings": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/wordlists": "^5.7.0" } }, "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg=="], + "@ethersproject/hdnode": ["@ethersproject/hdnode@5.8.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/pbkdf2": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/sha2": "^5.8.0", "@ethersproject/signing-key": "^5.8.0", "@ethersproject/strings": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/wordlists": "^5.8.0" } }, "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA=="], - "@ethersproject/json-wallets": ["@ethersproject/json-wallets@5.7.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/hdnode": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/pbkdf2": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/random": "^5.7.0", "@ethersproject/strings": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" } }, "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g=="], + "@ethersproject/json-wallets": ["@ethersproject/json-wallets@5.8.0", "", { "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/hdnode": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/pbkdf2": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/random": "^5.8.0", "@ethersproject/strings": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" } }, "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w=="], - "@ethersproject/keccak256": ["@ethersproject/keccak256@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" } }, "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg=="], + "@ethersproject/keccak256": ["@ethersproject/keccak256@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" } }, "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng=="], - "@ethersproject/logger": ["@ethersproject/logger@5.7.0", "", {}, "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig=="], + "@ethersproject/logger": ["@ethersproject/logger@5.8.0", "", {}, "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA=="], - "@ethersproject/networks": ["@ethersproject/networks@5.7.1", "", { "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ=="], + "@ethersproject/networks": ["@ethersproject/networks@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg=="], - "@ethersproject/pbkdf2": ["@ethersproject/pbkdf2@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/sha2": "^5.7.0" } }, "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw=="], + "@ethersproject/pbkdf2": ["@ethersproject/pbkdf2@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/sha2": "^5.8.0" } }, "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg=="], - "@ethersproject/properties": ["@ethersproject/properties@5.7.0", "", { "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw=="], + "@ethersproject/properties": ["@ethersproject/properties@5.8.0", "", { "dependencies": { "@ethersproject/logger": "^5.8.0" } }, "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw=="], - "@ethersproject/providers": ["@ethersproject/providers@5.7.2", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/base64": "^5.7.0", "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/random": "^5.7.0", "@ethersproject/rlp": "^5.7.0", "@ethersproject/sha2": "^5.7.0", "@ethersproject/strings": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/web": "^5.7.0", "bech32": "1.1.4", "ws": "7.4.6" } }, "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg=="], + "@ethersproject/providers": ["@ethersproject/providers@5.8.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/base64": "^5.8.0", "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/random": "^5.8.0", "@ethersproject/rlp": "^5.8.0", "@ethersproject/sha2": "^5.8.0", "@ethersproject/strings": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/web": "^5.8.0", "bech32": "1.1.4", "ws": "8.18.0" } }, "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw=="], - "@ethersproject/random": ["@ethersproject/random@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ=="], + "@ethersproject/random": ["@ethersproject/random@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A=="], - "@ethersproject/rlp": ["@ethersproject/rlp@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w=="], + "@ethersproject/rlp": ["@ethersproject/rlp@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q=="], - "@ethersproject/sha2": ["@ethersproject/sha2@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "hash.js": "1.1.7" } }, "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw=="], + "@ethersproject/sha2": ["@ethersproject/sha2@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "hash.js": "1.1.7" } }, "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A=="], - "@ethersproject/signing-key": ["@ethersproject/signing-key@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "bn.js": "^5.2.1", "elliptic": "6.5.4", "hash.js": "1.1.7" } }, "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q=="], + "@ethersproject/signing-key": ["@ethersproject/signing-key@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "bn.js": "^5.2.1", "elliptic": "6.6.1", "hash.js": "1.1.7" } }, "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w=="], - "@ethersproject/solidity": ["@ethersproject/solidity@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/sha2": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA=="], + "@ethersproject/solidity": ["@ethersproject/solidity@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/sha2": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA=="], - "@ethersproject/strings": ["@ethersproject/strings@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg=="], + "@ethersproject/strings": ["@ethersproject/strings@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg=="], - "@ethersproject/transactions": ["@ethersproject/transactions@5.7.0", "", { "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/rlp": "^5.7.0", "@ethersproject/signing-key": "^5.7.0" } }, "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ=="], + "@ethersproject/transactions": ["@ethersproject/transactions@5.8.0", "", { "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/rlp": "^5.8.0", "@ethersproject/signing-key": "^5.8.0" } }, "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg=="], - "@ethersproject/units": ["@ethersproject/units@5.7.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg=="], + "@ethersproject/units": ["@ethersproject/units@5.8.0", "", { "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ=="], - "@ethersproject/wallet": ["@ethersproject/wallet@5.7.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/hdnode": "^5.7.0", "@ethersproject/json-wallets": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/random": "^5.7.0", "@ethersproject/signing-key": "^5.7.0", "@ethersproject/transactions": "^5.7.0", "@ethersproject/wordlists": "^5.7.0" } }, "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA=="], + "@ethersproject/wallet": ["@ethersproject/wallet@5.8.0", "", { "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/hdnode": "^5.8.0", "@ethersproject/json-wallets": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/random": "^5.8.0", "@ethersproject/signing-key": "^5.8.0", "@ethersproject/transactions": "^5.8.0", "@ethersproject/wordlists": "^5.8.0" } }, "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA=="], - "@ethersproject/web": ["@ethersproject/web@5.7.1", "", { "dependencies": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w=="], + "@ethersproject/web": ["@ethersproject/web@5.8.0", "", { "dependencies": { "@ethersproject/base64": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw=="], - "@ethersproject/wordlists": ["@ethersproject/wordlists@5.7.0", "", { "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/strings": "^5.7.0" } }, "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA=="], + "@ethersproject/wordlists": ["@ethersproject/wordlists@5.8.0", "", { "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/hash": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg=="], - "@noble/curves": ["@noble/curves@1.8.1", "", { "dependencies": { "@noble/hashes": "1.7.1" } }, "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@noble/hashes": ["@noble/hashes@1.7.1", "", {}, "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ=="], + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], + + "@noble/curves": ["@noble/curves@1.9.1", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="], + + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], "@nomicfoundation/slang": ["@nomicfoundation/slang@0.18.3", "", { "dependencies": { "@bytecodealliance/preview2-shim": "0.17.0" } }, "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ=="], @@ -132,69 +144,69 @@ "@openzeppelin/contracts-upgradeable": ["@openzeppelin/contracts-upgradeable@4.8.3", "", {}, "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg=="], - "@openzeppelin/upgrades-core": ["@openzeppelin/upgrades-core@1.42.1", "", { "dependencies": { "@nomicfoundation/slang": "^0.18.3", "cbor": "^10.0.0", "chalk": "^4.1.0", "compare-versions": "^6.0.0", "debug": "^4.1.1", "ethereumjs-util": "^7.0.3", "minimatch": "^9.0.5", "minimist": "^1.2.7", "proper-lockfile": "^4.1.1", "solidity-ast": "^0.4.51" }, "bin": { "openzeppelin-upgrades-core": "dist/cli/cli.js" } }, "sha512-8qnz2XfQrco8R8u9NjV+KiSLrVn7DnWFd+3BuhTUjhVy0bzCSu2SMKCVpZLtXbxf4f2dpz8jYPQYRa6s23PhLA=="], + "@openzeppelin/upgrades-core": ["@openzeppelin/upgrades-core@1.44.2", "", { "dependencies": { "@nomicfoundation/slang": "^0.18.3", "bignumber.js": "^9.1.2", "cbor": "^10.0.0", "chalk": "^4.1.0", "compare-versions": "^6.0.0", "debug": "^4.1.1", "ethereumjs-util": "^7.0.3", "minimatch": "^9.0.5", "minimist": "^1.2.7", "proper-lockfile": "^4.1.1", "solidity-ast": "^0.4.60" }, "bin": { "openzeppelin-upgrades-core": "dist/cli/cli.js" } }, "sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA=="], "@safe-global/protocol-kit": ["@safe-global/protocol-kit@4.1.7", "", { "dependencies": { "@noble/hashes": "^1.3.3", "@safe-global/safe-core-sdk-types": "^5.1.0", "@safe-global/safe-deployments": "^1.37.31", "@safe-global/safe-modules-deployments": "^2.2.1", "abitype": "^1.0.2", "ethereumjs-util": "^7.1.5", "ethers": "^6.13.1", "semver": "^7.6.2" } }, "sha512-4VMqbezB91JasxhOB2HhRjsCeuxBMnPdUMXh5eKEs59xE86Ys2GhQ7+xk78qaB9SKUe74wKaQAeKE+hC7nHffA=="], "@safe-global/safe-core-sdk-types": ["@safe-global/safe-core-sdk-types@5.1.0", "", { "dependencies": { "abitype": "^1.0.2" } }, "sha512-UzXR4zWmVzux25FcIm4H049QhZZpVpIBL5HE+V0p5gHpArZROL+t24fZmsKUf403CtBxIJM5zZSVQL0nFJi+IQ=="], - "@safe-global/safe-deployments": ["@safe-global/safe-deployments@1.37.32", "", { "dependencies": { "semver": "^7.6.2" } }, "sha512-3XRy6TnVz0uymPxMNo7WkaK88sL12ZpIMKOfrNHkODUZCxCO4GFA0FFfjByAPS1LAXfmV7Mulk9Zx1n9vqR8Cg=="], + "@safe-global/safe-deployments": ["@safe-global/safe-deployments@1.37.49", "", { "dependencies": { "semver": "^7.6.2" } }, "sha512-132QgqMY1/HktXqmda/uPp5b+73UXTgKRB00Xgc1kduFqceSw/ZyF1Q9jJjbND9q91hhapnXhYKWN2/HiWkRcg=="], - "@safe-global/safe-modules-deployments": ["@safe-global/safe-modules-deployments@2.2.7", "", {}, "sha512-xlnAW7d0394EwlRgWJ+nuQNQmGkL0qBE54pN+1IBbUEFvWW8q0SbhDsTmlGgeDM+9F8q2KM06Ip1JMmddppA/Q=="], + "@safe-global/safe-modules-deployments": ["@safe-global/safe-modules-deployments@2.2.21", "", {}, "sha512-fveOlRv0ccwsuaZjP1u7ZbXrwCyqMTYYiqETOGo8NdzTaceRUyR9TNzagSWovOSuHPVyUGJ9lnsxizikt/+PiQ=="], - "@scure/base": ["@scure/base@1.2.4", "", {}, "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ=="], + "@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], - "@scure/bip32": ["@scure/bip32@1.6.2", "", { "dependencies": { "@noble/curves": "~1.8.1", "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.2" } }, "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw=="], + "@scure/bip32": ["@scure/bip32@1.7.0", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw=="], - "@scure/bip39": ["@scure/bip39@1.5.4", "", { "dependencies": { "@noble/hashes": "~1.7.1", "@scure/base": "~1.2.4" } }, "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA=="], + "@scure/bip39": ["@scure/bip39@1.6.0", "", { "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" } }, "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A=="], - "@tailwindcss/node": ["@tailwindcss/node@4.0.7", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "tailwindcss": "4.0.7" } }, "sha512-dkFXufkbRB2mu3FPsW5xLAUWJyexpJA+/VtQj18k3SUiJVLdpgzBd1v1gRRcIpEJj7K5KpxBKfOXlZxT3ZZRuA=="], + "@tailwindcss/node": ["@tailwindcss/node@4.1.17", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.17" } }, "sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.0.7", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.0.7", "@tailwindcss/oxide-darwin-arm64": "4.0.7", "@tailwindcss/oxide-darwin-x64": "4.0.7", "@tailwindcss/oxide-freebsd-x64": "4.0.7", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.7", "@tailwindcss/oxide-linux-arm64-gnu": "4.0.7", "@tailwindcss/oxide-linux-arm64-musl": "4.0.7", "@tailwindcss/oxide-linux-x64-gnu": "4.0.7", "@tailwindcss/oxide-linux-x64-musl": "4.0.7", "@tailwindcss/oxide-win32-arm64-msvc": "4.0.7", "@tailwindcss/oxide-win32-x64-msvc": "4.0.7" } }, "sha512-yr6w5YMgjy+B+zkJiJtIYGXW+HNYOPfRPtSs+aqLnKwdEzNrGv4ZuJh9hYJ3mcA+HMq/K1rtFV+KsEr65S558g=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.17", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.17", "@tailwindcss/oxide-darwin-arm64": "4.1.17", "@tailwindcss/oxide-darwin-x64": "4.1.17", "@tailwindcss/oxide-freebsd-x64": "4.1.17", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.17", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.17", "@tailwindcss/oxide-linux-arm64-musl": "4.1.17", "@tailwindcss/oxide-linux-x64-gnu": "4.1.17", "@tailwindcss/oxide-linux-x64-musl": "4.1.17", "@tailwindcss/oxide-wasm32-wasi": "4.1.17", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.17", "@tailwindcss/oxide-win32-x64-msvc": "4.1.17" } }, "sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.0.7", "", { "os": "android", "cpu": "arm64" }, "sha512-5iQXXcAeOHBZy8ASfHFm1k0O/9wR2E3tKh6+P+ilZZbQiMgu+qrnfpBWYPc3FPuQdWiWb73069WT5D+CAfx/tg=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.17", "", { "os": "android", "cpu": "arm64" }, "sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.0.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-7yGZtEc5IgVYylqK/2B0yVqoofk4UAbkn1ygNpIJZyrOhbymsfr8uUFCueTu2fUxmAYIfMZ8waWo2dLg/NgLgg=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.17", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.0.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-tPQDV20fBjb26yWbPqT1ZSoDChomMCiXTKn4jupMSoMCFyU7+OJvIY1ryjqBuY622dEBJ8LnCDDWsnj1lX9nNQ=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.17", "", { "os": "darwin", "cpu": "x64" }, "sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.0.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-sZqJpTyTZiknU9LLHuByg5GKTW+u3FqM7q7myequAXxKOpAFiOfXpY710FuMY+gjzSapyRbDXJlsTQtCyiTo5w=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.17", "", { "os": "freebsd", "cpu": "x64" }, "sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.0.7", "", { "os": "linux", "cpu": "arm" }, "sha512-PBgvULgeSswjd8cbZ91gdIcIDMdc3TUHV5XemEpxlqt9M8KoydJzkuB/Dt910jYdofOIaTWRL6adG9nJICvU4A=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17", "", { "os": "linux", "cpu": "arm" }, "sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.0.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-By/a2yeh+e9b+C67F88ndSwVJl2A3tcUDb29FbedDi+DZ4Mr07Oqw9Y1DrDrtHIDhIZ3bmmiL1dkH2YxrtV+zw=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.0.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-WHYs3cpPEJb/ccyT20NOzopYQkl7JKncNBUbb77YFlwlXMVJLLV3nrXQKhr7DmZxz2ZXqjyUwsj2rdzd9stYdw=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.0.7", "", { "os": "linux", "cpu": "x64" }, "sha512-7bP1UyuX9kFxbOwkeIJhBZNevKYPXB6xZI37v09fqi6rqRJR8elybwjMUHm54GVP+UTtJ14ueB1K54Dy1tIO6w=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.17", "", { "os": "linux", "cpu": "x64" }, "sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.0.7", "", { "os": "linux", "cpu": "x64" }, "sha512-gBQIV8nL/LuhARNGeroqzXymMzzW5wQzqlteVqOVoqwEfpHOP3GMird5pGFbnpY+NP0fOlsZGrxxOPQ4W/84bQ=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.17", "", { "os": "linux", "cpu": "x64" }, "sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.0.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-aH530NFfx0kpQpvYMfWoeG03zGnRCMVlQG8do/5XeahYydz+6SIBxA1tl/cyITSJyWZHyVt6GVNkXeAD30v0Xg=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.17", "", { "dependencies": { "@emnapi/core": "^1.6.0", "@emnapi/runtime": "^1.6.0", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.0.7", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.0.7", "", { "os": "win32", "cpu": "x64" }, "sha512-8Cva6bbJN7ZJx320k7vxGGdU0ewmpfS5A4PudyzUuofdi8MgeINuiiWiPQ0VZCda/GX88K6qp+6UpDZNVr8HMQ=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.17", "", { "os": "win32", "cpu": "arm64" }, "sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.0.7", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.0.7", "@tailwindcss/oxide": "4.0.7", "lightningcss": "^1.29.1", "postcss": "^8.4.41", "tailwindcss": "4.0.7" } }, "sha512-zXcKs1uGssVDlnsQ+iwrkul5GPKvsXPynGCuk/eXLx3DVhHlQKMpA6tXN2oO28x2ki1xRBTfadKiHy2taVvp7g=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.17", "", { "os": "win32", "cpu": "x64" }, "sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw=="], - "@types/bn.js": ["@types/bn.js@5.1.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.17", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.1.17", "@tailwindcss/oxide": "4.1.17", "postcss": "^8.4.41", "tailwindcss": "4.1.17" } }, "sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw=="], - "@types/bun": ["@types/bun@1.2.2", "", { "dependencies": { "bun-types": "1.2.2" } }, "sha512-tr74gdku+AEDN5ergNiBnplr7hpDp3V1h7fqI2GcR/rsUaM39jpSeKH0TFibRvU0KwniRx5POgaYnaXbk0hU+w=="], + "@types/bn.js": ["@types/bn.js@5.2.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q=="], - "@types/node": ["@types/node@22.13.4", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg=="], + "@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="], - "@types/pbkdf2": ["@types/pbkdf2@3.1.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew=="], + "@types/node": ["@types/node@22.19.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ=="], - "@types/secp256k1": ["@types/secp256k1@4.0.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ=="], + "@types/pbkdf2": ["@types/pbkdf2@3.1.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew=="], - "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], + "@types/secp256k1": ["@types/secp256k1@4.0.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw=="], - "@types/yargs": ["@types/yargs@17.0.33", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA=="], + "@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="], "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], "@yarnpkg/lockfile": ["@yarnpkg/lockfile@1.1.0", "", {}, "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="], - "abitype": ["abitype@1.1.1", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q=="], + "abitype": ["abitype@1.2.0", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-fD3ROjckUrWsybaSor2AdWxzA0e/DSyV2dA4aYd7bd8orHsoJjl09fOgKfUkTDfk0BsDGBf4NBgu/c7JoS2Npw=="], "aes-js": ["aes-js@4.0.0-beta.5", "", {}, "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q=="], @@ -206,17 +218,21 @@ "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "base-x": ["base-x@3.0.10", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ=="], + "base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], "bech32": ["bech32@1.1.4", "", {}, "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="], + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], + "blakejs": ["blakejs@1.2.1", "", {}, "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="], - "bn.js": ["bn.js@5.2.1", "", {}, "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="], + "bn.js": ["bn.js@5.2.2", "", {}, "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw=="], - "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -230,17 +246,21 @@ "buffer-xor": ["buffer-xor@1.0.3", "", {}, "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ=="], - "bufferutil": ["bufferutil@4.0.9", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw=="], + "bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - "bun-types": ["bun-types@1.2.2", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-RCbMH5elr9gjgDGDhkTTugA21XtJAy/9jkKe/G3WR2q17VPGhcquf9Sir6uay9iW+7P/BV0CAHA1XlHXMAVKHg=="], + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "cbor": ["cbor@10.0.3", "", { "dependencies": { "nofilter": "^3.0.2" } }, "sha512-72Jnj81xMsqepqdcSdf2+fflz/UDsThOHy5hj2MW5F5xzHL8Oa0KQ6I6V9CwVUPxg5pf+W9xp6W2KilaRXWWtw=="], + "cbor": ["cbor@10.0.11", "", { "dependencies": { "nofilter": "^3.0.2" } }, "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA=="], "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], - "cipher-base": ["cipher-base@1.0.6", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" } }, "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw=="], + "cipher-base": ["cipher-base@1.0.7", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.2" } }, "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA=="], "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], @@ -254,23 +274,35 @@ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + "create-hash": ["create-hash@1.2.0", "", { "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="], "create-hmac": ["create-hmac@1.1.7", "", { "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="], "cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - "dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "elliptic": ["elliptic@6.5.4", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ=="], + "elliptic": ["elliptic@6.6.1", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g=="], "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], + "enhanced-resolve": ["enhanced-resolve@5.18.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -278,7 +310,7 @@ "ethereumjs-util": ["ethereumjs-util@7.1.5", "", { "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", "create-hash": "^1.1.2", "ethereum-cryptography": "^0.1.3", "rlp": "^2.2.4" } }, "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg=="], - "ethers": ["ethers@5.7.2", "", { "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", "@ethersproject/abstract-signer": "5.7.0", "@ethersproject/address": "5.7.0", "@ethersproject/base64": "5.7.0", "@ethersproject/basex": "5.7.0", "@ethersproject/bignumber": "5.7.0", "@ethersproject/bytes": "5.7.0", "@ethersproject/constants": "5.7.0", "@ethersproject/contracts": "5.7.0", "@ethersproject/hash": "5.7.0", "@ethersproject/hdnode": "5.7.0", "@ethersproject/json-wallets": "5.7.0", "@ethersproject/keccak256": "5.7.0", "@ethersproject/logger": "5.7.0", "@ethersproject/networks": "5.7.1", "@ethersproject/pbkdf2": "5.7.0", "@ethersproject/properties": "5.7.0", "@ethersproject/providers": "5.7.2", "@ethersproject/random": "5.7.0", "@ethersproject/rlp": "5.7.0", "@ethersproject/sha2": "5.7.0", "@ethersproject/signing-key": "5.7.0", "@ethersproject/solidity": "5.7.0", "@ethersproject/strings": "5.7.0", "@ethersproject/transactions": "5.7.0", "@ethersproject/units": "5.7.0", "@ethersproject/wallet": "5.7.0", "@ethersproject/web": "5.7.1", "@ethersproject/wordlists": "5.7.0" } }, "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg=="], + "ethers": ["ethers@5.8.0", "", { "dependencies": { "@ethersproject/abi": "5.8.0", "@ethersproject/abstract-provider": "5.8.0", "@ethersproject/abstract-signer": "5.8.0", "@ethersproject/address": "5.8.0", "@ethersproject/base64": "5.8.0", "@ethersproject/basex": "5.8.0", "@ethersproject/bignumber": "5.8.0", "@ethersproject/bytes": "5.8.0", "@ethersproject/constants": "5.8.0", "@ethersproject/contracts": "5.8.0", "@ethersproject/hash": "5.8.0", "@ethersproject/hdnode": "5.8.0", "@ethersproject/json-wallets": "5.8.0", "@ethersproject/keccak256": "5.8.0", "@ethersproject/logger": "5.8.0", "@ethersproject/networks": "5.8.0", "@ethersproject/pbkdf2": "5.8.0", "@ethersproject/properties": "5.8.0", "@ethersproject/providers": "5.8.0", "@ethersproject/random": "5.8.0", "@ethersproject/rlp": "5.8.0", "@ethersproject/sha2": "5.8.0", "@ethersproject/signing-key": "5.8.0", "@ethersproject/solidity": "5.8.0", "@ethersproject/strings": "5.8.0", "@ethersproject/transactions": "5.8.0", "@ethersproject/units": "5.8.0", "@ethersproject/wallet": "5.8.0", "@ethersproject/web": "5.8.0", "@ethersproject/wordlists": "5.8.0" } }, "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg=="], "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], @@ -288,28 +320,48 @@ "find-yarn-workspace-root": ["find-yarn-workspace-root@2.0.0", "", { "dependencies": { "micromatch": "^4.0.2" } }, "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "hash-base": ["hash-base@3.1.0", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="], + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hash-base": ["hash-base@3.1.2", "", { "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.1" } }, "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg=="], "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hmac-drbg": ["hmac-drbg@1.0.1", "", { "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="], "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + "is-ci": ["is-ci@2.0.0", "", { "dependencies": { "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w=="], "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], @@ -318,43 +370,53 @@ "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "isows": ["isows@1.0.6", "", { "peerDependencies": { "ws": "*" } }, "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw=="], + "isows": ["isows@1.0.7", "", { "peerDependencies": { "ws": "*" } }, "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg=="], - "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], "js-sha3": ["js-sha3@0.8.0", "", {}, "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="], - "jsonfile": ["jsonfile@6.1.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="], + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], "keccak": ["keccak@3.0.4", "", { "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", "readable-stream": "^3.6.0" } }, "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q=="], "klaw-sync": ["klaw-sync@6.0.0", "", { "dependencies": { "graceful-fs": "^4.1.11" } }, "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ=="], - "lightningcss": ["lightningcss@1.29.1", "", { "dependencies": { "detect-libc": "^1.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.1", "lightningcss-darwin-x64": "1.29.1", "lightningcss-freebsd-x64": "1.29.1", "lightningcss-linux-arm-gnueabihf": "1.29.1", "lightningcss-linux-arm64-gnu": "1.29.1", "lightningcss-linux-arm64-musl": "1.29.1", "lightningcss-linux-x64-gnu": "1.29.1", "lightningcss-linux-x64-musl": "1.29.1", "lightningcss-win32-arm64-msvc": "1.29.1", "lightningcss-win32-x64-msvc": "1.29.1" } }, "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q=="], + "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.1", "", { "os": "linux", "cpu": "arm" }, "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.1", "", { "os": "linux", "cpu": "x64" }, "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.1", "", { "os": "win32", "cpu": "x64" }, "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "md5.js": ["md5.js@1.3.5", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="], @@ -370,7 +432,7 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="], + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="], @@ -386,7 +448,7 @@ "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], - "ox": ["ox@0.6.7", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA=="], + "ox": ["ox@0.9.6", "", { "dependencies": { "@adraffy/ens-normalize": "^1.11.0", "@noble/ciphers": "^1.3.0", "@noble/curves": "1.9.1", "@noble/hashes": "^1.8.0", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", "abitype": "^1.0.9", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg=="], "patch-package": ["patch-package@6.5.1", "", { "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", "cross-spawn": "^6.0.5", "find-yarn-workspace-root": "^2.0.0", "fs-extra": "^9.0.0", "is-ci": "^2.0.0", "klaw-sync": "^6.0.0", "minimist": "^1.2.6", "open": "^7.4.2", "rimraf": "^2.6.3", "semver": "^5.6.0", "slash": "^2.0.0", "tmp": "^0.0.33", "yaml": "^1.10.2" }, "bin": { "patch-package": "index.js" } }, "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA=="], @@ -394,13 +456,17 @@ "path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="], - "pbkdf2": ["pbkdf2@3.1.2", "", { "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA=="], + "pbkdf2": ["pbkdf2@3.1.5", "", { "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", "sha.js": "^2.4.12", "to-buffer": "^1.2.1" } }, "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], @@ -414,7 +480,7 @@ "rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="], - "ripemd160": ["ripemd160@2.0.2", "", { "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="], + "ripemd160": ["ripemd160@2.0.3", "", { "dependencies": { "hash-base": "^3.1.2", "inherits": "^2.0.4" } }, "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA=="], "rlp": ["rlp@2.2.7", "", { "dependencies": { "bn.js": "^5.2.0" }, "bin": { "rlp": "bin/rlp" } }, "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ=="], @@ -424,11 +490,13 @@ "secp256k1": ["secp256k1@4.0.4", "", { "dependencies": { "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" } }, "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw=="], - "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], - "sha.js": ["sha.js@2.4.11", "", { "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": { "sha.js": "./bin.js" } }, "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="], + "sha.js": ["sha.js@2.4.12", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" } }, "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w=="], "shebang-command": ["shebang-command@1.2.0", "", { "dependencies": { "shebang-regex": "^1.0.0" } }, "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg=="], @@ -438,7 +506,7 @@ "slash": ["slash@2.0.0", "", {}, "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="], - "solidity-ast": ["solidity-ast@0.4.59", "", {}, "sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g=="], + "solidity-ast": ["solidity-ast@0.4.61", "", {}, "sha512-OYBJYcYyG7gLV0VuXl9CUrvgJXjV/v0XnR4+1YomVe3q+QyENQXJJxAEASUz4vN6lMAl+C8RSRSr5MBAz09f6w=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -450,35 +518,39 @@ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "tailwindcss": ["tailwindcss@4.0.7", "", {}, "sha512-yH5bPPyapavo7L+547h3c4jcBXcrKwybQRjwdEIVAd9iXRvy/3T1CC6XSQEgZtRySjKfqvo3Cc0ZF1DTheuIdA=="], + "tailwindcss": ["tailwindcss@4.1.17", "", {}, "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q=="], - "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], "tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], + "to-buffer": ["to-buffer@1.2.2", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], - "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - "utf-8-validate": ["utf-8-validate@5.0.10", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ=="], + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "viem": ["viem@2.23.4", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-UQquuolKlS1w5H5e0Fd1KKoUlIPJryIEBzY5AUhGyV1ka+9O6+3uYVhUzj6RbvGK0PtsMKn2ddwPZFwjNDVU/A=="], + "viem": ["viem@2.40.3", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@scure/bip32": "1.7.0", "@scure/bip39": "1.6.0", "abitype": "1.1.0", "isows": "1.0.7", "ox": "0.9.6", "ws": "8.18.3" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-feYfEpbgjRkZYQpwcgxqkWzjxHI5LSDAjcGetHHwDRuX9BRQHUdV8ohrCosCYpdEhus/RknD3/bOd4qLYVPPuA=="], "which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="], + "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], @@ -488,7 +560,7 @@ "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "zod": ["zod@4.1.12", "", {}, "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ=="], + "zod": ["zod@4.1.13", "", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="], "@arbitrum/nitro-contracts/@openzeppelin/contracts": ["@openzeppelin/contracts@4.5.0", "", {}, "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA=="], @@ -496,33 +568,39 @@ "@ethersproject/json-wallets/aes-js": ["aes-js@3.0.0", "", {}, "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw=="], - "@ethersproject/providers/ws": ["ws@7.4.6", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="], + "@ethersproject/providers/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], "@offchainlabs/upgrade-executor/@openzeppelin/contracts": ["@openzeppelin/contracts@4.7.3", "", {}, "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw=="], "@offchainlabs/upgrade-executor/@openzeppelin/contracts-upgradeable": ["@openzeppelin/contracts-upgradeable@4.7.3", "", {}, "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A=="], - "@safe-global/protocol-kit/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + "@safe-global/protocol-kit/ethers": ["ethers@6.15.0", "", { "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", "@noble/hashes": "1.3.2", "@types/node": "22.7.5", "aes-js": "4.0.0-beta.5", "tslib": "2.7.0", "ws": "8.17.1" } }, "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="], - "@safe-global/protocol-kit/ethers": ["ethers@6.13.5", "", { "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", "@noble/hashes": "1.3.2", "@types/node": "22.7.5", "aes-js": "4.0.0-beta.5", "tslib": "2.7.0", "ws": "8.17.1" } }, "sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@safe-global/safe-core-sdk-types/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.0", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "cross-spawn/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "elliptic/bn.js": ["bn.js@4.12.1", "", {}, "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg=="], + "elliptic/bn.js": ["bn.js@4.12.2", "", {}, "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="], "glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "ox/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + "hash-base/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "patch-package/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "secp256k1/elliptic": ["elliptic@6.6.1", "", { "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g=="], - "secp256k1/node-addon-api": ["node-addon-api@5.1.0", "", {}, "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="], - "viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + "viem/abitype": ["abitype@1.1.0", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3.22.0 || ^4.0.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A=="], "@safe-global/protocol-kit/ethers/@adraffy/ens-normalize": ["@adraffy/ens-normalize@1.10.1", "", {}, "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw=="], @@ -536,9 +614,13 @@ "@safe-global/protocol-kit/ethers/ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="], - "glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "hash-base/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "hash-base/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "secp256k1/elliptic/bn.js": ["bn.js@4.12.1", "", {}, "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg=="], + "hash-base/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "@safe-global/protocol-kit/ethers/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], } diff --git a/synd-cli/bun.lockb b/synd-cli/bun.lockb deleted file mode 100755 index 791586ef8..000000000 Binary files a/synd-cli/bun.lockb and /dev/null differ diff --git a/synd-cli/package.json b/synd-cli/package.json index 238b5b47d..92ee9d8b6 100644 --- a/synd-cli/package.json +++ b/synd-cli/package.json @@ -8,7 +8,7 @@ "lint": "biome lint --write .", "typecheck": "tsc --noEmit", "check": "biome check .", - "check-write": "biome check --write ." + "check-write": "biome check --write . --files-ignore-unknown=true --no-errors-on-unmatched" }, "dependencies": { "@arbitrum/orbit-sdk": "^0.23.3", diff --git a/synd-cli/src/abi/synd/ArbChainConfig.ts b/synd-cli/src/abi/synd/ArbChainConfig.ts index 792ee3c27..c0314147a 100644 --- a/synd-cli/src/abi/synd/ArbChainConfig.ts +++ b/synd-cli/src/abi/synd/ArbChainConfig.ts @@ -225,6 +225,19 @@ export const arbChainConfigABI = [ ], stateMutability: "view" }, + { + type: "function", + name: "VERSION", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256" + } + ], + stateMutability: "view" + }, { type: "function", name: "initialize", diff --git a/synd-cli/src/abi/synd/RequireAndModule.ts b/synd-cli/src/abi/synd/RequireAndModule.ts index 060dd3bd7..af6eea728 100644 --- a/synd-cli/src/abi/synd/RequireAndModule.ts +++ b/synd-cli/src/abi/synd/RequireAndModule.ts @@ -238,3 +238,6 @@ export const requireAndModuleABI = [ inputs: [] } ] as const + +export const requireAndModuleBytecode = + "0x60803460b857601f61102538819003918201601f19168301916001600160401b0383118484101760bc5780849260209460405283398101031260b857516001600160a01b0381169081900360b857801560a5575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3610f5490816100d18239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806304f386f4146107a4578063052eefd1146106235780631b42c71114610407578063715018a61461038b5780637a3979dc146101905780638da5cb5b1461015e578063a26b4a88146101435763f2fde38b14610071575f80fd5b3461013f57602060031936011261013f5773ffffffffffffffffffffffffffffffffffffffff61009f6108c2565b6100a76109d4565b1680156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f60031936011261013f57602060405160288152f35b3461013f575f60031936011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f57606060031936011261013f576101a96108c2565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361013f5760443567ffffffffffffffff811161013f573660238201121561013f5780600401359067ffffffffffffffff821161013f576024810190602483369201011161013f5760015f527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b6020527f79c06e8c99a667adda63c5fa6f05695d29630fc62ad2dd069fa929d5714de89d5473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81168015610380576040517f7a3979dc00000000000000000000000000000000000000000000000000000000815290602090829081806102c889898c8e6004860161096b565b03915afa908115610375575f9161033b575b50156102ff576102e990610d0a565b9061026d5750505050505b602060405160018152f35b6103378386936040519485947f79a132500000000000000000000000000000000000000000000000000000000086526004860161096b565b0390fd5b90506020813d821161036d575b81610355602093836108e5565b8101031261013f5751801515810361013f57866102da565b3d9150610348565b6040513d5f823e3d90fd5b5050505050506102f4565b3461013f575f60031936011261013f576103a36109d4565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f60031936011261013f5760015461042381610953565b61043060405191826108e5565b81815261043c82610953565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208201920136833760015f9081527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b6020527f79c06e8c99a667adda63c5fa6f05695d29630fc62ad2dd069fa929d5714de89d5473ffffffffffffffffffffffffffffffffffffffff165b84821080610604575b156105fa5782518210156105cd578073ffffffffffffffffffffffffffffffffffffffff61050b921660208460051b86010152610d0a565b901561056f57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461054257600101906104ca565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50509091505b604051918291602083019060208452518091526040830191905f5b81811061059e575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101610590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5050909150610575565b5073ffffffffffffffffffffffffffffffffffffffff811615156104d3565b3461013f57604060031936011261013f5761063c6108c2565b60243590811515820361013f576106516109d4565b73ffffffffffffffffffffffffffffffffffffffff811691821561077c5761067882610a20565b610754576028600154101561072c571561071e5761069590610e6b565b156106c0577f62101cccc1864d3492290070f4dbf16879de7861acb5dcb8180b55d2ed7cd7e75f80a2005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f41646472657373206e6f742061646465640000000000000000000000000000006044820152fd5b61072790610d6b565b610695565b7f13d867a2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fa2d86a1e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe6c4247b000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461013f57602060031936011261013f576107bd6108c2565b6107c56109d4565b73ffffffffffffffffffffffffffffffffffffffff811690811561077c576107ec81610a20565b1561089a5773ffffffffffffffffffffffffffffffffffffffff6108108392610bf5565b160361083c577fb5d68ca46372bbe6ec138d3d0423608269b3117496a46268f86080cdbcbea9be5f80a2005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f41646472657373206e6f742072656d6f766564000000000000000000000000006044820152fd5b7f3d0f293d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761092657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109265760051b60200190565b92938060809573ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09581601f9616885216602087015260606040870152816060870152868601375f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f541633036109f457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16805f52600260205260405f205f805260205273ffffffffffffffffffffffffffffffffffffffff60405f2054161580610ae3575b15610add5760015f527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b6020527f79c06e8c99a667adda63c5fa6f05695d29630fc62ad2dd069fa929d5714de89d5473ffffffffffffffffffffffffffffffffffffffff1603610ad957600190565b5f90565b50600190565b50805f52600260205260405f2060015f5260205273ffffffffffffffffffffffffffffffffffffffff60405f20541615610a6a565b60010173ffffffffffffffffffffffffffffffffffffffff82165f528060205260405f205f805260205273ffffffffffffffffffffffffffffffffffffffff60405f2054161580610bab575b15610ba4575f805260205260405f2060015f5260205273ffffffffffffffffffffffffffffffffffffffff8060405f2054169116145f14610ad957600190565b5050600190565b5073ffffffffffffffffffffffffffffffffffffffff82165f528060205260405f2060015f5260205273ffffffffffffffffffffffffffffffffffffffff60405f20541615610b64565b73ffffffffffffffffffffffffffffffffffffffff811680158015610cf8575b610cf2575f90815260026020818152604080842084805280835281852080546001808852848820805473ffffffffffffffffffffffffffffffffffffffff908116808b52898952878b208b80528952878b208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909555938a52978752858920828a5287529490972080548716909117905580548516905590915280549091169055547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116105425760015590565b50505f90565b50610d04826001610b18565b15610c15565b610d15816001610b18565b610d2057505f905f90565b73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2060015f5260205273ffffffffffffffffffffffffffffffffffffffff60405f205416908115159190565b610d76816001610b18565b1580610e5a575b610d8657505f90565b7f6ee3efecae883df2d7ccda22610b4ca771a299e707cb0d65c4ec97dc4e6668ad805473ffffffffffffffffffffffffffffffffffffffff9283165f818152600260208181526040808420600180865281845282862080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915589548116881790995598909616808552928252808420978452968152868320805487169094179093558180529290915292909220805490911690911790555b6001546001810180911161054257600155600190565b50610e665f6001610b18565b610d7d565b610e76816001610b18565b1580610f43575b610e8657505f90565b7f79c06e8c99a667adda63c5fa6f05695d29630fc62ad2dd069fa929d5714de89d805473ffffffffffffffffffffffffffffffffffffffff9283165f81815260026020818152604080842084805280835281852080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091558854811687179098559790951680845291815284832083805281528483208054871690941790935560018252949091522080549091169091179055610e44565b50610f4f5f6001610b18565b610e7d56" diff --git a/synd-cli/src/abi/synd/RequireAndModuleFactory.ts b/synd-cli/src/abi/synd/RequireAndModuleFactory.ts deleted file mode 100644 index 8ce8c15d2..000000000 --- a/synd-cli/src/abi/synd/RequireAndModuleFactory.ts +++ /dev/null @@ -1,412 +0,0 @@ -export const requireAndModuleFactoryABI = [ - { - type: "constructor", - inputs: [ - { - name: "admin", - type: "address", - internalType: "address" - } - ], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "DEFAULT_ADMIN_ROLE", - inputs: [], - outputs: [ - { - name: "", - type: "bytes32", - internalType: "bytes32" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "MANAGER_ROLE", - inputs: [], - outputs: [ - { - name: "", - type: "bytes32", - internalType: "bytes32" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "computeModuleAddress", - inputs: [ - { - name: "admin", - type: "address", - internalType: "address" - }, - { - name: "salt", - type: "bytes32", - internalType: "bytes32" - } - ], - outputs: [ - { - name: "", - type: "address", - internalType: "address" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "createRequireAndModule", - inputs: [ - { - name: "admin", - type: "address", - internalType: "address" - }, - { - name: "salt", - type: "bytes32", - internalType: "bytes32" - } - ], - outputs: [ - { - name: "module", - type: "address", - internalType: "address" - } - ], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "getRoleAdmin", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - } - ], - outputs: [ - { - name: "", - type: "bytes32", - internalType: "bytes32" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "grantRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "account", - type: "address", - internalType: "address" - } - ], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "hasRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "account", - type: "address", - internalType: "address" - } - ], - outputs: [ - { - name: "", - type: "bool", - internalType: "bool" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "pause", - inputs: [], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "paused", - inputs: [], - outputs: [ - { - name: "", - type: "bool", - internalType: "bool" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "renounceRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "callerConfirmation", - type: "address", - internalType: "address" - } - ], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "revokeRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "account", - type: "address", - internalType: "address" - } - ], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "supportsInterface", - inputs: [ - { - name: "interfaceId", - type: "bytes4", - internalType: "bytes4" - } - ], - outputs: [ - { - name: "", - type: "bool", - internalType: "bool" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "unpause", - inputs: [], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "event", - name: "Paused", - inputs: [ - { - name: "account", - type: "address", - indexed: false, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "RequireAndModuleCreated", - inputs: [ - { - name: "module", - type: "address", - indexed: true, - internalType: "address" - }, - { - name: "admin", - type: "address", - indexed: true, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "RoleAdminChanged", - inputs: [ - { - name: "role", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "previousAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "newAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32" - } - ], - anonymous: false - }, - { - type: "event", - name: "RoleGranted", - inputs: [ - { - name: "role", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "account", - type: "address", - indexed: true, - internalType: "address" - }, - { - name: "sender", - type: "address", - indexed: true, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "RoleRevoked", - inputs: [ - { - name: "role", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "account", - type: "address", - indexed: true, - internalType: "address" - }, - { - name: "sender", - type: "address", - indexed: true, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "Unpaused", - inputs: [ - { - name: "account", - type: "address", - indexed: false, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "error", - name: "AccessControlBadConfirmation", - inputs: [] - }, - { - type: "error", - name: "AccessControlUnauthorizedAccount", - inputs: [ - { - name: "account", - type: "address", - internalType: "address" - }, - { - name: "neededRole", - type: "bytes32", - internalType: "bytes32" - } - ] - }, - { - type: "error", - name: "Create2EmptyBytecode", - inputs: [] - }, - { - type: "error", - name: "EnforcedPause", - inputs: [] - }, - { - type: "error", - name: "ExpectedPause", - inputs: [] - }, - { - type: "error", - name: "FailedDeployment", - inputs: [] - }, - { - type: "error", - name: "InsufficientBalance", - inputs: [ - { - name: "balance", - type: "uint256", - internalType: "uint256" - }, - { - name: "needed", - type: "uint256", - internalType: "uint256" - } - ] - }, - { - type: "error", - name: "ZeroAddress", - inputs: [] - } -] as const diff --git a/synd-cli/src/abi/synd/SyndForwarder.ts b/synd-cli/src/abi/synd/SyndForwarder.ts new file mode 100644 index 000000000..9e57c0d43 --- /dev/null +++ b/synd-cli/src/abi/synd/SyndForwarder.ts @@ -0,0 +1,135 @@ +export const syndForwarderABI = [ + { + type: "constructor", + inputs: [ + { + name: "_sourceSender", + type: "address", + internalType: "address" + }, + { + name: "_sourceChainId", + type: "uint256", + internalType: "uint256" + } + ], + stateMutability: "nonpayable" + }, + { + type: "function", + name: "allowedSender", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address" + } + ], + stateMutability: "view" + }, + { + type: "function", + name: "call", + inputs: [ + { + name: "dest", + type: "address", + internalType: "address" + }, + { + name: "data", + type: "bytes", + internalType: "bytes" + } + ], + outputs: [], + stateMutability: "payable" + }, + { + type: "function", + name: "deploy", + inputs: [ + { + name: "salt", + type: "bytes32", + internalType: "bytes32" + }, + { + name: "impl", + type: "address", + internalType: "address" + }, + { + name: "init", + type: "bytes", + internalType: "bytes" + } + ], + outputs: [ + { + name: "", + type: "address", + internalType: "address" + } + ], + stateMutability: "nonpayable" + }, + { + type: "function", + name: "getProxyBytecode", + inputs: [], + outputs: [ + { + name: "", + type: "bytes", + internalType: "bytes" + } + ], + stateMutability: "view" + }, + { + type: "function", + name: "stubImplementation", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address" + } + ], + stateMutability: "view" + }, + { + type: "error", + name: "Create2EmptyBytecode", + inputs: [] + }, + { + type: "error", + name: "FailedDeployment", + inputs: [] + }, + { + type: "error", + name: "InsufficientBalance", + inputs: [ + { + name: "balance", + type: "uint256", + internalType: "uint256" + }, + { + name: "needed", + type: "uint256", + internalType: "uint256" + } + ] + }, + { + type: "error", + name: "NotAllowedSender", + inputs: [] + } +] as const diff --git a/synd-cli/src/abi/synd/SyndicateFactory.ts b/synd-cli/src/abi/synd/SyndicateFactory.ts deleted file mode 100644 index 307b61d36..000000000 --- a/synd-cli/src/abi/synd/SyndicateFactory.ts +++ /dev/null @@ -1,672 +0,0 @@ -export const syndicateFactoryABI = [ - { - type: "constructor", - inputs: [ - { - name: "admin", - type: "address", - internalType: "address" - } - ], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "DEFAULT_ADMIN_ROLE", - inputs: [], - outputs: [ - { - name: "", - type: "bytes32", - internalType: "bytes32" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "MANAGER_ROLE", - inputs: [], - outputs: [ - { - name: "", - type: "bytes32", - internalType: "bytes32" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "appchainContracts", - inputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ - { - name: "", - type: "address", - internalType: "address" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "chainIDs", - inputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "computeSequencingChainAddress", - inputs: [ - { - name: "salt", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "chainId", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ - { - name: "", - type: "address", - internalType: "address" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "createSyndicateSequencingChain", - inputs: [ - { - name: "appchainId", - type: "uint256", - internalType: "uint256" - }, - { - name: "admin", - type: "address", - internalType: "address" - }, - { - name: "permissionModule", - type: "address", - internalType: "contract IRequirementModule" - }, - { - name: "salt", - type: "bytes32", - internalType: "bytes32" - } - ], - outputs: [ - { - name: "sequencingChain", - type: "address", - internalType: "address" - }, - { - name: "actualChainId", - type: "uint256", - internalType: "uint256" - } - ], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "getAppchainsAndContracts", - inputs: [], - outputs: [ - { - name: "_chainIDs", - type: "uint256[]", - internalType: "uint256[]" - }, - { - name: "_contracts", - type: "address[]", - internalType: "address[]" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "getBytecode", - inputs: [ - { - name: "chainId", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ - { - name: "", - type: "bytes", - internalType: "bytes" - } - ], - stateMutability: "pure" - }, - { - type: "function", - name: "getContractsForAppchains", - inputs: [ - { - name: "_chainIDs", - type: "uint256[]", - internalType: "uint256[]" - } - ], - outputs: [ - { - name: "_contracts", - type: "address[]", - internalType: "address[]" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "getNextChainId", - inputs: [], - outputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "getRoleAdmin", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - } - ], - outputs: [ - { - name: "", - type: "bytes32", - internalType: "bytes32" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "getTotalAppchains", - inputs: [], - outputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "grantRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "account", - type: "address", - internalType: "address" - } - ], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "hasRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "account", - type: "address", - internalType: "address" - } - ], - outputs: [ - { - name: "", - type: "bool", - internalType: "bool" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "isChainIdUsed", - inputs: [ - { - name: "chainId", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ - { - name: "", - type: "bool", - internalType: "bool" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "namespacePrefix", - inputs: [], - outputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "nextAutoChainId", - inputs: [], - outputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "pause", - inputs: [], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "paused", - inputs: [], - outputs: [ - { - name: "", - type: "bool", - internalType: "bool" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "renounceRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "callerConfirmation", - type: "address", - internalType: "address" - } - ], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "revokeRole", - inputs: [ - { - name: "role", - type: "bytes32", - internalType: "bytes32" - }, - { - name: "account", - type: "address", - internalType: "address" - } - ], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "supportsInterface", - inputs: [ - { - name: "interfaceId", - type: "bytes4", - internalType: "bytes4" - } - ], - outputs: [ - { - name: "", - type: "bool", - internalType: "bool" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "unpause", - inputs: [], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "updateNamespaceConfig", - inputs: [ - { - name: "newPrefix", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "usedNamespaces", - inputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ - { - name: "", - type: "uint8", - internalType: "enum NamespaceState" - } - ], - stateMutability: "view" - }, - { - type: "event", - name: "ChainIdManuallyMarked", - inputs: [ - { - name: "chainId", - type: "uint256", - indexed: true, - internalType: "uint256" - } - ], - anonymous: false - }, - { - type: "event", - name: "NamespaceConfigUpdated", - inputs: [ - { - name: "oldNamespacePrefix", - type: "uint256", - indexed: false, - internalType: "uint256" - }, - { - name: "newNamespacePrefix", - type: "uint256", - indexed: false, - internalType: "uint256" - } - ], - anonymous: false - }, - { - type: "event", - name: "Paused", - inputs: [ - { - name: "account", - type: "address", - indexed: false, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "RoleAdminChanged", - inputs: [ - { - name: "role", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "previousAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "newAdminRole", - type: "bytes32", - indexed: true, - internalType: "bytes32" - } - ], - anonymous: false - }, - { - type: "event", - name: "RoleGranted", - inputs: [ - { - name: "role", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "account", - type: "address", - indexed: true, - internalType: "address" - }, - { - name: "sender", - type: "address", - indexed: true, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "RoleRevoked", - inputs: [ - { - name: "role", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "account", - type: "address", - indexed: true, - internalType: "address" - }, - { - name: "sender", - type: "address", - indexed: true, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "SyndicateSequencingChainCreated", - inputs: [ - { - name: "appchainId", - type: "uint256", - indexed: true, - internalType: "uint256" - }, - { - name: "sequencingChainAddress", - type: "address", - indexed: true, - internalType: "address" - }, - { - name: "permissionModuleAddress", - type: "address", - indexed: true, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "event", - name: "Unpaused", - inputs: [ - { - name: "account", - type: "address", - indexed: false, - internalType: "address" - } - ], - anonymous: false - }, - { - type: "error", - name: "AccessControlBadConfirmation", - inputs: [] - }, - { - type: "error", - name: "AccessControlUnauthorizedAccount", - inputs: [ - { - name: "account", - type: "address", - internalType: "address" - }, - { - name: "neededRole", - type: "bytes32", - internalType: "bytes32" - } - ] - }, - { - type: "error", - name: "ChainIdAlreadyExists", - inputs: [] - }, - { - type: "error", - name: "Create2EmptyBytecode", - inputs: [] - }, - { - type: "error", - name: "EnforcedPause", - inputs: [] - }, - { - type: "error", - name: "ExpectedPause", - inputs: [] - }, - { - type: "error", - name: "FailedDeployment", - inputs: [] - }, - { - type: "error", - name: "InsufficientBalance", - inputs: [ - { - name: "balance", - type: "uint256", - internalType: "uint256" - }, - { - name: "needed", - type: "uint256", - internalType: "uint256" - } - ] - }, - { - type: "error", - name: "StringsInvalidChar", - inputs: [] - }, - { - type: "error", - name: "ZeroAddress", - inputs: [] - } -] as const diff --git a/synd-cli/src/abi/synd/SyndicateSequencingChain.ts b/synd-cli/src/abi/synd/SyndicateSequencingChain.ts index fc7a9bf79..762a305dc 100644 --- a/synd-cli/src/abi/synd/SyndicateSequencingChain.ts +++ b/synd-cli/src/abi/synd/SyndicateSequencingChain.ts @@ -3,114 +3,104 @@ export const syndicateSequencingChainABI = [ type: "constructor", inputs: [ { - name: "_appchainId", - type: "uint256", - internalType: "uint256" + name: "_gasMeter", + type: "address", + internalType: "address" } ], stateMutability: "nonpayable" }, { type: "function", - name: "EPOCH_DURATION", + name: "SEQUENCING_MODULE_STORAGE_LOCATION", inputs: [], outputs: [ { name: "", - type: "uint256", - internalType: "uint256" + type: "bytes32", + internalType: "bytes32" } ], stateMutability: "view" }, { type: "function", - name: "START_TIMESTAMP", + name: "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", inputs: [], outputs: [ { name: "", - type: "uint256", - internalType: "uint256" + type: "bytes32", + internalType: "bytes32" } ], stateMutability: "view" }, { type: "function", - name: "appchainId", + name: "UPGRADE_INTERFACE_VERSION", inputs: [], outputs: [ { name: "", - type: "uint256", - internalType: "uint256" + type: "string", + internalType: "string" } ], stateMutability: "view" }, { type: "function", - name: "disableGasTracking", - inputs: [], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "emissionsReceiver", + name: "VERSION", inputs: [], outputs: [ { name: "", - type: "address", - internalType: "address" + type: "uint256", + internalType: "uint256" } ], stateMutability: "view" }, { type: "function", - name: "enableGasTracking", - inputs: [], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "encodeTransaction", + name: "_processTransaction", inputs: [ { - name: "data", - type: "bytes", - internalType: "bytes" - } - ], - outputs: [ + name: "sequencer", + type: "address", + internalType: "address" + }, { - name: "", + name: "data", type: "bytes", internalType: "bytes" } ], - stateMutability: "pure" + outputs: [], + stateMutability: "nonpayable" }, { type: "function", - name: "gasTrackingDisabled", - inputs: [], - outputs: [ + name: "_processTransactionsBulk", + inputs: [ { - name: "", - type: "bool", - internalType: "bool" + name: "sequencer", + type: "address", + internalType: "address" + }, + { + name: "data", + type: "bytes[]", + internalType: "bytes[]" } ], - stateMutability: "view" + outputs: [], + stateMutability: "nonpayable" }, { type: "function", - name: "getCurrentEpoch", + name: "appchainId", inputs: [], outputs: [ { @@ -123,73 +113,71 @@ export const syndicateSequencingChainABI = [ }, { type: "function", - name: "getEmissionsReceiver", - inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address" - } - ], - stateMutability: "view" - }, - { - type: "function", - name: "getEpochEnd", + name: "encodeTransaction", inputs: [ { - name: "epochIndex", - type: "uint256", - internalType: "uint256" + name: "data", + type: "bytes", + internalType: "bytes" } ], outputs: [ { name: "", - type: "uint256", - internalType: "uint256" + type: "bytes", + internalType: "bytes" } ], stateMutability: "pure" }, { type: "function", - name: "getEpochStart", - inputs: [ + name: "gasMeter", + inputs: [], + outputs: [ { - name: "epochIndex", - type: "uint256", - internalType: "uint256" + name: "", + type: "address", + internalType: "address" } ], + stateMutability: "view" + }, + { + type: "function", + name: "getInitializedVersion", + inputs: [], outputs: [ { name: "", - type: "uint256", - internalType: "uint256" + type: "uint64", + internalType: "uint64" } ], - stateMutability: "pure" + stateMutability: "view" }, { type: "function", - name: "getTokensForEpoch", + name: "initialize", inputs: [ { - name: "epochIndex", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ + name: "admin", + type: "address", + internalType: "address" + }, { - name: "", + name: "_permissionRequirementModule", + type: "address", + internalType: "address" + }, + { + name: "_appchainId", type: "uint256", internalType: "uint256" } ], - stateMutability: "view" + outputs: [], + stateMutability: "nonpayable" }, { type: "function", @@ -287,42 +275,23 @@ export const syndicateSequencingChainABI = [ }, { type: "function", - name: "renounceOwnership", + name: "proxiableUUID", inputs: [], - outputs: [], - stateMutability: "nonpayable" - }, - { - type: "function", - name: "setEmissionsReceiver", - inputs: [ + outputs: [ { - name: "_emissionsReceiver", - type: "address", - internalType: "address" + name: "", + type: "bytes32", + internalType: "bytes32" } ], - outputs: [], - stateMutability: "nonpayable" + stateMutability: "view" }, { type: "function", - name: "tokensUsedPerEpoch", - inputs: [ - { - name: "epochIndex", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ - { - name: "tokensUsed", - type: "uint256", - internalType: "uint256" - } - ], - stateMutability: "view" + name: "renounceOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable" }, { type: "function", @@ -351,20 +320,32 @@ export const syndicateSequencingChainABI = [ stateMutability: "nonpayable" }, { - type: "event", - name: "EmissionsReceiverUpdated", + type: "function", + name: "upgradeToAndCall", inputs: [ { - name: "oldReceiver", + name: "newImplementation", type: "address", - indexed: true, internalType: "address" }, { - name: "newReceiver", - type: "address", - indexed: true, - internalType: "address" + name: "data", + type: "bytes", + internalType: "bytes" + } + ], + outputs: [], + stateMutability: "payable" + }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint64", + indexed: false, + internalType: "uint64" } ], anonymous: false @@ -420,6 +401,30 @@ export const syndicateSequencingChainABI = [ ], anonymous: false }, + { + type: "event", + name: "Upgraded", + inputs: [ + { + name: "implementation", + type: "address", + indexed: true, + internalType: "address" + } + ], + anonymous: false + }, + { + type: "error", + name: "AddressEmptyCode", + inputs: [ + { + name: "target", + type: "address", + internalType: "address" + } + ] + }, { type: "error", name: "DataTooLarge", @@ -438,12 +443,28 @@ export const syndicateSequencingChainABI = [ }, { type: "error", - name: "GasTrackingAlreadyDisabled", + name: "ERC1967InvalidImplementation", + inputs: [ + { + name: "implementation", + type: "address", + internalType: "address" + } + ] + }, + { + type: "error", + name: "ERC1967NonPayable", + inputs: [] + }, + { + type: "error", + name: "FailedCall", inputs: [] }, { type: "error", - name: "GasTrackingAlreadyEnabled", + name: "InvalidInitialization", inputs: [] }, { @@ -451,6 +472,16 @@ export const syndicateSequencingChainABI = [ name: "NoTxData", inputs: [] }, + { + type: "error", + name: "NotGasMeterContract", + inputs: [] + }, + { + type: "error", + name: "NotInitializing", + inputs: [] + }, { type: "error", name: "OwnableInvalidOwner", @@ -480,7 +511,23 @@ export const syndicateSequencingChainABI = [ }, { type: "error", - name: "ZeroEpochIndex", + name: "UUPSUnauthorizedCallContext", + inputs: [] + }, + { + type: "error", + name: "UUPSUnsupportedProxiableUUID", + inputs: [ + { + name: "slot", + type: "bytes32", + internalType: "bytes32" + } + ] + }, + { + type: "error", + name: "ZeroAddress", inputs: [] } ] as const diff --git a/synd-cli/src/cli/commands/appchain/create/foundation/deploySequencingChain.ts b/synd-cli/src/cli/commands/appchain/create/foundation/deploySequencingChain.ts index 20586eee3..b92031e9a 100644 --- a/synd-cli/src/cli/commands/appchain/create/foundation/deploySequencingChain.ts +++ b/synd-cli/src/cli/commands/appchain/create/foundation/deploySequencingChain.ts @@ -1,12 +1,12 @@ -import { parseEventLogs, toBytes, toHex } from "viem" - import { allowlistSequencingModuleABI, allowlistSequencingModuleBytecode } from "@/abi/synd/AllowlistSequencingModule" -import { requireAndModuleABI } from "@/abi/synd/RequireAndModule" -import { requireAndModuleFactoryABI } from "@/abi/synd/RequireAndModuleFactory" -import { syndicateFactoryABI } from "@/abi/synd/SyndicateFactory" +import { + requireAndModuleABI, + requireAndModuleBytecode +} from "@/abi/synd/RequireAndModule" +import { syndForwarderABI } from "@/abi/synd/SyndForwarder" import { syndicateSequencingChainABI } from "@/abi/synd/SyndicateSequencingChain" import type { CreateRequireAndModule, @@ -14,22 +14,29 @@ import type { DeployAndSetupAllowlistSequencingModule, DeploySequencingChain, RegisterAllowlistSequencingModuleOnRequireAllModule, - TransferAllContractsOwnershipParams + TransferPermissionModuleOwnership } from "@/types" import { supportedSequencingChains } from "@/utils/constants" +import { + getSequencingChainAddress, + wrapArb, + wrapDeploy +} from "@/utils/forwarderHelper" import { getChainExplorerUrl } from "@/utils/helpers" import { print } from "@/utils/print" +import { encodeFunctionData, pad, toBytes, toHex } from "viem" export async function deploySequencingChain({ sequencerAccount, chainId, sequencingPublicClient, deployerSequencingWalletClient, - ownerSequencingWalletClient + ownerSequencingWalletClient, + deployerEthereumWalletClient, + ethereumPublicClient }: DeploySequencingChain) { // 1. Create RequireAndModule const requireAndModule = await createRequireAndModule({ - chainId, sequencingPublicClient, deployerSequencingWalletClient }) @@ -42,16 +49,7 @@ export async function deploySequencingChain({ deployerSequencingWalletClient }) - // 3. Create SyndicateSequencingChain - const { sequencingContract, deployedAtBlock } = - await createSyndicateSequencingChain({ - requireAndModule, - sequencingPublicClient, - deployerSequencingWalletClient, - chainId - }) - - // 4. Register AllowlistSequencingModule on RequireAllModule + // 3. Register AllowlistSequencingModule on RequireAllModule await registerAllowlistSequencingModuleOnRequireAllModule({ requireAndModule, allowlistSequencingModule, @@ -59,9 +57,8 @@ export async function deploySequencingChain({ sequencingPublicClient }) - // 5. Transfer ownership of all contracts to owner account - await transferAllContractsOwnership({ - sequencingContract, + // 4. Transfer ownership permission modules + await transferPermissonModuleOwnership({ allowlistSequencingModule, requireAndModule, deployerSequencingWalletClient, @@ -69,105 +66,103 @@ export async function deploySequencingChain({ ownerSequencingWalletClient }) + // 5. Create SyndicateSequencingChain + const sequencingContract = await createSyndicateSequencingChain({ + requireAndModule, + ethereumPublicClient, + deployerEthereumWalletClient, + chainId, + sequencingChainId: sequencingPublicClient.chain.id, + owner: ownerSequencingWalletClient.account.address + }) + return { sequencingContract, allowlistSequencingModule, - requireAndModule, - deployedAtBlock + requireAndModule } } async function createRequireAndModule({ - chainId, sequencingPublicClient, deployerSequencingWalletClient }: CreateRequireAndModule) { - const requireAndFactoryAddress = - supportedSequencingChains[sequencingPublicClient.chain.id].requireAndFactory - - const { request: requireAndModuleRequest } = - await sequencingPublicClient.simulateContract({ - account: deployerSequencingWalletClient.account, - address: requireAndFactoryAddress, - abi: requireAndModuleFactoryABI, - functionName: "createRequireAndModule", - args: [ - deployerSequencingWalletClient.account.address, - toHex(toBytes(chainId, { size: 32 })) - ] - }) - const requireAndModuleHash = - await deployerSequencingWalletClient.writeContract(requireAndModuleRequest) - const requireAndModuleTx = + const hash = await deployerSequencingWalletClient.deployContract({ + abi: requireAndModuleABI, + bytecode: requireAndModuleBytecode, + args: [deployerSequencingWalletClient.account.address] + }) + const requireAndModuleReceipt = await sequencingPublicClient.waitForTransactionReceipt({ - hash: requireAndModuleHash + hash }) - const requireAndFactoryLogs = parseEventLogs({ - abi: requireAndModuleFactoryABI, - logs: requireAndModuleTx.logs - }) - const requireAndModule = requireAndFactoryLogs.find( - (l) => l.eventName === "RequireAndModuleCreated" - )?.args.module - if (!requireAndModule) { + const requireAndModuleAddress = requireAndModuleReceipt.contractAddress + if (!requireAndModuleAddress) { throw new Error("RequireAndModule deployment failed") } print( - `🔍 RequireAndModule deployed to ${requireAndModule}\n${getChainExplorerUrl( + `🔍 RequireAndModule deployed to ${requireAndModuleAddress}\n${getChainExplorerUrl( sequencingPublicClient.chain - )}/tx/${requireAndModuleHash}` + )}/tx/${hash}` ) - return requireAndModule + return requireAndModuleAddress } -async function createSyndicateSequencingChain({ +export async function createSyndicateSequencingChain({ + chainId, requireAndModule, - sequencingPublicClient, - deployerSequencingWalletClient, - chainId + ethereumPublicClient, + deployerEthereumWalletClient, + sequencingChainId, + owner }: CreateSyndicateSequencingChain) { - const syndicateFactoryAddress = - supportedSequencingChains[sequencingPublicClient.chain.id].syndicateFactory - const { request: syndicateSequencingChainRequest } = - await sequencingPublicClient.simulateContract({ - account: deployerSequencingWalletClient.account, - address: syndicateFactoryAddress, - abi: syndicateFactoryABI, - functionName: "createSyndicateSequencingChain", - args: [ - BigInt(chainId), - deployerSequencingWalletClient.account.address, - requireAndModule, - toHex(toBytes(chainId, { size: 32 })) - ] - }) - const syndicateSequencingChainHash = - await deployerSequencingWalletClient.writeContract( - syndicateSequencingChainRequest - ) - const syndicateSequencingChainTx = - await sequencingPublicClient.waitForTransactionReceipt({ - hash: syndicateSequencingChainHash - }) - const syndicateFactoryLogs = parseEventLogs({ - abi: syndicateFactoryABI, - logs: syndicateSequencingChainTx.logs + const { + sequencingChainImplementation, + forwarderAddress, + forwarderParentAddress, + inbox + } = supportedSequencingChains[sequencingChainId] + const initData = encodeFunctionData({ + abi: syndicateSequencingChainABI, + functionName: "initialize", + args: [owner, requireAndModule, BigInt(chainId)] }) - const sequencingContract = syndicateFactoryLogs.find( - (l) => l.eventName === "SyndicateSequencingChainCreated" - )?.args.sequencingChainAddress - if (!sequencingContract) { - throw new Error("SyndicateSequencingChain deployment failed") - } + const deploymentCall = wrapDeploy( + toHex(pad(toBytes(chainId))), + sequencingChainImplementation, + initData + ) + const bridgeCall = wrapArb(forwarderAddress, deploymentCall) + const txHash = await deployerEthereumWalletClient.writeContract({ + address: forwarderParentAddress, + abi: syndForwarderABI, + functionName: "call", + args: [inbox, bridgeCall] + }) + print( - `🔍 SyndicateSequencingChain deployed to ${sequencingContract}\n${getChainExplorerUrl( - sequencingPublicClient.chain - )}/tx/${syndicateSequencingChainHash}` + `🔍 Sequencing chain deployment initiated on ${ + ethereumPublicClient.chain.name + } \n${getChainExplorerUrl(ethereumPublicClient.chain)}/tx/${txHash}` ) - return { - sequencingContract, - deployedAtBlock: syndicateSequencingChainTx.blockNumber + + const receipt = await ethereumPublicClient.waitForTransactionReceipt({ + hash: txHash + }) + if (!receipt.status) { + throw new Error("Sequencing chain deployment failed") } + + const sequencingChainAddress = getSequencingChainAddress( + sequencingChainId, + sequencingChainId + ) + + print( + `🔍 L1 transaction successful! Sequencing chain contract will be deployed to ${sequencingChainAddress} pending the success of the L2 transaction` + ) + + return sequencingChainAddress } async function deployAndSetupAllowlistSequencingModule({ @@ -243,32 +238,13 @@ async function registerAllowlistSequencingModuleOnRequireAllModule({ ) } -async function transferAllContractsOwnership({ - sequencingContract, +async function transferPermissonModuleOwnership({ allowlistSequencingModule, requireAndModule, deployerSequencingWalletClient, sequencingPublicClient, ownerSequencingWalletClient -}: TransferAllContractsOwnershipParams) { - const transferOwnershipTxHash = - await deployerSequencingWalletClient.writeContract({ - address: sequencingContract, - abi: syndicateSequencingChainABI, - functionName: "transferOwnership", - args: [ownerSequencingWalletClient.account.address], - account: deployerSequencingWalletClient.account - }) - const transferOwnershipTx = - await sequencingPublicClient.waitForTransactionReceipt({ - hash: transferOwnershipTxHash - }) - print( - `🔍 SyndicateSequencingChain ownership transferred to owner ${ownerSequencingWalletClient.account.address}\n${getChainExplorerUrl( - sequencingPublicClient.chain - )}/tx/${transferOwnershipTx.transactionHash}` - ) - +}: TransferPermissionModuleOwnership) { // AllowlistSequencingModule const transferAllowlistSequencingModuleOwnershipTxHash = await deployerSequencingWalletClient.writeContract({ @@ -283,9 +259,11 @@ async function transferAllContractsOwnership({ hash: transferAllowlistSequencingModuleOwnershipTxHash }) print( - `🔍 AllowlistSequencingModule ownership transferred to owner ${ownerSequencingWalletClient.account.address}\n${getChainExplorerUrl( - sequencingPublicClient.chain - )}/tx/${transferAllowlistSequencingModuleOwnershipTx.transactionHash}` + `🔍 AllowlistSequencingModule ownership transferred to owner ${ + ownerSequencingWalletClient.account.address + }\n${getChainExplorerUrl(sequencingPublicClient.chain)}/tx/${ + transferAllowlistSequencingModuleOwnershipTx.transactionHash + }` ) // RequireAllModule @@ -302,8 +280,10 @@ async function transferAllContractsOwnership({ hash: transferRequireAllModuleOwnershipTxHash }) print( - `🔍 RequireAllModule ownership transferred to owner ${ownerSequencingWalletClient.account.address}\n${getChainExplorerUrl( - sequencingPublicClient.chain - )}/tx/${transferRequireAllModuleOwnershipTx.transactionHash}` + `🔍 RequireAllModule ownership transferred to owner ${ + ownerSequencingWalletClient.account.address + }\n${getChainExplorerUrl(sequencingPublicClient.chain)}/tx/${ + transferRequireAllModuleOwnershipTx.transactionHash + }` ) } diff --git a/synd-cli/src/cli/commands/appchain/create/foundation/foundation.ts b/synd-cli/src/cli/commands/appchain/create/foundation/foundation.ts index 6c9d3e362..768fb8b88 100644 --- a/synd-cli/src/cli/commands/appchain/create/foundation/foundation.ts +++ b/synd-cli/src/cli/commands/appchain/create/foundation/foundation.ts @@ -30,7 +30,8 @@ export async function foundation({ ownerSequencingWalletClient, settlementPublicClient, sequencingPublicClient, - ethereumChainRpcUrl, + ethereumPublicClient, + deployerEthereumWalletClient, deployerSequencingWalletClient, ownerPrivateKey, coreContractsCreatedAtHash, @@ -171,24 +172,24 @@ export async function foundation({ print("🔍 Deploying Syndicate sequencing chain...") // Sequencing Chain - const { - sequencingContract, - allowlistSequencingModule, - requireAndModule, - deployedAtBlock - } = await deploySequencingChain({ - sequencerAccount, - chainId, - sequencingPublicClient, - deployerSequencingWalletClient, - ownerSequencingWalletClient - }) + const sequencingStartBlock = ( + await getBlockNumber(sequencingPublicClient) + ).toString() + const { sequencingContract, allowlistSequencingModule, requireAndModule } = + await deploySequencingChain({ + sequencerAccount, + chainId, + sequencingPublicClient, + deployerSequencingWalletClient, + ownerSequencingWalletClient, + deployerEthereumWalletClient, + ethereumPublicClient + }) await upsertToSyndObject(chainName, environment, "sequencing", { sequencingContract, allowlistSequencingModule, requireAndModule, settlementBlockBeforeDeployment, - deployedAtBlock, sequencer: sequencerAccount.address }) @@ -199,7 +200,7 @@ export async function foundation({ coreContracts, settlementStartBlock: settlementBlockBeforeDeployment, sequencingContract, - sequencingStartBlock: deployedAtBlock, + sequencingStartBlock, ownerSettlementWalletClient, settlementPublicClient, sequencingPublicClient, @@ -246,7 +247,7 @@ export async function foundation({ { "settlement-rpc-url": settlementPublicClient.transport.url, "sequencing-chain-rpc-url": sequencingPublicClient.transport.url, - "ethereum-rpc-url": ethereumChainRpcUrl, + "ethereum-rpc-url": ethereumPublicClient.transport.url, "sequencing-chain-contract-address": sequencingContract, "sequencer-private-key": sequencerPrivateKey, "assertion-poster-contract-address": "0xREPLACEMELATER", diff --git a/synd-cli/src/cli/commands/appchain/create/foundation/index.ts b/synd-cli/src/cli/commands/appchain/create/foundation/index.ts index 24bafcf8a..073d685e5 100644 --- a/synd-cli/src/cli/commands/appchain/create/foundation/index.ts +++ b/synd-cli/src/cli/commands/appchain/create/foundation/index.ts @@ -74,6 +74,9 @@ export function createFoundationCommand(program: Command) { ownerPrivateKey ]) + const [ethereumPublicClient, [deployerEthereumWalletClient]] = + await getSupportedChainClients(ethereumRpc, [deployerPrivateKey]) + await foundation({ deployerSettlementWalletClient, deployerSequencingWalletClient, @@ -84,7 +87,8 @@ export function createFoundationCommand(program: Command) { chainId: id, chainName: name, nativeToken, - ethereumChainRpcUrl: ethereumRpc, + ethereumPublicClient, + deployerEthereumWalletClient, ownerPrivateKey, coreContractsCreatedAtHash, appchainRpc, diff --git a/synd-cli/src/cli/commands/appchain/create/sequencing.ts b/synd-cli/src/cli/commands/appchain/create/sequencing.ts index 67230b77f..126399d02 100644 --- a/synd-cli/src/cli/commands/appchain/create/sequencing.ts +++ b/synd-cli/src/cli/commands/appchain/create/sequencing.ts @@ -23,6 +23,7 @@ export function createSequencingCommand(program: Command) { sequencingCmd .option("--config ", "Path to JSON config file") .option("--sequencing-rpc ", "RPC URL for the sequencing chain") + .option("--ethereum-rpc ", "RPC URL for Ethereum") .option("--owner-private-key ", "Private key of the owner account") .option( "--deployer-private-key ", @@ -39,7 +40,8 @@ export function createSequencingCommand(program: Command) { id: chainId, sequencingRpc, ownerPrivateKey, - deployerPrivateKey + deployerPrivateKey, + ethereumRpc } = validatedOptions const [ sequencingPublicClient, @@ -49,6 +51,9 @@ export function createSequencingCommand(program: Command) { ownerPrivateKey ]) + const [ethereumPublicClient, [deployerEthereumWalletClient]] = + await getSupportedChainClients(ethereumRpc, [deployerPrivateKey]) + const sequencerPrivateKey = generatePrivateKey() const sequencerAccount = privateKeyToAccount(sequencerPrivateKey) @@ -59,20 +64,20 @@ export function createSequencingCommand(program: Command) { const { sequencingContract, allowlistSequencingModule, - requireAndModule, - deployedAtBlock + requireAndModule } = await deploySequencingChain({ sequencerAccount, chainId, sequencingPublicClient, deployerSequencingWalletClient, - ownerSequencingWalletClient + ownerSequencingWalletClient, + deployerEthereumWalletClient, + ethereumPublicClient }) print("Deployed contracts:") print("Sequencing Contract", sequencingContract) print("Allowlist Sequencing Module", allowlistSequencingModule) print("Require And Module", requireAndModule) - print("Deployed at Block", deployedAtBlock.toString()) }) } diff --git a/synd-cli/src/cli/commands/appchain/determineSequencingChainAddress.ts b/synd-cli/src/cli/commands/appchain/determineSequencingChainAddress.ts new file mode 100644 index 000000000..b16f21b2a --- /dev/null +++ b/synd-cli/src/cli/commands/appchain/determineSequencingChainAddress.ts @@ -0,0 +1,26 @@ +import { risa, syndicate } from "@/utils/constants" +import { getSequencingChainAddress } from "@/utils/forwarderHelper" +import { print } from "@/utils/print" +import type { Command } from "@commander-js/extra-typings" + +export function determineSequencingChainAddressCommand(program: Command) { + program + .command("get-addr") + .description("Determine the sequencing chain address for a given chain ID") + .argument( + "", + "The chain ID to determine the sequencing chain address for" + ) + .option("-t, --testnet", "Indicates that the chain is a testnet") + .action(async (chainIdStr: string, options: { testnet?: boolean }) => { + const chainId = Number(chainIdStr) + if (Number.isNaN(chainId)) { + return print("Invalid chain ID") + } + const sequencingChainAddress = getSequencingChainAddress( + chainId, + options.testnet ? risa.id : syndicate.id + ) + print("Sequencing chain address:", sequencingChainAddress) + }) +} diff --git a/synd-cli/src/cli/commands/appchain/index.ts b/synd-cli/src/cli/commands/appchain/index.ts index 19301c4ab..60cf972e3 100644 --- a/synd-cli/src/cli/commands/appchain/index.ts +++ b/synd-cli/src/cli/commands/appchain/index.ts @@ -1,9 +1,9 @@ -import { print } from "@/utils/print" import type { Command } from "@commander-js/extra-typings" import { arbOwnerCommand } from "./arbOwner" import { checkRetryableCommand } from "./checkRetryable" import { checkTokenBridgeCommand } from "./checkTokenBridge/" import { createAppchainCommand } from "./create" +import { determineSequencingChainAddressCommand } from "./determineSequencingChainAddress" import { e2eCommand } from "./e2e" import { executeOutboxCommand } from "./executeOutbox" import { handoffCommand } from "./handoff" @@ -12,9 +12,6 @@ export function appchainCommand(program: Command) { const appchainProgram = program .command("appchain") .description("Manage appchains") - .action(async () => { - print("Managing appchains...") - }) createAppchainCommand(appchainProgram) handoffCommand(appchainProgram) @@ -23,4 +20,5 @@ export function appchainCommand(program: Command) { checkRetryableCommand(appchainProgram) executeOutboxCommand(appchainProgram) e2eCommand(appchainProgram) + determineSequencingChainAddressCommand(appchainProgram) } diff --git a/synd-cli/src/cli/schema.ts b/synd-cli/src/cli/schema.ts index 0d8ffcf96..41af80b9e 100644 --- a/synd-cli/src/cli/schema.ts +++ b/synd-cli/src/cli/schema.ts @@ -43,7 +43,7 @@ const privateKeySchema = (privateKeyName: string) => .regex(/^0x[a-fA-F0-9]{64}$/, `Invalid ${privateKeyName} private key`) .transform((val) => val as Hex) -const chainIdSchema = z.coerce +export const chainIdSchema = z.coerce .number() .int() .positive("Chain ID must be a positive integer") @@ -296,6 +296,7 @@ export const appchainDeployAssertionPosterOptionsSchema = z export const appchainCreateSequencingChainOptionsSchema = z .object({ sequencingRpc: z.url("Invalid sequencing chain RPC URL"), + ethereumRpc: z.url("Invalid ethereum chain RPC URL"), ownerPrivateKey: privateKeySchema("owner"), deployerPrivateKey: privateKeySchema("deployer"), id: chainIdSchema diff --git a/synd-cli/src/types.ts b/synd-cli/src/types.ts index 42a3e87d0..8f422aaf5 100644 --- a/synd-cli/src/types.ts +++ b/synd-cli/src/types.ts @@ -93,9 +93,12 @@ export type SupportedSequencingChains = Record< number, { bridge: Hex - requireAndFactory: Hex - syndicateFactory: Hex + inbox: Hex chain: Chain + // Implementation address of the SyndicateSequencingChain contract on the Sequencing Chain + sequencingChainImplementation: Hex + forwarderAddress: Hex + forwarderParentAddress: Hex } > @@ -121,7 +124,8 @@ export interface Foundation { ownerSequencingWalletClient: PrivateKeyWalletAccount settlementPublicClient: PublicClientWithChain sequencingPublicClient: PublicClientWithChain - ethereumChainRpcUrl: string + ethereumPublicClient: PublicClientWithChain + deployerEthereumWalletClient: PrivateKeyWalletAccount deployerSequencingWalletClient: WalletClient< Transport, Chain, @@ -171,19 +175,22 @@ export interface DeploySequencingChain { sequencingPublicClient: PublicClientWithChain deployerSequencingWalletClient: PrivateKeyWalletAccount ownerSequencingWalletClient: PrivateKeyWalletAccount + deployerEthereumWalletClient: PrivateKeyWalletAccount + ethereumPublicClient: PublicClientWithChain } export interface CreateRequireAndModule { - chainId: number sequencingPublicClient: PublicClientWithChain deployerSequencingWalletClient: PrivateKeyWalletAccount } export interface CreateSyndicateSequencingChain { requireAndModule: Hex - sequencingPublicClient: PublicClientWithChain - deployerSequencingWalletClient: PrivateKeyWalletAccount + deployerEthereumWalletClient: PrivateKeyWalletAccount + ethereumPublicClient: PublicClientWithChain chainId: number + sequencingChainId: number + owner: Hex } export interface DeployAndSetupAllowlistSequencingModule { @@ -199,8 +206,7 @@ export interface RegisterAllowlistSequencingModuleOnRequireAllModule { sequencingPublicClient: PublicClientWithChain } -export interface TransferAllContractsOwnershipParams { - sequencingContract: Hex +export interface TransferPermissionModuleOwnership { allowlistSequencingModule: Hex requireAndModule: Hex deployerSequencingWalletClient: PrivateKeyWalletAccount diff --git a/synd-cli/src/utils/constants.ts b/synd-cli/src/utils/constants.ts index ad33024f3..8053a781a 100644 --- a/synd-cli/src/utils/constants.ts +++ b/synd-cli/src/utils/constants.ts @@ -1,4 +1,4 @@ -import { defineChain } from "viem" +import { type Address, defineChain } from "viem" import { base, baseSepolia, mainnet, sepolia } from "viem/chains" import type { SupportedEthereumChains, @@ -58,18 +58,35 @@ export const syndicate = defineChain({ isTestnet: false }) +const deploymentAddresses: Record< + number, + { forwarderAddress: Address; forwarderParentAddress: Address } +> = { + // @note TODO: add mainnet deployment addresses post-audit + [mainnet.id]: { + forwarderAddress: "0x0000000000000000000000000000000000000000", + forwarderParentAddress: "0x0000000000000000000000000000000000000000" + }, + [sepolia.id]: { + forwarderAddress: "0x7Cdc5Ac9aD558D5AEd15657cD077dC6A6e7347Fd", + forwarderParentAddress: "0xfA6694Fbd39d4cF760748C1b3f75b0d5d71Fa3e1" + } +} + export const supportedSequencingChains: SupportedSequencingChains = { [risa.id]: { bridge: "0x1043E08195914c32ec3a4a075d9Eb2B0DC2fB1aA", - requireAndFactory: "0x60e6Ac9FF8ff09175329EfB3daDa27abDA812aA4", - syndicateFactory: "0x2e44cd104A6b67037b5e6DB662C0E917d1828D9E", - chain: risa + inbox: "0xEf3f505A2f05e042FDF240E8a01D11ff0E2BAdf1", + sequencingChainImplementation: "0xEd582132C33DE5B5A661De3D2dCe5FB8F2d8F33D", + chain: risa, + ...deploymentAddresses[sepolia.id] }, [syndicate.id]: { bridge: "0x3C8cF0ae6E89AC0796f29B3a58e7dEa1cD072277", - requireAndFactory: "0x3eEb8b1500cbaCbc4A3718D39414C8D191AC906B", - syndicateFactory: "0x0620625c3662CbD6a8ca8Eef196ee3b10A8Bd157", - chain: syndicate + inbox: "0x5EA55Fd41D42Eb307D281bdE78E4e7572A35ea13", + sequencingChainImplementation: "0x0000000000000000000000000000000000000000", + chain: syndicate, + ...deploymentAddresses[mainnet.id] } } diff --git a/synd-cli/src/utils/forwarderHelper.ts b/synd-cli/src/utils/forwarderHelper.ts new file mode 100644 index 000000000..cbc8c3aee --- /dev/null +++ b/synd-cli/src/utils/forwarderHelper.ts @@ -0,0 +1,122 @@ +import { ERC20InboxABI } from "@/abi/nitro/ERC20Inbox" +import { syndForwarderABI } from "@/abi/synd/SyndForwarder" +import { + type Address, + type Hex, + encodeFunctionData, + getContractAddress, + pad, + toBytes +} from "viem" +import { supportedSequencingChains } from "./constants" + +const OPTIMISM_PORTAL_ABI = [ + { + name: "depositTransaction", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { name: "_to", type: "address" }, + { name: "_value", type: "uint256" }, + { name: "_gasLimit", type: "uint64" }, + { name: "_isCreation", type: "bool" }, + { name: "_data", type: "bytes" } + ], + outputs: [] + } +] as const + +/** + * Encodes a call to SyndForwarder.deploy + * @param salt - The deployment salt + * @param impl - The implementation address + * @param init - The initialization data + * @returns Encoded function data + */ +export function wrapDeploy(salt: Hex, impl: Address, init: Hex): Hex { + return encodeFunctionData({ + abi: syndForwarderABI, + functionName: "deploy", + args: [salt, impl, init] + }) +} + +/** + * Encodes a call to DeployerParent.call + * @param to - The target address + * @param data - The call data + * @returns Encoded function data + */ +export function wrapCall(to: Address, data: Hex): Hex { + return encodeFunctionData({ + abi: syndForwarderABI, + functionName: "call", + args: [to, data] + }) +} + +/** + * Encodes a call to IOptimismPortal.depositTransaction + * @param forwarder - The forwarder address + * @param gasLimit - The gas limit for the L2 transaction + * @param data - The transaction data + * @returns Encoded function data + */ +export function wrapOP(forwarder: Address, gasLimit: bigint, data: Hex): Hex { + return encodeFunctionData({ + abi: OPTIMISM_PORTAL_ABI, + functionName: "depositTransaction", + args: [ + forwarder, // _to + BigInt(0), // _value + gasLimit, // _gasLimit + false, // _isCreation + data // _data + ] + }) +} + +/** + * Encodes a call to IArbBridge.unsafeCreateRetryableTicket + * @param forwarder - The forwarder address + * @param gasLimitArb - The gas limit for the Arbitrum retryable ticket + * @param maxFeePerGas - The max fee per gas + * @param data - The transaction data + * @returns Encoded function data + */ +export function wrapArb( + forwarder: Address, + data: Hex, + gasLimitArb: bigint = BigInt(210000), + maxFeePerGas: bigint = BigInt(1000000000) // 1 gwei +): Hex { + const amount = gasLimitArb * maxFeePerGas + return encodeFunctionData({ + abi: ERC20InboxABI, + functionName: "unsafeCreateRetryableTicket", + args: [ + forwarder, // to + BigInt(0), // l2CallValue + BigInt(0), // maxSubmissionCost + forwarder, // excessFeeRefundAddress + forwarder, // callValueRefundAddress + gasLimitArb, // gasLimit + maxFeePerGas, // maxFeePerGas + amount, // tokenTotalFeeAmount + data // data + ] + }) +} + +export function getSequencingChainAddress( + chainId: number, + seqChainId: number +): Address { + return getContractAddress({ + bytecodeHash: + "0xe64a956779ab4f25594d056c498bb94989fa8edbf4b4124362dda18e5c29746e", // << keccak of MinimalUUPSStub bytecode + from: supportedSequencingChains[seqChainId].forwarderAddress, + opcode: "CREATE2", + salt: pad(toBytes(chainId)) + }) +} diff --git a/synd-contracts/.claude/CLAUDE.md b/synd-contracts/.claude/CLAUDE.md new file mode 100644 index 000000000..96179a38e --- /dev/null +++ b/synd-contracts/.claude/CLAUDE.md @@ -0,0 +1,17 @@ +# Claude Code Preferences + +## Code Style + +- Always run `forge fmt --check` for linting +- Mappings should use descriptive variable names: `mapping(address acceptedToken => bool isAccepted) public supportedTokens;` +- No emojis in documentation, comments, or deploy scripts + +## Security + +- Always review code for vulnerabilities and security issues +- Look for common smart contract vulnerabilities (reentrancy, overflow, access control, etc.) + +## Testing + +- Update tests when refactoring contracts +- Ensure comprehensive test coverage for new functionality diff --git a/synd-contracts/.storage-layouts/ArbChainConfig.json b/synd-contracts/.storage-layouts/ArbChainConfig.json new file mode 100644 index 000000000..9e9237fb5 --- /dev/null +++ b/synd-contracts/.storage-layouts/ArbChainConfig.json @@ -0,0 +1,125 @@ +{ + "storage": [ + { + "astId": 276, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 278, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "INITIAL_APPCHAIN_OWNER", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 280, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "ARBITRUM_BRIDGE_ADDRESS", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 282, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "ARBITRUM_INBOX_ADDRESS", + "offset": 0, + "slot": "3", + "type": "t_address" + }, + { + "astId": 284, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SEQUENCING_CONTRACT_ADDRESS", + "offset": 0, + "slot": "4", + "type": "t_address" + }, + { + "astId": 286, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "CHAIN_ID", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 288, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SEQUENCING_CHAIN_ID", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 290, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SETTLEMENT_DELAY", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 292, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SETTLEMENT_START_BLOCK", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 294, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SEQUENCING_START_BLOCK", + "offset": 0, + "slot": "9", + "type": "t_uint256" + }, + { + "astId": 296, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "DEFAULT_SEQUENCING_CHAIN_WS_RPC_URL", + "offset": 0, + "slot": "10", + "type": "t_string_storage" + }, + { + "astId": 298, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "APPCHAIN_BLOCK_EXPLORER_URL", + "offset": 0, + "slot": "11", + "type": "t_string_storage" + }, + { + "astId": 301, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "version", + "offset": 0, + "slot": "12", + "type": "t_string_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } +} diff --git a/synd-contracts/.storage-layouts/GasArchive.json b/synd-contracts/.storage-layouts/GasArchive.json new file mode 100644 index 000000000..127dec9fd --- /dev/null +++ b/synd-contracts/.storage-layouts/GasArchive.json @@ -0,0 +1,4 @@ +{ + "storage": [], + "types": {} +} diff --git a/synd-contracts/.storage-layouts/SyndicateFactory.json b/synd-contracts/.storage-layouts/SyndicateFactory.json new file mode 100644 index 000000000..127dec9fd --- /dev/null +++ b/synd-contracts/.storage-layouts/SyndicateFactory.json @@ -0,0 +1,4 @@ +{ + "storage": [], + "types": {} +} diff --git a/synd-contracts/.storage-layouts/SyndicateSequencingChain.json b/synd-contracts/.storage-layouts/SyndicateSequencingChain.json new file mode 100644 index 000000000..127dec9fd --- /dev/null +++ b/synd-contracts/.storage-layouts/SyndicateSequencingChain.json @@ -0,0 +1,4 @@ +{ + "storage": [], + "types": {} +} diff --git a/synd-contracts/Makefile b/synd-contracts/Makefile index 711cb262a..21112eebf 100644 --- a/synd-contracts/Makefile +++ b/synd-contracts/Makefile @@ -6,7 +6,9 @@ -include .env # deploy SyndicateFactory to Base Sepolia -deploy-syndicate-factory :; forge script script/DeployContractsForSequencingChain.s.sol:DeploySyndicateFactory --rpc-url exo --account deployer --sender ${DEV_PUB_ADDRESS} --skip-simulation --legacy --broadcast -vv +deploy-syndicate-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:DeploySyndicateFactoryDeterministic --rpc-url base_sepolia --account deployer --sender ${DEV_PUB_ADDRESS} --broadcast -vv + +preview-syndicate-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:PreviewSyndicateFactoryAddresses --rpc-url base_sepolia --account deployer --sender ${DEV_PUB_ADDRESS} --broadcast -vv # deploy DeploySyndicateSequencingChainPlusSetupWithAlwaysAllowModule to Syndicate Exo deploy-syndicate-sequencing-chain-plus-setup-with-always-allow-module :; forge script script/DeployContractsForSequencingChain.s.sol:DeploySyndicateSequencingChainPlusSetupWithAlwaysAllowModule --rpc-url exo --account deployer --sender ${DEV_PUB_ADDRESS} --skip-simulation --legacy --broadcast -vv @@ -87,5 +89,121 @@ airdrop-dry-run :; DRY_RUN=true AIRDROP_CONTRACT=${AIRDROP_CONTRACT} TOKEN_ADDRE # Execute airdrop with bash script airdrop-execute :; AIRDROP_CONTRACT=${AIRDROP_CONTRACT} TOKEN_ADDRESS=${TOKEN_ADDRESS} RPC_URL=${RPC_URL} ACCOUNT=${ACCOUNT} DEV_PUB_ADDRESS=${DEV_PUB_ADDRESS} ./script/airdrop/airdrop.sh +## Storage Layout Validation Commands + +# Simple storage layout validation for upgradeable contracts +storage-layout-check :; @echo "Validating storage layouts for upgradeable contracts..." && \ + contracts=(SyndicateFactory SyndicateSequencingChain GasArchive ArbChainConfig) && \ + mkdir -p .storage-layouts && \ + for contract in "$${contracts[@]}"; do \ + forge inspect --json "$${contract}" storageLayout > ".storage-layouts/$${contract}.temp.json"; \ + done && \ + for contract in "$${contracts[@]}"; do \ + if [ -f ".storage-layouts/$${contract}.json" ]; then \ + echo "Comparing $${contract}..."; \ + if ! cmp -s ".storage-layouts/$${contract}.json" ".storage-layouts/$${contract}.temp.json"; then \ + echo "❌ STORAGE LAYOUT CHANGED: $${contract}"; \ + echo "Baseline:"; \ + cat ".storage-layouts/$${contract}.json"; \ + echo "Current:"; \ + cat ".storage-layouts/$${contract}.temp.json"; \ + echo "This change could corrupt storage during upgrades!"; \ + exit 1; \ + else \ + echo "✅ $${contract}: Storage layout unchanged"; \ + fi; \ + else \ + echo "ℹ️ $${contract}: No contract found, skipping..."; \ + fi; \ + done && \ + rm -f .storage-layouts/*.temp.json && \ + echo "✅ All storage layouts are safe for upgrades" + +# Clean storage layout artifacts +storage-layout-clean :; rm -rf .storage-layouts out/build-info + +# Update storage layout +storage-layout-update :; @echo "Updating storage layout..." && \ + $(MAKE) storage-layout-clean && \ + mkdir -p .storage-layouts && \ + contracts=(SyndicateFactory SyndicateSequencingChain GasArchive ArbChainConfig) && \ + for contract in "$${contracts[@]}"; do \ + forge inspect --json "$${contract}" storageLayout > ".storage-layouts/$${contract}.json"; \ + done && \ + echo "✅ Storage layouts updated" + +## 🚀 Deployment & Upgrade Commands +## See docs/upgrade/README.md for detailed guide + +# Deploy SyndicateFactory (deterministic deployment) +# Also auto-deploys: GasAggregator, SyndicateSequencingChain implementation +deploy-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:DeploySyndicateFactoryDeterministic \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +# Preview SyndicateFactory deployment addresses (same across all chains) +preview-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:PreviewSyndicateFactoryAddresses \ + --rpc-url ${RPC_URL} \ + -vv + +# Deploy ArbConfigManager (optional - only for Arbitrum settlement) +# Required env: OWNER_ADDRESS +deploy-arb-config :; forge script script/DeployArbConfigManager.s.sol:DeployArbConfigManager \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +## 🔗 Create Sequencing Chains + +# Create a new sequencing chain via factory +# Required env: FACTORY_ADDRESS, NONCE, ADMIN_ADDRESS +# Optional env: PERMISSION_MODULE (deploys AlwaysAllowedModule if not set) +# Example: NONCE=1 make create-sequencing-chain +# Note: Chain ID is computed from nonce by the factory +create-sequencing-chain :; forge script script/upgrade/CreateSequencingChain.s.sol \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +## ⚠️ Upgrade Commands - ALWAYS run 'make storage-layout-check' first! + +# Upgrade SyndicateFactory to new implementation +# Required env: FACTORY_ADDRESS +upgrade-factory :; @echo "⚠️ Run 'make storage-layout-check' first!" && \ + forge script script/upgrade/UpgradeContracts.s.sol:UpgradeSyndicateFactory \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +# Upgrade SyndicateSequencingChain to new implementation +# Sets new default in factory +# Required env: CHAIN_ADDRESS, FACTORY_ADDRESS +upgrade-sequencing-chain :; @echo "⚠️ Run 'make storage-layout-check' first!" && \ + forge script script/upgrade/UpgradeSequencingChain.s.sol \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +## Fork Testing Commands + +# Run upgrade integration tests against risa_devnet fork +test-upgrade-fork :; forge test --match-contract UpgradeFlowIntegrationTest --fork-url risa_devnet -vv + +# Run upgrade integration tests against risa_devnet fork (verbose) +test-upgrade-fork-verbose :; forge test --match-contract UpgradeFlowIntegrationTest --fork-url risa_devnet -vvvv + # Deploy emissions contracts -deploy-emissions :; forge script script/DeployStakingContracts.s.sol:DeployStakingContracts --private-key ${PRIVATE_KEY} --rpc-url eth --broadcast -vvv \ No newline at end of file +deploy-emissions :; forge script script/DeployStakingContracts.s.sol:DeployStakingContracts --private-key ${PRIVATE_KEY} --rpc-url eth --broadcast -vvv + +test-forwarder :; forge script script/TestSyndForwarder.s.sol:TestSyndForwarder --rpc-url sepolia --keystore ${ETH_KEYSTORE} --froms ${ETH_FROM} --broadcast -vvv diff --git a/synd-contracts/certora/conf/AllowlistSequencingModule.conf b/synd-contracts/certora/conf/AllowlistSequencingModule.conf index f16438750..bfdcd45db 100644 --- a/synd-contracts/certora/conf/AllowlistSequencingModule.conf +++ b/synd-contracts/certora/conf/AllowlistSequencingModule.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AllowlistSequencingModule contract" } diff --git a/synd-contracts/certora/conf/AssertionPoster.conf b/synd-contracts/certora/conf/AssertionPoster.conf index 4406808b6..4b49c073d 100644 --- a/synd-contracts/certora/conf/AssertionPoster.conf +++ b/synd-contracts/certora/conf/AssertionPoster.conf @@ -11,7 +11,8 @@ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", "@offchainlabs/upgrade-executor/src/=lib/upgrade-executor/src/", - "@eigenda/contracts/=lib/eigenda-contracts/" + "@eigenda/contracts/=lib/eigenda-contracts/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AssertionPoster contract" } \ No newline at end of file diff --git a/synd-contracts/certora/conf/AtomicSequencer.conf b/synd-contracts/certora/conf/AtomicSequencer.conf index 9468cbfa4..b8b881cf0 100644 --- a/synd-contracts/certora/conf/AtomicSequencer.conf +++ b/synd-contracts/certora/conf/AtomicSequencer.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AtomicSequencer contract" } diff --git a/synd-contracts/certora/conf/AtomicSequencerImplementation.conf b/synd-contracts/certora/conf/AtomicSequencerImplementation.conf index 91e0df340..b5833f9db 100644 --- a/synd-contracts/certora/conf/AtomicSequencerImplementation.conf +++ b/synd-contracts/certora/conf/AtomicSequencerImplementation.conf @@ -10,7 +10,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AtomicSequencerImplementation contract" } diff --git a/synd-contracts/certora/conf/RequireAndModule.conf b/synd-contracts/certora/conf/RequireAndModule.conf index 3eeee8003..9fcb229dc 100644 --- a/synd-contracts/certora/conf/RequireAndModule.conf +++ b/synd-contracts/certora/conf/RequireAndModule.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying RequireAndModule contract" } diff --git a/synd-contracts/certora/conf/RequireOrModule.conf b/synd-contracts/certora/conf/RequireOrModule.conf index 7f89f9d45..e8cc155cc 100644 --- a/synd-contracts/certora/conf/RequireOrModule.conf +++ b/synd-contracts/certora/conf/RequireOrModule.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying RequireOrModule contract" } diff --git a/synd-contracts/certora/conf/SyndicateSequencingChain.conf b/synd-contracts/certora/conf/SyndicateSequencingChain.conf index 850d94f7e..5f6245d31 100644 --- a/synd-contracts/certora/conf/SyndicateSequencingChain.conf +++ b/synd-contracts/certora/conf/SyndicateSequencingChain.conf @@ -4,7 +4,7 @@ "certora/specs/helpers/PermissionModuleBasic.sol", "certora/specs/helpers/ArbSys.sol" ], - "link": [ + "struct_link": [ "SyndicateSequencingChain:permissionRequirementModule=PermissionModuleBasic" ], "address": [ @@ -17,7 +17,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "verify": "SyndicateSequencingChain:certora/specs/SyndicateSequencingChain.spec", "msg": "Verifying SyndicateSequencingChain contract", diff --git a/synd-contracts/certora/conf/TestnetSyndToken.conf b/synd-contracts/certora/conf/TestnetSyndToken.conf index e0661ed52..59beed978 100644 --- a/synd-contracts/certora/conf/TestnetSyndToken.conf +++ b/synd-contracts/certora/conf/TestnetSyndToken.conf @@ -9,7 +9,8 @@ "loop_iter": "3", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying TestnetSyndToken contract" } diff --git a/synd-contracts/certora/conf/WalletPoolWrapperModule.conf b/synd-contracts/certora/conf/WalletPoolWrapperModule.conf index bf157dacc..72c08c30e 100644 --- a/synd-contracts/certora/conf/WalletPoolWrapperModule.conf +++ b/synd-contracts/certora/conf/WalletPoolWrapperModule.conf @@ -10,7 +10,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying WalletPoolWrapperModule contract" } diff --git a/synd-contracts/certora/specs/SyndicateSequencingChain.spec b/synd-contracts/certora/specs/SyndicateSequencingChain.spec index bf09e667d..6cd83a256 100644 --- a/synd-contracts/certora/specs/SyndicateSequencingChain.spec +++ b/synd-contracts/certora/specs/SyndicateSequencingChain.spec @@ -6,115 +6,179 @@ methods { function permissionRequirementModule() external returns (address) envfree; function isAllowed(address, address, bytes) external returns (bool) envfree; function owner() external returns (address) envfree; - function gasTrackingDisabled() external returns (bool) envfree; + function getInitializedVersion() external returns (uint64) envfree; function encodeTransaction(bytes) external returns (bytes) envfree; - + function gasMeter() external returns (address) envfree; // Permission module envfree view functions function permissionModule.isAllowed(address, address, bytes) external returns (bool) envfree; + function permissionModule.setAllowed(address, bool) external; } /* - * Rule 1: Verify that appchainId cannot be zero + * Rule: Initialization rules */ -invariant appchainIdNotZero() - appchainId() != 0; +rule initializeOnce(address admin, address module, uint256 appchainId) { + env e; + require admin != 0; + require appchainId != 0; + require e.msg.sender != currentContract; + // First initialization + initialize@withrevert(e, admin, module, appchainId); + bool firstInit = !lastReverted; + // Try to initialize again + initialize@withrevert(e, admin, module, appchainId); + assert firstInit => lastReverted, "Contract initialized more than once"; +} /* - * Rule 2: Only allowed addresses can process transactions + * Rule: Initialization sets correct values */ -rule onlyAllowedCanProcess(bytes data) { +rule initializationCorrect(address admin, address module, uint256 appchainId) { env e; + require admin != 0; + require appchainId != 0; + require e.msg.sender != currentContract; + initialize(e, admin, module, appchainId); + assert permissionRequirementModule() == module, "Permission module not set correctly"; + assert owner() == admin, "Admin not set correctly"; + assert appchainId() == appchainId, "AppchainId not set correctly"; +} - // Try to process a transaction - processTransaction@withrevert(e, data); +/* + * Rule: AppchainId is set correctly after initialization + */ +rule appchainIdSetAfterInit(address admin, address module, uint256 chainId) { + env e; + require admin != 0; + require chainId != 0; + require e.msg.sender != currentContract; + // Before initialization, appchainId should be 0 + require getInitializedVersion() == 0; + require appchainId() == 0; + // Initialize the contract + initialize(e, admin, module, chainId); + // After initialization, appchainId should be set to the provided value + assert appchainId() == chainId, "AppchainId not set correctly after initialization"; + assert appchainId() != 0, "AppchainId should not be zero after initialization"; +} - // If the transaction succeeded +/* + * Rule: Only allowed addresses can process transactions + */ +rule onlyAllowedCanProcess(address sequencer, bytes data) { + env e; + require getInitializedVersion() > 0; + require data.length > 0; + require data.length <= 1024; + require e.msg.value == 0; + require e.msg.sender == gasMeter(); + // Use address(1) as permission module to allow all transactions + require permissionRequirementModule() == 1; + // Try to process a transaction + _processTransaction@withrevert(e, sequencer, data); + // With no permission module, all transactions should succeed bool success = !lastReverted; + assert success, "Transaction failed with no permission restrictions"; +} - // Then the sender must have been allowed - assert success => isAllowed(e.msg.sender, e.msg.sender, encodeTransaction(data)), - "Unauthorized sender processed transaction"; +/* + * Rule: Test bulk processing with no permission restrictions + */ +rule processConsistencyNoPermissions(address sequencer, bytes data) { + env e; + require getInitializedVersion() > 0; + require data.length > 0; + require data.length <= 1024; + require e.msg.value == 0; + require e.msg.sender == gasMeter(); + // Use address(1) as permission module (allows all) + require permissionRequirementModule() == 1; + // Record both outcomes + _processTransaction@withrevert(e, sequencer, data); + bool txSuccess = !lastReverted; + _processTransactionsBulk@withrevert(e, sequencer, [data]); + bool bulkSuccess = !lastReverted; + // With no permissions, both should succeed + assert txSuccess, "_processTransaction failed with no permissions"; + assert bulkSuccess, "_processTransactionsBulk should not revert"; } /* - * Rule 3: Only owner can update requirement module + * Rule: Test that permission module address matters */ -rule onlyOwnerCanUpdateModule(address newModule) { +rule permissionModuleRequired(address sequencer, bytes data) { env e; + require getInitializedVersion() > 0; + require data.length > 0; + require data.length <= 1024; require e.msg.value == 0; + require e.msg.sender == gasMeter(); + // Compare behavior with and without permission module + // First test with address(1) permission module (allows all) + require permissionRequirementModule() == 1; + _processTransaction@withrevert(e, sequencer, data); + bool successNoPermissions = !lastReverted; + // This should succeed since no permissions are required + assert successNoPermissions, "Transaction failed with no permission module"; +} +/* + * Rule: Only owner can update requirement module + */ +rule onlyOwnerCanUpdateModule(address newModule) { + env e; + require getInitializedVersion() > 0; // Try to update the module updateRequirementModule@withrevert(e, newModule); - bool txSucceeded = !lastReverted; - - // Bidirectional assertions - assert txSucceeded => e.msg.sender == owner(), - "Non-owner updated requirement module"; - assert !txSucceeded => e.msg.sender != owner(), - "Owner failed to update requirement module"; + // If successful, must have been owner + assert !lastReverted => e.msg.sender == owner(), "Non-owner updated requirement module"; } /* - * Rule 4: Module update changes state correctly + * Rule: Module update changes state correctly */ rule moduleUpdateChangesState(address newModule) { env e; + require getInitializedVersion() > 0; require newModule != 0; - // Store old module address oldProposerModule = permissionRequirementModule(); - // Update module updateRequirementModule@withrevert(e, newModule); - // If successful, module should be updated - assert !lastReverted => permissionRequirementModule() == newModule, - "Proposer module not updated correctly"; + assert !lastReverted => permissionRequirementModule() == newModule, "Proposer module not updated correctly"; } /* - * Rule 5: State consistency after transaction processing + * Rule: State consistency after transaction processing */ -rule stateConsistencyAfterProcessing(bytes data) { +rule stateConsistencyAfterProcessing(address sequencer, bytes data) { env e; + require getInitializedVersion() > 0; + require e.msg.sender == gasMeter(); address oldProposerModule = permissionRequirementModule(); - // Process transaction - processTransaction@withrevert(e, data); - + _processTransaction@withrevert(e, sequencer, data); // Verify requirement modules haven't changed - assert permissionRequirementModule() == oldProposerModule, - "Transaction processing modified proposer module state"; + assert permissionRequirementModule() == oldProposerModule, "Transaction processing modified proposer module state"; } /* - * Rule 6: Verify permissions are correctly enforced + * Rule : Only owner can perform upgrades */ -rule permissionsCorrectlyEnforced(bytes data) { +rule onlyOwnerCanUpgrade(address newImplementation, bytes data) { env e; - - // Require the contract to be initialized - require permissionRequirementModule() == permissionModule; - require owner() == e.msg.sender; - - // Valid sender and msg parameters - require e.block.timestamp >= 1754089200; - require e.msg.value == 0; - - // Valid data requirements - require data.length > 0; - require data.length < max_uint256; - - // Check permissions - bool senderAllowed = isAllowed(e.msg.sender, e.msg.sender, encodeTransaction(data)); - - // Process transaction - processTransaction@withrevert(e, data); - bool txSucceeded = !lastReverted; - - // Bidirectional assertions - assert txSucceeded => senderAllowed, - "Transaction succeeded with unauthorized sender"; - assert senderAllowed => txSucceeded, - "Transaction failed despite permissions being valid and preconditions met"; + require getInitializedVersion() > 0; + require newImplementation != 0; + require e.msg.value == 0; // No ETH should be sent + require newImplementation != currentContract; // Can't upgrade to self + + // Get owner before upgrade attempt + address contractOwner = owner(); + require contractOwner != 0; // Owner should be set + + // Try to upgrade + upgradeToAndCall@withrevert(e, newImplementation, data); + // If successful, must have been owner + assert !lastReverted => e.msg.sender == contractOwner, "Non-owner performed upgrade"; } diff --git a/synd-contracts/foundry.toml b/synd-contracts/foundry.toml index af7571231..f9c0e55ff 100644 --- a/synd-contracts/foundry.toml +++ b/synd-contracts/foundry.toml @@ -13,14 +13,18 @@ out = "out" src = "src" via_ir = true +[lint] +lint_on_build = false + + [rpc_endpoints] -base_sepolia = "https://sepolia.base.org" -exo = "${EXO_RPC_URL}" -holesky = "https://ethereum-holesky-rpc.publicnode.com" -localhost = "http://localhost:8545" -mainnet = "${ETH_MAINNET_RPC_URL}" -risa_devnet = "${RISA_DEVNET_RPC_URL}" -sepolia = "https://ethereum-sepolia-rpc.publicnode.com" +base_sepolia = "https://sepolia.base.org" +exo = "${EXO_RPC_URL}" +holesky = "https://ethereum-holesky-rpc.publicnode.com" +localhost = "http://localhost:8545" +mainnet = "${ETH_MAINNET_RPC_URL}" +risa_devnet = "https://risa-testnet.g.alchemy.com/public" +sepolia = "https://ethereum-sepolia-rpc.publicnode.com" syndicate_frame = "https://rpc-frame.syndicate.io" # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options diff --git a/synd-contracts/script/DeployContractsForSequencingChain.s.sol b/synd-contracts/script/DeployContractsForSequencingChain.s.sol deleted file mode 100644 index ee447662d..000000000 --- a/synd-contracts/script/DeployContractsForSequencingChain.s.sol +++ /dev/null @@ -1,88 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Script, console} from "forge-std/Script.sol"; - -import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {AlwaysAllowedModule} from "src/sequencing-modules/AlwaysAllowedModule.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {RequireAndModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {IRequirementModule} from "src/interfaces/IRequirementModule.sol"; - -contract DeploySyndicateFactory is Script { - SyndicateFactory public syndicateFactory; - RequireAndModuleFactory public requireAndModuleFactory; - uint256 public appchainId; - - function run() public { - vm.startBroadcast(); - - appchainId = 0; // TODO: Set the App chain ID - - // syndicate admin and manager - address admin = vm.envOr("ADMIN_ADDR", msg.sender); - - syndicateFactory = new SyndicateFactory(admin); - console.log("Deployed SyndicateFactory", address(syndicateFactory)); - requireAndModuleFactory = new RequireAndModuleFactory(admin); - console.log("Deployed RequireAndModuleFactory", address(requireAndModuleFactory)); - - bytes32 salt = bytes32(appchainId); - - address module = requireAndModuleFactory.createRequireAndModule(admin, salt); - console.log("Deployed RequireAndModule", module); - - // create SyndicateSequencingChain with the permission module - (address sequencingChain, uint256 chainId) = - syndicateFactory.createSyndicateSequencingChain( - 0, // auto-increment - admin, - IRequirementModule(module), - salt - ); - - console.log("Deployed SyndicateSequencingChain", sequencingChain); - console.log("Deployed RequireAndModule", address(module)); - console.log("Sequencing Chain ID", chainId); - - vm.stopBroadcast(); - } -} - -contract DeploySyndicateSequencingChainPlusSetupWithAlwaysAllowModule is Script { - SyndicateSequencingChain public sequencingChain; - RequireAndModule public permissionModule; - uint256 public appchainId; - - function run() public { - vm.startBroadcast(); - - appchainId = 0; // TODO: Set the App chain ID - address admin = vm.envOr("ADMIN_ADDR", msg.sender); - - // Deploy permission module first - permissionModule = new RequireAndModule(admin); - console.log("Deployed RequireAndModule", address(permissionModule)); - - // Deploy sequencer with permission module - sequencingChain = new SyndicateSequencingChain(appchainId); - - // Set sequencing module - sequencingChain.updateRequirementModule(address(permissionModule)); - - // Transfer ownership - sequencingChain.transferOwnership(admin); - - console.log("Deployed SyndicateSequencingChain", address(sequencingChain)); - - // Deploy and add always allowed module - AlwaysAllowedModule alwaysAllowedModule = new AlwaysAllowedModule(); - console.log("Deployed AlwaysAllowedModule", address(alwaysAllowedModule)); - - permissionModule.addPermissionCheck(address(alwaysAllowedModule), true); - console.log("Added alwaysAllowedModule to permission checks", address(alwaysAllowedModule)); - - vm.stopBroadcast(); - } -} diff --git a/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol b/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol index 524cae855..be44ea80c 100644 --- a/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol +++ b/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol @@ -3,44 +3,11 @@ pragma solidity 0.8.28; import {Script} from "forge-std/Script.sol"; -import {RequireAndModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {RequireOrModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {RequireCompositeModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {SyndicateFactoryWrapper} from "src/factory/SyndicateFactoryWrapper.sol"; - import {ArbConfigManagerFactory} from "src/config/ArbConfigManagerFactory.sol"; import {ArbConfigManager} from "src/config/ArbConfigManager.sol"; import {console} from "forge-std/console.sol"; -contract DeployMinRequiredSequencingChain is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - address admin = vm.envAddress("ADMIN_ADDR"); - - RequireAndModuleFactory requireAndModuleFactory = new RequireAndModuleFactory(admin); - console.log("requireAndModuleFactory", address(requireAndModuleFactory)); - - RequireOrModuleFactory requireOrModuleFactory = new RequireOrModuleFactory(admin); - console.log("requireOrModuleFactory", address(requireOrModuleFactory)); - - RequireCompositeModuleFactory requireCompositeModuleFactory = new RequireCompositeModuleFactory(admin); - console.log("requireCompositeModuleFactory", address(requireCompositeModuleFactory)); - - SyndicateFactory syndicateFactory = new SyndicateFactory(admin); - console.log("syndicateFactory", address(syndicateFactory)); - - SyndicateFactoryWrapper syndicateFactoryWrapper = new SyndicateFactoryWrapper( - admin, address(syndicateFactory), address(requireAndModuleFactory), address(requireOrModuleFactory) - ); - console.log("syndicateFactoryWrapper", address(syndicateFactoryWrapper)); - - vm.stopBroadcast(); - } -} - contract DeployMinRequiredSettlementChain is Script { function run() public { uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); diff --git a/synd-contracts/script/DeploySyndicateFactory.s.sol b/synd-contracts/script/DeploySyndicateFactory.s.sol deleted file mode 100644 index 402569f4b..000000000 --- a/synd-contracts/script/DeploySyndicateFactory.s.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Script} from "forge-std/Script.sol"; -import {console2} from "forge-std/console2.sol"; -import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; - -/** - * @title DeploySyndicateFactoryDirect - * @notice Forge script to deploy SyndicateFactory directly using CREATE2 - * @dev Alternative approach that doesn't require a separate deployer contract - */ -contract DeploySyndicateFactoryDirect is Script { - function run() public { - // The fixed salt for CREATE2 deployment - bytes32 factorySalt = keccak256("SYNDICATE_FACTORY_v1"); - - // MUST use the same private key (resulting in the same deployer address) across all chains - uint256 privateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); - address deployer = vm.addr(privateKey); - - // Get the bytecode for the factory with constructor arguments - bytes memory bytecode = abi.encodePacked( - type(SyndicateFactory).creationCode, - abi.encode(deployer) // admin = deployer - ); - bytes32 bytecodeHash = keccak256(bytecode); - - // Calculate the expected address - address expectedAddress = Create2.computeAddress(factorySalt, bytecodeHash, deployer); - console2.log("Expected SyndicateFactory address:", expectedAddress); - - // Start broadcasting transactions - vm.startBroadcast(privateKey); - - // Deploy using CREATE2 - address factoryAddress; - assembly { - factoryAddress := create2(0, add(bytecode, 0x20), mload(bytecode), factorySalt) - if iszero(factoryAddress) { - mstore(0x00, "Deployment failed") - revert(0x00, 0x20) - } - } - - console2.log("SyndicateFactory deployed to:", factoryAddress); - console2.log("Deployment successful:", factoryAddress == expectedAddress ? "Yes" : "No"); - - // Stop broadcasting transactions - vm.stopBroadcast(); - } -} diff --git a/synd-contracts/script/TestSyndForwarder.s.sol b/synd-contracts/script/TestSyndForwarder.s.sol new file mode 100644 index 000000000..89cea5ddf --- /dev/null +++ b/synd-contracts/script/TestSyndForwarder.s.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Script} from "forge-std/Script.sol"; +import {console2} from "forge-std/console2.sol"; +import {SyndForwarder} from "src/deployment/SyndForwarder.sol"; + +interface IOptimismPortal { + function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes memory _data) + external; +} + +contract TestSyndForwarder is Script { + address public stub = address(0x920487DB398Be410Eda65D1A33e826A0453C0814); + address public optimismPortal = address(0x49f53e41452C74589E85cA1677426Ba426459e85); + + uint256 public gasLimit = 500000; + + SyndForwarder public forwarder = SyndForwarder(0x2E38D75B496B201532580D96c848786aE9692368); + + function run() public { + vm.startBroadcast(); + + address deployedContract = forwarder.deploy(bytes32(uint256(1)), stub, ""); + console2.log("Deployed contract on chain 1 to:", deployedContract); + + forwarder.call( + address(optimismPortal), + abi.encodeWithSelector( + IOptimismPortal.depositTransaction.selector, + address(forwarder), + 0, + gasLimit, + false, + abi.encodeWithSelector(SyndForwarder.deploy.selector, bytes32(uint256(1)), stub, "") + ) + ); + console2.log("Confirm the txn succeeded on chain 2 and the contract is deployed at:", deployedContract); + + vm.stopBroadcast(); + } +} diff --git a/synd-contracts/script/upgrade/UpgradeSequencingChain.s.sol b/synd-contracts/script/upgrade/UpgradeSequencingChain.s.sol new file mode 100644 index 000000000..33cbe9eab --- /dev/null +++ b/synd-contracts/script/upgrade/UpgradeSequencingChain.s.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Script} from "forge-std/Script.sol"; +import {console2} from "forge-std/console2.sol"; +import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +/** + * @title UpgradeSequencingChain + * @notice Upgrades a SyndicateSequencingChain to a new implementation + * + * @dev This script performs three actions: + * 1. Deploys new SyndicateSequencingChain implementation + * 2. Sets it as default in factory (for future chains) + * 3. Upgrades the specific chain proxy + * + * @dev Environment Variables Required: + * - CHAIN_ADDRESS: Address of SyndicateSequencingChain proxy to upgrade + * - FACTORY_ADDRESS: Address of SyndicateFactory + * + * @dev Usage: + * make upgrade-sequencing-chain + * or + * forge script script/upgrade/UpgradeSequencingChain.s.sol \ + * --rpc-url $RPC_URL --broadcast --env-file .env + * + * @dev IMPORTANT: Always run storage layout validation before upgrading: + * make storage-layout-check + * + * @dev Note: Setting new default implementation in factory requires DEFAULT_ADMIN_ROLE + */ +contract UpgradeSequencingChain is Script { + function run() external { + address chainAddress = vm.envAddress("CHAIN_ADDRESS"); + address factoryAddress = vm.envAddress("FACTORY_ADDRESS"); + + console2.log("=== Upgrading SyndicateSequencingChain ==="); + console2.log("Chain proxy:", chainAddress); + console2.log("Factory:", factoryAddress); + console2.log(""); + + vm.startBroadcast(); + + // Deploy GasMeter + GasMeter gasMeterImpl = new GasMeter(); + address gasMeter = address(new ERC1967Proxy(address(gasMeterImpl), abi.encodeCall(GasMeter.initialize, ()))); + + // Deploy new implementation + console2.log("Deploying new implementation..."); + SyndicateSequencingChain newImplementation = new SyndicateSequencingChain(gasMeter); + console2.log("New implementation:", address(newImplementation)); + console2.log(""); + + // Upgrade the specific chain + console2.log("Upgrading chain proxy..."); + SyndicateSequencingChain chain = SyndicateSequencingChain(chainAddress); + chain.upgradeToAndCall(address(newImplementation), ""); + + vm.stopBroadcast(); + + // Verify upgrade + uint256 version = chain.VERSION(); + console2.log("=== Upgrade Complete ==="); + console2.log("Chain proxy:", chainAddress); + console2.log("Implementation:", address(newImplementation)); + console2.log("Version:", version); + console2.log(""); + console2.log("New chains created via factory will use this implementation"); + } +} diff --git a/synd-contracts/scripts/check-uups-storage.sh b/synd-contracts/scripts/check-uups-storage.sh new file mode 100755 index 000000000..a5b5f442e --- /dev/null +++ b/synd-contracts/scripts/check-uups-storage.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# Script to check that UUPS upgradeable contracts have empty storage layouts +# This ensures all storage is in ERC-7201 namespaced storage slots + +set -e + +# UUPS Upgradeable contracts that should have empty storage +UUPS_CONTRACTS=( + "SyndicateSequencingChain" + "GasArchive" +) + +echo "================================================" +echo "UUPS Storage Layout Validation" +echo "================================================" +echo "" +echo "Checking that UUPS contracts use only namespaced storage..." +echo "" + +FAILED=0 +PASSED=0 + +for contract in "${UUPS_CONTRACTS[@]}"; do + echo "Checking $contract..." + + # Get storage layout + STORAGE_OUTPUT=$(forge inspect "$contract" storageLayout 2>&1 || true) + + if echo "$STORAGE_OUTPUT" | grep -q "Error"; then + echo "✗ FAILED: Could not inspect $contract" + echo "$STORAGE_OUTPUT" + FAILED=$((FAILED + 1)) + continue + fi + + # Check if storage layout is empty (should only have the table header) + # An empty storage layout will have a table with no data rows + STORAGE_COUNT=$(echo "$STORAGE_OUTPUT" | grep -E "^\|" | grep -v "^\+=" | grep -v "Name.*Type.*Slot" | grep -v "^+-" | wc -l | tr -d ' ') + + if [ "$STORAGE_COUNT" -eq "0" ]; then + echo "✓ PASSED: $contract has empty storage (uses namespaced storage)" + PASSED=$((PASSED + 1)) + else + echo "✗ FAILED: $contract has non-empty storage layout" + echo "" + echo "Storage layout:" + echo "$STORAGE_OUTPUT" + echo "" + echo "UUPS upgradeable contracts MUST use ERC-7201 namespaced storage." + echo "See SyndicateSequencingChain.sol for an example of correct implementation." + echo "" + FAILED=$((FAILED + 1)) + fi + echo "" +done + +echo "================================================" +echo "Results:" +echo " Passed: $PASSED" +echo " Failed: $FAILED" +echo "================================================" + +if [ $FAILED -gt 0 ]; then + echo "" + echo "Storage validation FAILED!" + echo "" + echo "All UUPS upgradeable contracts must use ERC-7201 namespaced storage." + echo "This ensures storage slots don't conflict during upgrades." + echo "" + echo "To fix:" + echo "1. Move all storage variables into a storage struct" + echo "2. Use @custom:storage-location erc7201:syndicate.storage.YourContract" + echo "3. Access storage via a private function using assembly" + echo "4. Generate the storage slot with: cast index-erc7201 syndicate.storage.YourContract" + echo "" + echo "Example: see SyndicateSequencingChain.sol or GasCounter.sol" + echo "" + exit 1 +else + echo "" + echo "All UUPS contracts use namespaced storage correctly!" + echo "" + exit 0 +fi diff --git a/synd-contracts/scripts/deploy-arachnid.sh b/synd-contracts/scripts/deploy-arachnid.sh new file mode 100755 index 000000000..a34774b49 --- /dev/null +++ b/synd-contracts/scripts/deploy-arachnid.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Arachnid address (from: https://github.com/Arachnid/deterministic-deployment-proxy) +DEPLOYER_ADDRESS=0x4e59b44847b379578588920cA78FbF26c0B4956C + +# Chain ID to deploy to +CHAIN=base_sepolia + +# Constructor arguments +SRC_SENDER=0xb6235EAEADfA5839CdA207B454d98b328dFE2F3A +SRC_CHAIN_ID=11155111 +CONSTRUCTOR_ARGS=$(cast abi-encode "constructor(address,uint256)" $SRC_SENDER $SRC_CHAIN_ID) + +# Salt (shouldnt need to change this) +SALT=0x0000000000000000000000000000000000000000000000000000000000000000 + +# SyndForwarder Bytecode +BYTECODE=60c080604052346101855760408161122f803803809161001f8285610189565b833981010312610185578051906001600160a01b03821682036101855760200151460361013a576080525b61073560405161005d6020830182610189565b8181526020810191610afa83396100936020604051809482820194518091865e81015f838201520301601f198101845283610189565b81511561012b577f53594e445f464f525741524445525f535455425f5631000000000000000000009151905ff53d1519811516610120576001600160a01b038116156101115760a05260405161093990816101c1823960805181818160a9015281816101b401526102b9015260a051818181610440015261066d0152f35b63b06ebf3d60e01b5f5260045ffd5b6040513d5f823e3d90fd5b631328927760e21b5f5260045ffd5b5030731111000000000000000000000000000000001111016001600160a01b038111610171576001600160a01b031660805261004a565b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b601f909101601f19168101906001600160401b038211908210176101ac57604052565b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631575eaae146100645780631b8b921d1461005f5780632781212e1461005a57806356dba779146100555763b416663e14610050575f80fd5b610464565b6103f6565b610249565b61014a565b346100d2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d25773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660805260206080f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100d257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100d257565b9181601f840112156100d25782359167ffffffffffffffff83116100d257602083818601950101116100d257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d25761017c6100d6565b60243567ffffffffffffffff81116100d25761019c90369060040161011c565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361022157825f9392849360405192839283378101848152039173ffffffffffffffffffffffffffffffffffffffff3491165af161021161055b565b901561021957005b602081519101fd5b7fcf62cd97000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100d25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d2576102806100f9565b60443567ffffffffffffffff81116100d2576102a090369060040161011c565b909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610221576102e761062b565b8051156103ce578051600435916020015ff5903d15198215166103c35773ffffffffffffffffffffffffffffffffffffffff82161561039b575f80949361038f829561036360405193849260208401977f4f1ef286000000000000000000000000000000000000000000000000000000008952602485016105b8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610515565b51925af161021161055b565b7fb06ebf3d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040513d5f823e3d90fd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100d2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100d2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d2576020604061049e61062b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055657604052565b6104e8565b3d156105b3573d9067ffffffffffffffff821161055657604051916105a860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610515565b82523d5f602084013e565b606090565b9183606094601f9273ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09516865260406020870152816040870152868601375f8582860101520116010190565b805191908290602001825e015f815290565b6106bd6106c3610272604051906106456020820183610515565b8082526106c7602083013961036360405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201526040808201525f6060820152606081526106ad608082610515565b6040519485936020850190610619565b90610619565b9056fe60806040526102728038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516057908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffd60a0806040523460295730608052610707908161002e82396080518181816101f001526103290152f35b5f80fdfe608060405260043610156100d0575b36156100725760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f537475623a206e6f206c6f67696320696d706c656d656e7465640000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f537475623a20455448206e6f74206163636570746564000000000000000000006044820152fd5b5f3560e01c80634f1ef2861461026857806352d1902d146101ab5763ad3cb1cc0361000e57346101a7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a757604080519061013281836105c6565b6005825260208201917f352e302e3000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b5f80fd5b346101a7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a75773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036102405760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a75760043573ffffffffffffffffffffffffffffffffffffffff8116908181036101a7576024359067ffffffffffffffff82116101a757366023830112156101a7578160040135916102e183610634565b926102ef60405194856105c6565b808452602084019136602483830101116101a757815f9260246020930185378501015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610584575b50610240576040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481885afa5f9181610550575b506103c157847f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8692036105255750823b156104fa57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28251156104c8575f80916104be945190845af43d156104c0573d916104a283610634565b926104b060405194856105c6565b83523d5f602085013e61066e565b005b60609161066e565b505050346104d257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d60201161057c575b8161056c602093836105c6565b810103126101a757519086610390565b3d915061055f565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141585610354565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761060757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161060757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b906106ab575080511561068357805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806106fe575b6106bc575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156106b456 + +cast send -r $CHAIN --keystore $ETH_KEYSTORE --from $ETH_FROM $DEPLOYER_ADDRESS "$SALT$BYTECODE$CONSTRUCTOR_ARGS" diff --git a/synd-contracts/src/SequencingModuleChecker.sol b/synd-contracts/src/SequencingModuleChecker.sol index ba832c45d..873968b12 100644 --- a/synd-contracts/src/SequencingModuleChecker.sol +++ b/synd-contracts/src/SequencingModuleChecker.sol @@ -2,30 +2,51 @@ pragma solidity 0.8.28; import {IPermissionModule} from "./interfaces/IPermissionModule.sol"; -import {NotInitializedModule} from "./sequencing-modules/NotInitializedModule.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import {DataTooLarge} from "@arbitrum/nitro-contracts/src/libraries/Error.sol"; +/// @custom:storage-location erc7201:syndicate.storage.SequencingModule +struct SequencingModuleStorage { + /// @notice The requirement module that handles checks + IPermissionModule permissionRequirementModule; +} + /// @title SequencingModuleChecker /// @notice A contract that delegates permission checks to modular permission systems /// @dev This separation of concerns allows for flexible permission systems: /// 1. The SequencingModuleChecker manages the core permission interface /// 2. The permissionRequirementModule (typically RequireAndModule or RequireOrModule) handles the actual permission logic /// 3. This design allows for complex permission structures (AND/OR logic) that can be upgraded over time -/// 4. Proper setup of the permission system after deployment involves setting a sequencing module and transferring ownership -/// via the Ownable transferOwnership() function -abstract contract SequencingModuleChecker is Ownable, IPermissionModule { +/// 4. The initialization pattern allows for proper setup of the permission system after deployment +abstract contract SequencingModuleChecker is Initializable, OwnableUpgradeable, IPermissionModule { + event RequirementModuleUpdated(address indexed newModule); + // Just in case, limit the amount of tx data sent to the isAllowed function. uint256 public constant maxDataSize = 200000; - /// @notice The requirement module that handles checks - IPermissionModule public permissionRequirementModule; + // cast index-erc7201 syndicate.storage.SequencingModule + bytes32 public constant SEQUENCING_MODULE_STORAGE_LOCATION = + 0x5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500; - event RequirementModuleUpdated(address indexed newModule); + function _getSequencingModuleStorage() private pure returns (SequencingModuleStorage storage $) { + assembly { + $.slot := SEQUENCING_MODULE_STORAGE_LOCATION + } + } - /// @dev Constructor function - // [Olympix Warning: no parameter validation in constructor] Admin validation handled by OpenZeppelin's Ownable - constructor() Ownable(msg.sender) {} + function permissionRequirementModule() public view returns (IPermissionModule) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.permissionRequirementModule; + } + + function __SequencingModuleChecker_init(address admin, address _permissionRequirementModule) + internal + onlyInitializing + { + __Ownable_init(admin); + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_permissionRequirementModule); + } /// @notice Updates the requirement module /// @param _newModule The address of the new requirement module @@ -33,7 +54,7 @@ abstract contract SequencingModuleChecker is Ownable, IPermissionModule { /// All addresses without code cause all transaction types to be forbidden by reverting. /// Address one corresponds to the always allowed module. function updateRequirementModule(address _newModule) external onlyOwner { - permissionRequirementModule = IPermissionModule(_newModule); + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_newModule); emit RequirementModuleUpdated(_newModule); } @@ -45,7 +66,7 @@ abstract contract SequencingModuleChecker is Ownable, IPermissionModule { /// @return bool indicating if both the proposer and calldata are allowed function isAllowed(address proposer, address originator, bytes memory data) public view returns (bool) { require(data.length <= maxDataSize, DataTooLarge(data.length, maxDataSize)); - return address(permissionRequirementModule) == address(1) - || permissionRequirementModule.isAllowed(proposer, originator, data); //#olympix-ignore-calls-in-loop + return address(permissionRequirementModule()) == address(1) + || permissionRequirementModule().isAllowed(proposer, originator, data); //#olympix-ignore-calls-in-loop } } diff --git a/synd-contracts/src/SyndicateSequencingChain.sol b/synd-contracts/src/SyndicateSequencingChain.sol index 579d6f65f..7281f7888 100644 --- a/synd-contracts/src/SyndicateSequencingChain.sol +++ b/synd-contracts/src/SyndicateSequencingChain.sol @@ -2,11 +2,23 @@ pragma solidity 0.8.28; import {SequencingModuleChecker} from "./SequencingModuleChecker.sol"; -import {GasCounter} from "./staking/GasCounter.sol"; +import {GasMeter} from "./staking/GasMeter.sol"; import {ISyndicateSequencingChain} from "./interfaces/ISyndicateSequencingChain.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; uint8 constant L2MessageType_SignedTx = 4; // a regular signed transaction +/// @notice Storage struct for SyndicateSequencingChain using ERC-7201 namespaced storage pattern +/// @dev This struct contains all the state variables specific to the sequencing chain functionality. +/// Using ERC-7201 ensures storage slots don't conflict during upgrades. +/// @custom:storage-location erc7201:syndicate.storage.SyndicateSequencingChain +struct SyndicateSequencingChainStorage { + /// @notice The ID of the App chain that this contract is sequencing transactions for + /// @dev This is set during initialization and never changes + uint256 appchainId; +} + /// @title SyndicateSequencingChain /// @notice Core contract for transaction sequencing using Syndicate's "secure by module design" architecture /// @@ -25,9 +37,9 @@ uint8 constant L2MessageType_SignedTx = 4; // a regular signed transaction /// ┌─────────────────────────────────────────────────────────────────────────┐ /// │ RESPONSIBILITY DISTRIBUTION: │ /// ├─────────────────────────────────────────────────────────────────────────┤ -/// │ SyndicateSequencingChain: Routes to permission modules │ +/// │ SyndicateSequencingChain: Routes to permission modules │ /// │ PermissionModule (Dev): Implements authorization logic │ -/// │ Module Developer: MUST validate both msg.sender and tx.origin properly │ +/// │ Module Developer: MUST validate both msg.sender and tx.origin properly │ /// └─────────────────────────────────────────────────────────────────────────┘ /// /// @dev Transaction Lifecycle: @@ -40,121 +52,181 @@ uint8 constant L2MessageType_SignedTx = 4; // a regular signed transaction /// /// This event-based design provides scalability and gas efficiency while maintaining security /// through modular, developer-controlled permission systems. -contract SyndicateSequencingChain is SequencingModuleChecker, ISyndicateSequencingChain, GasCounter { +/// +/// To view the storage layout, run "forge inspect SyndicateSequencingChain storageLayout" +contract SyndicateSequencingChain is + Initializable, + SequencingModuleChecker, + ISyndicateSequencingChain, + UUPSUpgradeable +{ + uint256 public constant VERSION = 1_000_000; // 1.0.0 + + /// @notice The address of the GasMeter contract + /// @dev This is set during initialization and never changes + address public immutable gasMeter; + + /*////////////////////////////////////////////////////////////// + STORAGE + //////////////////////////////////////////////////////////////*/ + + /// @notice ERC-7201 storage slot for SyndicateSequencingChain-specific data + /// @dev Generated using: cast keccak "erc7201:syndicate.storage.SyndicateSequencingChain" + /// This ensures the storage slot doesn't conflict with inherited contracts + /// cast index-erc7201 syndicate.storage.SyndicateSequencingChain + bytes32 public constant SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION = + 0xc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400; + + /// @notice Internal function to access the ERC-7201 namespaced storage + /// @dev Uses inline assembly to access the specific storage slot for this contract's data + /// @return $ Storage pointer to the SyndicateSequencingChainStorage struct + function _getSyndicateSequencingChainStorage() private pure returns (SyndicateSequencingChainStorage storage $) { + assembly { + $.slot := SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + } + } + + /// @notice Get the appchain ID that this contract sequences for + /// @return The unique identifier of the application chain + function appchainId() public view returns (uint256) { + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + return $.appchainId; + } + + /*////////////////////////////////////////////////////////////// + ERRORS + //////////////////////////////////////////////////////////////*/ + + /// @notice Thrown when no transaction data is provided to processing functions error NoTxData(); + + /// @notice Thrown when the transaction or sender is not allowed by the permission module error TransactionOrSenderNotAllowed(); - error GasTrackingAlreadyEnabled(); - error GasTrackingAlreadyDisabled(); + + /// @notice Thrown when a zero address is provided where a valid address is required + error ZeroAddress(); + + /// @notice Thrown when the caller of a function is not the GasMeter + error NotGasMeterContract(); + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ /// @notice Emitted when a new transaction is processed /// @param sender The address that submitted the transaction /// @param data The transaction data that was processed event TransactionProcessed(address indexed sender, bytes data); - /// @notice Emitted when the emissions receiver is updated - /// @param oldReceiver The previous emissions receiver address - /// @param newReceiver The new emissions receiver address - event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newReceiver); + /*////////////////////////////////////////////////////////////// + FUNCTIONS + //////////////////////////////////////////////////////////////*/ - uint256 public immutable appchainId; + /// @notice Disables initializers to prevent the implementation contract from being initialized + constructor(address _gasMeter) { + if (_gasMeter == address(0)) revert ZeroAddress(); + gasMeter = _gasMeter; + _disableInitializers(); + } - /// @notice The address that receives emissions for this sequencing chain - address public emissionsReceiver; + function getInitializedVersion() external view returns (uint64) { + return _getInitializedVersion(); + } - /// @notice Constructs the SyndicateSequencingChain contract. - /// @param _appchainId The ID of the App chain that this contract is sequencing transactions for. - //#olympix-ignore-missing-revert-reason-tests - constructor(uint256 _appchainId) SequencingModuleChecker() { - // chain id zero has no replay protection: https://eips.ethereum.org/EIPS/eip-3788 + /// @notice Initializes the SyndicateSequencingChain contract + /// @dev This function can only be called once during proxy deployment. It sets up all the core functionality + /// including ownership, permission modules, gas tracking, and appchain identification. + /// @param admin The address to be set as the contract owner (receives DEFAULT_ADMIN_ROLE) + /// @param _permissionRequirementModule The address of the permission requirement module or address(0) to allow all transactions + /// @param _appchainId The unique identifier for the application chain this contract sequences for (must not be 0) + function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external initializer { + if (admin == address(0)) revert ZeroAddress(); require(_appchainId != 0, "App chain ID cannot be 0"); - appchainId = _appchainId; + __SequencingModuleChecker_init(admin, _permissionRequirementModule); + __UUPSUpgradeable_init(); + + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + $.appchainId = _appchainId; + } + + modifier onlyGasMeter() { + require(msg.sender == gasMeter, NotGasMeterContract()); + _; } + /// @notice Authorizes contract upgrades. Only callable by the contract owner. + /// @dev Required by UUPSUpgradeable to restrict upgradeability to the owner. + /// @param _newImplementation The address of the new implementation contract. + function _authorizeUpgrade(address _newImplementation) internal override onlyOwner {} + + /// @notice Encode transaction data with L2 message type prefix + /// @dev Prepends the transaction data with the L2MessageType_SignedTx identifier + /// This encoding is used by off-chain systems to identify transaction types + /// @param data The raw transaction data to encode + /// @return The encoded transaction data with message type prefix function encodeTransaction(bytes calldata data) public pure returns (bytes memory) { return abi.encodePacked(L2MessageType_SignedTx, data); } - /// @notice Process a signed transaction. - /// @param data Transaction data + /// @notice Processes a single signed transaction by forwarding it to the gas meter contract for gas accounting and validation. + /// @dev Requires that the transaction data is not empty. Delegates the call to processTransactionImpl on the configured gas meter contract. + /// @param data The transaction data to process (must not be empty). + function processTransaction(bytes calldata data) external { + GasMeter(gasMeter).meterCall(abi.encodeCall(SyndicateSequencingChain._processTransaction, (msg.sender, data))); + } + + /// @notice Process a single signed transaction + /// @dev Validates the transaction through the permission module and emits an event if authorized. + /// The tx.origin is intentionally used as part of the security model - see contract-level documentation. + /// @param sequencer The address of original sequencer that is processing the transaction + /// @param data The transaction data to process (must not be empty) //#olympix-ignore-required-tx-origin - function processTransaction(bytes calldata data) external trackGasUsage { + function _processTransaction(address sequencer, bytes calldata data) external onlyGasMeter { require(data.length > 0, NoTxData()); + // Encode transaction with L2 message type for off-chain processing bytes memory transaction = encodeTransaction(data); - require(isAllowed(msg.sender, tx.origin, transaction), TransactionOrSenderNotAllowed()); - emit TransactionProcessed(msg.sender, transaction); + + // Check authorization through permission module (considers both sequencer and tx.origin) + require(isAllowed(sequencer, tx.origin, transaction), TransactionOrSenderNotAllowed()); + + // Emit event for off-chain systems to execute on application chain + emit TransactionProcessed(sequencer, transaction); + } + + /// @notice Processes multiple signed transactions in a single call by forwarding them to the gas meter contract for gas accounting and validation. + /// @dev Each transaction in the array must be non-empty. This function delegates processing to the configured gas meter contract for each transaction. + /// @param data An array of transaction data to process (must not be empty). + function processTransactionsBulk(bytes[] calldata data) external { + GasMeter(gasMeter) + .meterCall(abi.encodeCall(SyndicateSequencingChain._processTransactionsBulk, (msg.sender, data))); } - /// @notice Processes multiple signed transactions in bulk. - /// @param data An array of transaction data. + /// @notice Processes multiple signed transactions in bulk for gas efficiency + /// @dev Each transaction is individually validated through the permission module. + /// Only authorized transactions emit events, unauthorized ones are silently skipped. + /// The tx.origin is intentionally used as part of the security model. + /// @param sequencer The address of original sequencer that is processing the transactions. + /// @param data An array of transaction data to process (must not be empty) //#olympix-ignore - function processTransactionsBulk(bytes[] calldata data) external trackGasUsage { + function _processTransactionsBulk(address sequencer, bytes[] calldata data) external onlyGasMeter { uint256 dataCount = data.length; require(dataCount > 0, NoTxData()); - // Process all transactions - uint256 i; - for (i = 0; i < dataCount; i++) { + // Process all transactions individually + for (uint256 i = 0; i < dataCount; i++) { require(data[i].length > 0, NoTxData()); - bytes memory transaction = encodeTransaction(data[i]); - bool isAllowed = isAllowed(msg.sender, tx.origin, transaction); //#olympix-ignore-any-tx-origin - if (isAllowed) { - // only emit the event if the transaction is allowed - emit TransactionProcessed(msg.sender, transaction); - } - } - } - /*////////////////////////////////////////////////////////////// - EMISSIONS RECEIVER ADMIN FUNCTIONS - //////////////////////////////////////////////////////////////*/ + // Encode transaction with L2 message type + bytes memory transaction = encodeTransaction(data[i]); - /// @notice Set the emissions receiver address - /// @dev Only callable by the contract owner - /// @param _emissionsReceiver The address to receive emissions - function setEmissionsReceiver(address _emissionsReceiver) external onlyOwner { - address oldReceiver = emissionsReceiver; - emissionsReceiver = _emissionsReceiver; - if (emissionsReceiver != address(0)) { - emit EmissionsReceiverUpdated(oldReceiver, _emissionsReceiver); - } else { - emit EmissionsReceiverUpdated(oldReceiver, owner()); - } - } + // Check authorization (considers both sequencer and tx.origin) + bool allowed = isAllowed(sequencer, tx.origin, transaction); //#olympix-ignore-any-tx-origin - /// @notice Get the effective emissions receiver address - /// @dev Returns emissionsReceiver if set, otherwise returns the contract owner - /// @return The address that should receive emissions - function getEmissionsReceiver() external view returns (address) { - return emissionsReceiver == address(0) ? owner() : emissionsReceiver; - } - - /// @notice Override transferOwnership to emit EmissionsReceiverUpdated event when appropriate - /// @dev When emissionsReceiver is not explicitly set (address(0)), transferring ownership - /// effectively changes the emissions receiver, so we emit the event for transparency - /// @param newOwner The address of the new owner - function transferOwnership(address newOwner) public override onlyOwner { - if (emissionsReceiver == address(0)) { - emit EmissionsReceiverUpdated(owner(), newOwner); + if (allowed) { + // Only emit event for authorized transactions + emit TransactionProcessed(sequencer, transaction); + } } - super.transferOwnership(newOwner); - } - - /*////////////////////////////////////////////////////////////// - GAS TRACKING ADMIN FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - /// @notice Disable gas tracking if needed - /// @dev Only callable by the contract owner - function disableGasTracking() external onlyOwner { - require(!gasTrackingDisabled, GasTrackingAlreadyDisabled()); - gasTrackingDisabled = true; - } - - /// @notice Enable gas tracking - /// @dev Only callable by the contract owner - function enableGasTracking() external onlyOwner { - require(gasTrackingDisabled, GasTrackingAlreadyEnabled()); - gasTrackingDisabled = false; } } diff --git a/synd-contracts/src/config/ArbChainConfig.sol b/synd-contracts/src/config/ArbChainConfig.sol index aeff75b8a..a4942e8f3 100644 --- a/synd-contracts/src/config/ArbChainConfig.sol +++ b/synd-contracts/src/config/ArbChainConfig.sol @@ -8,6 +8,7 @@ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.s * @dev Configuration contract for settlement chain parameters */ contract ArbChainConfig is Initializable { + uint256 public constant VERSION = 1_000_000; // 1.0.0 // Events //#olympix-ignore-missing-events-assertion event DefaultSequencingChainWsRpcUrlUpdated(string newWsRpcUrl); diff --git a/synd-contracts/src/deployment/DeployerParent.sol b/synd-contracts/src/deployment/DeployerParent.sol new file mode 100644 index 000000000..2b8714077 --- /dev/null +++ b/synd-contracts/src/deployment/DeployerParent.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {SyndForwarder} from "./SyndForwarder.sol"; + +/// @title DeployerParent +/// @notice Temporary contract for controlling forwarders until we have the chain registry +contract DeployerParent is UUPSUpgradeable { + address public immutable owner; + SyndForwarder public immutable forwarder; + + error NotOwner(); + + constructor(address owner_, address forwarder_) { + owner = owner_; + forwarder = SyndForwarder(forwarder_); + } + + modifier onlyOwner() { + if (msg.sender != owner) revert NotOwner(); + _; + } + + function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + + function call(address dest, bytes calldata data) external payable onlyOwner { + forwarder.call{value: msg.value}(dest, data); + } + + function deploy(bytes32 salt, address impl, bytes calldata init) external onlyOwner returns (address) { + return forwarder.deploy(salt, impl, init); + } +} diff --git a/synd-contracts/src/deployment/MinimalUUPSStub.sol b/synd-contracts/src/deployment/MinimalUUPSStub.sol new file mode 100644 index 000000000..5231c1c23 --- /dev/null +++ b/synd-contracts/src/deployment/MinimalUUPSStub.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; + +/// @title MinimalUUPSStub +/// @notice Minimal UUPS implementation stub for deterministic proxy deployments +/// @dev This contract will NEVER change to ensure deterministic CREATE2 addresses across all deployments. +/// It serves as a temporary implementation that is immediately upgraded after proxy deployment. +/// The stub has no functionality except for UUPS upgrade capability and security measures. +contract MinimalUUPSStub is UUPSUpgradeable { + /// @notice this is only used to get a reliably deterministic address, the proxy will immediately be upgraded + function _authorizeUpgrade(address) internal view override {} + + /// @notice Receive function that reverts - this stub should not receive ETH + receive() external payable { + revert("Stub: ETH not accepted"); + } + + /// @notice Fallback that reverts - this stub has no logic + fallback() external payable { + revert("Stub: no logic implemented"); + } +} diff --git a/synd-contracts/src/deployment/SyndForwarder.sol b/synd-contracts/src/deployment/SyndForwarder.sol new file mode 100644 index 000000000..658c1773d --- /dev/null +++ b/synd-contracts/src/deployment/SyndForwarder.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {AddressAliasHelper} from "lib/nitro-contracts/src/libraries/AddressAliasHelper.sol"; +import {MinimalUUPSStub} from "./MinimalUUPSStub.sol"; + +/// @title SyndForwarder +/// @notice Syndicate Forwarder for consistent deterministic deployment of contracts across chains +/// @dev This contract should be deployed using a deterministic deployment proxy so that +/// for a givien config (source sender and source chain id) it will have the same address +/// across all chains +contract SyndForwarder { + address public immutable allowedSender; + address public immutable stubImplementation; + + error NotAllowedSender(); + + /// @notice Constructor + /// @param _sourceSender The source address that is allowed to call the base forwarder on ETH mainnet + /// @param _sourceChainId The chain ID of the source chain + constructor(address _sourceSender, uint256 _sourceChainId) { + if (block.chainid == _sourceChainId) { + allowedSender = _sourceSender; + } else { + // alias the contract address to receive messages from the same contract on the parent chain + allowedSender = AddressAliasHelper.applyL1ToL2Alias(address(this)); + } + + bytes memory stubBytecode = abi.encodePacked(type(MinimalUUPSStub).creationCode); + stubImplementation = Create2.deploy(0, bytes32("SYND_FORWARDER_STUB_V1"), stubBytecode); + } + + modifier onlyAllowedSender() { + if (msg.sender != allowedSender) revert NotAllowedSender(); + _; + } + + function call(address dest, bytes calldata data) external payable onlyAllowedSender { + (bool success, bytes memory result) = payable(dest).call{value: msg.value}(data); + if (!success) { + assembly { + revert(add(result, 32), mload(result)) + } + } + } + + function deploy(bytes32 salt, address impl, bytes calldata init) external onlyAllowedSender returns (address) { + address deployAddress = Create2.deploy(0, salt, getProxyBytecode()); + (bool upgradeSuccess, bytes memory result) = + deployAddress.call(abi.encodeWithSignature("upgradeToAndCall(address,bytes)", impl, init)); + if (!upgradeSuccess) { + assembly { + revert(add(result, 32), mload(result)) + } + } + return deployAddress; + } + + /// @notice Returns the consistent proxy bytecode used for all deployments + /// @dev Always returns the same bytecode for predictable CREATE2 addresses + /// @return The bytecode to be used for deployment + function getProxyBytecode() public view returns (bytes memory) { + return abi.encodePacked(type(ERC1967Proxy).creationCode, abi.encode(stubImplementation, "")); + } +} diff --git a/synd-contracts/src/factory/PermissionModuleFactories.sol b/synd-contracts/src/factory/PermissionModuleFactories.sol deleted file mode 100644 index 12b69507d..000000000 --- a/synd-contracts/src/factory/PermissionModuleFactories.sol +++ /dev/null @@ -1,162 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {RequireAndModule} from "../requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "../requirement-modules/RequireOrModule.sol"; -import {RequireCompositeModule} from "../requirement-modules/RequireCompositeModule.sol"; -import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; - -/// @title RequireAndModuleFactory -/// @notice Factory for deploying RequireAndModule contracts using CREATE2 pattern -contract RequireAndModuleFactory is AccessControl, Pausable { - /// @notice Emitted when a new RequireAndModule is created - event RequireAndModuleCreated(address indexed module, address indexed admin); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - } - - /// @notice Deploy a new RequireAndModule using CREATE2 - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return module The deployed module address - function createRequireAndModule(address admin, bytes32 salt) external whenNotPaused returns (address module) { - if (admin == address(0)) revert ZeroAddress(); - - bytes memory bytecode = abi.encodePacked(type(RequireAndModule).creationCode, abi.encode(admin)); - module = Create2.deploy(0, salt, bytecode); - - emit RequireAndModuleCreated(module, admin); - return module; - } - - /// @notice Compute the address where a module will be deployed - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return The computed address - function computeModuleAddress(address admin, bytes32 salt) external view returns (address) { - bytes memory bytecode = abi.encodePacked(type(RequireAndModule).creationCode, abi.encode(admin)); - return Create2.computeAddress(salt, keccak256(bytecode)); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} - -/// @title RequireOrModuleFactory -/// @notice Factory for deploying RequireOrModule contracts using CREATE2 pattern -contract RequireOrModuleFactory is AccessControl, Pausable { - /// @notice Emitted when a new RequireOrModule is created - event RequireOrModuleCreated(address indexed module, address indexed admin); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - } - - /// @notice Deploy a new RequireOrModule using CREATE2 - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return module The deployed module address - function createRequireOrModule(address admin, bytes32 salt) external whenNotPaused returns (address module) { - if (admin == address(0)) revert ZeroAddress(); - - bytes memory bytecode = abi.encodePacked(type(RequireOrModule).creationCode, abi.encode(admin)); - module = Create2.deploy(0, salt, bytecode); - - emit RequireOrModuleCreated(module, admin); - return module; - } - - /// @notice Compute the address where a module will be deployed - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return The computed address - function computeModuleAddress(address admin, bytes32 salt) external view returns (address) { - bytes memory bytecode = abi.encodePacked(type(RequireOrModule).creationCode, abi.encode(admin)); - return Create2.computeAddress(salt, keccak256(bytecode)); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} - -/// @title RequireCompositeModuleFactory -/// @notice Factory for deploying RequireCompositeModule contracts using CREATE2 pattern -contract RequireCompositeModuleFactory is AccessControl, Pausable { - /// @notice Emitted when a new RequireCompositeModule is created - event RequireCompositeModuleCreated(address indexed module, address indexed admin); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - } - - /// @notice Deploy a new RequireCompositeModule using CREATE2 - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return module The deployed module address - function createRequireCompositeModule(address admin, bytes32 salt) external whenNotPaused returns (address module) { - if (admin == address(0)) revert ZeroAddress(); - - bytes memory bytecode = abi.encodePacked(type(RequireCompositeModule).creationCode, abi.encode(admin)); - module = Create2.deploy(0, salt, bytecode); - - emit RequireCompositeModuleCreated(module, admin); - return module; - } - - /// @notice Compute the address where a module will be deployed - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return The computed address - function computeModuleAddress(address admin, bytes32 salt) external view returns (address) { - bytes memory bytecode = abi.encodePacked(type(RequireCompositeModule).creationCode, abi.encode(admin)); - return Create2.computeAddress(salt, keccak256(bytecode)); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} diff --git a/synd-contracts/src/factory/SyndicateFactory.sol b/synd-contracts/src/factory/SyndicateFactory.sol deleted file mode 100644 index 216016c89..000000000 --- a/synd-contracts/src/factory/SyndicateFactory.sol +++ /dev/null @@ -1,206 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {SyndicateSequencingChain} from "../SyndicateSequencingChain.sol"; -import {IRequirementModule} from "../interfaces/IRequirementModule.sol"; -import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; -import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; - -enum NamespaceState { - Available, - Used, - Reserved -} - -/// @title SyndicateFactory -/// @notice Factory contract for creating SyndicateSequencingChain contracts with centralized gas tracking -/// @dev Uses CREATE2 pattern for deterministic deployments - users deploy permission modules separately -contract SyndicateFactory is AccessControl, Pausable { - /// @notice Emitted when a new SyndicateSequencingChain is created - event SyndicateSequencingChainCreated( - uint256 indexed appchainId, address indexed sequencingChainAddress, address indexed permissionModuleAddress - ); - - /// @notice Emitted when namespace configuration is updated - event NamespaceConfigUpdated(uint256 oldNamespacePrefix, uint256 newNamespacePrefix); - - /// @notice Emitted when a chain ID is manually marked as used - event ChainIdManuallyMarked(uint256 indexed chainId); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - error ChainIdAlreadyExists(); - - // Namespace configuration - made public for frontend access - uint256 public namespacePrefix; - uint256 public nextAutoChainId; - mapping(uint256 => NamespaceState) public usedNamespaces; - - /// @notice Mapping from appchain ID to the sequencing contract address - mapping(uint256 => address) public appchainContracts; - uint256[] public chainIDs; - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - - _updateNamespaceConfig(510); - - nextAutoChainId = 1; - } - - /// @notice Creates a new SyndicateSequencingChain contract - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for the new chain - /// @param permissionModule The pre-deployed permission module - /// @param salt The salt for CREATE2 deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return actualChainId The chain ID that was used - //#olympix-ignore-reentrancy-events - function createSyndicateSequencingChain( - uint256 appchainId, - address admin, - IRequirementModule permissionModule, - bytes32 salt - ) external whenNotPaused returns (address sequencingChain, uint256 actualChainId) { - if (admin == address(0) || address(permissionModule) == address(0)) { - revert ZeroAddress(); - } - - // Determine actual chain ID - actualChainId = appchainId == 0 ? getNextChainId() : appchainId; - - // Validate chain ID is not already used - if (appchainContracts[actualChainId] != address(0)) { - revert ChainIdAlreadyExists(); - } - - if (appchainId == 0) { - nextAutoChainId++; - } - - // Deploy the sequencing chain using CREATE2 - bytes memory bytecode = getBytecode(actualChainId); - sequencingChain = Create2.deploy(0, salt, bytecode); - - // Store the mapping of appchain ID to contract address - appchainContracts[actualChainId] = sequencingChain; - chainIDs.push(actualChainId); - - // Set sequencing module - SyndicateSequencingChain(sequencingChain).updateRequirementModule(address(permissionModule)); - - // Transfer owner - Ownable(sequencingChain).transferOwnership(admin); - - emit SyndicateSequencingChainCreated(actualChainId, sequencingChain, address(permissionModule)); - - return (sequencingChain, actualChainId); - } - - /// @notice Computes the address where a sequencing chain will be deployed - /// @param salt The salt for CREATE2 deployment - /// @param chainId The chain ID - /// @return The computed address - function computeSequencingChainAddress(bytes32 salt, uint256 chainId) external view returns (address) { - return Create2.computeAddress(salt, keccak256(getBytecode(chainId))); - } - - /// @notice Returns the bytecode for deploying a SyndicateSequencingChain - /// @param chainId The chain ID - /// @return The bytecode with constructor parameters - function getBytecode(uint256 chainId) public pure returns (bytes memory) { - return abi.encodePacked(type(SyndicateSequencingChain).creationCode, abi.encode(chainId, false)); - } - - /// @notice Get the next auto-generated chain ID - /// @dev Chain ID calculation: concatenates namespacePrefix with nextAutoChainId - /// @dev Example: with namespacePrefix=510 and nextAutoChainId=1, result is 5101 - /// @dev Example: with namespacePrefix=510 and nextAutoChainId=1000, result is 5101000 - /// @return The next available chain ID in the namespace - function getNextChainId() public view returns (uint256) { - // Concatenate namespace prefix with auto chain ID - // This ensures we always stay within the 510 namespace - string memory prefixStr = Strings.toString(namespacePrefix); - string memory chainIdStr = Strings.toString(nextAutoChainId); - //#olympix-ignore-abi-encode-packed-dynamic-types - string memory combined = string(abi.encodePacked(prefixStr, chainIdStr)); - return Strings.parseUint(combined); - } - - /// @notice Check if a chain ID has been used - /// @param chainId The chain ID to check - /// @return 1 if used, 0 if available - function isChainIdUsed(uint256 chainId) public view returns (bool) { - return appchainContracts[chainId] != address(0); - } - - /// @notice returns the number of appchains - function getTotalAppchains() external view returns (uint256) { - return chainIDs.length; - } - - /// @notice returns the contracts for a given list of appchain chainIDs - /// @param _chainIDs the list of chain IDs - /// @return _contracts contracts for the given chain IDs - function getContractsForAppchains(uint256[] memory _chainIDs) external view returns (address[] memory _contracts) { - address[] memory contracts = new address[](_chainIDs.length); - for (uint256 i = 0; i < _chainIDs.length; i++) { - contracts[i] = appchainContracts[_chainIDs[i]]; - } - return contracts; - } - - /// @notice returns all appchains chainIDs and associated contracts - /// @return _chainIDs - /// @return _contracts - function getAppchainsAndContracts() - external - view - returns (uint256[] memory _chainIDs, address[] memory _contracts) - { - address[] memory contracts = new address[](chainIDs.length); - for (uint256 i = 0; i < chainIDs.length; i++) { - contracts[i] = appchainContracts[chainIDs[i]]; - } - return (chainIDs, contracts); - } - - /// @notice Update namespace configuration (manager only) - /// @param newPrefix The new namespace prefix - /// old namespace prefixes can be reused, but prefixes that can generate collisions are forbidden - function updateNamespaceConfig(uint256 newPrefix) external onlyRole(MANAGER_ROLE) { - _updateNamespaceConfig(newPrefix); - } - - function _updateNamespaceConfig(uint256 newPrefix) private { - require(newPrefix > 0, "namespace prefix of 0 is forbidden"); - require(usedNamespaces[newPrefix] != NamespaceState.Reserved, "namespace collision detected"); - usedNamespaces[newPrefix] = NamespaceState.Used; - uint256 prefix = newPrefix / 10; - while (prefix > 0) { - require(usedNamespaces[prefix] != NamespaceState.Used, "namespace collision detected"); - usedNamespaces[prefix] = NamespaceState.Reserved; - prefix /= 10; - } - prefix = namespacePrefix; - namespacePrefix = newPrefix; - emit NamespaceConfigUpdated(prefix, newPrefix); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} diff --git a/synd-contracts/src/factory/SyndicateFactoryWrapper.sol b/synd-contracts/src/factory/SyndicateFactoryWrapper.sol deleted file mode 100644 index d2ae87308..000000000 --- a/synd-contracts/src/factory/SyndicateFactoryWrapper.sol +++ /dev/null @@ -1,181 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {SyndicateFactory} from "./SyndicateFactory.sol"; -import {RequireAndModuleFactory, RequireOrModuleFactory} from "./PermissionModuleFactories.sol"; -import {IRequirementModule} from "../interfaces/IRequirementModule.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; - -/// @title SyndicateFactoryWrapper -/// @notice Wrapper factory that deploys both permission modules and sequencing chains together -/// @dev Combines functionality from individual factories for a complete deployment experience -contract SyndicateFactoryWrapper is AccessControl, Pausable { - /// @notice Emitted when a complete syndicate deployment is created - event CompleteSyndicateDeployed( - uint256 indexed chainId, - address indexed sequencingChain, - address indexed permissionModule, - ModuleType moduleType, - address admin - ); - - /// @notice Types of permission modules supported - enum ModuleType { - RequireAnd, - RequireOr - } - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - error InvalidModuleType(); - - // Factory contract references - SyndicateFactory public immutable syndicateFactory; - RequireAndModuleFactory public immutable requireAndFactory; - RequireOrModuleFactory public immutable requireOrFactory; - - constructor(address admin, address _syndicateFactory, address _requireAndFactory, address _requireOrFactory) { - if ( - admin == address(0) || _syndicateFactory == address(0) || _requireAndFactory == address(0) - || _requireOrFactory == address(0) - ) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - - syndicateFactory = SyndicateFactory(_syndicateFactory); - requireAndFactory = RequireAndModuleFactory(_requireAndFactory); - requireOrFactory = RequireOrModuleFactory(_requireOrFactory); - } - - /// @notice Deploy a complete syndicate with permission module and sequencing chain - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for both contracts - /// @param moduleType The type of permission module to deploy (And or Or) - /// @param moduleSalt The salt for the permission module deployment - /// @param chainSalt The salt for the sequencing chain deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return permissionModule The deployed permission module address - /// @return actualChainId The chain ID that was used - //#olympix-ignore-reentrancy-events - function deployCompleteSyndicate( - uint256 appchainId, - address admin, - ModuleType moduleType, - bytes32 moduleSalt, - bytes32 chainSalt - ) public whenNotPaused returns (address sequencingChain, address permissionModule, uint256 actualChainId) { - if (admin == address(0)) revert ZeroAddress(); - - // Deploy the appropriate permission module - if (moduleType == ModuleType.RequireAnd) { - permissionModule = requireAndFactory.createRequireAndModule(admin, moduleSalt); - } else if (moduleType == ModuleType.RequireOr) { - permissionModule = requireOrFactory.createRequireOrModule(admin, moduleSalt); - } else { - revert InvalidModuleType(); - } - - // Deploy the sequencing chain with the permission module - (sequencingChain, actualChainId) = syndicateFactory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(permissionModule), chainSalt - ); - - emit CompleteSyndicateDeployed(actualChainId, sequencingChain, permissionModule, moduleType, admin); - - return (sequencingChain, permissionModule, actualChainId); - } - - /// @notice Compute addresses for a complete syndicate deployment - /// @param admin The admin address for the module - /// @param moduleType The type of permission module - /// @param moduleSalt The salt for the permission module - /// @param chainSalt The salt for the sequencing chain - /// @param chainId The chain ID for the sequencing chain - /// @return permissionModuleAddress The computed permission module address - /// @return sequencingChainAddress The computed sequencing chain address - function computeCompleteSyndicateAddresses( - address admin, - ModuleType moduleType, - bytes32 moduleSalt, - bytes32 chainSalt, - uint256 chainId - ) external view returns (address permissionModuleAddress, address sequencingChainAddress) { - // Compute permission module address - if (moduleType == ModuleType.RequireAnd) { - permissionModuleAddress = requireAndFactory.computeModuleAddress(admin, moduleSalt); - } else if (moduleType == ModuleType.RequireOr) { - permissionModuleAddress = requireOrFactory.computeModuleAddress(admin, moduleSalt); - } else { - revert InvalidModuleType(); - } - - // Compute sequencing chain address - sequencingChainAddress = syndicateFactory.computeSequencingChainAddress(chainSalt, chainId); - - return (permissionModuleAddress, sequencingChainAddress); - } - - /// @notice Get the next auto-generated chain ID from the syndicate factory - /// @return The next available chain ID - function getNextAutoChainId() external view returns (uint256) { - return syndicateFactory.getNextChainId(); - } - - /// @notice Check if a chain ID has been used in the syndicate factory - /// @param chainId The chain ID to check - /// @return true if used, false if available - function isChainIdUsed(uint256 chainId) external view returns (bool) { - return syndicateFactory.isChainIdUsed(chainId); - } - - /// @notice Get the namespace prefix from the syndicate factory - /// @return The current namespace prefix - function getNamespacePrefix() external view returns (uint256) { - return syndicateFactory.namespacePrefix(); - } - - /// @notice Deploy a syndicate with RequireAndModule - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for both contracts - /// @param moduleSalt The salt for the permission module deployment - /// @param chainSalt The salt for the sequencing chain deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return permissionModule The deployed permission module address - /// @return actualChainId The chain ID that was used - function deployWithRequireAndModule(uint256 appchainId, address admin, bytes32 moduleSalt, bytes32 chainSalt) - external - whenNotPaused - returns (address sequencingChain, address permissionModule, uint256 actualChainId) - { - return deployCompleteSyndicate(appchainId, admin, ModuleType.RequireAnd, moduleSalt, chainSalt); - } - - /// @notice Deploy a syndicate with RequireOrModule - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for both contracts - /// @param moduleSalt The salt for the permission module deployment - /// @param chainSalt The salt for the sequencing chain deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return permissionModule The deployed permission module address - /// @return actualChainId The chain ID that was used - function deployWithRequireOrModule(uint256 appchainId, address admin, bytes32 moduleSalt, bytes32 chainSalt) - external - whenNotPaused - returns (address sequencingChain, address permissionModule, uint256 actualChainId) - { - return deployCompleteSyndicate(appchainId, admin, ModuleType.RequireOr, moduleSalt, chainSalt); - } - - /// @notice Pause the wrapper factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the wrapper factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} diff --git a/synd-contracts/src/interfaces/IGasAggregator.sol b/synd-contracts/src/interfaces/IGasAggregator.sol new file mode 100644 index 000000000..62bf693a6 --- /dev/null +++ b/synd-contracts/src/interfaces/IGasAggregator.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +interface IGasAggregator { + function notifyNewImplementation(address newImplementation) external; + function notifyChainUpgrade(uint256 chainId, address newImplementation) external; + function allowedImplementations(address implementation) external view returns (bool); +} diff --git a/synd-contracts/src/interfaces/ILegacyAppchain.sol b/synd-contracts/src/interfaces/ILegacyAppchain.sol new file mode 100644 index 000000000..bdaae37e4 --- /dev/null +++ b/synd-contracts/src/interfaces/ILegacyAppchain.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +/// @title ILegacyAppchain +/// @notice Interface for legacy appchain contracts that need to be migrated +/// @dev Used to extract gas usage data from old appchain implementations during migration +interface ILegacyAppchain { + /// @notice Get the total gas tokens used for a specific epoch + /// @param epoch The epoch number to query + /// @return The amount of gas tokens used in the specified epoch + function getTokensForEpoch(uint256 epoch) external view returns (uint256); +} diff --git a/synd-contracts/src/staking/GasAggregator.sol b/synd-contracts/src/staking/GasAggregator.sol index 3bb85c321..b886a4b0d 100644 --- a/synd-contracts/src/staking/GasAggregator.sol +++ b/synd-contracts/src/staking/GasAggregator.sol @@ -8,10 +8,14 @@ import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; import {EpochTracker} from "./EpochTracker.sol"; interface ISyndicateProxy { - // This function exists in both the new proxy and legacy implementation contract + // This function exists in legacy contracts function tokensUsedPerEpoch(uint256 epoch) external view returns (uint256); } +interface IGasMeter { + function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +} + /// @notice Storage struct for GasAggregator using ERC-7201 namespaced storage pattern /// @dev This struct is used to store the aggregated epoch data hash. /// @dev Using ERC-7201 ensures storage slots don't conflict during upgrades. @@ -36,14 +40,18 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { CONSTANTS //////////////////////////////////////////////////////////////*/ - /// @notice Version of the GasAggregator contract (updatable during upgrades) + /// @notice Version of the GasAggregator contract /// @dev Semantic version string to track contract upgrades and compatibility - uint256 public constant VERSION = 1_000_000; // 1.0.0 (major * 1_000_000 + minor * 1_000 + patch) + uint256 public constant VERSION = 1_001_000; // 1.1.0 (major * 1_000_000 + minor * 1_000 + patch) /*////////////////////////////////////////////////////////////// STATE VARIABLES //////////////////////////////////////////////////////////////*/ + /// @notice Address of the gas meter contract + /// @dev Used to get the gas used for each appchain + address public immutable gasMeterContract; + /// @notice Factory contract address to determine create2 addresses address public factory; @@ -75,6 +83,10 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { /// @notice appchain contract addresses mapping mapping(uint256 chainId => address) public appchainContract; + /// @notice Legacy appchain contract addresses mapping + /// @dev Used to track legacy appchain contracts + mapping(uint256 chainId => bool) public isLegacyAppchainContract; + /*////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ @@ -142,11 +154,14 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { /// @dev The epoch is the first epoch to start from /// @dev The addChainFee is the fee to add a chain (setting it to 0 will default to 5 ether) /// @dev The maxAppchainsToQuery is the maximum number of appchains to query (setting it to 0 will default to 100) + /// @param _gasMeterContract The address of the gas meter contract /// @param _epoch The epoch to start from /// @param _addChainFee The fee to add a chain /// @param _maxAppchainsToQuery The maximum number of appchains to query - constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery) { + constructor(address _gasMeterContract, uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery) { require(_epoch != 0); + gasMeterContract = _gasMeterContract; + currentEpoch = _epoch; addChainFee = _addChainFee; if (addChainFee == 0) { @@ -247,7 +262,7 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { for (uint256 i = 0; i < appchainToQuery; i++) { uint256 chainId = _appchains.at(aggregateIndex + i); - uint256 gasUsed = ISyndicateProxy(appchainContract[chainId]).tokensUsedPerEpoch(currentEpoch); + uint256 gasUsed = getAppchainGasUsed(currentEpoch, chainId); // ignore appchains with no gas usage in the epoch if (gasUsed > 0) { chainIds[chainIdCount] = chainId; @@ -291,18 +306,28 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { return _appchains.at(index); } + /// @notice Get the gas used for a given appchain + /// @param chainId The chain ID to get the gas used for + /// @return The gas used for the given appchain for the current epoch + function getAppchainGasUsed(uint256 epoch, uint256 chainId) public view returns (uint256) { + if (isLegacyAppchainContract[chainId]) { + return ISyndicateProxy(appchainContract[chainId]).tokensUsedPerEpoch(epoch); + } + + return IGasMeter(gasMeterContract).gasUsed(epoch, appchainContract[chainId]); + } + /*////////////////////////////////////////////////////////////// ADMIN FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice Adds a chain to the gas tracking registry with a chainContract override. - /// This legacy function is deactivated once the factory is set. - function addLegacyChain(uint256 chainId, address chainContract) external onlyOwner whenNotPaused { - require(factory == address(0), FactoryAlreadySet()); + /// @notice Manually adds a chain to the gas tracking registry with a chainContract override. + function adminAddChain(uint256 chainId, address chainContract, bool isLegacy) external onlyOwner whenNotPaused { require(chainId > 0, ZeroChainId()); - require(_appchains.add(chainId), ChainAlreadyTracked(chainId)); require(chainContract.code.length > 0, ChainNotFound(chainId)); + require(_appchains.add(chainId), ChainAlreadyTracked(chainId)); appchainContract[chainId] = chainContract; + isLegacyAppchainContract[chainId] = isLegacy; emit ChainAdded(currentEpoch, chainId, chainContract, msg.sender); } diff --git a/synd-contracts/src/staking/GasArchive.sol b/synd-contracts/src/staking/GasArchive.sol index 5f8631d79..1c5c8dd41 100644 --- a/synd-contracts/src/staking/GasArchive.sol +++ b/synd-contracts/src/staking/GasArchive.sol @@ -9,19 +9,68 @@ import {RLPReader} from "./lib/RLPReader.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +/// @notice Storage struct for GasArchive using ERC-7201 namespaced storage pattern +/// @dev This struct contains all the state variables for the gas archive contract. +/// Using ERC-7201 ensures storage slots don't conflict during upgrades. +/// @custom:storage-location erc7201:syndicate.storage.GasArchive +struct GasArchiveStorage { + /// @notice the current epoch + uint256 epoch; + /// @notice list of sequencing chains + EnumerableSet.UintSet seqChains; + /// @notice tracks the remaining chains for the epoch + uint256 epochRemainingChains; + /// @notice mapping of sequencing chain IDs to the address of the gas aggregator contract + mapping(uint256 chainId => address aggregatorAddress) seqChainGasAggregator; + /// @notice mapping of sequencing chain IDs to the address of the Outbox contract for that sequencing chain (where the confirmed rollup hash can be found) + mapping(uint256 chainId => address outboxAddress) seqChainOutbox; + mapping(uint256 chainId => bool) seqChainSettlesToBase; + /// @notice block hashes for l1 and settlement chains + mapping(bytes32 blockHash => bool isPresent) ethBlockHashes; + mapping(bytes32 blockHash => bool isPresent) setBlockHashes; + /// @notice tracks which sequencing chains have submitted data for each epoch + mapping(uint256 epoch => mapping(uint256 chainId => bool submitted)) epochChainDataSubmitted; + /// @notice Stores the verified epoch data hash + mapping(uint256 epoch => mapping(uint256 seqChainID => bytes32 dataHash)) epochVerifiedDataHash; + /// @notice Validated epoch data + mapping(uint256 epoch => uint256 totalTokens) totalGasFees; + mapping(uint256 epoch => EnumerableSet.UintSet appchainIds) appchainIDs; + mapping(uint256 epoch => mapping(uint256 appchainId => uint256 tokens)) appchainGasFees; +} + /// @title GasArchive /// @notice Lives on the staking appchain and trustlessly validates and stores gas usage data from multiple sequencing chains using storage proofs /// @dev This contract supports arbitrum-based sequencing chains only (with the exception of the settlement chain, which can be any chain) contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPSUpgradeable { + uint256 public constant VERSION = 1_000_000; // 1.0.0 + using EnumerableSet for EnumerableSet.UintSet; using RLPReader for RLPReader.RLPItem; using RLPReader for bytes; + /*////////////////////////////////////////////////////////////// + STORAGE + //////////////////////////////////////////////////////////////*/ + + /// @notice ERC-7201 storage slot for GasArchive-specific data + /// @dev Generated using: cast index-erc7201 syndicate.storage.GasArchive + bytes32 public constant GAS_ARCHIVE_STORAGE_LOCATION = + 0xd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400; + + /// @notice Internal function to access the ERC-7201 namespaced storage + /// @dev Uses inline assembly to access the specific storage slot for this contract's data + /// @return $ Storage pointer to the GasArchiveStorage struct + function _getGasArchiveStorage() internal pure returns (GasArchiveStorage storage $) { + assembly { + $.slot := GAS_ARCHIVE_STORAGE_LOCATION + } + } + /*////////////////////////////////////////////////////////////// CONSTANTS //////////////////////////////////////////////////////////////*/ - /// @notice ERC-7201 storage slot for GasAggregator-specific data + /// @notice ERC-7201 storage slot for GasAggregator-specific data (used for storage proofs) /// @dev Generated using: cast index-erc7201 syndicate.storage.GasAggregator bytes32 public constant GAS_AGGREGATOR_STORAGE_LOCATION = 0xb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa0600; @@ -47,38 +96,97 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS uint256 public immutable settlementChainID; /*////////////////////////////////////////////////////////////// - STORAGE VARIABLES + STORAGE VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice the current epoch - uint256 public epoch; + /// @notice Get the current epoch + /// @return The current epoch number + function epoch() public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epoch; + } - /// @notice list of sequencing chains - // The chains are enumerable to make it easy to tell which chains are tracked by the archiver - EnumerableSet.UintSet seqChains; + /// @notice Get the number of remaining chains for the current epoch + /// @return The number of remaining chains + function epochRemainingChains() public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epochRemainingChains; + } - /// @notice tracks the remaining chains for the epoch - uint256 public epochRemainingChains; + /// @notice Get the gas aggregator address for a sequencing chain + /// @param chainId The chain ID + /// @return The gas aggregator address + function seqChainGasAggregator(uint256 chainId) public view returns (address) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChainGasAggregator[chainId]; + } - /// @notice mapping of sequencing chain IDs to the address of the gas aggregator contract - mapping(uint256 chainId => address aggregatorAddress) public seqChainGasAggregator; - /// @notice mapping of sequencing chain IDs to the address of the Outbox contract for that sequencing chain (where the confirmed rollup hash can be found) - mapping(uint256 chainId => address outboxAddress) public seqChainOutbox; - mapping(uint256 chainId => bool) public seqChainSettlesToBase; - /// @notice block hashes for l1 and settlement chains - mapping(bytes32 blockHash => bool isPresent) public ethBlockHashes; - mapping(bytes32 blockHash => bool isPresent) public setBlockHashes; + /// @notice Get the outbox address for a sequencing chain + /// @param chainId The chain ID + /// @return The outbox address + function seqChainOutbox(uint256 chainId) public view returns (address) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChainOutbox[chainId]; + } - /// @notice tracks which sequencing chains have submitted data for each epoch - mapping(uint256 epoch => mapping(uint256 chainId => bool submitted)) public epochChainDataSubmitted; + /// @notice Check if a sequencing chain settles to base + /// @param chainId The chain ID + /// @return True if settles to base + function seqChainSettlesToBase(uint256 chainId) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChainSettlesToBase[chainId]; + } - /// @notice Stores the verified epoch data hash - mapping(uint256 epoch => mapping(uint256 seqChainID => bytes32 dataHash)) public epochVerifiedDataHash; + /// @notice Check if an ETH block hash is known + /// @param blockHash The block hash + /// @return True if known + function ethBlockHashes(bytes32 blockHash) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.ethBlockHashes[blockHash]; + } - /// @notice Validated epoch data - mapping(uint256 epoch => uint256 totalTokens) public totalGasFees; - mapping(uint256 epoch => EnumerableSet.UintSet appchainIds) internal appchainIDs; - mapping(uint256 epoch => mapping(uint256 appchainId => uint256 tokens)) public appchainGasFees; + /// @notice Check if a settlement block hash is known + /// @param blockHash The block hash + /// @return True if known + function setBlockHashes(bytes32 blockHash) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.setBlockHashes[blockHash]; + } + + /// @notice Check if a chain has submitted data for an epoch + /// @param _epoch The epoch + /// @param chainId The chain ID + /// @return True if submitted + function epochChainDataSubmitted(uint256 _epoch, uint256 chainId) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epochChainDataSubmitted[_epoch][chainId]; + } + + /// @notice Get the verified epoch data hash for a chain + /// @param _epoch The epoch + /// @param seqChainID The sequencing chain ID + /// @return The data hash + function epochVerifiedDataHash(uint256 _epoch, uint256 seqChainID) public view returns (bytes32) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epochVerifiedDataHash[_epoch][seqChainID]; + } + + /// @notice Get the total gas fees for an epoch + /// @param _epoch The epoch + /// @return The total fees + function totalGasFees(uint256 _epoch) public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.totalGasFees[_epoch]; + } + + /// @notice Get the gas fees for a specific appchain in an epoch + /// @param _epoch The epoch + /// @param appchainId The appchain ID + /// @return The gas fees + function appchainGasFees(uint256 _epoch, uint256 appchainId) public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.appchainGasFees[_epoch][appchainId]; + } /*////////////////////////////////////////////////////////////// EVENTS @@ -147,7 +255,8 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS * @param _epoch Initial epoch number (stored in proxy storage) */ function initialize(uint256 _epoch) external initializer { - epoch = _epoch; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + $.epoch = _epoch; __Ownable_init(msg.sender); } @@ -162,8 +271,9 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS function sendBlockHashes(bytes32 ethBlockHash, bytes32 setBlockHash) external { require(msg.sender == blockHashSender, NotBlockHashSender()); - ethBlockHashes[ethBlockHash] = true; - setBlockHashes[setBlockHash] = true; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + $.ethBlockHashes[ethBlockHash] = true; + $.setBlockHashes[setBlockHash] = true; emit KnownBlockHash(ethBlockHash, setBlockHash); } @@ -173,7 +283,8 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS bytes[] calldata storageProof ) external { _confirmEpochDataHash(settlementChainID, blockHeader, accountProof, storageProof); - require(setBlockHashes[keccak256(blockHeader)], InvalidSeqBlockHeader()); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require($.setBlockHashes[keccak256(blockHeader)], InvalidSeqBlockHeader()); } /// @notice Validates and stores the epochDataHash for a given sequencing chain / epoch using sequencing chain storage proofs @@ -196,23 +307,24 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS bytes[] calldata seqAccountProof, bytes[] calldata seqStorageProof ) external { + GasArchiveStorage storage $ = _getGasArchiveStorage(); _confirmEpochDataHash(seqChainID, seqBlockHeader, seqAccountProof, seqStorageProof); if (seqChainID == settlementChainID) { - require(setBlockHashes[keccak256(seqBlockHeader)], InvalidSeqBlockHeader()); + require($.setBlockHashes[keccak256(seqBlockHeader)], InvalidSeqBlockHeader()); return; } - if (seqChainSettlesToBase[seqChainID]) { - require(setBlockHashes[keccak256(ethBlockHeader)], InvalidSetBlockHeader()); + if ($.seqChainSettlesToBase[seqChainID]) { + require($.setBlockHashes[keccak256(ethBlockHeader)], InvalidSetBlockHeader()); } else { - require(ethBlockHashes[keccak256(ethBlockHeader)], InvalidEthBlockHeader()); + require($.ethBlockHashes[keccak256(ethBlockHeader)], InvalidEthBlockHeader()); } bytes32 verifiedSeqChainBlockHash = _getSlotValueFromProof({ blockHeader: ethBlockHeader, accountProof: ethAccountProof, storageProof: ethStorageProof, - account: seqChainOutbox[seqChainID], + account: $.seqChainOutbox[seqChainID], storageSlot: keccak256(abi.encode(sendRoot, SEND_ROOT_STORAGE_SLOT)) }); @@ -226,25 +338,26 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS bytes[] calldata accountProof, bytes[] calldata storageProof ) internal { + GasArchiveStorage storage $ = _getGasArchiveStorage(); // prevent resubmission for the same epoch and chain - require(epochVerifiedDataHash[epoch][chainID] == bytes32(0), AlreadySubmitted()); + require($.epochVerifiedDataHash[$.epoch][chainID] == bytes32(0), AlreadySubmitted()); // submissions are only allowed for active sequencing chains - require(seqChains.contains(chainID), InvalidSequencingChain()); + require($.seqChains.contains(chainID), InvalidSequencingChain()); // verify that the provided epoch data is valid according to the sequencing chain proof bytes32 verifiedEpochDataHash = _getSlotValueFromProof({ blockHeader: blockHeader, accountProof: accountProof, storageProof: storageProof, - account: seqChainGasAggregator[chainID], - storageSlot: keccak256(abi.encode(epoch, GAS_AGGREGATOR_STORAGE_LOCATION)) + account: $.seqChainGasAggregator[chainID], + storageSlot: keccak256(abi.encode($.epoch, GAS_AGGREGATOR_STORAGE_LOCATION)) }); require(verifiedEpochDataHash != bytes32(0), EmptyDataHash()); // data submitted is valid, store it - epochVerifiedDataHash[epoch][chainID] = verifiedEpochDataHash; + $.epochVerifiedDataHash[$.epoch][chainID] = verifiedEpochDataHash; } /// @notice Receives the pre-image data for a verified epoch @@ -254,33 +367,33 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS function submitEpochPreImageData(uint256 seqChainID, uint256[] calldata appchains, uint256[] calldata tokens) external { + GasArchiveStorage storage $ = _getGasArchiveStorage(); // prevent resubmission for the same epoch and chain - require(!epochChainDataSubmitted[epoch][seqChainID], AlreadySubmitted()); + require(!$.epochChainDataSubmitted[$.epoch][seqChainID], AlreadySubmitted()); // note: we skip validating that appchains.length == tokens.length // because the GasAggregator already enforces this. // similarly we skip epoch validation because confirmEpochDataHash already enforces this. - require(epochVerifiedDataHash[epoch][seqChainID] == keccak256(abi.encode(appchains, tokens)), InvalidData()); + require($.epochVerifiedDataHash[$.epoch][seqChainID] == keccak256(abi.encode(appchains, tokens)), InvalidData()); for (uint256 i = 0; i < appchains.length; i++) { uint256 gasUsed = tokens[i]; // ignore appchains with no gas if (gasUsed > 0) { uint256 appchain = appchains[i]; - appchainIDs[epoch].add(appchain); - totalGasFees[epoch] += gasUsed; - appchainGasFees[epoch][appchain] += gasUsed; + $.appchainIDs[$.epoch].add(appchain); + $.totalGasFees[$.epoch] += gasUsed; + $.appchainGasFees[$.epoch][appchain] += gasUsed; } } - - emit ChainSubmitted(epoch, seqChainID); - - epochChainDataSubmitted[epoch][seqChainID] = true; - epochRemainingChains--; - if (epochRemainingChains == 0) { - emit EpochCompleted(epoch); - epoch++; - epochRemainingChains = seqChains.length(); + emit ChainSubmitted($.epoch, seqChainID); + + $.epochChainDataSubmitted[$.epoch][seqChainID] = true; + $.epochRemainingChains--; + if ($.epochRemainingChains == 0) { + emit EpochCompleted($.epoch); + $.epoch++; + $.epochRemainingChains = $.seqChains.length(); } } @@ -345,30 +458,35 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS //////////////////////////////////////////////////////////////*/ function getAppchainGasFees(uint256 epochIndex, uint256 appchainId) external view returns (uint256) { - require(epochIndex < epoch, NotArchivedEpoch()); - return appchainGasFees[epochIndex][appchainId]; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + return $.appchainGasFees[epochIndex][appchainId]; } function getTotalGasFees(uint256 epochIndex) external view returns (uint256) { - require(epochIndex < epoch, NotArchivedEpoch()); - return totalGasFees[epochIndex]; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + return $.totalGasFees[epochIndex]; } function getAppchainIds(uint256 epochIndex) external view returns (uint256[] memory chainIDs) { - require(epochIndex < epoch, NotArchivedEpoch()); - bytes32[] memory ids = appchainIDs[epochIndex]._inner._values; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + bytes32[] memory ids = $.appchainIDs[epochIndex]._inner._values; assembly { chainIDs := ids } } function getAppchainCount(uint256 epochIndex) external view returns (uint256) { - require(epochIndex < epoch, NotArchivedEpoch()); - return appchainIDs[epochIndex].length(); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + return $.appchainIDs[epochIndex].length(); } function sequencingChainCount() external view returns (uint256) { - return seqChains.length(); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChains.length(); } // when count is zero, returns the full list of results @@ -378,29 +496,32 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS view returns (uint256[] memory chainIds, uint256[] memory gasUsed) { - require(epochIndex < epoch, NotArchivedEpoch()); - uint256 maxCount = appchainIDs[epochIndex].length() - startIndex; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + uint256 maxCount = $.appchainIDs[epochIndex].length() - startIndex; if (count == 0 || count > maxCount) { count = maxCount; } chainIds = new uint256[](count); gasUsed = new uint256[](count); for (uint256 i = 0; i < count; i++) { - uint256 chainId = appchainIDs[epochIndex].at(startIndex + i); + uint256 chainId = $.appchainIDs[epochIndex].at(startIndex + i); chainIds[i] = chainId; - gasUsed[i] = appchainGasFees[epochIndex][chainId]; + gasUsed[i] = $.appchainGasFees[epochIndex][chainId]; } } function getSequencingChainIds() external view returns (uint256[] memory chainIDs) { - bytes32[] memory ids = seqChains._inner._values; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + bytes32[] memory ids = $.seqChains._inner._values; assembly { chainIDs := ids } } function sequencingChainId(uint256 index) external view returns (uint256) { - return seqChains.at(index); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChains.at(index); } /*////////////////////////////////////////////////////////////// @@ -419,19 +540,22 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS require(aggregatorAddress != address(0), ZeroAddress()); require(chainID != 0, ZeroChainId()); - require(seqChains.add(chainID), SequencingChainAlreadyExists()); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require($.seqChains.add(chainID), SequencingChainAlreadyExists()); // If the chain has data for this epoch already, dont increment the counter - if (!epochChainDataSubmitted[epoch][chainID]) { - epochRemainingChains++; + if (!$.epochChainDataSubmitted[$.epoch][chainID]) { + $.epochRemainingChains++; } - seqChainGasAggregator[chainID] = aggregatorAddress; + $.seqChainGasAggregator[chainID] = aggregatorAddress; if (chainID != settlementChainID) { require(outboxAddress != address(0), ZeroAddress()); - seqChainOutbox[chainID] = outboxAddress; - seqChainSettlesToBase[chainID] = settlesToBase; + $.seqChainOutbox[chainID] = outboxAddress; + $.seqChainSettlesToBase[chainID] = settlesToBase; } - emit ChainAdded(epoch, chainID, aggregatorAddress, seqChainOutbox[chainID], seqChainSettlesToBase[chainID]); + emit ChainAdded( + $.epoch, chainID, aggregatorAddress, $.seqChainOutbox[chainID], $.seqChainSettlesToBase[chainID] + ); } function addSettlementChainAsSequencingChain(address aggregatorAddress) external { @@ -441,22 +565,23 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS /// @notice Removes an existing sequencing chain immediately /// @dev Only admin can remove sequencing chains function removeSequencingChain(uint256 chainID) external onlyOwner { - require(seqChains.remove(chainID), SequencingChainDoesNotExist()); - seqChainGasAggregator[chainID] = address(0); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require($.seqChains.remove(chainID), SequencingChainDoesNotExist()); + $.seqChainGasAggregator[chainID] = address(0); if (chainID != settlementChainID) { - seqChainOutbox[chainID] = address(0); - seqChainSettlesToBase[chainID] = false; + $.seqChainOutbox[chainID] = address(0); + $.seqChainSettlesToBase[chainID] = false; } - if (!epochChainDataSubmitted[epoch][chainID]) { + if (!$.epochChainDataSubmitted[$.epoch][chainID]) { // clear the verified data hash in case it is set - epochVerifiedDataHash[epoch][chainID] = bytes32(0); - epochRemainingChains--; - if (epochRemainingChains == 0) { - emit EpochCompleted(epoch); - epoch++; - epochRemainingChains = seqChains.length(); + $.epochVerifiedDataHash[$.epoch][chainID] = bytes32(0); + $.epochRemainingChains--; + if ($.epochRemainingChains == 0) { + emit EpochCompleted($.epoch); + $.epoch++; + $.epochRemainingChains = $.seqChains.length(); } } - emit ChainRemoved(epoch, chainID); + emit ChainRemoved($.epoch, chainID); } } diff --git a/synd-contracts/src/staking/GasCounter.sol b/synd-contracts/src/staking/GasCounter.sol index c51bafe33..ff71090c7 100644 --- a/synd-contracts/src/staking/GasCounter.sol +++ b/synd-contracts/src/staking/GasCounter.sol @@ -3,6 +3,14 @@ pragma solidity 0.8.28; import {EpochTracker} from "./EpochTracker.sol"; +/// @custom:storage-location erc7201:syndicate.storage.GasCounter +struct GasCounterStorage { + /// @notice Whether gas tracking is enabled + bool gasTrackingEnabled; + /// @notice Mapping of epoch to gas data + mapping(uint256 => uint256) tokensUsedPerEpoch; +} + /** * @title GasCounter * @notice Tracks gas consumption over 30-day epochs for reward calculation @@ -11,16 +19,34 @@ import {EpochTracker} from "./EpochTracker.sol"; */ abstract contract GasCounter is EpochTracker { /*////////////////////////////////////////////////////////////// - STATE VARIABLES + STATE VARIABLE VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice Whether gas tracking is disabled - /// @dev When true, gas tracking is bypassed for all functions using trackGasUsage modifier - bool public gasTrackingDisabled; + // cast index-erc7201 syndicate.storage.GasCounter + bytes32 public constant GAS_COUNTER_STORAGE_LOCATION = + 0x119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b14800; + + function _getGasCounterStorage() internal pure returns (GasCounterStorage storage $) { + assembly { + $.slot := GAS_COUNTER_STORAGE_LOCATION + } + } - /// @notice Mapping from epoch index to total tokens used in gas fees for that epoch - /// @dev Accumulates all gas costs (gasUsed * gasPrice) for each epoch - mapping(uint256 epochIndex => uint256 tokensUsed) public tokensUsedPerEpoch; + function gasTrackingEnabled() public view returns (bool) { + GasCounterStorage storage $ = _getGasCounterStorage(); + return $.gasTrackingEnabled; + } + + function tokensUsedPerEpoch(uint256 epoch) public view returns (uint256) { + GasCounterStorage storage $ = _getGasCounterStorage(); + return $.tokensUsedPerEpoch[epoch]; + } + + /*////////////////////////////////////////////////////////////// + ERRORS + //////////////////////////////////////////////////////////////*/ + error GasTrackingAlreadyEnabled(); + error GasTrackingAlreadyDisabled(); /*////////////////////////////////////////////////////////////// MODIFIERS @@ -30,7 +56,7 @@ abstract contract GasCounter is EpochTracker { /// @dev Automatically measures gas consumption and converts to token cost /// Gas tracking can be disabled by setting gasTrackingDisabled to true modifier trackGasUsage() { - if (gasTrackingDisabled) { + if (!gasTrackingEnabled()) { _; return; } @@ -63,23 +89,39 @@ abstract contract GasCounter is EpochTracker { gasPrice = 1; } - // Add gas cost to current epoch total - // Using unchecked for gas efficiency since gasUsed * gasPrice cannot realistically overflow - unchecked { - tokensUsedPerEpoch[currentEpoch] += gasUsed * gasPrice; - } + // Add gas and cost to current epoch + _getGasCounterStorage().tokensUsedPerEpoch[currentEpoch] += gasUsed * gasPrice; } /*////////////////////////////////////////////////////////////// VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice Get the total tokens used in gas fees for a given epoch - /// @dev Returns the accumulated gas costs for the specified epoch - /// @param epochIndex The epoch index to query - /// @return The total tokens used in gas fees for the specified epoch - /// @custom:example If epoch 1 had 1000 gas units at 20 gwei, returns 20000 wei - function getTokensForEpoch(uint256 epochIndex) external view returns (uint256) { - return tokensUsedPerEpoch[epochIndex]; + /// @notice get the gas usage for a given epoch + /// @param epoch The epoch to query + function getTokensForEpoch(uint256 epoch) external view returns (uint256) { + return tokensUsedPerEpoch(epoch); + } + + /*////////////////////////////////////////////////////////////// + ADMIN FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /// @notice Disable gas tracking if needed + /// @dev This is an internal function that should be exposed by inheriting contracts with proper access control + function _disableGasTracking() internal { + if (gasTrackingEnabled() == false) { + revert GasTrackingAlreadyDisabled(); + } + _getGasCounterStorage().gasTrackingEnabled = false; + } + + /// @notice Enable gas tracking + /// @dev This is an internal function that should be exposed by inheriting contracts with proper access control + function _enableGasTracking() internal { + if (gasTrackingEnabled() == true) { + revert GasTrackingAlreadyEnabled(); + } + _getGasCounterStorage().gasTrackingEnabled = true; } } diff --git a/synd-contracts/src/staking/GasMeter.sol b/synd-contracts/src/staking/GasMeter.sol new file mode 100644 index 000000000..656639dd1 --- /dev/null +++ b/synd-contracts/src/staking/GasMeter.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {EpochTracker} from "./EpochTracker.sol"; +import { + ReentrancyGuardTransientUpgradeable +} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardTransientUpgradeable.sol"; + +struct GasMeterStorage { + /// @notice Mapping of epoch to gas data + mapping(uint256 epoch => mapping(address chainAddress => uint256 gasUsed)) gasUsed; +} + +/// @title GasMeter +/// @notice Tracks gas usage for sequencing chains +/// @dev This contract is used to track gas usage for sequencing chains per epoch +contract GasMeter is + Initializable, + OwnableUpgradeable, + UUPSUpgradeable, + ReentrancyGuardTransientUpgradeable, + EpochTracker +{ + uint256 public constant VERSION = 1_000_000; // 1.0.0 + + /*////////////////////////////////////////////////////////////// + STORAGE + //////////////////////////////////////////////////////////////*/ + + /// @notice Storage slot for GasMeter-specific data + /// @dev Generated using: cast index-erc7201 syndicate.storage.GasMeter + bytes32 public constant GAS_METER_STORAGE_LOCATION = + 0xfc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900; + + /// @notice Internal function to access the ERC-7201 namespaced storage + /// @dev Uses inline assembly to access the specific storage slot for this contract's data + /// @return $ Storage pointer to the GasMeterStorage struct + function _getGasMeterStorage() private pure returns (GasMeterStorage storage $) { + assembly { + $.slot := GAS_METER_STORAGE_LOCATION + } + } + + /// @notice Get the gas used for a given epoch and chain address + /// @param epoch The epoch to get the gas used for + /// @param chainAddress The address of the chain to get the gas used for + /// @return The gas used for the given epoch and chain address + function gasUsed(uint256 epoch, address chainAddress) public view returns (uint256) { + GasMeterStorage storage $ = _getGasMeterStorage(); + return $.gasUsed[epoch][chainAddress]; + } + + constructor() { + _disableInitializers(); + } + + /// @notice Initialize the GasMeter contract + /// @dev Initializes the GasMeter contract and sets the owner + function initialize() external initializer { + __Ownable_init(msg.sender); + } + + /// @notice Meter a call and track the gas used + /// @dev Meters the gas used for a call and tracks it in the gas used mapping + /// @param meteredCall The call to track gas for + function meterCall(bytes calldata meteredCall) public nonReentrant { + uint256 startGas = gasleft(); + (bool success, bytes memory result) = address(msg.sender).call(meteredCall); + if (!success) { + assembly { + revert(add(result, 32), mload(result)) + } + } + + uint256 gasPrice = tx.gasprice; + + // WORKAROUND: estimate gas will give a wrong value when called with tx.gasprice 0 + // Use minimum price of 1 wei to ensure calculation doesn't fail + if (gasPrice == 0) { + gasPrice = 1; + } + _getGasMeterStorage().gasUsed[getCurrentEpoch()][msg.sender] += (startGas - gasleft()) * gasPrice; + } + + /// @notice Authorizes the upgrade of the GasMeter contract + /// @dev Authorizes the upgrade of the GasMeter contract only if the caller is the owner + /// @param newImplementation The address of the new implementation contract + function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} +} diff --git a/synd-contracts/src/staking/RelayerMocks.sol b/synd-contracts/src/staking/RelayerMocks.sol index 7e76a6f3b..8f8ef20dd 100644 --- a/synd-contracts/src/staking/RelayerMocks.sol +++ b/synd-contracts/src/staking/RelayerMocks.sol @@ -8,7 +8,7 @@ contract RelayerMocks { emit Deposit(msg.sender, epochIndex, msg.value); } - function getCurrentEpoch() external view returns (uint256) { + function getCurrentEpoch() external pure returns (uint256) { return 1; } } diff --git a/synd-contracts/src/token/AccessControlledERC20.sol b/synd-contracts/src/token/AccessControlledERC20.sol index e926d5a7b..c10f543d2 100644 --- a/synd-contracts/src/token/AccessControlledERC20.sol +++ b/synd-contracts/src/token/AccessControlledERC20.sol @@ -3,8 +3,6 @@ pragma solidity 0.8.28; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import {ERC20Permit, Nonces} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; -import {ERC20Votes} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; contract AccessControlledERC20 is ERC20, AccessControl { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); diff --git a/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol b/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol index 12a4db68e..2dd2d9600 100644 --- a/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol +++ b/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol @@ -23,7 +23,6 @@ contract TestnetSyndToken is ERC20, AccessControl, ERC20Permit, ERC20Votes { constructor(address defaultAdmin, address minter) ERC20("Testnet Syndicate", "TestnetSYND") ERC20Permit("Testnet Syndicate") - ERC20Votes() { if (defaultAdmin == address(0)) revert ZeroAddress(); if (minter == address(0)) revert ZeroAddress(); diff --git a/synd-contracts/src/upgrade/ENVIRONMENT.md b/synd-contracts/src/upgrade/ENVIRONMENT.md new file mode 100644 index 000000000..eb1ff635f --- /dev/null +++ b/synd-contracts/src/upgrade/ENVIRONMENT.md @@ -0,0 +1,155 @@ +# 🔧 Environment Variables Reference + +Complete reference for all environment variables used in deployment and upgrades. + +## Required Variables + +### Network Configuration + +```bash +# RPC endpoint for the target network +RPC_URL=https://your-rpc-endpoint + +# Your foundry account name (created with `cast wallet import`) +ACCOUNT=deployer + +# Your deployer address +DEV_PUB_ADDRESS=0xYourDeployerAddress +``` + +### Admin Configuration + +```bash +# Address that will own all contracts (receive DEFAULT_ADMIN_ROLE) +ADMIN_ADDRESS=0xYourAdminAddress +``` + +## Post-Deployment Variables + +After deploying, add these to your `.env`: + +```bash +# SyndicateFactory proxy address +FACTORY_ADDRESS=0xFactoryProxyAddress + +# GasAggregator proxy address (get with: cast call $FACTORY_ADDRESS "gasAggregator()(address)") +GAS_AGGREGATOR_ADDRESS=0xGasAggregatorProxyAddress +``` + +## Chain-Specific Variables + +### Creating Chains + +```bash +# User-provided nonce for deterministic chain ID generation (1, 2, 3, ...) +# The factory will compute the actual chain ID from this nonce +NONCE=1 + +# Optional: Custom permission module address +# If not set, deploys new AlwaysAllowedModule +PERMISSION_MODULE=0xYourPermissionModuleAddress +``` + +### Upgrading Chains + +```bash +# Address of the chain to upgrade +CHAIN_ADDRESS=0xSequencingChainProxyAddress +``` + +## Optional Variables + +### ArbConfigManager Deployment + +```bash +# Owner address for ArbConfigManager +OWNER_ADDRESS=0xOwnerAddress +``` + +--- + +## Example .env File + +```bash +# Network +RPC_URL=https://sepolia.base.org +ACCOUNT=deployer +DEV_PUB_ADDRESS=0x1234567890123456789012345678901234567890 + +# Admin +ADMIN_ADDRESS=0xabcdefabcdefabcdefabcdefabcdefabcdefabcd + +# Deployed Contracts (fill in after deployment) +FACTORY_ADDRESS= +GAS_AGGREGATOR_ADDRESS= + +# For operations +NONCE=1 +CHAIN_ADDRESS= + +# Optional +PERMISSION_MODULE= +OWNER_ADDRESS= +``` + +--- + +## Getting Addresses + +### After Factory Deployment + +```bash +# Get GasAggregator address +cast call $FACTORY_ADDRESS "gasAggregator()(address)" --rpc-url $RPC_URL + +# Get all chain IDs +cast call $FACTORY_ADDRESS "chainIDs()(uint256[])" --rpc-url $RPC_URL + +# Get specific chain address +cast call $FACTORY_ADDRESS "appchainContracts(uint256)(address)" 1 --rpc-url $RPC_URL + +# Get current implementation +cast call $FACTORY_ADDRESS "syndicateChainImpl()(address)" --rpc-url $RPC_URL +``` + +--- + +## Network-Specific Examples + +### Base Sepolia + +```bash +RPC_URL=https://sepolia.base.org +``` + +### Arbitrum Sepolia + +```bash +RPC_URL=https://sepolia-rollup.arbitrum.io/rpc +``` + +### Local Fork + +```bash +# Start anvil: anvil --fork-url https://sepolia.base.org +RPC_URL=http://localhost:8545 +``` + +--- + +## Security Notes + +🔒 **Never commit `.env` to git!** + +Add to `.gitignore`: +``` +.env +.env.local +.env.*.local +``` + +🔐 **Use different accounts for different networks:** +- Testnet: Can use less secure key +- Mainnet: Use hardware wallet or secure keystore + +🛡️ **For production, use multi-sig for ADMIN_ADDRESS** diff --git a/synd-contracts/src/upgrade/QUICK_START.md b/synd-contracts/src/upgrade/QUICK_START.md new file mode 100644 index 000000000..86bf3d4ef --- /dev/null +++ b/synd-contracts/src/upgrade/QUICK_START.md @@ -0,0 +1,127 @@ +# ⚡ Quick Start Guide + +Get up and running in 5 minutes! + +## Step 1: Setup (2 minutes) + +```bash +# Copy environment template +cp .env.example .env + +# Edit .env and fill in: +# - RPC_URL +# - ACCOUNT (your foundry account name) +# - DEV_PUB_ADDRESS +# - ADMIN_ADDRESS +``` + +## Step 2: Deploy (1 minute) + +```bash +# Preview addresses (optional) +make preview-factory + +# Deploy everything +make deploy-factory +``` + +**Save the Factory address to `.env`:** + +```bash +FACTORY_ADDRESS=0x... # From output +``` + +## Step 3: Save GasAggregator Address (30 seconds) + +The GasAggregator address will be in the deployment output from Step 2. + +```bash +# Add to .env +echo "GAS_AGGREGATOR_ADDRESS=0x..." >> .env # From deployment output +``` + +## Step 4: Create Your First Chain (1 minute) + +```bash +NONCE=1 make create-sequencing-chain +``` + +**Save the chain address to `.env`:** + +```bash +CHAIN_ADDRESS=0x... # From output +``` + +## Done! 🎉 + +You now have: + +- ✅ SyndicateFactory deployed +- ✅ GasAggregator deployed (automatic) +- ✅ Your first sequencing chain created + +--- + +## What's Next? + +### Create More Chains + +```bash +NONCE=2 make create-sequencing-chain +NONCE=3 make create-sequencing-chain +``` + +### When You Need to Upgrade + +```bash +# Always check storage first! +make storage-layout-check + +# Then upgrade +make upgrade-factory +make upgrade-sequencing-chain + +``` + +--- + +## Quick Reference + +```bash +# Deployment +make preview-factory # Preview addresses +make deploy-factory # Deploy everything +make deploy-arb-config # Deploy Arb config (optional) + +# Create chains +make create-sequencing-chain # Create new chain + +# Upgrades +make storage-layout-check # ⚠️ ALWAYS run first! +make upgrade-factory # Upgrade factory +make upgrade-sequencing-chain # Upgrade chain +``` + +--- + +## Need Help? + +📖 **Detailed guides:** + +- [README.md](./README.md) - Complete guide with examples +- [ENVIRONMENT.md](./ENVIRONMENT.md) - Environment variables +- [UPGRADE_SAFETY.md](./UPGRADE_SAFETY.md) - Safety best practices + +🐛 **Troubleshooting:** See [README.md](./README.md#-troubleshooting) + +--- + +**Pro tip:** Test everything on a local fork first! + +```bash +# Terminal 1 +anvil --fork-url $RPC_URL + +# Terminal 2 +RPC_URL=http://localhost:8545 make deploy-factory +``` diff --git a/synd-contracts/src/upgrade/README.md b/synd-contracts/src/upgrade/README.md new file mode 100644 index 000000000..b771a4188 --- /dev/null +++ b/synd-contracts/src/upgrade/README.md @@ -0,0 +1,403 @@ +# 🚀 Deployment & Upgrade Guide + +Quick and easy guide for deploying and upgrading Syndicate Appchains contracts. + +## 📋 Table of Contents + +- [Quick Start](#-quick-start) +- [Deployment](#-deployment) +- [Creating Chains](#-creating-chains) +- [Upgrades](#-upgrades) +- [Verification](#-verification) +- [Troubleshooting](#-troubleshooting) + +--- + +## ⚡ Quick Start + +### First Time Setup + +```bash +# 1. Copy environment template +cp .env.example .env + +# 2. Edit .env with your values +# RPC_URL, ACCOUNT, DEV_PUB_ADDRESS, ADMIN_ADDRESS + +# 3. Preview deployment addresses +make preview-factory + +# 4. Deploy (this also deploys GasAggregator!) +make deploy-factory +``` + +### After Deployment + +```bash +# Create your first sequencing chain +NONCE=1 make create-sequencing-chain + +# When you need to upgrade +make storage-layout-check +make upgrade-factory +``` + +--- + +## 🌍 Deployment + +### What Gets Deployed? + +Running `make deploy-factory` deploys: + +``` +✅ SyndicateFactory (proxy + implementation) + ├── ✅ GasAggregator (non-upgradeable contract) - AUTOMATIC! + ├── ✅ SyndicateSequencingChain implementation - AUTOMATIC! + └── ✅ MinimalUUPSStub - AUTOMATIC! +``` + +You only manually deploy: +- **SyndicateFactory** (everything else is automatic) +- **ArbConfigManager** (optional, only if using Arbitrum) + +**Note:** GasAggregator is no longer upgradeable (changed from UUPS proxy pattern to simple contract deployment) + +### Step 1: Configure Environment + +Create `.env` file: + +```bash +# Network +RPC_URL=https://your-rpc-url +ACCOUNT=deployer # Your foundry account name +DEV_PUB_ADDRESS=0xYourAddress + +# Admin (will own all contracts) +ADMIN_ADDRESS=0xAdminAddress +``` + +### Step 2: Preview Addresses + +```bash +make preview-factory +``` + +Shows you what addresses will be used (same on all chains due to CREATE2). + +### Step 3: Deploy Factory + +```bash +make deploy-factory +``` + +**Output:** +``` +Implementation deployed to: 0x1234... +SyndicateFactory proxy deployed to: 0x5678... +✅ Deterministic deployment successful! +``` + +### Step 4: Save Addresses + +Add to your `.env`: + +```bash +FACTORY_ADDRESS=0x5678... # From output above +GAS_AGGREGATOR_ADDRESS=0xabcd... # From deployment output +``` + +### Optional: Deploy ArbConfigManager + +Only if using Arbitrum as settlement chain: + +```bash +OWNER_ADDRESS=0xYourOwner make deploy-arb-config +``` + +--- + +## 🔗 Creating Chains + +### Create First Chain + +```bash +# Set nonce and create (factory will compute deterministic chain ID) +NONCE=1 make create-sequencing-chain +``` + +**What you'll see:** +``` +=== Creating Sequencing Chain === +Factory: 0x5678... +Nonce: 1 +Admin: 0xAdmin... + +No PERMISSION_MODULE set, deploying AlwaysAllowedModule... +AlwaysAllowedModule deployed: 0xabcd... + +=== Sequencing Chain Created === +Chain Address: 0x9abc... +Chain ID: 1 + +Save this address to your .env file: +CHAIN_ADDRESS=0x9abc... +``` + +### Create More Chains + +```bash +# Create multiple chains with different nonces +NONCE=2 make create-sequencing-chain +NONCE=3 make create-sequencing-chain +``` + +### Using Custom Permission Module + +```bash +# Use your own permission module +NONCE=4 PERMISSION_MODULE=0xYourModule make create-sequencing-chain +``` + +--- + +## 🔄 Upgrades + +### ⚠️ Before Every Upgrade + +**ALWAYS run storage layout validation:** + +```bash +make storage-layout-check +``` + +**Expected output:** +``` +✅ SyndicateFactory: Storage layout unchanged +✅ SyndicateSequencingChain: Storage layout unchanged +✅ All storage layouts are safe for upgrades +``` + +**Note:** GasAggregator is no longer checked as it's not upgradeable. + +If you see `❌ STORAGE LAYOUT CHANGED`, **STOP and review changes!** + +### Upgrade SyndicateFactory + +```bash +make upgrade-factory +``` + +**What happens:** +1. Deploys new implementation +2. Upgrades proxy to new implementation +3. Verifies upgrade succeeded + +**Output:** +``` +=== Upgrading SyndicateFactory === +Deploying new implementation... +New implementation: 0xdef0... + +Upgrading proxy to new implementation... + +=== Upgrade Complete === +Proxy: 0x5678... +Implementation: 0xdef0... +Version: 1.1.0 +``` + +### ~~Upgrade GasAggregator~~ (No Longer Supported) + +**GasAggregator is non-upgradeable.** If you need to upgrade it, you must: +1. Deploy a new GasAggregator contract +2. Update all references to point to the new contract +3. Migrate tracked chains to the new instance + +This is intentional to keep the gas aggregation logic simple and immutable. + +### Upgrade Sequencing Chain + +```bash +# Set which chain to upgrade +CHAIN_ADDRESS=0x9abc... make upgrade-sequencing-chain +``` + +**What happens:** +1. Deploys new implementation +2. Sets it as default in factory (for new chains) +3. Upgrades the specific chain + +**Output:** +``` +=== Upgrading SyndicateSequencingChain === +Deploying new implementation... +Setting as default implementation in factory... + +Upgrading chain proxy... + +=== Upgrade Complete === +Chain proxy: 0x9abc... +Implementation: 0x5678... +Version: 1.1.0 + +New chains created via factory will use this implementation +``` + +### Upgrade All Chains + +```bash +# Get all chain IDs +cast call $FACTORY_ADDRESS "chainIDs()(uint256[])" --rpc-url $RPC_URL + +# Upgrade each chain +for id in 1 2 3; do + CHAIN=$(cast call $FACTORY_ADDRESS "appchainContracts(uint256)(address)" $id --rpc-url $RPC_URL) + CHAIN_ADDRESS=$CHAIN make upgrade-sequencing-chain +done +``` + +--- + +## ✅ Verification + +### Check Contract Versions + +```bash +# Factory version +cast call $FACTORY_ADDRESS "version()(string)" --rpc-url $RPC_URL + +# GasAggregator version (constant) +cast call $GAS_AGGREGATOR_ADDRESS "VERSION()(uint256)" --rpc-url $RPC_URL + +# Chain version +cast call $CHAIN_ADDRESS "version()(string)" --rpc-url $RPC_URL +``` + +### Check Admin Roles + +```bash +# Check if address has admin role +cast call $FACTORY_ADDRESS \ + "hasRole(bytes32,address)(bool)" \ + $(cast keccak "DEFAULT_ADMIN_ROLE()") \ + $ADMIN_ADDRESS \ + --rpc-url $RPC_URL +``` + +### Get Contract Addresses + +```bash +# Current sequencing chain implementation +cast call $FACTORY_ADDRESS "syndicateChainImpl()(address)" --rpc-url $RPC_URL + +# Check if chain ID is used +cast call $FACTORY_ADDRESS "isChainIdUsed(uint256)(bool)" 1 --rpc-url $RPC_URL + +# Compute sequencing chain address +cast call $FACTORY_ADDRESS "computeSequencingChainAddress(uint256)(address)" 1 --rpc-url $RPC_URL +``` + +--- + +## 🐛 Troubleshooting + +### "Storage layout changed" Error + +**Cause:** Storage layout has changed + +**Fix:** +1. Review what changed +2. If safe (adding at end), update baseline: + ```bash + forge inspect SyndicateFactory storageLayout > .storage-layouts/SyndicateFactory.json + ``` +3. If unsafe, revert code changes + +### "Unauthorized" Error + +**Cause:** You don't have required role + +**Fix:** Use the admin account that deployed the contracts + +### "Contract already deployed" + +**Cause:** Using deterministic deployment, address already exists + +**Fix:** This is normal! The script will use the existing deployment + +### Upgrade Fails Silently + +**Cause:** Need more verbose output + +**Fix:** Add `-vvvv` flag: +```bash +forge script script/upgrade/UpgradeContracts.s.sol:UpgradeSyndicateFactory \ + --rpc-url $RPC_URL \ + --broadcast \ + -vvvv +``` + +--- + +## 🧪 Testing Locally + +Test everything on a local fork before mainnet: + +```bash +# Terminal 1: Start local fork +anvil --fork-url $RPC_URL + +# Terminal 2: Deploy and test +export RPC_URL=http://localhost:8545 + +make deploy-factory +APPCHAIN_ID=1 make create-sequencing-chain +make upgrade-factory +``` + +--- + +## 📚 Available Commands + +```bash +# Deployment +make preview-factory # Preview deployment addresses +make deploy-factory # Deploy SyndicateFactory +make deploy-arb-config # Deploy ArbConfigManager + +# Create Chains +make create-sequencing-chain # Create new sequencing chain + +# Upgrades +make upgrade-factory # Upgrade SyndicateFactory +make upgrade-sequencing-chain # Upgrade sequencing chain + +# Validation +make storage-layout-check # Validate storage layouts +``` + +--- + +## 🔐 Security Best Practices + +✅ Always run `make storage-layout-check` before upgrades +✅ Test on local fork with Anvil first +✅ Deploy to testnet before mainnet +✅ Use multi-sig for admin operations on mainnet +✅ Monitor contracts after upgrades +✅ Have rollback plan ready + +--- + +## 📖 Additional Resources + +- [Quick Start Guide](./QUICK_START.md) - Get started in 5 minutes +- [Environment Variables](./ENVIRONMENT.md) - All configuration options +- [Upgrade Safety](./UPGRADE_SAFETY.md) - Storage layout and safety checks +- [Upgrade Checklist](./UPGRADE_CHECKLIST.md) - Pre-upgrade safety checklist +- [Risa Testnet Deployment](./RISA_DEPLOYMENT.md) - Risa-specific deployment guide + +--- + +Need help? Check the detailed guides in `docs/upgrade/` folder! diff --git a/synd-contracts/src/upgrade/RISA_DEPLOYMENT.md b/synd-contracts/src/upgrade/RISA_DEPLOYMENT.md new file mode 100644 index 000000000..59664fb9e --- /dev/null +++ b/synd-contracts/src/upgrade/RISA_DEPLOYMENT.md @@ -0,0 +1,388 @@ +# 🚀 Risa Testnet Deployment Guide + +Step-by-step guide to deploy Syndicate Appchains contracts to Risa testnet. + +## Prerequisites + +- [ ] Foundry installed and updated (`foundryup`) +- [ ] Access to Risa testnet RPC +- [ ] Deployer wallet with testnet funds +- [ ] Admin wallet address decided + +--- + +## Step 1: Environment Setup (5 minutes) + +### 1.1 Create/Update .env File + +```bash +# Copy template if you don't have .env +cp .env.example .env + +# Edit .env +nano .env # or use your preferred editor +``` + +### 1.2 Configure .env for Risa + +```bash +# Network Configuration +RPC_URL=risa_devnet # Use the foundry.toml alias +RISA_DEVNET_RPC_URL=https://your-risa-rpc-url # Your actual Risa RPC endpoint + +# Account Configuration +ACCOUNT=deployer # Your foundry account name +DEV_PUB_ADDRESS=0xYourDeployerAddress # Your deployer public address + +# Admin Configuration +ADMIN_ADDRESS=0xYourAdminAddress # Who will own the contracts + +# These will be filled in after deployment +FACTORY_ADDRESS= +GAS_AGGREGATOR_ADDRESS= +``` + +### 1.3 Set Up Deployer Account + +If you haven't created a foundry account yet: + +```bash +# Import your private key (interactive) +cast wallet import deployer --interactive + +# Verify it's imported +cast wallet list + +# Check your balance on Risa +cast balance $DEV_PUB_ADDRESS --rpc-url risa_devnet +``` + +**⚠️ Make sure you have enough testnet tokens for deployment!** + +--- + +## Step 2: Preview Deployment (1 minute) + +Preview what addresses will be deployed (deterministic): + +```bash +make preview-factory +``` + +**Output:** +``` +=== Address Preview === +Implementation will deploy to: 0x1234... +Proxy will deploy to: 0x5678... +===================== +``` + +**✅ These addresses will be the SAME on all chains!** + +--- + +## Step 3: Deploy SyndicateFactory (2 minutes) + +Deploy the factory (this also auto-deploys GasAggregator): + +```bash +make deploy-factory +``` + +**What happens:** +1. ✅ Deploys SyndicateFactory implementation +2. ✅ Deploys SyndicateFactory proxy +3. ✅ Initializes factory with your admin +4. ✅ **Auto-deploys GasAggregator** (proxy + implementation) +5. ✅ **Auto-deploys SyndicateSequencingChain** implementation +6. ✅ **Auto-deploys MinimalUUPSStub** + +**Expected Output:** +``` +Implementation deployed to: 0x1234567890... +SyndicateFactory proxy deployed to: 0xabcdef1234... +Deterministic deployment successful! +SyndicateFactory address (consistent across all chains): 0xabcdef1234... +``` + +**⚠️ Save the Factory proxy address!** + +--- + +## Step 4: Save Deployed Addresses (1 minute) + +### 4.1 Add Factory Address to .env + +```bash +# Add to .env file +echo "FACTORY_ADDRESS=0xYourFactoryProxyAddress" >> .env +``` + +### 4.2 Get GasAggregator Address + +```bash +# Query factory for GasAggregator address +cast call $FACTORY_ADDRESS "gasAggregator()(address)" --rpc-url risa_devnet +``` + +**Output:** `0x...` (the GasAggregator proxy address) + +```bash +# Add to .env file +echo "GAS_AGGREGATOR_ADDRESS=0xYourGasAggregatorAddress" >> .env +``` + +### 4.3 Verify Your .env + +Your `.env` should now have: +```bash +RPC_URL=risa_devnet +RISA_DEVNET_RPC_URL=https://... +ACCOUNT=deployer +DEV_PUB_ADDRESS=0x... +ADMIN_ADDRESS=0x... +FACTORY_ADDRESS=0x... # ✅ Added +GAS_AGGREGATOR_ADDRESS=0x... # ✅ Added +``` + +--- + +## Step 5: Verify Deployment (2 minutes) + +### 5.1 Check Factory Version + +```bash +cast call $FACTORY_ADDRESS "version()(string)" --rpc-url risa_devnet +``` + +**Expected:** `1.0.0` (or current version) + +### 5.2 Check GasAggregator Version + +```bash +cast call $GAS_AGGREGATOR_ADDRESS "version()(string)" --rpc-url risa_devnet +``` + +**Expected:** `1.0.0` (or current version) + +### 5.3 Check Admin Role + +```bash +# Get DEFAULT_ADMIN_ROLE hash +DEFAULT_ADMIN_ROLE=$(cast keccak "DEFAULT_ADMIN_ROLE()") + +# Check if your admin has the role +cast call $FACTORY_ADDRESS \ + "hasRole(bytes32,address)(bool)" \ + $DEFAULT_ADMIN_ROLE \ + $ADMIN_ADDRESS \ + --rpc-url risa_devnet +``` + +**Expected:** `true` + +### 5.4 Check Factory State + +```bash +# Get current implementation +cast call $FACTORY_ADDRESS "syndicateChainImpl()(address)" --rpc-url risa_devnet + +# Check factory is not paused +cast call $FACTORY_ADDRESS "paused()(bool)" --rpc-url risa_devnet +``` + +**Expected:** Address and `false` + +--- + +## Step 6: Create Your First Sequencing Chain (3 minutes) + +### 6.1 Create Chain + +```bash +# Create chain with nonce 1 +NONCE=1 make create-sequencing-chain +``` + +**What happens:** +1. Checks if PERMISSION_MODULE is set +2. If not, deploys new AlwaysAllowedModule +3. Calls factory.createSyndicateSequencingChain(nonce, admin, module) +4. Returns chain address and computed chain ID + +**Expected Output:** +``` +=== Creating Sequencing Chain === +Factory: 0xabcdef... +Nonce: 1 +Admin: 0xAdmin... + +No PERMISSION_MODULE set, deploying AlwaysAllowedModule... +AlwaysAllowedModule deployed: 0x1234... + +=== Sequencing Chain Created === +Chain Address: 0x9abc... +Chain ID: 123456789 + +Save this address to your .env file: +CHAIN_ADDRESS=0x9abc... +``` + +### 6.2 Save Chain Address + +```bash +# Add to .env +echo "CHAIN_ADDRESS=0xYourChainAddress" >> .env +``` + +### 6.3 Verify Chain + +```bash +# Check chain version +cast call $CHAIN_ADDRESS "version()(string)" --rpc-url risa_devnet + +# Check chain appchainId +cast call $CHAIN_ADDRESS "appchainId()(uint256)" --rpc-url risa_devnet + +# Check chain owner +cast call $CHAIN_ADDRESS "owner()(address)" --rpc-url risa_devnet +``` + +--- + +## Step 7: Create More Chains (Optional) + +```bash +# Create additional chains with different nonces +NONCE=2 make create-sequencing-chain +NONCE=3 make create-sequencing-chain +NONCE=4 make create-sequencing-chain +``` + +**Note:** Each nonce produces a different chain ID deterministically! + +--- + +## Step 8: Document Your Deployment + +Create a deployment record: + +```bash +cat > deployment-risa.txt << EOF +=== Risa Testnet Deployment === +Date: $(date) +Network: Risa Devnet +Deployer: $DEV_PUB_ADDRESS +Admin: $ADMIN_ADDRESS + +Deployed Contracts: +- SyndicateFactory: $FACTORY_ADDRESS +- GasAggregator: $GAS_AGGREGATOR_ADDRESS +- Chain #1: $CHAIN_ADDRESS + +Block Explorer: +- Factory: https://risa-explorer.io/address/$FACTORY_ADDRESS +- GasAggregator: https://risa-explorer.io/address/$GAS_AGGREGATOR_ADDRESS +- Chain #1: https://risa-explorer.io/address/$CHAIN_ADDRESS +EOF + +cat deployment-risa.txt +``` + +--- + +## Verification Checklist + +After deployment, verify: + +- [ ] Factory deployed and initialized +- [ ] GasAggregator deployed and linked to factory +- [ ] Admin role assigned correctly +- [ ] Factory not paused +- [ ] Can create sequencing chains +- [ ] Chains have correct admin +- [ ] All addresses saved to `.env` +- [ ] Deployment documented + +--- + +## Quick Reference - All Commands + +```bash +# 1. Setup +cp .env.example .env +# Edit .env with your values + +# 2. Import account (if needed) +cast wallet import deployer --interactive + +# 3. Check balance +cast balance $DEV_PUB_ADDRESS --rpc-url risa_devnet + +# 4. Preview +make preview-factory + +# 5. Deploy +make deploy-factory + +# 6. Get addresses +cast call $FACTORY_ADDRESS "gasAggregator()(address)" --rpc-url risa_devnet + +# 7. Create chain +NONCE=1 make create-sequencing-chain + +# 8. Verify +cast call $FACTORY_ADDRESS "version()(string)" --rpc-url risa_devnet +``` + +--- + +## Troubleshooting + +### "Insufficient funds for gas" +**Solution:** Get more testnet tokens for your deployer address + +### "Deterministic deployment proxy not found" +**Solution:** Deploy the proxy first: +```bash +# Check if it exists +cast code 0x4e59b44847b379578588920cA78FbF26c0B4956C --rpc-url risa_devnet + +# If empty, you need to deploy it (contact team for instructions) +``` + +### "Transaction reverted" +**Solution:** Check with verbose output: +```bash +make deploy-factory -vvvv +``` + +### "Contract already deployed" +**Solution:** This is OK! Deterministic deployment found existing contract + +### "RPC_URL not set" +**Solution:** Make sure `.env` has `RPC_URL=risa_devnet` and `RISA_DEVNET_RPC_URL=https://...` + +--- + +## Next Steps + +After successful deployment: + +1. **Share addresses** with your team +2. **Add chains to GasAggregator** tracking (if needed) +3. **Test transaction processing** on your chains +4. **Set up monitoring** for your contracts +5. **Document any custom configurations** + +--- + +## Need Help? + +- 📖 [Main Guide](./README.md) - Detailed documentation +- 🔧 [Environment Variables](./ENVIRONMENT.md) - All config options +- 🛡️ [Upgrade Safety](./UPGRADE_SAFETY.md) - When you need to upgrade + +--- + +**🎉 Congratulations! You've deployed to Risa testnet!** diff --git a/synd-contracts/src/upgrade/UPGRADE_CHECKLIST.md b/synd-contracts/src/upgrade/UPGRADE_CHECKLIST.md new file mode 100644 index 000000000..01b386bfb --- /dev/null +++ b/synd-contracts/src/upgrade/UPGRADE_CHECKLIST.md @@ -0,0 +1,203 @@ +# Contract Upgrade Safety Checklist + +This checklist ensures safe upgrades of UUPS-based contracts in the Syndicate system, particularly `SyndicateFactory` and `SyndicateSequencingChain`. + +## Storage Layout Safety + +### Storage Variables - CRITICAL +**These changes CAN break upgrades:** + +- [ ] **DO NOT** reorder existing storage variables +- [ ] **DO NOT** change the type of existing storage variables +- [ ] **DO NOT** remove existing storage variables +- [ ] **DO NOT** insert new variables between existing ones + +**Safe storage practices:** +- [ ] New storage variables can be added **at the end** of the contract +- [ ] Use namespaced storage (ERC-7201) for new variables when possible +- [ ] Run storage layout tests before and after changes + +### Safe Elements - NO STORAGE IMPACT +**These changes are SAFE and do not affect storage:** + +- [ ] **Events** - Can be added, modified, or removed freely +- [ ] **Error definitions** - Can be added, modified, or removed freely +- [ ] **Modifiers** - Can be added, modified, or removed freely +- [ ] **Functions** - Can be added, modified, or removed freely +- [ ] **Constants** - Do not use storage slots, safe to modify +- [ ] **Immutable variables** - Set in constructor, safe to add/modify +- [ ] **View/Pure functions** - No state changes, completely safe + +## Pre-Upgrade Testing + +### Storage Compatibility Tests +- [ ] Run `forge inspect ContractName storageLayout` before changes +- [ ] Run `forge inspect ContractName storageLayout` after changes +- [ ] Compare storage layouts to ensure no conflicts +- [ ] Run upgrade tests: `forge test --match-contract StorageUpgradeTest` +- [ ] Test storage preservation with actual proxy upgrade + +### Functional Testing +- [ ] All existing tests pass: `forge test` +- [ ] New functionality tests added and passing +- [ ] Integration tests verify end-to-end functionality +- [ ] Gas usage analysis for new features + +## Implementation Requirements + +### New Implementation Contract +- [ ] Implementation contract properly inherits from base contracts +- [ ] Constructor calls `_disableInitializers()` +- [ ] No constructor parameters (use initializer instead) +- [ ] `_authorizeUpgrade()` properly restricts upgrade access +- [ ] Version tracking updated if applicable + +### Factory Integration (SyndicateSequencingChain) +- [ ] New implementation set in factory via `setSyndicateSequencingChainImplementation` +- [ ] Factory admin approval for new implementation +- [ ] Decision: Make new implementation the default? + +## Upgrade Process + +### Pre-Deployment +- [ ] Deploy new implementation contract +- [ ] Verify implementation contract on block explorer +- [ ] Test upgrade on testnet first +- [ ] Prepare upgrade transaction data + +### Factory Upgrade (SyndicateFactory) +```solidity +// Admin calls upgradeToAndCall on proxy +factory.upgradeToAndCall(newImplementation, ""); +``` +- [ ] Verify admin has `DEFAULT_ADMIN_ROLE` +- [ ] Test upgrade call in simulation first +- [ ] Monitor upgrade transaction confirmation + +### Sequencing Chain Upgrade +```solidity +// Owner calls upgradeToAndCall on chain +sequencingChain.upgradeToAndCall(newImplementation, ""); +``` +- [ ] Verify caller is chain owner +- [ ] Implementation should be set in factory first (best practice) + +## Storage Layout Examples + +### Traditional Storage (Current Pattern) +```solidity +contract SyndicateSequencingChain { + // ❌ NEVER change order of these variables + uint256 public appchainId; // Slot 0 + address public emissionsReceiver; // Slot 1 + address public factory; // Slot 2 + bool public allowGasTrackingBanOnUpgrade; // Slot 3 + + // ✅ New variables can be added here + uint256 public newVariable; // Slot 4 - SAFE +} +``` + +### Namespaced Storage (Recommended for New Variables) +```solidity +/// @custom:storage-location erc7201:my.new.namespace +struct MyNewStorage { + uint256 newField1; + bool newField2; + mapping(address => uint256) newMapping; +} + +contract UpgradedContract { + // Deterministic storage location + bytes32 constant MY_STORAGE_LOCATION = 0x...; + + function _getMyStorage() private pure returns (MyNewStorage storage $) { + assembly { $.slot := MY_STORAGE_LOCATION } + } +} +``` + +## Common Pitfalls + +### DANGEROUS - Will Break Upgrades +```solidity +// Before upgrade +uint256 public appchainId; +address public factory; + +// After upgrade - DON'T DO THIS +address public factory; // DANGEROUS: Reordered! +uint256 public appchainId; // DANGEROUS: Will corrupt storage +``` + +### DANGEROUS - Type Changes +```solidity +// Before +uint256 public myValue; + +// After - DON'T DO THIS +uint128 public myValue; // DANGEROUS: Type change will corrupt storage +``` + +### SAFE - Adding New Variables +```solidity +// Before +uint256 public existingVar; + +// After - This is SAFE +uint256 public existingVar; +uint256 public newVar; // SAFE: Added at end +``` + +## Verification Steps + +### Post-Upgrade Validation +- [ ] Verify storage values preserved (appchainId, factory, etc.) +- [ ] Test all existing functionality still works +- [ ] Test new functionality works as expected +- [ ] Verify events are emitted correctly +- [ ] Check gas usage patterns +- [ ] Validate access control still functions + +### Monitoring +- [ ] Monitor contract behavior for 24-48 hours +- [ ] Watch for unexpected reverts or errors +- [ ] Verify gas tracking continues working +- [ ] Monitor emission calculations if applicable + +## Reference Documentation + +- [OpenZeppelin UUPS Guide](https://docs.openzeppelin.com/upgrades-plugins/1.x/proxies#uups-proxies) +- [ERC-7201 Namespaced Storage](https://eips.ethereum.org/EIPS/eip-7201) +- [Storage Layout Tests](./test/upgrade/StorageUpgradeTest.t.sol) +- [Factory Implementation Management](./src/factory/SyndicateFactory.sol#L463-L500) + +## Emergency Procedures + +### If Upgrade Fails +- [ ] Do not panic - proxy is still on old implementation +- [ ] Investigate failure reason from transaction logs +- [ ] Fix implementation contract issues +- [ ] Deploy new fixed implementation +- [ ] Retry upgrade with fixed implementation + +### If Storage Corruption Detected +- [ ] **STOP** - Do not perform any more state changes +- [ ] Assess extent of corruption +- [ ] If possible, upgrade to implementation that fixes corruption +- [ ] Consider emergency pause mechanisms if available +- [ ] Contact development team immediately + +## Final Checklist + +Before any upgrade: +- [ ] All storage layout checks passed +- [ ] All tests passing on new implementation +- [ ] Testnet upgrade successful +- [ ] Implementation contract deployed and verified +- [ ] Upgrade transaction prepared and tested +- [ ] Monitoring systems ready +- [ ] Emergency procedures reviewed +- [ ] Team notification sent + +**Remember: Upgrades are irreversible. When in doubt, don't upgrade.** \ No newline at end of file diff --git a/synd-contracts/src/upgrade/UPGRADE_SAFETY.md b/synd-contracts/src/upgrade/UPGRADE_SAFETY.md new file mode 100644 index 000000000..88af15199 --- /dev/null +++ b/synd-contracts/src/upgrade/UPGRADE_SAFETY.md @@ -0,0 +1,413 @@ +# 🛡️ Upgrade Safety Guide + +Learn how to safely upgrade contracts without breaking storage. + +## ⚠️ Critical Rules + +### 1. ALWAYS Validate Storage Layout + +```bash +make storage-layout-check +``` + +Run this **BEFORE EVERY UPGRADE**. No exceptions. + +### 2. Understand Storage Layout + +Solidity stores variables in **sequential slots**: + +```solidity +contract Example { + uint256 a; // slot 0 + address b; // slot 1 + mapping c; // slot 2 +} +``` + +--- + +## ✅ Safe Changes + +### Adding Variables at the End + +**✅ SAFE:** + +```solidity +// Before +contract Example { + uint256 a; + address b; +} + +// After - Adding at end +contract Example { + uint256 a; + address b; + uint256 c; // ✅ Safe - new slot +} +``` + +### Adding New Functions + +**✅ SAFE:** + +```solidity +// Adding new functions is always safe +function newFunction() external { } +``` + +### Modifying Function Logic + +**✅ SAFE:** + +```solidity +// Changing function code is safe +function existing() external { + // New logic here +} +``` + +--- + +## ❌ Dangerous Changes + +### Removing Variables + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; + address b; // ❌ Don't remove! + uint256 c; +} + +// After +contract Example { + uint256 a; + uint256 c; // ❌ Now in wrong slot! +} +``` + +### Reordering Variables + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; + address b; +} + +// After +contract Example { + address b; // ❌ Now in wrong slot! + uint256 a; // ❌ Now in wrong slot! +} +``` + +### Changing Variable Types + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; +} + +// After +contract Example { + address a; // ❌ Wrong type, same slot! +} +``` + +### Inserting Variables + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; + uint256 c; +} + +// After +contract Example { + uint256 a; + uint256 b; // ❌ Inserted, shifts everything! + uint256 c; // ❌ Now in wrong slot! +} +``` + +--- + +## 🔍 Storage Layout Validation + +### Automated Checking + +Our CI automatically checks storage layouts: + +```yaml +# .github/workflows/storage-layout.yaml +- Compares against baseline +- Fails if storage changed +- Prevents accidental corruption +``` + +### Manual Check + +```bash +make storage-layout-check +``` + +**Good output:** + +``` +✅ SyndicateFactory: Storage layout unchanged +✅ SyndicateSequencingChain: Storage layout unchanged +✅ All storage layouts are safe for upgrades +``` + +**Bad output:** + +``` +❌ STORAGE LAYOUT CHANGED: SyndicateFactory +This change could corrupt storage during upgrades! +``` + +### View Storage Layout + +```bash +# See current layout +forge inspect SyndicateFactory storageLayout + +# See specific contract +forge inspect SyndicateSequencingChain storageLayout +``` + +--- + +## 🏗️ Safe Upgrade Patterns + +### Pattern 1: Add at End + +```solidity +contract MyContract { + // Existing variables + uint256 public version; + address public admin; + + // ✅ Add new variables here + uint256 public newFeature; + mapping(address => uint256) public newMapping; +} +``` + +### Pattern 2: Use Namespaced Storage (ERC-7201) + +```solidity +// SyndicateSequencingChain uses this pattern +struct MyStorage { + uint256 newVar; + address newAddr; +} + +function _getStorage() private pure returns (MyStorage storage $) { + assembly { + $.slot := keccak256("my.namespace.storage") + } +} +``` + +### Pattern 3: Reserved Slots + +```solidity +contract Upgradeable { + uint256 public variable1; + uint256 public variable2; + + // Reserve slots for future use + uint256[50] private __gap; +} +``` + +--- + +## 🧪 Testing Upgrades + +### 1. Test on Local Fork + +```bash +# Terminal 1 +anvil --fork-url $RPC_URL + +# Terminal 2 +export RPC_URL=http://localhost:8545 + +# Deploy +make deploy-factory +APPCHAIN_ID=1 make create-sequencing-chain + +# Store some data +cast send $CHAIN_ADDRESS "someFunction()" --rpc-url $RPC_URL + +# Upgrade +make upgrade-sequencing-chain + +# Verify data intact +cast call $CHAIN_ADDRESS "someGetter()" --rpc-url $RPC_URL +``` + +### 2. Test Storage Persistence + +```solidity +// Before upgrade +uint256 before = chain.someValue(); + +// Upgrade +chain.upgradeToAndCall(newImpl, ""); + +// After upgrade +uint256 after = chain.someValue(); +assert(before == after); // Storage persisted! +``` + +### 3. Test New Functionality + +```solidity +// After upgrade +chain.newFunction(); // Should work +chain.oldFunction(); // Should still work +``` + +--- + +## 📊 Understanding Storage Slots + +### How Storage Works + +Each storage slot is 32 bytes (256 bits): + +``` +Slot 0: [32 bytes] uint256 or address (20 bytes) + padding +Slot 1: [32 bytes] next variable +Slot 2: [32 bytes] mapping location (key => slot) +``` + +### Packed Storage + +Small variables can share slots: + +```solidity +contract Packed { + uint128 a; // First 16 bytes of slot 0 + uint128 b; // Last 16 bytes of slot 0 + uint256 c; // Slot 1 +} +``` + +### Dynamic Types + +Arrays and mappings: + +```solidity +contract Dynamic { + uint256[] public array; // Slot 0: length + // Elements: keccak256(slot) + index + + mapping(uint => uint) public map; // Slot 1: empty + // Values: keccak256(key, slot) +} +``` + +--- + +## 🔄 Upgrade Process Checklist + +### Before Upgrade + +- [ ] Run `make storage-layout-check` +- [ ] Review all storage changes +- [ ] Test on local fork +- [ ] Test on testnet +- [ ] Document changes + +### During Upgrade + +- [ ] Deploy new implementation +- [ ] Verify implementation on explorer +- [ ] Call `upgradeToAndCall()` +- [ ] Wait for confirmations + +### After Upgrade + +- [ ] Verify storage intact +- [ ] Test existing functionality +- [ ] Test new functionality +- [ ] Monitor for issues + +--- + +## 🚨 Emergency Procedures + +### If Storage Corrupted + +**Prevention is key** - there's no safe recovery from storage corruption. + +If it happens: + +1. Pause contracts immediately +2. Assess damage extent +3. Consider redeployment with migration +4. Communicate with users + +### Rollback (Only if Safe) + +Rollback is only safe if: + +- Old implementation still available +- No storage layout changes +- No breaking changes in data + +```bash +# Redeploy old implementation +OLD_IMPL=0xPreviousImplementation + +# Downgrade +cast send $FACTORY_ADDRESS \ + "upgradeToAndCall(address,bytes)" \ + $OLD_IMPL \ + 0x \ + --rpc-url $RPC_URL +``` + +--- + +## 📚 Resources + +- [OpenZeppelin Upgrades Guide](https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable) +- [EIP-1967: Proxy Storage Slots](https://eips.ethereum.org/EIPS/eip-1967) +- [ERC-7201: Namespaced Storage](https://eips.ethereum.org/EIPS/eip-7201) + +--- + +## 💡 Key Takeaways + +✅ **Always validate storage layouts** +✅ **Only add variables at the end** +✅ **Test thoroughly before mainnet** +✅ **Use namespaced storage for complex contracts** +✅ **Document all storage changes** + +❌ **Never remove variables** +❌ **Never reorder variables** +❌ **Never change variable types** +❌ **Never insert variables in the middle** + +--- + +Remember: **Storage corruption is not recoverable.** Always validate before upgrading! diff --git a/synd-contracts/test/SequencingModuleCheckerTest.t.sol b/synd-contracts/test/SequencingModuleCheckerTest.t.sol index 66f3f53e2..2a94a04bc 100644 --- a/synd-contracts/test/SequencingModuleCheckerTest.t.sol +++ b/synd-contracts/test/SequencingModuleCheckerTest.t.sol @@ -1,63 +1,265 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.28; -import {SequencingModuleChecker, Ownable} from "src/SequencingModuleChecker.sol"; +import {SequencingModuleChecker} from "src/SequencingModuleChecker.sol"; +import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; +import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {DataTooLarge} from "@arbitrum/nitro-contracts/src/libraries/Error.sol"; import {Test} from "forge-std/Test.sol"; -contract SequencingModuleCheckerMock is SequencingModuleChecker {} +contract SequencingModuleCheckerMock is Initializable, SequencingModuleChecker { + function initialize(address admin, address _permissionRequirementModule) external initializer { + __SequencingModuleChecker_init(admin, _permissionRequirementModule); + } +} + +contract MockPermissionModule is IPermissionModule { + bool public shouldAllow; + + constructor(bool _shouldAllow) { + shouldAllow = _shouldAllow; + } + + function isAllowed(address, address, bytes memory) external view returns (bool) { + return shouldAllow; + } + + function setShouldAllow(bool _shouldAllow) external { + shouldAllow = _shouldAllow; + } +} contract SequencingModuleCheckerTest is Test { - SequencingModuleChecker public manager; + SequencingModuleCheckerMock public manager; RequireAndModule public masterModule; + MockPermissionModule public mockModule; address public admin; address public nonAdmin; + address public user1; + address public user2; + + event RequirementModuleUpdated(address indexed newModule); function setUp() public { - admin = msg.sender; + admin = address(this); nonAdmin = address(0x456); + user1 = address(0x123); + user2 = address(0x789); masterModule = new RequireAndModule(admin); + mockModule = new MockPermissionModule(true); manager = new SequencingModuleCheckerMock(); - manager.updateRequirementModule(address(masterModule)); - manager.transferOwnership(admin); + manager.initialize(admin, address(masterModule)); + } + + // Initialization Tests + function testInitialization() public { + assertEq(manager.owner(), admin); + assertEq(address(manager.permissionRequirementModule()), address(masterModule)); + } + + function testCannotInitializeTwice() public { + vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector)); + manager.initialize(admin, address(masterModule)); + } + + function testInitializeWithDifferentModule() public { + SequencingModuleCheckerMock newManager = new SequencingModuleCheckerMock(); + MockPermissionModule newMockModule = new MockPermissionModule(false); + + newManager.initialize(user1, address(newMockModule)); + + assertEq(newManager.owner(), user1); + assertEq(address(newManager.permissionRequirementModule()), address(newMockModule)); } - function testUpdateMasterModule() public { + // Permission Requirement Module Update Tests + function testUpdateRequirementModule() public { address newModule = address(new RequireAndModule(admin)); - vm.prank(admin); vm.expectEmit(true, false, false, false); - emit SequencingModuleChecker.RequirementModuleUpdated(newModule); + emit RequirementModuleUpdated(newModule); manager.updateRequirementModule(newModule); assertEq(address(manager.permissionRequirementModule()), newModule); } - function testUpdateMasterModuleNonAdmin() public { + function testUpdateRequirementModuleNonAdmin() public { address newModule = address(new RequireAndModule(admin)); vm.prank(nonAdmin); - vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, nonAdmin)); + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, nonAdmin)); manager.updateRequirementModule(newModule); } - function testNotInitialized() public { - SequencingModuleChecker uninitializedManager = new SequencingModuleCheckerMock(); + function testUpdateRequirementModuleToZeroAddress() public { + vm.expectEmit(true, false, false, false); + emit RequirementModuleUpdated(address(0)); + manager.updateRequirementModule(address(0)); + + assertEq(address(manager.permissionRequirementModule()), address(0)); + } + + function testUpdateRequirementModuleToAddressOne() public { + vm.expectEmit(true, false, false, false); + emit RequirementModuleUpdated(address(1)); + manager.updateRequirementModule(address(1)); + + assertEq(address(manager.permissionRequirementModule()), address(1)); + } + + // isAllowed Function Tests + function testIsAllowedWithAddressOne() public { + manager.updateRequirementModule(address(1)); + + bytes memory testData = abi.encode("test data"); + assertTrue(manager.isAllowed(user1, user2, testData)); + } - bytes memory emptyData = new bytes(0); + function testIsAllowedWithZeroAddress() public { + manager.updateRequirementModule(address(0)); + bytes memory testData = abi.encode("test data"); + // Zero address should cause a revert since there's no code there vm.expectRevert(); - uninitializedManager.isAllowed(address(0), address(0), emptyData); + manager.isAllowed(user1, user2, testData); + } + + function testIsAllowedWithMockModuleAllow() public { + manager.updateRequirementModule(address(mockModule)); + mockModule.setShouldAllow(true); + + bytes memory testData = abi.encode("test data"); + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + function testIsAllowedWithMockModuleDeny() public { + manager.updateRequirementModule(address(mockModule)); + mockModule.setShouldAllow(false); + + bytes memory testData = abi.encode("test data"); + assertFalse(manager.isAllowed(user1, user2, testData)); + } + + function testIsAllowedWithEmptyData() public { + manager.updateRequirementModule(address(1)); + + bytes memory emptyData = ""; + assertTrue(manager.isAllowed(user1, user2, emptyData)); } - function testIsAllowedAfterInitialization() public { - SequencingModuleChecker initializedManager = new SequencingModuleCheckerMock(); - initializedManager.updateRequirementModule(address(masterModule)); - initializedManager.transferOwnership(admin); + function testIsAllowedWithLargeData() public { + manager.updateRequirementModule(address(1)); + + bytes memory largeData = new bytes(199999); // Just under the limit + assertTrue(manager.isAllowed(user1, user2, largeData)); + } + + function testIsAllowedWithMaxSizeData() public { + manager.updateRequirementModule(address(1)); + + bytes memory maxSizeData = new bytes(200000); // Exactly the limit + assertTrue(manager.isAllowed(user1, user2, maxSizeData)); + } + + function testIsAllowedWithOversizedData() public { + manager.updateRequirementModule(address(1)); + + bytes memory oversizedData = new bytes(200001); // Over the limit + vm.expectRevert(abi.encodeWithSelector(DataTooLarge.selector, 200001, 200000)); + manager.isAllowed(user1, user2, oversizedData); + } + + function testIsAllowedWithRealModule() public { + RequireOrModule orModule = new RequireOrModule(admin); + manager.updateRequirementModule(address(orModule)); + + bytes memory testData = abi.encode("test"); + // RequireOrModule with no modules returns true by default + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + // Edge Cases and Error Conditions + function testMaxDataSizeConstant() public { + assertEq(manager.maxDataSize(), 200000); + } + + function testStorageLocation() public { + // Test that the storage location constant is correct + bytes32 expected = 0x5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500; + assertEq(manager.SEQUENCING_MODULE_STORAGE_LOCATION(), expected); + } + + function testPermissionRequirementModuleGetter() public { + assertEq(address(manager.permissionRequirementModule()), address(masterModule)); + + manager.updateRequirementModule(address(mockModule)); + assertEq(address(manager.permissionRequirementModule()), address(mockModule)); + } + + // Ownership Tests + function testOwnershipTransfer() public { + assertEq(manager.owner(), admin); + + manager.transferOwnership(user1); + assertEq(manager.owner(), user1); + } + + function testRenounceOwnership() public { + manager.renounceOwnership(); + assertEq(manager.owner(), address(0)); + } + + function testOnlyOwnerFunctions() public { + vm.prank(nonAdmin); + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, nonAdmin)); + manager.updateRequirementModule(address(mockModule)); + } + + // Integration Tests with Different Module Types + function testWithRequireAndModule() public { + RequireAndModule andModule = new RequireAndModule(admin); + manager.updateRequirementModule(address(andModule)); + + bytes memory testData = abi.encode("test"); + // Empty AndModule returns true (no checks to fail) + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + function testWithRequireOrModule() public { + RequireOrModule orModule = new RequireOrModule(admin); + manager.updateRequirementModule(address(orModule)); + + bytes memory testData = abi.encode("test"); + // Empty OrModule returns true by default + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + // Fuzz Tests + function testFuzzIsAllowedWithVariousAddresses(address proposer, address originator) public { + manager.updateRequirementModule(address(1)); + + bytes memory testData = abi.encode("test"); + assertTrue(manager.isAllowed(proposer, originator, testData)); + } + + function testFuzzDataSizeLimit(uint256 dataSize) public { + vm.assume(dataSize <= 200000); + manager.updateRequirementModule(address(1)); + + bytes memory testData = new bytes(dataSize); + assertTrue(manager.isAllowed(user1, user2, testData)); + } - bytes memory emptyData = new bytes(0); + function testFuzzDataSizeRevert(uint256 dataSize) public { + vm.assume(dataSize > 200000 && dataSize < 1000000); // Cap to prevent OOM + manager.updateRequirementModule(address(1)); - assertTrue(initializedManager.isAllowed(address(0), address(0), emptyData)); + bytes memory testData = new bytes(dataSize); + vm.expectRevert(abi.encodeWithSelector(DataTooLarge.selector, dataSize, 200000)); + manager.isAllowed(user1, user2, testData); } } diff --git a/synd-contracts/test/SyndicateSequencingChainTest.t.sol b/synd-contracts/test/SyndicateSequencingChainTest.t.sol index e54b0f794..a96d66c6d 100644 --- a/synd-contracts/test/SyndicateSequencingChainTest.t.sol +++ b/synd-contracts/test/SyndicateSequencingChainTest.t.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.28; import {SyndicateSequencingChain, SequencingModuleChecker} from "src/SyndicateSequencingChain.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; import { SyndicateSequencingChain, L2MessageType_SignedTx, @@ -11,6 +10,9 @@ import { import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; import {Test} from "forge-std/Test.sol"; import {Vm} from "forge-std/Vm.sol"; @@ -46,18 +48,27 @@ contract DirectMockModule is IPermissionModule { contract SyndicateSequencingChainTestSetUp is Test { SyndicateSequencingChain public chain; - SyndicateFactory public factory; RequireAndModule public permissionModule; RequireOrModule public permissionModuleAny; + address public admin; + address public gasMeter; - function deployFromFactory(RequireAndModule _permissionModule) public returns (SyndicateSequencingChain) { + function deployChain(RequireAndModule _permissionModule) public returns (SyndicateSequencingChain) { uint256 appchainId = 10042001; vm.startPrank(admin); - factory = new SyndicateFactory(admin); - (address chainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, _permissionModule, keccak256(abi.encodePacked("test-salt")) + + address gasMeterImpl = address(new GasMeter()); + gasMeter = address(new ERC1967Proxy(gasMeterImpl, abi.encodeCall(GasMeter.initialize, ()))); + + address sequencingChainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainAddress = address( + new ERC1967Proxy( + sequencingChainImpl, + abi.encodeCall(SyndicateSequencingChain.initialize, (admin, address(_permissionModule), appchainId)) + ) ); + vm.stopPrank(); return SyndicateSequencingChain(chainAddress); } @@ -69,7 +80,7 @@ contract SyndicateSequencingChainTestSetUp is Test { admin = address(0x1); permissionModule = new RequireAndModule(admin); permissionModuleAny = new RequireOrModule(admin); - chain = deployFromFactory(permissionModule); + chain = deployChain(permissionModule); } } @@ -126,7 +137,7 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { chain.processTransaction(validTxn); } - function testProcessTransaction() public { + function testProcessTransaction_blah() public { bytes memory data = abi.encode("raw transaction"); vm.startPrank(admin); @@ -163,8 +174,48 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { } function testConstructorWithZeroAppChainId() public { + address chainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainProxy = address(new ERC1967Proxy(chainImpl, bytes(""))); + vm.expectRevert("App chain ID cannot be 0"); - new SyndicateSequencingChain(0); + SyndicateSequencingChain(chainProxy).initialize(admin, address(permissionModule), 0); + } + + function testUpgradeBadguy() public { + address chainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainProxy = address(new ERC1967Proxy(chainImpl, bytes(""))); + SyndicateSequencingChain(chainProxy).initialize(admin, address(permissionModule), 1); + + address badguy = makeAddr("badguy"); + vm.prank(badguy); + vm.expectRevert(); + UUPSUpgradeable(chainProxy).upgradeToAndCall(chainImpl, bytes("")); + } + + function testUpgradeOwner() public { + address chainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainProxy = address(new ERC1967Proxy(chainImpl, bytes(""))); + SyndicateSequencingChain(chainProxy).initialize(admin, address(permissionModule), 1); + + vm.prank(admin); + UUPSUpgradeable(chainProxy).upgradeToAndCall(chainImpl, bytes("")); + } + + function testUpgradeAuthorizationOnlyOwner() public { + SyndicateSequencingChain newImpl = new SyndicateSequencingChain(gasMeter); + + // Deploy chain + RequireAndModule testPermissionModule = new RequireAndModule(admin); + + address chainAddr = address(deployChain(testPermissionModule)); + vm.stopPrank(); + + address nonOwner = makeAddr("nonOwner"); + + // Non-owner should not be able to perform upgrade + vm.prank(nonOwner); + vm.expectRevert(); // Ownable revert from _authorizeUpgrade + SyndicateSequencingChain(chainAddr).upgradeToAndCall(address(newImpl), ""); } function testProcessTransactionsBulkAllAllowed() public { @@ -238,7 +289,7 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { } function testProcessTransactionsBulkOnlyEmitsValidTransactionsAsEvents() public { - chain = deployFromFactory(RequireAndModule(address(new MockIsAllowedWithInvalidData()))); + chain = deployChain(RequireAndModule(address(new MockIsAllowedWithInvalidData()))); bytes[] memory txns = new bytes[](3); txns[0] = abi.encodePacked("valid"); @@ -302,72 +353,6 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { vm.expectRevert(SyndicateSequencingChain.NoTxData.selector); chain.processTransactionsBulk(emptyArray); } - - function testEmissionsReceiver() public { - // Test defaults to owner - assertEq(chain.getEmissionsReceiver(), admin); - - // Test only owner can set it - address newReceiver = address(0x999); - address nonOwner = address(0x123); - vm.prank(nonOwner); - vm.expectRevert(abi.encodeWithSignature("OwnableUnauthorizedAccount(address)", nonOwner)); - chain.setEmissionsReceiver(newReceiver); - - // Test owner can set it and it returns correct value with proper event - vm.prank(admin); - vm.expectEmit(true, true, false, false); - emit SyndicateSequencingChain.EmissionsReceiverUpdated(address(0), newReceiver); - chain.setEmissionsReceiver(newReceiver); - assertEq(chain.getEmissionsReceiver(), newReceiver); - - // falls back to owner if emissionsReceiver is set to address(0) - vm.prank(admin); - vm.expectEmit(true, true, false, false); - emit SyndicateSequencingChain.EmissionsReceiverUpdated(newReceiver, admin); - chain.setEmissionsReceiver(address(0)); - assertEq(chain.getEmissionsReceiver(), admin); - } - - function testTransferOwnershipEmitsEmissionsReceiverUpdated() public { - // Test that transferOwnership emits EmissionsReceiverUpdated when emissionsReceiver is not set - address newOwner = address(0x888); - - vm.prank(admin); - vm.expectEmit(true, true, false, false); - emit SyndicateSequencingChain.EmissionsReceiverUpdated(admin, newOwner); - chain.transferOwnership(newOwner); - - // Verify the emissions receiver changed - assertEq(chain.getEmissionsReceiver(), newOwner); - assertEq(chain.owner(), newOwner); - - // Test that transferOwnership does NOT emit EmissionsReceiverUpdated when emissionsReceiver is explicitly set - address explicitReceiver = address(0x777); - vm.prank(newOwner); - chain.setEmissionsReceiver(explicitReceiver); - - address anotherNewOwner = address(0x666); - vm.prank(newOwner); - // Should NOT emit EmissionsReceiverUpdated - vm.recordLogs(); - chain.transferOwnership(anotherNewOwner); - - Vm.Log[] memory logs = vm.getRecordedLogs(); - // Should only have OwnershipTransferred event, not EmissionsReceiverUpdated - bool foundEmissionsEvent = false; - for (uint256 i = 0; i < logs.length; i++) { - if (logs[i].topics[0] == keccak256("EmissionsReceiverUpdated(address,address)")) { - foundEmissionsEvent = true; - break; - } - } - assertFalse(foundEmissionsEvent, "Should not emit EmissionsReceiverUpdated when explicit receiver is set"); - - // Verify emissions receiver stayed the same - assertEq(chain.getEmissionsReceiver(), explicitReceiver); - assertEq(chain.owner(), anotherNewOwner); - } } contract SyndicateSequencingChainViewRequireAllTest is SyndicateSequencingChainTestSetUp { @@ -417,4 +402,10 @@ contract SyndicateSequencingChainViewRequireAnyTest is SyndicateSequencingChainT assertEq(allChecks[0], address(mockRequireAny1)); assertEq(allChecks[1], address(mockRequireAny2)); } + + // ================== VERSION TRACKING TESTS ================== + + function testInitialVersionInSyndicateSequencingChain() public view { + assertEq(chain.VERSION(), 1_000_000, "Initial version should be 1.0.0"); + } } diff --git a/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol b/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol index d1e1fa602..6de9f1666 100644 --- a/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol +++ b/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol @@ -2,11 +2,12 @@ pragma solidity 0.8.28; import {Test} from "forge-std/Test.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; import {AtomicSequencer, AtomicSequencerImplementation} from "src/atomic-sequencer/AtomicSequencer.sol"; import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract MockIsAllowed is IPermissionModule { bool allowed; @@ -41,18 +42,25 @@ contract AtomicSequencerTest is Test { vm.startPrank(admin); permissionModule = new RequireAndModule(admin); - chainA = deployFromFactory(appchainIdA); - chainB = deployFromFactory(appchainIdB); + chainA = deployChain(appchainIdA); + chainB = deployChain(appchainIdB); atomicSequencer = new AtomicSequencer(); permissionModule.addPermissionCheck(address(new MockIsAllowed(true)), false); vm.stopPrank(); } - function deployFromFactory(uint256 appchainId) public returns (SyndicateSequencingChain) { - SyndicateFactory factory = new SyndicateFactory(admin); - (address chainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, permissionModule, keccak256(abi.encodePacked("test-salt")) + function deployChain(uint256 appchainId) public returns (SyndicateSequencingChain) { + address gasMeterImpl = address(new GasMeter()); + address gasMeter = address(new ERC1967Proxy(gasMeterImpl, abi.encodeCall(GasMeter.initialize, ()))); + + address sequencingChainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainAddress = address( + new ERC1967Proxy( + sequencingChainImpl, + abi.encodeCall(SyndicateSequencingChain.initialize, (admin, address(permissionModule), appchainId)) + ) ); + return SyndicateSequencingChain(chainAddress); } @@ -102,9 +110,9 @@ contract AtomicSequencerTest is Test { } function testProcessMultipleChains() public { - SyndicateSequencingChain chainC = new SyndicateSequencingChain(10042003); - chainC.updateRequirementModule(address(permissionModule)); - chainC.transferOwnership(admin); + vm.startPrank(admin); + SyndicateSequencingChain chainC = deployChain(10042003); + vm.stopPrank(); SyndicateSequencingChain[] memory chains = new SyndicateSequencingChain[](3); chains[0] = chainA; diff --git a/synd-contracts/test/config/ArbChainConfigTest.t.sol b/synd-contracts/test/config/ArbChainConfigTest.t.sol index c8f19809a..38f9c9769 100644 --- a/synd-contracts/test/config/ArbChainConfigTest.t.sol +++ b/synd-contracts/test/config/ArbChainConfigTest.t.sol @@ -480,4 +480,54 @@ contract ArbConfigManagerTests is ArbChainConfigTestBase { vm.expectRevert(); // OpenZeppelin's Ownable error manager.upgradeImplementation(address(0x1234)); } + + // ================== VERSION TRACKING TESTS ================== + + function testInitialVersionInArbChainConfig() public { + ArbConfigManager manager = _createArbConfigManager(); + + vm.startPrank(owner); + address configAddress = manager.createArbChainConfig( + owner, + CHAIN_ID + 1000, + SEQUENCING_CHAIN_ID, + ARBITRUM_BRIDGE_ADDRESS, + ARBITRUM_INBOX_ADDRESS, + SETTLEMENT_DELAY, + SETTLEMENT_START_BLOCK, + SEQUENCING_CONTRACT_ADDRESS, + SEQUENCING_START_BLOCK, + appchainOwner, + DEFAULT_WS_RPC_URL, + APPCHAIN_BLOCK_EXPLORER_URL + ); + vm.stopPrank(); + + ArbChainConfig config = ArbChainConfig(configAddress); + assertEq(config.VERSION(), 1000000, "Initial version should be 1.0.0"); + } + + function testVersionInManagerCreatedConfig() public { + ArbConfigManager manager = _createArbConfigManager(); + + vm.startPrank(owner); + address configAddress = manager.createArbChainConfig( + owner, + CHAIN_ID + 5000, + SEQUENCING_CHAIN_ID, + ARBITRUM_BRIDGE_ADDRESS, + ARBITRUM_INBOX_ADDRESS, + SETTLEMENT_DELAY, + SETTLEMENT_START_BLOCK, + SEQUENCING_CONTRACT_ADDRESS, + SEQUENCING_START_BLOCK, + appchainOwner, + DEFAULT_WS_RPC_URL, + APPCHAIN_BLOCK_EXPLORER_URL + ); + vm.stopPrank(); + + ArbChainConfig config = ArbChainConfig(configAddress); + assertEq(config.VERSION(), 1000000, "Manager-created config should have initial version"); + } } diff --git a/synd-contracts/test/deployment/DeployerParentTest.t.sol b/synd-contracts/test/deployment/DeployerParentTest.t.sol new file mode 100644 index 000000000..4573b3890 --- /dev/null +++ b/synd-contracts/test/deployment/DeployerParentTest.t.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Test, console} from "forge-std/Test.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {DeployerParent} from "src/deployment/DeployerParent.sol"; + +contract MockContract { + function foo() external {} +} + +contract MockForwarder { + function call(address dest, bytes calldata data) external payable {} + + function deploy(bytes32 salt, address impl, bytes calldata init) external payable returns (address) { + return address(0); + } +} + +contract ChainRegistry is UUPSUpgradeable { + function _authorizeUpgrade(address newImplementation) internal override {} + + function chainRegistry() external returns (bool) { + return true; + } +} + +contract DeployerParentTest is Test { + address public admin; + + DeployerParent public deployerParent; + MockForwarder public mockForwarder; + MockContract public mockContract; + + function setUp() public { + admin = makeAddr("admin"); + mockForwarder = new MockForwarder(); + mockContract = new MockContract(); + address deployerParentImpl = address(new DeployerParent(admin, address(mockForwarder))); + + deployerParent = DeployerParent(payable(new ERC1967Proxy(address(deployerParentImpl), ""))); + } + + function testInitialDeployment() external { + assertEq(deployerParent.owner(), admin); + assertEq(address(deployerParent.forwarder()), address(mockForwarder)); + } + + function testNonOwnerCannotCall() external { + vm.prank(address(0x1)); + vm.expectRevert(); + deployerParent.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(address(0x1)); + vm.expectRevert(); + deployerParent.deploy(bytes32(0), address(mockContract), ""); + + vm.prank(address(0x1)); + vm.expectRevert(); + deployerParent.upgradeToAndCall(address(mockContract), ""); + } + + function testCall() external { + vm.prank(admin); + deployerParent.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(admin); + deployerParent.deploy(bytes32(0), address(mockContract), ""); + } + + function testUpgrade() external { + address chainRegistryImpl = address(new ChainRegistry()); + + vm.prank(admin); + deployerParent.upgradeToAndCall(chainRegistryImpl, ""); + + assertTrue(ChainRegistry(address(deployerParent)).chainRegistry()); + } +} diff --git a/synd-contracts/test/deployment/DeploymentTest.t.sol b/synd-contracts/test/deployment/DeploymentTest.t.sol new file mode 100644 index 000000000..822343369 --- /dev/null +++ b/synd-contracts/test/deployment/DeploymentTest.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Test, console} from "forge-std/Test.sol"; +import {SyndForwarder} from "src/deployment/SyndForwarder.sol"; + +contract MockContract { + function foo() external {} +} + +contract DeploymentTest is Test { + address public admin; + + SyndForwarder public syndForwarder; + SyndForwarder public syndForwarderL2; + + MockContract public mockContract; + + function setUp() public { + admin = address(0x1); + + syndForwarder = new SyndForwarder(admin, block.chainid); + syndForwarderL2 = new SyndForwarder(admin, block.chainid + 1); + + mockContract = new MockContract(); + } + + function getAlias(SyndForwarder addr) internal pure returns (address) { + return address(uint160(address(addr)) + uint160(0x1111000000000000000000000000000000001111)); + } + + function testInitialDeployment() external { + assertEq(syndForwarder.allowedSender(), admin); + + assertEq(syndForwarderL2.allowedSender(), getAlias(syndForwarderL2)); + } + + function testAllowedSender() external { + vm.prank(admin); + syndForwarder.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(getAlias(syndForwarder)); + vm.expectRevert(); + syndForwarder.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(getAlias(syndForwarderL2)); + syndForwarderL2.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(admin); + vm.expectRevert(); + syndForwarderL2.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + } +} diff --git a/synd-contracts/test/factory/PermissionModuleFactoriesTest.t.sol b/synd-contracts/test/factory/PermissionModuleFactoriesTest.t.sol deleted file mode 100644 index 60264e922..000000000 --- a/synd-contracts/test/factory/PermissionModuleFactoriesTest.t.sol +++ /dev/null @@ -1,631 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Test} from "forge-std/Test.sol"; -import { - RequireAndModuleFactory, - RequireOrModuleFactory, - RequireCompositeModuleFactory -} from "src/factory/PermissionModuleFactories.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; -import {RequireCompositeModule} from "src/requirement-modules/RequireCompositeModule.sol"; - -/// @notice Tests for PermissionModuleFactories using CREATE2 pattern -/// @dev Uses CREATE2 deployment with admin encoded in bytecode for proper ownership -contract PermissionModuleFactoriesTest is Test { - RequireAndModuleFactory public andFactory; - RequireOrModuleFactory public orFactory; - RequireCompositeModuleFactory public compositeFactory; - - address public admin; - address public manager; - address public user1; - address public user2; - address public nonManager; - - // Constants for role checking - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - // Events to test - event RequireAndModuleCreated(address indexed module, address indexed admin); - event RequireOrModuleCreated(address indexed module, address indexed admin); - event RequireCompositeModuleCreated(address indexed module, address indexed admin); - - function setUp() public { - admin = address(0x1); - manager = address(0x2); - user1 = address(0x3); - user2 = address(0x4); - nonManager = address(0x5); - - // Deploy factories with admin - andFactory = new RequireAndModuleFactory(admin); - orFactory = new RequireOrModuleFactory(admin); - compositeFactory = new RequireCompositeModuleFactory(admin); - - // Grant manager roles - vm.startPrank(admin); - andFactory.grantRole(MANAGER_ROLE, manager); - orFactory.grantRole(MANAGER_ROLE, manager); - compositeFactory.grantRole(MANAGER_ROLE, manager); - vm.stopPrank(); - } - - // RequireAndModuleFactory Tests - function testCreateRequireAndModule() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-1")); - address expectedAddress = andFactory.computeModuleAddress(user1, salt); - - vm.expectEmit(true, true, false, true); - emit RequireAndModuleCreated(expectedAddress, user1); - - address moduleAddress = andFactory.createRequireAndModule(user1, salt); - - assertTrue(moduleAddress != address(0)); - assertEq(moduleAddress, expectedAddress); - - RequireAndModule module = RequireAndModule(moduleAddress); - // With CREATE2 and proper constructor, the admin should be the owner - assertEq(module.owner(), user1); - } - - function testCreateRequireAndModuleWithZeroAddressReverts() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-zero")); - - vm.expectRevert(RequireAndModuleFactory.ZeroAddress.selector); - andFactory.createRequireAndModule(address(0), salt); - } - - function testComputeRequireAndModuleAddress() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-compute")); - - address computedAddress = andFactory.computeModuleAddress(user1, salt); - address actualAddress = andFactory.createRequireAndModule(user1, salt); - - assertEq(computedAddress, actualAddress); - } - - function testRequireAndModuleDifferentSaltsDifferentAddresses() public { - bytes32 salt1 = keccak256(abi.encodePacked("salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-2")); - - address addr1 = andFactory.createRequireAndModule(user1, salt1); - address addr2 = andFactory.createRequireAndModule(user1, salt2); - - assertTrue(addr1 != addr2); - } - - function testRequireAndModuleSameParametersRevert() public { - bytes32 salt = keccak256(abi.encodePacked("collision-salt")); - - // First deployment should succeed - address addr1 = andFactory.createRequireAndModule(user1, salt); - assertTrue(addr1 != address(0)); - - // Second deployment with same admin and salt should revert due to CREATE2 collision - vm.expectRevert(); - andFactory.createRequireAndModule(user1, salt); - } - - function testRequireAndModuleSameSaltDifferentUsers() public { - bytes32 salt1 = keccak256(abi.encodePacked("same-salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("same-salt-2")); - - address addr1 = andFactory.createRequireAndModule(user1, salt1); - address addr2 = andFactory.createRequireAndModule(user2, salt2); - - // Both deployments should succeed and produce different addresses - assertTrue(addr1 != address(0)); - assertTrue(addr2 != address(0)); - assertTrue(addr1 != addr2); - - // With CREATE2 and different admins, each module should have the correct owner - RequireAndModule module1 = RequireAndModule(addr1); - RequireAndModule module2 = RequireAndModule(addr2); - assertEq(module1.owner(), user1); - assertEq(module2.owner(), user2); - - // Computed addresses should also be different since admin is part of bytecode - address computedAddr1 = andFactory.computeModuleAddress(user1, salt1); - address computedAddr2 = andFactory.computeModuleAddress(user2, salt2); - assertEq(addr1, computedAddr1); - assertEq(addr2, computedAddr2); - assertTrue(computedAddr1 != computedAddr2); - } - - // Pausability Tests for RequireAndModuleFactory - function testAndFactoryPauseUnpause() public { - // Initially not paused - assertFalse(andFactory.paused()); - - // Admin can pause - vm.prank(admin); - andFactory.pause(); - assertTrue(andFactory.paused()); - - // Admin can unpause - vm.prank(admin); - andFactory.unpause(); - assertFalse(andFactory.paused()); - } - - function testAndFactoryPauseNonAdminReverts() public { - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - andFactory.pause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - andFactory.pause(); - } - - function testAndFactoryCreateWhenPausedReverts() public { - bytes32 salt = keccak256(abi.encodePacked("paused-test")); - - // Pause the factory - vm.prank(admin); - andFactory.pause(); - - // Try to create module - vm.expectRevert(); // Pausable will revert - andFactory.createRequireAndModule(user1, salt); - } - - function testAndFactoryCreateAfterUnpauseWorks() public { - bytes32 salt = keccak256(abi.encodePacked("unpause-test")); - - // Pause then unpause - vm.prank(admin); - andFactory.pause(); - vm.prank(admin); - andFactory.unpause(); - - // Should work after unpause - address moduleAddress = andFactory.createRequireAndModule(user1, salt); - assertTrue(moduleAddress != address(0)); - } - - // Access Control Tests for RequireAndModuleFactory - function testAndFactoryRoleSetup() public view { - // Admin should have both roles - assertTrue(andFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(andFactory.hasRole(MANAGER_ROLE, admin)); - - // Manager should have manager role - assertTrue(andFactory.hasRole(MANAGER_ROLE, manager)); - - // Non-manager should not have any roles - assertFalse(andFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(andFactory.hasRole(MANAGER_ROLE, nonManager)); - } - - // RequireOrModuleFactory Tests - function testCreateRequireOrModule() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-or-1")); - address expectedAddress = orFactory.computeModuleAddress(user1, salt); - - vm.expectEmit(true, true, false, true); - emit RequireOrModuleCreated(expectedAddress, user1); - - address moduleAddress = orFactory.createRequireOrModule(user1, salt); - - assertTrue(moduleAddress != address(0)); - assertEq(moduleAddress, expectedAddress); - } - - function testCreateRequireOrModuleWithZeroAddressReverts() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-or-zero")); - - vm.expectRevert(RequireOrModuleFactory.ZeroAddress.selector); - orFactory.createRequireOrModule(address(0), salt); - } - - function testComputeRequireOrModuleAddress() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-or-compute")); - - address computedAddress = orFactory.computeModuleAddress(user1, salt); - address actualAddress = orFactory.createRequireOrModule(user1, salt); - - assertEq(computedAddress, actualAddress); - } - - function testRequireOrModuleDifferentSaltsDifferentAddresses() public { - bytes32 salt1 = keccak256(abi.encodePacked("or-salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("or-salt-2")); - - address addr1 = orFactory.createRequireOrModule(user1, salt1); - address addr2 = orFactory.createRequireOrModule(user1, salt2); - - assertTrue(addr1 != addr2); - } - - function testRequireOrModuleSameParametersRevert() public { - bytes32 salt = keccak256(abi.encodePacked("or-collision-salt")); - - // First deployment should succeed - address addr1 = orFactory.createRequireOrModule(user1, salt); - assertTrue(addr1 != address(0)); - - // Second deployment with same admin and salt should revert - vm.expectRevert(); - orFactory.createRequireOrModule(user1, salt); - } - - // Pausability Tests for RequireOrModuleFactory - function testOrFactoryPauseUnpause() public { - assertFalse(orFactory.paused()); - - vm.prank(admin); - orFactory.pause(); - assertTrue(orFactory.paused()); - - vm.prank(admin); - orFactory.unpause(); - assertFalse(orFactory.paused()); - } - - function testOrFactoryCreateWhenPausedReverts() public { - bytes32 salt = keccak256(abi.encodePacked("or-paused-test")); - - vm.prank(admin); - orFactory.pause(); - - vm.expectRevert(); - orFactory.createRequireOrModule(user1, salt); - } - - // RequireCompositeModuleFactory Tests - function testCreateRequireCompositeModule() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-composite-1")); - address expectedAddress = compositeFactory.computeModuleAddress(user1, salt); - - vm.expectEmit(true, true, false, true); - emit RequireCompositeModuleCreated(expectedAddress, user1); - - address moduleAddress = compositeFactory.createRequireCompositeModule(user1, salt); - - assertTrue(moduleAddress != address(0)); - assertEq(moduleAddress, expectedAddress); - - RequireCompositeModule module = RequireCompositeModule(moduleAddress); - assertEq(module.owner(), user1); - } - - function testCreateRequireCompositeModuleWithZeroAddressReverts() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-composite-zero")); - - vm.expectRevert(RequireCompositeModuleFactory.ZeroAddress.selector); - compositeFactory.createRequireCompositeModule(address(0), salt); - } - - function testComputeRequireCompositeModuleAddress() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-composite-compute")); - - address computedAddress = compositeFactory.computeModuleAddress(user1, salt); - address actualAddress = compositeFactory.createRequireCompositeModule(user1, salt); - - assertEq(computedAddress, actualAddress); - } - - function testRequireCompositeModuleDifferentSaltsDifferentAddresses() public { - bytes32 salt1 = keccak256(abi.encodePacked("composite-salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("composite-salt-2")); - - address addr1 = compositeFactory.createRequireCompositeModule(user1, salt1); - address addr2 = compositeFactory.createRequireCompositeModule(user1, salt2); - - assertTrue(addr1 != addr2); - } - - function testRequireCompositeModuleSameParametersRevert() public { - bytes32 salt = keccak256(abi.encodePacked("composite-collision-salt")); - - // First deployment should succeed - address addr1 = compositeFactory.createRequireCompositeModule(user1, salt); - assertTrue(addr1 != address(0)); - - // Second deployment with same admin and salt should revert due to CREATE2 collision - vm.expectRevert(); - compositeFactory.createRequireCompositeModule(user1, salt); - } - - // Pausability Tests for RequireCompositeModuleFactory - function testCompositeFactoryPauseUnpause() public { - assertFalse(compositeFactory.paused()); - - vm.prank(admin); - compositeFactory.pause(); - assertTrue(compositeFactory.paused()); - - vm.prank(admin); - compositeFactory.unpause(); - assertFalse(compositeFactory.paused()); - } - - function testCompositeFactoryCreateWhenPausedReverts() public { - bytes32 salt = keccak256(abi.encodePacked("composite-paused-test")); - - vm.prank(admin); - compositeFactory.pause(); - - vm.expectRevert(); - compositeFactory.createRequireCompositeModule(user1, salt); - } - - // Cross-factory tests to ensure different module types produce different addresses - function testDifferentFactoriesSameSaltDifferentAddresses() public { - bytes32 salt = keccak256(abi.encodePacked("cross-factory-salt")); - - address andAddr = andFactory.createRequireAndModule(user1, salt); - - // Different factories will produce different addresses even with same salt and admin - // because they use different contract bytecode - address orAddr = orFactory.createRequireOrModule(user1, salt); - address compositeAddr = compositeFactory.createRequireCompositeModule(user1, salt); - - // All addresses should be different due to different contract types - assertTrue(andAddr != orAddr); - assertTrue(andAddr != compositeAddr); - assertTrue(orAddr != compositeAddr); - } - - // Functional tests to ensure modules work correctly - function testAndModuleFunctionality() public { - bytes32 salt = keccak256(abi.encodePacked("functional-and")); - address moduleAddr = andFactory.createRequireAndModule(user1, salt); - - RequireAndModule module = RequireAndModule(moduleAddr); - - // Test that we can get the permission checks (should be empty initially) - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Owner should be the admin passed to the function - assertEq(module.owner(), user1); - } - - function testOrModuleFunctionality() public { - bytes32 salt = keccak256(abi.encodePacked("functional-or")); - address moduleAddr = orFactory.createRequireOrModule(user1, salt); - - RequireOrModule module = RequireOrModule(moduleAddr); - - // Test that we can get the permission checks (should be empty initially) - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Owner should be the admin passed to the function - assertEq(module.owner(), user1); - } - - function testCompositeModuleFunctionality() public { - bytes32 salt = keccak256(abi.encodePacked("functional-composite")); - address moduleAddr = compositeFactory.createRequireCompositeModule(user1, salt); - - RequireCompositeModule module = RequireCompositeModule(moduleAddr); - - // Test that we can get the permission checks (should be empty initially) - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Owner should be the admin passed to the function - assertEq(module.owner(), user1); - } - - // Gas optimization tests - CREATE2 is different from clones but still efficient - function testCreateRequireAndModuleGasUsage() public { - bytes32 salt = keccak256(abi.encodePacked("gas-test-and")); - - uint256 gasBefore = gasleft(); - andFactory.createRequireAndModule(user1, salt); - uint256 gasAfter = gasleft(); - - uint256 gasUsed = gasBefore - gasAfter; - - // Should use reasonable amount of gas (CREATE2 deployment) - assertTrue(gasUsed < 5_000_000); // Increased limit for CREATE2 - assertTrue(gasUsed > 0); - } - - function testCreateRequireOrModuleGasUsage() public { - bytes32 salt = keccak256(abi.encodePacked("gas-test-or")); - - uint256 gasBefore = gasleft(); - orFactory.createRequireOrModule(user1, salt); - uint256 gasAfter = gasleft(); - - uint256 gasUsed = gasBefore - gasAfter; - - // Should use reasonable amount of gas (CREATE2 deployment) - assertTrue(gasUsed < 5_000_000); // Increased limit for CREATE2 - assertTrue(gasUsed > 0); - } - - function testCreateRequireCompositeModuleGasUsage() public { - bytes32 salt = keccak256(abi.encodePacked("gas-test-composite")); - - uint256 gasBefore = gasleft(); - compositeFactory.createRequireCompositeModule(user1, salt); - uint256 gasAfter = gasleft(); - - uint256 gasUsed = gasBefore - gasAfter; - - // Should use reasonable amount of gas (CREATE2 deployment) - assertTrue(gasUsed < 5_000_000); // Increased limit for CREATE2 - assertTrue(gasUsed > 0); - } - - // Edge case tests - function testCreateWithMaxUint256Salt() public { - bytes32 salt = bytes32(type(uint256).max); - - address andAddr = andFactory.createRequireAndModule(user1, salt); - assertTrue(andAddr != address(0)); - } - - function testCreateWithZeroSalt() public { - bytes32 salt = bytes32(0); - - address andAddr = andFactory.createRequireAndModule(user1, salt); - assertTrue(andAddr != address(0)); - } - - // Constructor tests - function testFactoryConstructorWithZeroAddressReverts() public { - vm.expectRevert(RequireAndModuleFactory.ZeroAddress.selector); - new RequireAndModuleFactory(address(0)); - - vm.expectRevert(RequireOrModuleFactory.ZeroAddress.selector); - new RequireOrModuleFactory(address(0)); - - vm.expectRevert(RequireCompositeModuleFactory.ZeroAddress.selector); - new RequireCompositeModuleFactory(address(0)); - } - - // Ownership verification tests - function testFactoryCannotControlDeployedModules() public { - bytes32 salt = keccak256(abi.encodePacked("factory-control-test")); - - address moduleAddr = andFactory.createRequireAndModule(user1, salt); - RequireAndModule module = RequireAndModule(moduleAddr); - - // Factory should not be able to control the module since user1 is the owner - vm.prank(address(andFactory)); - vm.expectRevert(); // Should revert with Ownable unauthorized error - module.addPermissionCheck(user2, true); - - // But user1 should be able to - vm.prank(user1); - module.addPermissionCheck(user2, true); - - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 1); - assertEq(checks[0], user2); - } - - // Comprehensive access control tests - function testAllFactoriesAccessControl() public view { - // Test all factories have correct role setup using their AccessControl interface - assertTrue(andFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(andFactory.hasRole(MANAGER_ROLE, admin)); - assertTrue(andFactory.hasRole(MANAGER_ROLE, manager)); - assertFalse(andFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(andFactory.hasRole(MANAGER_ROLE, nonManager)); - - assertTrue(orFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(orFactory.hasRole(MANAGER_ROLE, admin)); - assertTrue(orFactory.hasRole(MANAGER_ROLE, manager)); - assertFalse(orFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(orFactory.hasRole(MANAGER_ROLE, nonManager)); - - assertTrue(compositeFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(compositeFactory.hasRole(MANAGER_ROLE, admin)); - assertTrue(compositeFactory.hasRole(MANAGER_ROLE, manager)); - assertFalse(compositeFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(compositeFactory.hasRole(MANAGER_ROLE, nonManager)); - } - - // Fuzz testing - function testFuzzCreateRequireAndModule(address _admin, bytes32 _salt) public { - vm.assume(_admin != address(0)); - - address moduleAddr = andFactory.createRequireAndModule(_admin, _salt); - assertTrue(moduleAddr != address(0)); - } - - function testFuzzCreateRequireOrModule(address _admin, bytes32 _salt) public { - vm.assume(_admin != address(0)); - - address moduleAddr = orFactory.createRequireOrModule(_admin, _salt); - assertTrue(moduleAddr != address(0)); - } - - function testFuzzCreateRequireCompositeModule(address _admin, bytes32 _salt) public { - vm.assume(_admin != address(0)); - - address moduleAddr = compositeFactory.createRequireCompositeModule(_admin, _salt); - assertTrue(moduleAddr != address(0)); - } - - // Multiple deployment tests - function testMultipleDeploymentsWithDifferentSalts() public { - uint256 deploymentCount = 10; - address[] memory andModules = new address[](deploymentCount); - address[] memory orModules = new address[](deploymentCount); - address[] memory compositeModules = new address[](deploymentCount); - - for (uint256 i = 0; i < deploymentCount; i++) { - bytes32 salt = keccak256(abi.encodePacked("multiple-test", i)); - - andModules[i] = andFactory.createRequireAndModule(user1, salt); - - salt = keccak256(abi.encodePacked("multiple-test-or", i)); - orModules[i] = orFactory.createRequireOrModule(user1, salt); - - salt = keccak256(abi.encodePacked("multiple-test-composite", i)); - compositeModules[i] = compositeFactory.createRequireCompositeModule(user1, salt); - } - - // Verify all addresses are unique and valid - for (uint256 i = 0; i < deploymentCount; i++) { - assertTrue(andModules[i] != address(0)); - assertTrue(orModules[i] != address(0)); - assertTrue(compositeModules[i] != address(0)); - - for (uint256 j = i + 1; j < deploymentCount; j++) { - assertTrue(andModules[i] != andModules[j]); - assertTrue(orModules[i] != orModules[j]); - assertTrue(compositeModules[i] != compositeModules[j]); - } - } - } - - // Additional comprehensive tests for edge cases and robustness - function testDeployedModulesHaveCorrectBytecode() public { - bytes32 salt = keccak256(abi.encodePacked("bytecode-test")); - - address moduleAddr = andFactory.createRequireAndModule(user1, salt); - RequireAndModule module = RequireAndModule(moduleAddr); - - // Should be able to call module functions without issues - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Should be able to get the owner - address owner = module.owner(); - assertEq(owner, user1); - } - - function testFactoryCannotBeReinitialized() public { - // Factories should not be upgradeable or reinitializable - // Test that CREATE2 consistently produces same results - bytes32 salt1 = keccak256("test1"); - bytes32 salt2 = keccak256("test2"); - - // Deploy modules with different salts - address addr1 = andFactory.createRequireAndModule(user1, salt1); - address addr2 = andFactory.createRequireAndModule(user1, salt2); - - // Addresses should be different - assertTrue(addr1 != addr2); - - // But computed addresses should be consistent - assertEq(addr1, andFactory.computeModuleAddress(user1, salt1)); - assertEq(addr2, andFactory.computeModuleAddress(user1, salt2)); - } - - function testComputeAddressConsistency() public { - bytes32 salt = keccak256(abi.encodePacked("consistency-test")); - - // Computing address multiple times should give same result - address computed1 = andFactory.computeModuleAddress(user1, salt); - address computed2 = andFactory.computeModuleAddress(user1, salt); - assertEq(computed1, computed2); - - // Actual deployment should match computed address - address actual = andFactory.createRequireAndModule(user1, salt); - assertEq(actual, computed1); - } -} diff --git a/synd-contracts/test/factory/SyndicateFactoryTest.t.sol b/synd-contracts/test/factory/SyndicateFactoryTest.t.sol deleted file mode 100644 index 27e92bca2..000000000 --- a/synd-contracts/test/factory/SyndicateFactoryTest.t.sol +++ /dev/null @@ -1,663 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Test} from "forge-std/Test.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; -import {RequireCompositeModule} from "src/requirement-modules/RequireCompositeModule.sol"; -import {IRequirementModule} from "src/interfaces/IRequirementModule.sol"; - -contract SyndicateFactoryTest is Test { - SyndicateFactory public factory; - address public admin; - address public manager; - address public nonManager; - uint256 public appchainId = 10042001; - - // Constants for role checking - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - // Events - event SyndicateSequencingChainCreated( - uint256 indexed appchainId, address indexed sequencingChainAddress, address indexed permissionModuleAddress - ); - - event NamespaceConfigUpdated(uint256 oldNamespacePrefix, uint256 newNamespacePrefix); - - event ChainIdManuallyMarked(uint256 indexed chainId); - - function setUp() public { - admin = address(0x1); - manager = address(0x2); - nonManager = address(0x3); - factory = new SyndicateFactory(admin); - - // Grant manager role to the manager address - vm.prank(admin); - factory.grantRole(MANAGER_ROLE, manager); - } - - function testCreateSequencingChainWithRequireAndModule() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - address permissionModuleAddress = address(permissionModule); - - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-1")); - address expectedAddress = factory.computeSequencingChainAddress(salt, appchainId); - - vm.expectEmit(true, true, true, true); - emit SyndicateSequencingChainCreated(appchainId, expectedAddress, permissionModuleAddress); - - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(appchainId, admin, permissionModule, salt); - - assertTrue(sequencingChainAddress != address(0)); - assertTrue(permissionModuleAddress != address(0)); - assertEq(actualChainId, appchainId); - assertEq(sequencingChainAddress, expectedAddress); - - SyndicateSequencingChain sequencingChain = SyndicateSequencingChain(sequencingChainAddress); - - // Verify sequencer setup - assertEq(address(sequencingChain), sequencingChainAddress); - assertEq(sequencingChain.appchainId(), appchainId); - - // Verify permission module setup - assertEq(address(sequencingChain.permissionRequirementModule()), permissionModuleAddress); - assertEq(permissionModule.owner(), admin); - } - - function testCreateSequencingChainWithRequireOrModule() public { - RequireOrModule permissionModule = new RequireOrModule(admin); - address permissionModuleAddress = address(permissionModule); - - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-2")); - address expectedAddress = factory.computeSequencingChainAddress(salt, appchainId); - - vm.expectEmit(true, true, true, true); - emit SyndicateSequencingChainCreated(appchainId, expectedAddress, permissionModuleAddress); - - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(permissionModule), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertTrue(permissionModuleAddress != address(0)); - assertEq(actualChainId, appchainId); - assertEq(sequencingChainAddress, expectedAddress); - - SyndicateSequencingChain sequencingChain = SyndicateSequencingChain(sequencingChainAddress); - - // Verify sequencer setup - assertEq(address(sequencingChain), sequencingChainAddress); - assertEq(sequencingChain.appchainId(), appchainId); - - // Verify permission module setup - assertEq(address(sequencingChain.permissionRequirementModule()), permissionModuleAddress); - assertEq(permissionModule.owner(), admin); - } - - function testCreateSequencingChainWithRequireCompositeModule() public { - RequireCompositeModule permissionModule = new RequireCompositeModule(admin); - address permissionModuleAddress = address(permissionModule); - - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-composite")); - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(permissionModule), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, appchainId); - - SyndicateSequencingChain sequencingChain = SyndicateSequencingChain(sequencingChainAddress); - assertEq(sequencingChain.appchainId(), appchainId); - assertEq(address(sequencingChain.permissionRequirementModule()), permissionModuleAddress); - assertEq(permissionModule.owner(), admin); - } - - function testCorrectAppChainIdAssignment() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - uint256 differentChainId = 10042002; - - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-test-7")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-test-8")); - - (address sequencingChain1, uint256 actualChainId1) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt1 - ); - (address sequencingChain2, uint256 actualChainId2) = factory.createSyndicateSequencingChain( - differentChainId, admin, IRequirementModule(address(permissionModule2)), salt2 - ); - - assertEq(SyndicateSequencingChain(sequencingChain1).appchainId(), appchainId); - assertEq(SyndicateSequencingChain(sequencingChain2).appchainId(), differentChainId); - assertEq(actualChainId1, appchainId); - assertEq(actualChainId2, differentChainId); - } - - function testRevertsOnZeroAdmin() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-9")); - - vm.expectRevert(SyndicateFactory.ZeroAddress.selector); - factory.createSyndicateSequencingChain( - appchainId, address(0), IRequirementModule(address(permissionModule)), salt - ); - } - - function testRevertsOnZeroPermissionModule() public { - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-10")); - - vm.expectRevert(SyndicateFactory.ZeroAddress.selector); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(0)), salt); - } - - function testAutoIncrementOnZeroChainId() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - - // Fetch dynamic values from contract - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedChainId = (namespacePrefix * 10) + 1; - - bytes32 salt = keccak256(abi.encodePacked("salt-for-auto-increment")); - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule)), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, expectedChainId); - assertEq(SyndicateSequencingChain(sequencingChainAddress).appchainId(), expectedChainId); - - // Verify next chain ID incremented - uint256 nextExpectedChainId = (namespacePrefix * 10) + 2; - assertEq(factory.getNextChainId(), nextExpectedChainId); - } - - function testCreateSequencingChainAddressIsDeterministic() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-deterministic")); - - address expectedAddress = factory.computeSequencingChainAddress(salt, appchainId); - (address sequencingChainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt - ); - - assertEq(sequencingChainAddress, expectedAddress); - } - - function testGetBytecode() public view { - bytes memory bytecode = factory.getBytecode(appchainId); - bytes memory expectedBytecode = - abi.encodePacked(type(SyndicateSequencingChain).creationCode, abi.encode(appchainId, false)); - assertEq(bytecode, expectedBytecode); - } - - function testAutoIncrementChainIds() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - RequireCompositeModule permissionModule3 = new RequireCompositeModule(admin); - - // First auto-incremented chain ID - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-auto-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Fetch dynamic values from contract - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Second auto-incremented chain ID - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-auto-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - uint256 expectedId2 = (namespacePrefix * 10) + 2; - assertEq(id2, expectedId2); - - // Third auto-incremented chain ID - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-auto-3")); - (, uint256 id3) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule3)), salt3); - uint256 expectedId3 = (namespacePrefix * 10) + 3; - assertEq(id3, expectedId3); - } - - function testMixedAutoAndManualChainIds() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - RequireCompositeModule permissionModule3 = new RequireCompositeModule(admin); - - // Auto chain ID - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-mixed-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Fetch dynamic values from contract - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Manual chain ID - uint256 manualId = 42000; - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-mixed-2")); - (, uint256 id2) = factory.createSyndicateSequencingChain( - manualId, admin, IRequirementModule(address(permissionModule2)), salt2 - ); - assertEq(id2, manualId); - - // Back to auto chain ID - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-mixed-3")); - (, uint256 id3) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule3)), salt3); - // Should be next auto ID since we only used one auto ID so far - uint256 expectedId3 = (namespacePrefix * 10) + 2; - assertEq(id3, expectedId3); - } - - function testChainIdAlreadyExists() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // Create first chain - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-duplicate-1")); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Try to create another with same chain ID - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-duplicate-2")); - vm.expectRevert(SyndicateFactory.ChainIdAlreadyExists.selector); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule2)), salt2); - } - - function testIsChainIdUsed() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // Initially no chain IDs used - assertEq(factory.isChainIdUsed(appchainId), false); - - // Create chain - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-used-1")); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Now chain ID should be marked as used - assertEq(factory.isChainIdUsed(appchainId), true); - - // Auto-incremented ID should also be marked as used - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-used-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - assertEq(factory.isChainIdUsed(id2), true); - } - - // Pausability Tests - function testPauseUnpause() public { - // Initially not paused - assertFalse(factory.paused()); - - // Admin can pause - vm.prank(admin); - factory.pause(); - assertTrue(factory.paused()); - - // Admin can unpause - vm.prank(admin); - factory.unpause(); - assertFalse(factory.paused()); - } - - function testPauseNonAdminReverts() public { - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - factory.pause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - factory.pause(); - } - - function testUnpauseNonAdminReverts() public { - // Pause first - vm.prank(admin); - factory.pause(); - - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - factory.unpause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - factory.unpause(); - } - - function testCreateSequencingChainWhenPausedReverts() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-paused")); - - // Pause the factory - vm.prank(admin); - factory.pause(); - - // Try to create sequencing chain - vm.expectRevert(); // Pausable will revert with "Pausable: paused" - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule)), salt); - } - - function testCreateSequencingChainAfterUnpauseWorks() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-unpause")); - - // Pause then unpause - vm.prank(admin); - factory.pause(); - vm.prank(admin); - factory.unpause(); - - // Should work after unpause - (address sequencingChainAddress, uint256 actualChainId) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt - ); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, appchainId); - } - - // Access Control tests - function testRoleSetup() public view { - // Admin should have the default admin role - assertTrue(factory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - - // Admin should have the manager role - assertTrue(factory.hasRole(MANAGER_ROLE, admin)); - - // Manager should have the manager role - assertTrue(factory.hasRole(MANAGER_ROLE, manager)); - - // Non-manager should not have any roles - assertFalse(factory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(factory.hasRole(MANAGER_ROLE, nonManager)); - } - - function testNamespaceConfigGetters() public view { - // Initial values - assertEq(factory.namespacePrefix(), 510); - // Note: namespaceMultiplier no longer exists - } - - function testPublicVariables() public view { - // Test that variables are publicly accessible - assertEq(factory.namespacePrefix(), 510); - assertEq(factory.nextAutoChainId(), 1); - assertEq(factory.appchainContracts(appchainId), address(0)); - } - - function testUpdateNamespaceConfig() public { - uint256 newPrefix = 511; - - // Manager can update namespace config - vm.prank(manager); - vm.expectEmit(true, true, false, true); - emit NamespaceConfigUpdated( - 510, // old prefix - newPrefix - ); - factory.updateNamespaceConfig(newPrefix); - - // Check new values - assertEq(factory.namespacePrefix(), newPrefix); - } - - function testUpdateNamespaceConfigAsNonManagerReverts() public { - uint256 newPrefix = 511; - - // Non-manager cannot update namespace config - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert with a specific message - factory.updateNamespaceConfig(newPrefix); - } - - function testNamespaceUpdateAffectsAutoIncrementChainIds() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // Create a chain with old namespace - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-namespace-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Verify chain ID follows current formula - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Update namespace config - uint256 newPrefix = 600; - - vm.prank(admin); - factory.updateNamespaceConfig(newPrefix); - - // Create a chain with new namespace - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-namespace-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - - // New namespace: (600 * 10) + 2 (counter is at 2 now) - uint256 expectedId2 = (newPrefix * 10) + 2; - assertEq(id2, expectedId2); - } - - function testConstructorWithZeroAddressReverts() public { - vm.expectRevert(SyndicateFactory.ZeroAddress.selector); - new SyndicateFactory(address(0)); - } - - function testGetNextChainIdFunction() public view { - // Test that the public function works correctly - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 nextAutoChainId = factory.nextAutoChainId(); - - uint256 expectedNextId = (namespacePrefix * 10) + nextAutoChainId; - uint256 actualNextId = factory.getNextChainId(); - assertEq(actualNextId, expectedNextId); - } - - function testChainIdArithmeticLogic() public { - // Test arithmetic-based chain ID generation (replacement for old concatenation logic) - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // First: dynamic calculation - uint256 namespacePrefix = factory.namespacePrefix(); - - bytes32 salt1 = keccak256(abi.encodePacked("arithmetic-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Second: dynamic calculation - bytes32 salt2 = keccak256(abi.encodePacked("arithmetic-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - uint256 expectedId2 = (namespacePrefix * 10) + 2; - assertEq(id2, expectedId2); - - // Create several more to test sequential generation - for (uint256 i = 3; i <= 5; i++) { - RequireAndModule pm = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("arithmetic-loop", i)); - (, uint256 id) = factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(pm)), salt); - - // Expected: (namespacePrefix * 10) + i - uint256 expectedId = (namespacePrefix * 10) + i; - assertEq(id, expectedId); - } - } - - function testLargeChainIdNumbers() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - - // Update to higher starting point to test larger arithmetic calculations - vm.prank(admin); - factory.updateNamespaceConfig(999); - - // Create auto chain with dynamic calculation - uint256 newNamespacePrefix = factory.namespacePrefix(); // 999 after update - uint256 expectedId = (newNamespacePrefix * 10) + 1; - - bytes32 salt = keccak256(abi.encodePacked("large-number")); - (, uint256 id) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule)), salt); - assertEq(id, expectedId); - } - - function testSequencingChainImplementationAddress() public view { - // Test that implementation address is set and not zero - bytes32 salt = keccak256(abi.encodePacked("impl-test")); - uint256 chainId = 510_000_000_001; // Use an auto-generated ID - address impl = factory.computeSequencingChainAddress(salt, chainId); - assertTrue(impl != address(0)); - } - - // Edge cases and fuzz tests - function testFuzzManualChainIds(uint256 chainId) public { - // Skip already used chain IDs and auto-generated ones - vm.assume(chainId != 0); - // Skip first auto-generated ID based on current formula - uint256 firstAutoId = (factory.namespacePrefix() * 10) + 1; - vm.assume(chainId != firstAutoId); - vm.assume(factory.isChainIdUsed(chainId) == false); - - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("fuzz-test", chainId)); - - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(chainId, admin, IRequirementModule(address(permissionModule)), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, chainId); - assertEq(factory.isChainIdUsed(chainId), true); - } - - function testFuzzSalts(bytes32 salt) public { - RequireAndModule permissionModule = new RequireAndModule(admin); - - (address sequencingChainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt - ); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(sequencingChainAddress, factory.computeSequencingChainAddress(salt, appchainId)); - } - - function testNewChainIdGenerationFormat() public view { - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 nextAutoChainId = factory.nextAutoChainId(); - - uint256 expectedChainId = (namespacePrefix * 10) + nextAutoChainId; - uint256 actualChainId = factory.getNextChainId(); - assertEq(actualChainId, expectedChainId); - } - - function testChainIdNoCollisions() public { - // Test that different namespace/autoId combinations produce different results - - vm.startPrank(manager); - - // Test scenario 1: namespace=12, simple autoId - factory.updateNamespaceConfig(12); - uint256 chainId1 = factory.getNextChainId(); - // Expected: (12 * 10) + 1 - - // Test scenario 2: namespace=123 - vm.expectRevert(); - factory.updateNamespaceConfig(123); - - // Test scenario 3: namespace=1 - vm.expectRevert(); - factory.updateNamespaceConfig(1); - - // Test scenario 3: namespace=133, simple autoId (same counter value) - factory.updateNamespaceConfig(133); - - uint256 chainId2 = factory.getNextChainId(); - // Expected: (133 * 10) + 1 - // Note: nextAutoChainId is still 1 since we didn't create any chains yet - - vm.stopPrank(); - - // These should be completely different, demonstrating no collision - assertTrue(chainId1 != chainId2); - assertEq(chainId1, (12 * 10) + 1); - assertEq(chainId2, (133 * 10) + 1); - } - - function testGetContractsForAppchains() public { - // Create a few chains with non-sequential chain IDs - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-test-9a")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-test-9b")); - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-test-9c")); - - uint256 appchainId1 = 100; - uint256 appchainId2 = 200; - uint256 appchainId3 = 300; - - vm.prank(nonManager); - (address chain1,) = factory.createSyndicateSequencingChain(appchainId1, admin, permissionModule, salt1); - - vm.prank(nonManager); - (address chain2,) = factory.createSyndicateSequencingChain(appchainId2, admin, permissionModule, salt2); - - vm.prank(nonManager); - (address chain3,) = factory.createSyndicateSequencingChain(appchainId3, admin, permissionModule, salt3); - - // Test getContractsForAppchains with specific chain IDs - uint256[] memory chainIDs = new uint256[](2); - chainIDs[0] = appchainId2; // 200 - chainIDs[1] = appchainId1; // 100 - - address[] memory contracts = factory.getContractsForAppchains(chainIDs); - - // Verify that the correct contracts are returned for each chain ID - // This is the regression test for the bug where it was using the loop index instead of the chain ID - assertEq(contracts.length, 2); - assertEq(contracts[0], chain2); // Contract for chain ID 200 - assertEq(contracts[1], chain1); // Contract for chain ID 100 - - // Test with a single chain ID - uint256[] memory singleChainID = new uint256[](1); - singleChainID[0] = appchainId3; // 300 - - address[] memory singleContract = factory.getContractsForAppchains(singleChainID); - - assertEq(singleContract.length, 1); - assertEq(singleContract[0], chain3); // Contract for chain ID 300 - } - - function testGetAppchainsAndContracts() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-bug-test-1")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-bug-test-2")); - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-bug-test-3")); - - uint256 appchainId1 = 1000; - uint256 appchainId2 = 2000; - uint256 appchainId3 = 3000; - - (address chain1Addr,) = factory.createSyndicateSequencingChain(appchainId1, admin, permissionModule, salt1); - (address chain2Addr,) = factory.createSyndicateSequencingChain(appchainId2, admin, permissionModule, salt2); - (address chain3Addr,) = factory.createSyndicateSequencingChain(appchainId3, admin, permissionModule, salt3); - - (uint256[] memory chainIDs, address[] memory contracts) = factory.getAppchainsAndContracts(); - assertEq(chainIDs.length, 3); - assertEq(contracts.length, 3); - assertEq(contracts[0], chain1Addr); - assertEq(contracts[1], chain2Addr); - assertEq(contracts[2], chain3Addr); - - // ensure the mapping is consistent - for (uint256 i = 0; i < chainIDs.length; i++) { - assertEq(contracts[i], factory.appchainContracts(chainIDs[i])); - } - } -} diff --git a/synd-contracts/test/factory/SyndicateFactoryWrapperTest.t.sol b/synd-contracts/test/factory/SyndicateFactoryWrapperTest.t.sol deleted file mode 100644 index 8e66df3e9..000000000 --- a/synd-contracts/test/factory/SyndicateFactoryWrapperTest.t.sol +++ /dev/null @@ -1,416 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Test} from "forge-std/Test.sol"; -import {SyndicateFactoryWrapper} from "src/factory/SyndicateFactoryWrapper.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {RequireAndModuleFactory, RequireOrModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; - -contract SyndicateFactoryWrapperTest is Test { - SyndicateFactoryWrapper public wrapper; - SyndicateFactory public syndicateFactory; - RequireAndModuleFactory public andFactory; - RequireOrModuleFactory public orFactory; - - address public admin; - address public manager; - address public user1; - address public user2; - address public nonManager; - - uint256 public appchainId = 12345; - - // Constants for role checking - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - // Events to test - event CompleteSyndicateDeployed( - uint256 indexed chainId, - address indexed sequencingChain, - address indexed permissionModule, - SyndicateFactoryWrapper.ModuleType moduleType, - address admin - ); - - function setUp() public { - admin = address(0x1); - manager = address(0x2); - user1 = address(0x3); - user2 = address(0x4); - nonManager = address(0x5); - - // Deploy individual factories - syndicateFactory = new SyndicateFactory(admin); - andFactory = new RequireAndModuleFactory(admin); - orFactory = new RequireOrModuleFactory(admin); - - // Deploy wrapper - wrapper = new SyndicateFactoryWrapper(admin, address(syndicateFactory), address(andFactory), address(orFactory)); - - // Grant manager roles - vm.startPrank(admin); - wrapper.grantRole(MANAGER_ROLE, manager); - vm.stopPrank(); - } - - // Basic deployment tests - function testDeployCompleteSyndicateWithRequireAndModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("module-salt-and")); - bytes32 chainSalt = keccak256(abi.encodePacked("chain-salt-and")); - - // Compute expected addresses - address expectedModuleAddr = andFactory.computeModuleAddress(user1, moduleSalt); - address expectedChainAddr = syndicateFactory.computeSequencingChainAddress(chainSalt, appchainId); - - vm.expectEmit(true, true, true, true); - emit CompleteSyndicateDeployed( - appchainId, expectedChainAddr, expectedModuleAddr, SyndicateFactoryWrapper.ModuleType.RequireAnd, user1 - ); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - // Verify addresses match expectations - assertEq(sequencingChain, expectedChainAddr); - assertEq(permissionModule, expectedModuleAddr); - assertEq(actualChainId, appchainId); - - // Verify the deployed contracts work - RequireAndModule module = RequireAndModule(permissionModule); - assertEq(module.owner(), user1); - - SyndicateSequencingChain chain = SyndicateSequencingChain(sequencingChain); - assertEq(chain.appchainId(), appchainId); - assertEq(address(chain.permissionRequirementModule()), permissionModule); - } - - function testDeployCompleteSyndicateWithRequireOrModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("module-salt-or")); - bytes32 chainSalt = keccak256(abi.encodePacked("chain-salt-or")); - - // Compute expected addresses - address expectedModuleAddr = orFactory.computeModuleAddress(user1, moduleSalt); - address expectedChainAddr = syndicateFactory.computeSequencingChainAddress(chainSalt, appchainId); - - vm.expectEmit(true, true, true, true); - emit CompleteSyndicateDeployed( - appchainId, expectedChainAddr, expectedModuleAddr, SyndicateFactoryWrapper.ModuleType.RequireOr, user1 - ); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireOr, moduleSalt, chainSalt - ); - - // Verify addresses match expectations - assertEq(sequencingChain, expectedChainAddr); - assertEq(permissionModule, expectedModuleAddr); - assertEq(actualChainId, appchainId); - - // Verify the deployed contracts work - RequireOrModule module = RequireOrModule(permissionModule); - assertEq(module.owner(), user1); - - SyndicateSequencingChain chain = SyndicateSequencingChain(sequencingChain); - assertEq(chain.appchainId(), appchainId); - assertEq(address(chain.permissionRequirementModule()), permissionModule); - } - - // Convenience function tests - function testDeployWithRequireAndModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("convenience-and-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("convenience-and-chain")); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = - wrapper.deployWithRequireAndModule(appchainId, user1, moduleSalt, chainSalt); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, appchainId); - - // Verify it's a RequireAndModule - RequireAndModule module = RequireAndModule(permissionModule); - assertEq(module.owner(), user1); - } - - function testDeployWithRequireOrModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("convenience-or-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("convenience-or-chain")); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = - wrapper.deployWithRequireOrModule(appchainId, user1, moduleSalt, chainSalt); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, appchainId); - - // Verify it's a RequireOrModule - RequireOrModule module = RequireOrModule(permissionModule); - assertEq(module.owner(), user1); - } - - // Auto-increment chain ID tests - function testDeployWithAutoIncrementChainId() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("auto-increment-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("auto-increment-chain")); - - uint256 expectedChainId = wrapper.getNextAutoChainId(); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - 0, // Auto-increment - user1, - SyndicateFactoryWrapper.ModuleType.RequireAnd, - moduleSalt, - chainSalt - ); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, expectedChainId); - - // Verify chain ID is marked as used - assertEq(wrapper.isChainIdUsed(actualChainId), true); - } - - // Address computation tests - function testComputeCompleteSyndicateAddresses() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("compute-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("compute-chain")); - - (address expectedModuleAddr, address expectedChainAddr) = wrapper.computeCompleteSyndicateAddresses( - user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt, appchainId - ); - - // Deploy and verify addresses match - (address sequencingChain, address permissionModule,) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - assertEq(permissionModule, expectedModuleAddr); - assertEq(sequencingChain, expectedChainAddr); - } - - function testComputeAddressesForDifferentModuleTypes() public view { - bytes32 moduleSalt = keccak256(abi.encodePacked("diff-types-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("diff-types-chain")); - - (address andModuleAddr, address chainAddr1) = wrapper.computeCompleteSyndicateAddresses( - user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt, appchainId - ); - - (address orModuleAddr, address chainAddr2) = wrapper.computeCompleteSyndicateAddresses( - user1, SyndicateFactoryWrapper.ModuleType.RequireOr, moduleSalt, chainSalt, appchainId - ); - - // Module addresses should be different (different contract types) - assertTrue(andModuleAddr != orModuleAddr); - // Chain addresses should be the same (same salt and chain ID) - assertEq(chainAddr1, chainAddr2); - } - - // Error handling tests - function testDeployWithZeroAddressReverts() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("zero-addr-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("zero-addr-chain")); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - wrapper.deployCompleteSyndicate( - appchainId, address(0), SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - } - - // Pausability tests - function testPauseUnpause() public { - // Initially not paused - assertFalse(wrapper.paused()); - - // Admin can pause - vm.prank(admin); - wrapper.pause(); - assertTrue(wrapper.paused()); - - // Admin can unpause - vm.prank(admin); - wrapper.unpause(); - assertFalse(wrapper.paused()); - } - - function testPauseNonAdminReverts() public { - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - wrapper.pause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - wrapper.pause(); - } - - function testDeployWhenPausedReverts() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("paused-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("paused-chain")); - - // Pause the wrapper - vm.prank(admin); - wrapper.pause(); - - // Try to deploy - vm.expectRevert(); // Pausable will revert - wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - } - - function testDeployAfterUnpauseWorks() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("unpause-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("unpause-chain")); - - // Pause then unpause - vm.prank(admin); - wrapper.pause(); - vm.prank(admin); - wrapper.unpause(); - - // Should work after unpause - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, appchainId); - } - - // Access control tests - function testRoleSetup() public view { - // Admin should have both roles - assertTrue(wrapper.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(wrapper.hasRole(MANAGER_ROLE, admin)); - - // Manager should have manager role - assertTrue(wrapper.hasRole(MANAGER_ROLE, manager)); - - // Non-manager should not have any roles - assertFalse(wrapper.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(wrapper.hasRole(MANAGER_ROLE, nonManager)); - } - - // Helper function tests - function testGetNextAutoChainId() public view { - uint256 nextId = wrapper.getNextAutoChainId(); - assertEq(nextId, 5101); // Should match syndicate factory default - } - - function testGetNamespacePrefix() public view { - uint256 prefix = wrapper.getNamespacePrefix(); - assertEq(prefix, 510); // Should match syndicate factory default - } - - function testIsChainIdUsed() public { - // Initially not used - assertEq(wrapper.isChainIdUsed(appchainId), false); - - // Deploy something - bytes32 moduleSalt = keccak256(abi.encodePacked("used-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("used-chain")); - - wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - // Now should be used - assertEq(wrapper.isChainIdUsed(appchainId), true); - } - - // Constructor tests - function testConstructorWithZeroAddressReverts() public { - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - address(0), // zero admin - address(syndicateFactory), - address(andFactory), - address(orFactory) - ); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - admin, - address(0), // zero syndicate factory - address(andFactory), - address(orFactory) - ); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - admin, - address(syndicateFactory), - address(0), // zero and factory - address(orFactory) - ); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - admin, - address(syndicateFactory), - address(andFactory), - address(0) // zero or factory - ); - } - - // Integration tests - function testMultipleDeploymentsDifferentTypes() public { - bytes32 moduleSalt1 = keccak256(abi.encodePacked("multi-module-1")); - bytes32 chainSalt1 = keccak256(abi.encodePacked("multi-chain-1")); - bytes32 moduleSalt2 = keccak256(abi.encodePacked("multi-module-2")); - bytes32 chainSalt2 = keccak256(abi.encodePacked("multi-chain-2")); - - // Deploy with RequireAndModule - (address chain1, address module1, uint256 chainId1) = wrapper.deployCompleteSyndicate( - 12001, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt1, chainSalt1 - ); - - // Deploy with RequireOrModule - (address chain2, address module2, uint256 chainId2) = wrapper.deployCompleteSyndicate( - 12002, user2, SyndicateFactoryWrapper.ModuleType.RequireOr, moduleSalt2, chainSalt2 - ); - - // All addresses should be different - assertTrue(chain1 != chain2); - assertTrue(module1 != module2); - assertTrue(chainId1 != chainId2); - - // Verify each module type - RequireAndModule andModule = RequireAndModule(module1); - RequireOrModule orModule = RequireOrModule(module2); - - assertEq(andModule.owner(), user1); - assertEq(orModule.owner(), user2); - } - - // Fuzz testing - function testFuzzDeployWithDifferentParameters( - address _admin, - uint256 _chainId, - bytes32 _moduleSalt, - bytes32 _chainSalt - ) public { - vm.assume(_admin != address(0)); - vm.assume(_chainId != 0); - vm.assume(_chainId < type(uint256).max / 2); // Avoid overflow in chain ID logic - vm.assume(wrapper.isChainIdUsed(_chainId) == false); // Not already used - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - _chainId, _admin, SyndicateFactoryWrapper.ModuleType.RequireAnd, _moduleSalt, _chainSalt - ); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, _chainId); - - RequireAndModule module = RequireAndModule(permissionModule); - assertEq(module.owner(), _admin); - } -} diff --git a/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol b/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol index 9adc9293d..5f62ceab0 100644 --- a/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol +++ b/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol @@ -4,13 +4,6 @@ pragma solidity 0.8.28; import {Test} from "forge-std/Test.sol"; import {console} from "forge-std/console.sol"; import {GasAggregator, GasAggregatorUtils} from "../../src/staking/GasAggregator.sol"; -import {EpochTracker} from "../../src/staking/EpochTracker.sol"; -import {SyndicateFactory} from "../../src/factory/SyndicateFactory.sol"; -import {SyndicateSequencingChain} from "../../src/SyndicateSequencingChain.sol"; -import {AlwaysAllowedModule} from "../../src/sequencing-modules/AlwaysAllowedModule.sol"; -import {RequireAndModule} from "../../src/requirement-modules/RequireAndModule.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {Arrays} from "@openzeppelin/contracts/utils/Arrays.sol"; import {Comparators} from "@openzeppelin/contracts/utils/Comparators.sol"; @@ -24,6 +17,12 @@ contract MockGasCounter { contract MockAppchainFactory {} +contract MockGasMeter { + function gasUsed(uint256 epoch, address chainContract) external view returns (uint256) { + return 100 ether; + } +} + contract GasAggregatorTest is Test { GasAggregator public gasAggregator; MockAppchainFactory public mockFactory; @@ -31,6 +30,8 @@ contract GasAggregatorTest is Test { MockGasCounter public mockGasCounter2; MockGasCounter public mockGasCounter3; + MockGasMeter public mockGasMeter; + address public admin = address(0x1); address public user = address(0x2); @@ -45,9 +46,11 @@ contract GasAggregatorTest is Test { mockGasCounter2 = new MockGasCounter(); mockGasCounter3 = new MockGasCounter(); + mockGasMeter = new MockGasMeter(); + // Deploy GasAggregator contract vm.prank(admin); - gasAggregator = new GasAggregator(1, 0, 2); + gasAggregator = new GasAggregator(address(mockGasMeter), 1, 0, 2); assertEq(gasAggregator.currentEpoch(), 1); vm.warp(gasAggregator.getEpochStart(1)); @@ -72,7 +75,7 @@ contract GasAggregatorTest is Test { } vm.prank(admin); - gasAggregator.addLegacyChain(chainId, mockContract); + gasAggregator.adminAddChain(chainId, mockContract, true); } } diff --git a/synd-contracts/test/staking/AppchainPoolTest.t.sol b/synd-contracts/test/staking/AppchainPoolTest.t.sol index 5b9d66273..3b727df9d 100644 --- a/synd-contracts/test/staking/AppchainPoolTest.t.sol +++ b/synd-contracts/test/staking/AppchainPoolTest.t.sol @@ -7,8 +7,7 @@ import {Vm} from "forge-std/Vm.sol"; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {AppchainPool} from "src/staking/AppchainPool.sol"; import {RewardPoolBase} from "src/staking/RewardPoolBase.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; -import {UD60x18, ud, convert} from "@prb/math/src/UD60x18.sol"; +import {ud, convert} from "@prb/math/src/UD60x18.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; import {EmissionsReceiver} from "src/staking/EmissionsReceiver.sol"; import {GasArchive} from "src/staking/GasArchive.sol"; diff --git a/synd-contracts/test/staking/BasePoolTest.t.sol b/synd-contracts/test/staking/BasePoolTest.t.sol index ffde1634c..c41ee175d 100644 --- a/synd-contracts/test/staking/BasePoolTest.t.sol +++ b/synd-contracts/test/staking/BasePoolTest.t.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.28; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {BasePool} from "src/staking/BasePool.sol"; -import {EpochTracker} from "src/staking/EpochTracker.sol"; import {Test} from "forge-std/Test.sol"; import {Vm} from "forge-std/Vm.sol"; diff --git a/synd-contracts/test/staking/GasAggregatorTest.t.sol b/synd-contracts/test/staking/GasAggregatorTest.t.sol new file mode 100644 index 000000000..201d0f75d --- /dev/null +++ b/synd-contracts/test/staking/GasAggregatorTest.t.sol @@ -0,0 +1,575 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {GasAggregator} from "src/staking/GasAggregator.sol"; +import {EpochTracker} from "src/staking/EpochTracker.sol"; + +contract MockSyndicateProxy { + mapping(uint256 => uint256) public tokensUsedPerEpoch; + + function setTokensUsedPerEpoch(uint256 epoch, uint256 tokens) external { + tokensUsedPerEpoch[epoch] = tokens; + } +} + +contract MockGasMeter { + function gasUsed(uint256 epoch, address chainContract) external view returns (uint256) { + return 100 ether; + } +} + +contract GasAggregatorTest is Test, EpochTracker { + GasAggregator public gasAggregator; + MockSyndicateProxy public mockProxy1; + MockSyndicateProxy public mockProxy2; + MockSyndicateProxy public mockProxy3; + + MockGasMeter public mockGasMeter; + + address public owner; + address public user; + + uint256 public constant START_EPOCH = 1; + uint256 public constant ADD_CHAIN_FEE = 5 ether; + uint256 public constant MAX_APPCHAINS_TO_QUERY = 100; + + event ChainAdded(uint256 indexed epoch, uint256 indexed chainId, address chainContract, address indexed addedBy); + event ChainRemoved(uint256 indexed epoch, uint256 indexed chainId); + event AddChainFeeUpdated(uint256 oldFee, uint256 newFee); + event AggregationPending(uint256 indexed epoch, uint256 remainingChains); + event AggregatedTokens(uint256 indexed epoch, uint256[] chainIds, uint256[] tokens); + event UpdateMaxAppchainsToQuery(uint256 indexed epoch, uint256 maxAppchainsToQuery); + + function setUp() public { + owner = address(this); + user = address(0x1234); + + // Set timestamp to after epoch start + vm.warp(getEpochStart(START_EPOCH) + 1 days); + + mockGasMeter = new MockGasMeter(); + + // Deploy GasAggregator + gasAggregator = new GasAggregator(address(mockGasMeter), START_EPOCH, ADD_CHAIN_FEE, MAX_APPCHAINS_TO_QUERY); + + // Deploy mock proxies + mockProxy1 = new MockSyndicateProxy(); + mockProxy2 = new MockSyndicateProxy(); + mockProxy3 = new MockSyndicateProxy(); + + vm.deal(user, 100 ether); + } + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR TESTS + //////////////////////////////////////////////////////////////*/ + + function testConstructor() public view { + assertEq(gasAggregator.currentEpoch(), START_EPOCH); + assertEq(gasAggregator.addChainFee(), ADD_CHAIN_FEE); + assertEq(gasAggregator.maxAppchainsToQuery(), MAX_APPCHAINS_TO_QUERY); + assertEq(gasAggregator.VERSION(), 1_001_000); + assertEq(gasAggregator.owner(), owner); + } + + function testConstructorWithDefaults() public { + GasAggregator agg = new GasAggregator(address(mockGasMeter), 1, 0, 0); + assertEq(agg.addChainFee(), 5 ether); + assertEq(agg.maxAppchainsToQuery(), 100); + } + + function testConstructorRevertsOnZeroEpoch() public { + vm.expectRevert(); + new GasAggregator(address(mockGasMeter), 0, ADD_CHAIN_FEE, MAX_APPCHAINS_TO_QUERY); + } + + /*////////////////////////////////////////////////////////////// + ADD LEGACY CHAIN TESTS + //////////////////////////////////////////////////////////////*/ + + function testAdminAddChain() public { + uint256 chainId = 1; + + vm.expectEmit(true, true, true, true); + emit ChainAdded(START_EPOCH, chainId, address(mockProxy1), owner); + + gasAggregator.adminAddChain(chainId, address(mockProxy1), true); + + assertEq(gasAggregator.getTrackedChainCount(), 1); + assertEq(gasAggregator.getTrackedChainId(0), chainId); + assertEq(gasAggregator.appchainContract(chainId), address(mockProxy1)); + } + + function testAdminAddChainMultiple() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + assertEq(gasAggregator.getTrackedChainCount(), 3); + + uint256[] memory chainIds = gasAggregator.getTrackedChainIds(); + assertEq(chainIds.length, 3); + } + + function testAdminAddChainRevertsOnZeroChainId() public { + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ZeroChainId.selector)); + gasAggregator.adminAddChain(0, address(mockProxy1), true); + } + + function testAdminAddChainRevertsOnDuplicate() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ChainAlreadyTracked.selector, 1)); + gasAggregator.adminAddChain(1, address(mockProxy2), true); + } + + function testAdminAddChainRevertsOnNoCode() public { + address emptyAddress = address(0x9999); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ChainNotFound.selector, 1)); + gasAggregator.adminAddChain(1, emptyAddress, true); + } + + function testAdminAddChainRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.adminAddChain(1, address(mockProxy1), true); + } + + function testAdminAddChainRevertsWhenPaused() public { + gasAggregator.pause(); + + vm.expectRevert(); + gasAggregator.adminAddChain(1, address(mockProxy1), true); + } + + /*////////////////////////////////////////////////////////////// + AGGREGATION TESTS + //////////////////////////////////////////////////////////////*/ + + function testAggregateTokensSimple() public { + // Add chains + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + + // Set token usage + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + mockProxy2.setTokensUsedPerEpoch(START_EPOCH, 200 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + // Aggregate + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + uint256[] memory expectedChainIds = new uint256[](2); + expectedChainIds[0] = 1; + expectedChainIds[1] = 2; + uint256[] memory expectedTokens = new uint256[](2); + expectedTokens[0] = 100 ether; + expectedTokens[1] = 200 ether; + + vm.expectEmit(true, true, true, true); + emit AggregatedTokens(START_EPOCH, expectedChainIds, expectedTokens); + + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + assertEq(gasAggregator.currentEpoch(), START_EPOCH + 1); + assertFalse(gasAggregator.paused()); + + bytes32 expectedHash = keccak256(abi.encode(expectedChainIds, expectedTokens)); + assertEq(gasAggregator.aggregatedEpochDataHash(START_EPOCH), expectedHash); + } + + function testAggregateTokensSkipsZeroGasUsage() public { + // Add chains + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + // Set token usage (chain 2 has zero usage) + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + mockProxy2.setTokensUsedPerEpoch(START_EPOCH, 0); + mockProxy3.setTokensUsedPerEpoch(START_EPOCH, 300 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + // Aggregate + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + // Only 2 chains should be in the result (chain 2 is skipped) + uint256[] memory expectedChainIds = new uint256[](2); + expectedChainIds[0] = 1; + expectedChainIds[1] = 3; + uint256[] memory expectedTokens = new uint256[](2); + expectedTokens[0] = 100 ether; + expectedTokens[1] = 300 ether; + + bytes32 expectedHash = keccak256(abi.encode(expectedChainIds, expectedTokens)); + assertEq(gasAggregator.aggregatedEpochDataHash(START_EPOCH), expectedHash); + } + + function testAggregateTokensRevertsWhenEpochNotOver() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + vm.expectRevert(); + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + } + + function testAggregateTokensRevertsWithNoChains() public { + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.NoChainsAdded.selector)); + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + } + + function testAggregateTokensPausesAndUnpauses() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + assertFalse(gasAggregator.paused()); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + // First call pauses + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + // After aggregation completes, it should unpause + assertFalse(gasAggregator.paused()); + } + + /*////////////////////////////////////////////////////////////// + ADMIN FUNCTIONS TESTS + //////////////////////////////////////////////////////////////*/ + + function testSetAddChainFee() public { + uint256 newFee = 10 ether; + + vm.expectEmit(true, true, true, true); + emit AddChainFeeUpdated(ADD_CHAIN_FEE, newFee); + + gasAggregator.setAddChainFee(newFee); + + assertEq(gasAggregator.addChainFee(), newFee); + } + + function testSetAddChainFeeRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.setAddChainFee(10 ether); + } + + function testSetMaxAppchainsToQuery() public { + uint256 newMax = 50; + + vm.expectEmit(true, true, true, true); + emit UpdateMaxAppchainsToQuery(START_EPOCH, newMax); + + gasAggregator.setMaxAppchainsToQuery(newMax); + + assertEq(gasAggregator.maxAppchainsToQuery(), newMax); + } + + function testSetMaxAppchainsToQueryRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.setMaxAppchainsToQuery(50); + } + + function testSetMaxAppchainsToQueryRevertsWhenPaused() public { + gasAggregator.pause(); + + vm.expectRevert(); + gasAggregator.setMaxAppchainsToQuery(50); + } + + function testRemoveAppchains() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + + assertEq(gasAggregator.getTrackedChainCount(), 2); + + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 1; + + vm.expectEmit(true, true, true, true); + emit ChainRemoved(START_EPOCH, 1); + + gasAggregator.removeAppchains(chainsToRemove); + + assertEq(gasAggregator.getTrackedChainCount(), 1); + assertEq(gasAggregator.getTrackedChainId(0), 2); + } + + function testRemoveAppchainsMultiple() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + uint256[] memory chainsToRemove = new uint256[](2); + chainsToRemove[0] = 1; + chainsToRemove[1] = 3; + + gasAggregator.removeAppchains(chainsToRemove); + + assertEq(gasAggregator.getTrackedChainCount(), 1); + assertEq(gasAggregator.getTrackedChainId(0), 2); + } + + function testRemoveAppchainsRevertsOnNonOwner() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 1; + + vm.prank(user); + vm.expectRevert(); + gasAggregator.removeAppchains(chainsToRemove); + } + + function testRemoveAppchainsRevertsWhenPaused() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.pause(); + + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 1; + + vm.expectRevert(); + gasAggregator.removeAppchains(chainsToRemove); + } + + function testRemoveAppchainsRevertsOnNonExistent() public { + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 999; + + vm.expectRevert(); + gasAggregator.removeAppchains(chainsToRemove); + } + + function testWithdrawFees() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + // Simulate some fees collected + vm.deal(address(gasAggregator), 10 ether); + + address payable recipient = payable(address(0xdead)); + uint256 balanceBefore = recipient.balance; + + gasAggregator.withdrawFees(recipient, 5 ether); + + assertEq(recipient.balance, balanceBefore + 5 ether); + assertEq(address(gasAggregator).balance, 5 ether); + } + + function testWithdrawFeesAll() public { + vm.deal(address(gasAggregator), 10 ether); + + address payable recipient = payable(address(0xdead)); + uint256 balanceBefore = recipient.balance; + + // Passing 0 withdraws all + gasAggregator.withdrawFees(recipient, 0); + + assertEq(recipient.balance, balanceBefore + 10 ether); + assertEq(address(gasAggregator).balance, 0); + } + + function testWithdrawFeesRevertsOnZeroAddress() public { + vm.deal(address(gasAggregator), 10 ether); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ZeroAddress.selector)); + gasAggregator.withdrawFees(payable(address(0)), 5 ether); + } + + function testWithdrawFeesRevertsOnInsufficientBalance() public { + vm.deal(address(gasAggregator), 5 ether); + + vm.expectRevert(); + gasAggregator.withdrawFees(payable(address(0xdead)), 10 ether); + } + + function testWithdrawFeesRevertsOnNonOwner() public { + vm.deal(address(gasAggregator), 10 ether); + + vm.prank(user); + vm.expectRevert(); + gasAggregator.withdrawFees(payable(address(0xdead)), 5 ether); + } + + function testSetFactory() public { + address factoryAddress = address(0x1234); + bytes32 bytecodeHash = keccak256("test"); + + gasAggregator.setFactory(factoryAddress, bytecodeHash); + + assertEq(gasAggregator.factory(), factoryAddress); + assertEq(gasAggregator.syndicateProxyBytecodeHash(), bytecodeHash); + } + + function testSetFactoryRevertsOnZeroAddress() public { + bytes32 bytecodeHash = keccak256("test"); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ZeroAddress.selector)); + gasAggregator.setFactory(address(0), bytecodeHash); + } + + function testSetFactoryRevertsOnZeroHash() public { + address factoryAddress = address(0x1234); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.InvalidDataHash.selector)); + gasAggregator.setFactory(factoryAddress, bytes32(0)); + } + + function testSetFactoryRevertsOnAlreadySet() public { + address factoryAddress = address(0x1234); + bytes32 bytecodeHash = keccak256("test"); + + gasAggregator.setFactory(factoryAddress, bytecodeHash); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.FactoryAlreadySet.selector)); + gasAggregator.setFactory(address(0x5678), bytecodeHash); + } + + function testSetFactoryRevertsOnNonOwner() public { + address factoryAddress = address(0x1234); + bytes32 bytecodeHash = keccak256("test"); + + vm.prank(user); + vm.expectRevert(); + gasAggregator.setFactory(factoryAddress, bytecodeHash); + } + + /*////////////////////////////////////////////////////////////// + PAUSE/UNPAUSE TESTS + //////////////////////////////////////////////////////////////*/ + + function testPause() public { + assertFalse(gasAggregator.paused()); + + gasAggregator.pause(); + + assertTrue(gasAggregator.paused()); + } + + function testUnpause() public { + gasAggregator.pause(); + assertTrue(gasAggregator.paused()); + + gasAggregator.unpause(); + + assertFalse(gasAggregator.paused()); + assertEq(gasAggregator.currentAggregateIndex(), 0); + assertEq(gasAggregator.pendingDataHash(), bytes32(0)); + } + + function testPauseRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.pause(); + } + + function testUnpauseRevertsOnNonOwner() public { + gasAggregator.pause(); + + vm.prank(user); + vm.expectRevert(); + gasAggregator.unpause(); + } + + /*////////////////////////////////////////////////////////////// + VIEW FUNCTIONS TESTS + //////////////////////////////////////////////////////////////*/ + + function testGetTrackedChainCount() public { + assertEq(gasAggregator.getTrackedChainCount(), 0); + + gasAggregator.adminAddChain(1, address(mockProxy1), true); + assertEq(gasAggregator.getTrackedChainCount(), 1); + + gasAggregator.adminAddChain(2, address(mockProxy2), true); + assertEq(gasAggregator.getTrackedChainCount(), 2); + } + + function testGetTrackedChainIds() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + uint256[] memory chainIds = gasAggregator.getTrackedChainIds(); + + assertEq(chainIds.length, 3); + assertEq(chainIds[0], 1); + assertEq(chainIds[1], 2); + assertEq(chainIds[2], 3); + } + + function testGetTrackedChainId() public { + gasAggregator.adminAddChain(10, address(mockProxy1), true); + gasAggregator.adminAddChain(20, address(mockProxy2), true); + + assertEq(gasAggregator.getTrackedChainId(0), 10); + assertEq(gasAggregator.getTrackedChainId(1), 20); + } + + function testAggregatedEpochDataHash() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + + // Move to next epoch and aggregate + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + bytes32 hash = gasAggregator.aggregatedEpochDataHash(START_EPOCH); + assertTrue(hash != bytes32(0)); + } + + /*////////////////////////////////////////////////////////////// + SIMULATE AGGREGATE TESTS + //////////////////////////////////////////////////////////////*/ + + function testSimulateAggregateTokens() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + mockProxy2.setTokensUsedPerEpoch(START_EPOCH, 200 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + (uint256 nextIndex, uint256[] memory chainIds, uint256[] memory tokens) = + gasAggregator.simulateAggregateTokens(0, emptyChainIds, emptyTokens); + + assertEq(nextIndex, 0); // All chains processed in one go + assertEq(chainIds.length, 2); + assertEq(tokens.length, 2); + assertEq(chainIds[0], 1); + assertEq(chainIds[1], 2); + assertEq(tokens[0], 100 ether); + assertEq(tokens[1], 200 ether); + } +} diff --git a/synd-contracts/test/staking/GasArchiveTest.t.sol b/synd-contracts/test/staking/GasArchiveTest.t.sol index a85937c25..7893eb12d 100644 --- a/synd-contracts/test/staking/GasArchiveTest.t.sol +++ b/synd-contracts/test/staking/GasArchiveTest.t.sol @@ -1,7 +1,7 @@ pragma solidity 0.8.28; import {Test} from "forge-std/Test.sol"; -import {GasArchive} from "../../src/staking/GasArchive.sol"; +import {GasArchive, GasArchiveStorage} from "../../src/staking/GasArchive.sol"; import {RLPReader} from "../../src/staking/lib/RLPReader.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; @@ -11,8 +11,9 @@ contract GasArchiveTestHelper is GasArchive { {} function setEpochDataHashForTesting(uint256 newEpoch, uint256 seqChainId, bytes32 hash) external { - require(newEpoch <= epoch, "cannot set future epoch data hash"); - epochVerifiedDataHash[epoch][seqChainId] = hash; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(newEpoch <= $.epoch, "cannot set future epoch data hash"); + $.epochVerifiedDataHash[$.epoch][seqChainId] = hash; } } diff --git a/synd-contracts/test/staking/GasMeter.t.sol b/synd-contracts/test/staking/GasMeter.t.sol new file mode 100644 index 000000000..9b688095b --- /dev/null +++ b/synd-contracts/test/staking/GasMeter.t.sol @@ -0,0 +1,96 @@ +pragma solidity 0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {GasMeter} from "../../src/staking/GasMeter.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract GasMeterTestHelper { + GasMeter public gasMeter; + + event Sequence(address indexed sequencer, uint256 loops); + + event RawData(bytes data, uint256 length); + + constructor(GasMeter _gasMeter) { + gasMeter = _gasMeter; + } + + function callTrackCall(uint256 loops) external { + bytes memory meteredCall = abi.encodeWithSelector(this.sequence.selector, msg.sender, loops); + gasMeter.meterCall(meteredCall); + } + + function sequence(address sequencer, uint256 loops) external { + require(msg.sender == address(gasMeter), "Only callable by GasMeter"); + for (uint256 i = 0; i < loops; i++) { + // Loop to use gas + } + emit Sequence(sequencer, loops); + } + + function trackedSequence(uint256 loops) external returns (uint256) { + uint256 startGas = gasleft(); + for (uint256 i = 0; i < loops; i++) { + // Loop to use gas + } + emit Sequence(msg.sender, loops); + return startGas - gasleft(); + } +} + +contract GasMeterTest is Test { + address public gasMeterImpl; + GasMeter public gasMeter; + GasMeterTestHelper public gasMeterTestHelper; + + address public admin; + uint256 public epoch = 1; + + function setUp() public { + admin = makeAddr("admin"); + + // Deploy GasTracker implementation + gasMeterImpl = address(new GasMeter()); + + // Deploy GasTracker proxy + vm.prank(admin); + gasMeter = GasMeter(address(new ERC1967Proxy(gasMeterImpl, abi.encodeCall(GasMeter.initialize, ())))); + + gasMeterTestHelper = new GasMeterTestHelper(gasMeter); + + vm.warp(gasMeter.getEpochStart(epoch)); + } + + function testMeteredCall() public { + gasMeterTestHelper.callTrackCall(1000); + uint256 result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(1000), 1000); + } + + function testEpochTracking() public { + gasMeterTestHelper.callTrackCall(1000); + uint256 result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(1000), 1000); + + epoch++; + vm.warp(gasMeter.getEpochStart(epoch)); + gasMeterTestHelper.callTrackCall(10000); + result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(10000), 1000); + + result = gasMeter.gasUsed(epoch + 1, address(gasMeterTestHelper)); + assertEq(result, 0); + } + + function testDifferentChains() public { + GasMeterTestHelper gasMeterTestHelper2 = new GasMeterTestHelper(gasMeter); + gasMeterTestHelper2.callTrackCall(1000); + uint256 result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper2)); + assertApproxEqAbs(result, gasMeterTestHelper2.trackedSequence(1000), 1000); + + gasMeterTestHelper.callTrackCall(1000); + result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(1000), 1000); + } +} diff --git a/synd-contracts/test/staking/PerformancePoolTest.t.sol b/synd-contracts/test/staking/PerformancePoolTest.t.sol index c452d3e1f..52bc806b4 100644 --- a/synd-contracts/test/staking/PerformancePoolTest.t.sol +++ b/synd-contracts/test/staking/PerformancePoolTest.t.sol @@ -7,8 +7,7 @@ import {Vm} from "forge-std/Vm.sol"; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {PerformancePool} from "src/staking/PerformancePool.sol"; import {RewardPoolBase} from "src/staking/RewardPoolBase.sol"; -import {UD60x18, ud, convert} from "@prb/math/src/UD60x18.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; +import {ud} from "@prb/math/src/UD60x18.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; import {GasArchive} from "src/staking/GasArchive.sol"; diff --git a/synd-contracts/test/staking/RewardPoolBaseTest.t.sol b/synd-contracts/test/staking/RewardPoolBaseTest.t.sol index c28528b63..0910ac610 100644 --- a/synd-contracts/test/staking/RewardPoolBaseTest.t.sol +++ b/synd-contracts/test/staking/RewardPoolBaseTest.t.sol @@ -6,8 +6,7 @@ import {Vm} from "forge-std/Vm.sol"; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {RewardPoolBase} from "src/staking/RewardPoolBase.sol"; -import {UD60x18, ud, convert} from "@prb/math/src/UD60x18.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; +import {convert} from "@prb/math/src/UD60x18.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; contract MockRewardPoolBase is RewardPoolBase { diff --git a/synd-contracts/test/staking/SyndStakingTest.t.sol b/synd-contracts/test/staking/SyndStakingTest.t.sol index 985b6a534..e261980ad 100644 --- a/synd-contracts/test/staking/SyndStakingTest.t.sol +++ b/synd-contracts/test/staking/SyndStakingTest.t.sol @@ -4,10 +4,8 @@ pragma solidity 0.8.28; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {BasePool} from "src/staking/BasePool.sol"; import {PerformancePool} from "src/staking/PerformancePool.sol"; -import {EpochTracker} from "src/staking/EpochTracker.sol"; import {Test} from "forge-std/Test.sol"; import {Vm} from "forge-std/Vm.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; contract ReentrantContract { diff --git a/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol b/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol index 4eec9938f..828eee6ed 100644 --- a/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol +++ b/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol @@ -661,9 +661,10 @@ contract ArbitrumBridgeProxyTest is Test { // If the test call succeeds, reset and do the actual test vm.deal(address(bridgeProxy), 10 ether); // Reset bridge balance - uint256 withdrawAmount = 1 ether; - uint256 initialBridgeBalance = address(bridgeProxy).balance; - uint256 initialRecipientBalance = recipient_.balance; + // Reassign values after resetting bridge balance + withdrawAmount = 1 ether; + initialBridgeBalance = address(bridgeProxy).balance; + initialRecipientBalance = recipient_.balance; vm.prank(admin); bridgeProxy.withdrawEth(payable(recipient_), withdrawAmount); diff --git a/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol b/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol index 02a7c08f2..8dcc6bd9a 100644 --- a/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol +++ b/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol @@ -64,54 +64,54 @@ contract EmissionsForkTest is Test, EpochTracker { // Token amounts per epoch based on the provided data (in wei) uint256[48] memory tokensPerEpoch = [ - uint256(1306706), // Epoch 0 - uint256(1319773), // Epoch 1 - uint256(1332971), // Epoch 2 - uint256(1346301), // Epoch 3 - uint256(1359764), // Epoch 4 - uint256(1373362), // Epoch 5 - uint256(1387095), // Epoch 6 - uint256(1400966), // Epoch 7 - uint256(1414976), // Epoch 8 - uint256(1429126), // Epoch 9 - uint256(1443417), // Epoch 10 - uint256(1457851), // Epoch 11 - uint256(1472430), // Epoch 12 - uint256(1487154), // Epoch 13 - uint256(1502025), // Epoch 14 - uint256(1517046), // Epoch 15 - uint256(1532216), // Epoch 16 - uint256(1547538), // Epoch 17 - uint256(1563014), // Epoch 18 - uint256(1578644), // Epoch 19 - uint256(1594430), // Epoch 20 - uint256(1610375), // Epoch 21 - uint256(1626479), // Epoch 22 - uint256(1642743), // Epoch 23 - uint256(1659171), // Epoch 24 - uint256(1675762), // Epoch 25 - uint256(1692520), // Epoch 26 - uint256(1709445), // Epoch 27 - uint256(1726540), // Epoch 28 - uint256(1743805), // Epoch 29 - uint256(1761243), // Epoch 30 - uint256(1778856), // Epoch 31 - uint256(1796645), // Epoch 32 - uint256(1814611), // Epoch 33 - uint256(1832757), // Epoch 34 - uint256(1851085), // Epoch 35 - uint256(1869596), // Epoch 36 - uint256(1888292), // Epoch 37 - uint256(1907174), // Epoch 38 - uint256(1926246), // Epoch 39 - uint256(1945509), // Epoch 40 - uint256(1964964), // Epoch 41 - uint256(1984614), // Epoch 42 - uint256(2004460), // Epoch 43 - uint256(2024505), // Epoch 44 - uint256(2044750), // Epoch 45 - uint256(2065198), // Epoch 46 - uint256(2085850) // Epoch 47 + uint256(1279482), // Epoch 0 + uint256(1292277), // Epoch 1 + uint256(1305200), // Epoch 2 + uint256(1318253), // Epoch 3 + uint256(1331435), // Epoch 4 + uint256(1344750), // Epoch 5 + uint256(1358197), // Epoch 6 + uint256(1371779), // Epoch 7 + uint256(1385497), // Epoch 8 + uint256(1399352), // Epoch 9 + uint256(1413345), // Epoch 10 + uint256(1427479), // Epoch 11 + uint256(1441754), // Epoch 12 + uint256(1456171), // Epoch 13 + uint256(1470732), // Epoch 14 + uint256(1485440), // Epoch 15 + uint256(1500294), // Epoch 16 + uint256(1515297), // Epoch 17 + uint256(1530451), // Epoch 18 + uint256(1545755), // Epoch 19 + uint256(1561212), // Epoch 20 + uint256(1576825), // Epoch 21 + uint256(1592594), // Epoch 22 + uint256(1608519), // Epoch 23 + uint256(1624604), // Epoch 24 + uint256(1640850), // Epoch 25 + uint256(1657259), // Epoch 26 + uint256(1673831), // Epoch 27 + uint256(1690570), // Epoch 28 + uint256(1707475), // Epoch 29 + uint256(1724550), // Epoch 30 + uint256(1741796), // Epoch 31 + uint256(1759214), // Epoch 32 + uint256(1776806), // Epoch 33 + uint256(1794574), // Epoch 34 + uint256(1812520), // Epoch 35 + uint256(1830646), // Epoch 36 + uint256(1848952), // Epoch 37 + uint256(1867441), // Epoch 38 + uint256(1886115), // Epoch 39 + uint256(1904977), // Epoch 40 + uint256(1924027), // Epoch 41 + uint256(1943267), // Epoch 42 + uint256(1962700), // Epoch 43 + uint256(1982327), // Epoch 44 + uint256(2002151), // Epoch 45 + uint256(2022173), // Epoch 46 + uint256(2042394) // Epoch 47 ]; if (epoch >= 48) { @@ -124,54 +124,54 @@ contract EmissionsForkTest is Test, EpochTracker { function expectedMintAmount_ChangeFactor098(uint256 epoch) public pure returns (uint256) { // Token amounts per epoch based on the provided data (in wei) uint256[48] memory tokensPerEpoch = [ - uint256(2577259), // Epoch 0 - uint256(2525713), // Epoch 1 - uint256(2475199), // Epoch 2 - uint256(2425695), // Epoch 3 - uint256(2377181), // Epoch 4 - uint256(2329638), // Epoch 5 - uint256(2283045), // Epoch 6 - uint256(2237384), // Epoch 7 - uint256(2192636), // Epoch 8 - uint256(2148784), // Epoch 9 - uint256(2105808), // Epoch 10 - uint256(2063692), // Epoch 11 - uint256(2022418), // Epoch 12 - uint256(1981970), // Epoch 13 - uint256(1942330), // Epoch 14 - uint256(1903484), // Epoch 15 - uint256(1865414), // Epoch 16 - uint256(1828106), // Epoch 17 - uint256(1791544), // Epoch 18 - uint256(1755713), // Epoch 19 - uint256(1720598), // Epoch 20 - uint256(1686187), // Epoch 21 - uint256(1652463), // Epoch 22 - uint256(1619414), // Epoch 23 - uint256(1587025), // Epoch 24 - uint256(1555285), // Epoch 25 - uint256(1524179), // Epoch 26 - uint256(1493696), // Epoch 27 - uint256(1463822), // Epoch 28 - uint256(1434545), // Epoch 29 - uint256(1405854), // Epoch 30 - uint256(1377737), // Epoch 31 - uint256(1350183), // Epoch 32 - uint256(1323179), // Epoch 33 - uint256(1296715), // Epoch 34 - uint256(1270781), // Epoch 35 - uint256(1245366), // Epoch 36 - uint256(1220458), // Epoch 37 - uint256(1196049), // Epoch 38 - uint256(1172128), // Epoch 39 - uint256(1148686), // Epoch 40 - uint256(1125712), // Epoch 41 - uint256(1103198), // Epoch 42 - uint256(1081134), // Epoch 43 - uint256(1059511), // Epoch 44 - uint256(1038321), // Epoch 45 - uint256(1017556), // Epoch 46 - uint256(997205) // Epoch 47 + uint256(2523566), // Epoch 0 + uint256(2473093), // Epoch 1 + uint256(2423632), // Epoch 2 + uint256(2375159), // Epoch 3 + uint256(2327656), // Epoch 4 + uint256(2281103), // Epoch 5 + uint256(2235481), // Epoch 6 + uint256(2190771), // Epoch 7 + uint256(2146956), // Epoch 8 + uint256(2104017), // Epoch 9 + uint256(2061937), // Epoch 10 + uint256(2020698), // Epoch 11 + uint256(1980284), // Epoch 12 + uint256(1940678), // Epoch 13 + uint256(1901864), // Epoch 14 + uint256(1863828), // Epoch 15 + uint256(1826551), // Epoch 16 + uint256(1790020), // Epoch 17 + uint256(1754220), // Epoch 18 + uint256(1719135), // Epoch 19 + uint256(1684752), // Epoch 20 + uint256(1651058), // Epoch 21 + uint256(1618036), // Epoch 22 + uint256(1585676), // Epoch 23 + uint256(1553961), // Epoch 24 + uint256(1522883), // Epoch 25 + uint256(1492425), // Epoch 26 + uint256(1462577), // Epoch 27 + uint256(1433325), // Epoch 28 + uint256(1404658), // Epoch 29 + uint256(1376565), // Epoch 30 + uint256(1349034), // Epoch 31 + uint256(1322054), // Epoch 32 + uint256(1295612), // Epoch 33 + uint256(1269700), // Epoch 34 + uint256(1244306), // Epoch 35 + uint256(1219420), // Epoch 36 + uint256(1195031), // Epoch 37 + uint256(1171131), // Epoch 38 + uint256(1147708), // Epoch 39 + uint256(1124755), // Epoch 40 + uint256(1102259), // Epoch 41 + uint256(1080214), // Epoch 42 + uint256(1058610), // Epoch 43 + uint256(1037437), // Epoch 44 + uint256(1016689), // Epoch 45 + uint256(996356), // Epoch 46 + uint256(976429) // Epoch 47 ]; if (epoch >= 48) { @@ -184,56 +184,54 @@ contract EmissionsForkTest is Test, EpochTracker { function expectedMintAmount_ChangeFactorMultiple(uint256 epoch) public pure returns (uint256) { // Token amounts per epoch based on the provided data (in wei) uint256[48] memory tokensPerEpoch = [ - uint256(1666667), // Epoch 0 - uint256(1666667), // Epoch 1 - uint256(1666667), // Epoch 2 - uint256(1666667), // Epoch 3 - // CHANGE FACTOR: 1.015 - uint256(1188761), // Epoch 4 - uint256(1206592), // Epoch 5 - uint256(1224691), // Epoch 6 - uint256(1243061), // Epoch 7 - uint256(1261707), // Epoch 8 - uint256(1280633), // Epoch 9 - uint256(1299843), // Epoch 10 - uint256(1319340), // Epoch 11 - uint256(1339130), // Epoch 12 - uint256(1359217), // Epoch 13 - uint256(1379606), // Epoch 14 - uint256(1400300), // Epoch 15 - uint256(1421304), // Epoch 16 - uint256(1442624), // Epoch 17 - uint256(1464263), // Epoch 18 - uint256(1486227), // Epoch 19 - uint256(1508520), // Epoch 20 - // CHANGE FACTOR: 0.995 - uint256(1995084), // Epoch 21 - uint256(1985108), // Epoch 22 - uint256(1975183), // Epoch 23 - uint256(1965307), // Epoch 24 - uint256(1955480), // Epoch 25 - uint256(1945703), // Epoch 26 - uint256(1935975), // Epoch 27 - uint256(1926295), // Epoch 28 - uint256(1916663), // Epoch 29 - uint256(1907080), // Epoch 30 - uint256(1897545), // Epoch 31 - uint256(1888057), // Epoch 32 - uint256(1878617), // Epoch 33 - uint256(1869223), // Epoch 34 - uint256(1859877), // Epoch 35 - uint256(1850578), // Epoch 36 - uint256(1841325), // Epoch 37 - uint256(1832119), // Epoch 38 - uint256(1822958), // Epoch 39 - uint256(1813843), // Epoch 40 - uint256(1804774), // Epoch 41 - uint256(1795751), // Epoch 42 - uint256(1786772), // Epoch 43 - uint256(1777838), // Epoch 44 - uint256(1768949), // Epoch 45 - uint256(1760105), // Epoch 46 - uint256(1751305) // Epoch 47 + uint256(1631944), // Epoch 0 + uint256(1631944), // Epoch 1 + uint256(1631944), // Epoch 2 + uint256(1631944), // Epoch 3 + uint256(1163995), // Epoch 4 + uint256(1181454), // Epoch 5 + uint256(1199176), // Epoch 6 + uint256(1217163), // Epoch 7 + uint256(1235421), // Epoch 8 + uint256(1253953), // Epoch 9 + uint256(1272762), // Epoch 10 + uint256(1291853), // Epoch 11 + uint256(1311231), // Epoch 12 + uint256(1330899), // Epoch 13 + uint256(1350864), // Epoch 14 + uint256(1371127), // Epoch 15 + uint256(1391693), // Epoch 16 + uint256(1412569), // Epoch 17 + uint256(1433757), // Epoch 18 + uint256(1455263), // Epoch 19 + uint256(1477092), // Epoch 20 + uint256(1953519), // Epoch 21 + uint256(1943751), // Epoch 22 + uint256(1934033), // Epoch 23 + uint256(1924363), // Epoch 24 + uint256(1914740), // Epoch 25 + uint256(1905167), // Epoch 26 + uint256(1895642), // Epoch 27 + uint256(1886163), // Epoch 28 + uint256(1876732), // Epoch 29 + uint256(1867349), // Epoch 30 + uint256(1858012), // Epoch 31 + uint256(1848722), // Epoch 32 + uint256(1839479), // Epoch 33 + uint256(1830280), // Epoch 34 + uint256(1821129), // Epoch 35 + uint256(1812024), // Epoch 36 + uint256(1802964), // Epoch 37 + uint256(1793949), // Epoch 38 + uint256(1784979), // Epoch 39 + uint256(1776054), // Epoch 40 + uint256(1767174), // Epoch 41 + uint256(1758339), // Epoch 42 + uint256(1749547), // Epoch 43 + uint256(1740799), // Epoch 44 + uint256(1732095), // Epoch 45 + uint256(1723436), // Epoch 46 + uint256(1714819) // Epoch 47 ]; if (epoch >= 48) { @@ -356,7 +354,7 @@ contract EmissionsForkTest is Test, EpochTracker { vm.roll(blockNumber + i); emissionsScheduler.mintEmission(); uint256 mintAmount = round(emissionsScheduler.totalEmissionsMinted() - totalMinted); - uint256 expected = uint256(1666667); + uint256 expected = uint256(1631944); if (mintAmount != expected) { console2.log("Epoch %s: Expected %s, Actual %s", i, expected, mintAmount); if (mintAmount > expected + acceptedDiff || mintAmount < expected - acceptedDiff) { diff --git a/synd-contracts/test/upgrade/StorageUpgradeTest.t.sol b/synd-contracts/test/upgrade/StorageUpgradeTest.t.sol new file mode 100644 index 000000000..0320e8a0b --- /dev/null +++ b/synd-contracts/test/upgrade/StorageUpgradeTest.t.sol @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +import {SyndicateSequencingChain} from "../../src/SyndicateSequencingChain.sol"; +import { + SyndicateSequencingChainTestingUpgradeability +} from "./helpers/SyndicateSequencingChainTestingUpgradeability.sol"; + +/// @title StorageUpgradeTest +/// @notice Comprehensive test for storage layout safety during contract upgrades +/// @dev Tests both traditional storage append and ERC-7201 namespaced storage patterns +contract StorageUpgradeTest is Test { + // Constants for testing + uint256 constant TEST_APPCHAIN_ID = 12345; + address constant ADMIN = address(0x9999); + address constant PERMISSION_MODULE = address(1); // Always allow module + address constant GAS_METER = address(2); + + // Contract instances + SyndicateSequencingChain syndicateV1; + SyndicateSequencingChainTestingUpgradeability syndicateV2; + ERC1967Proxy proxy; + + // Storage verification data + struct OriginalStorageData { + uint256 appchainId; + address permissionModule; + } + + event TransactionProcessed(address indexed sender, bytes data); + event MaxGasPerTransactionUpdated(uint256 newMax); + + function setUp() public { + vm.startPrank(ADMIN); + // Deploy V1 implementation + syndicateV1 = new SyndicateSequencingChain(GAS_METER); + + // Deploy proxy pointing to V1 + bytes memory initData = + abi.encodeCall(SyndicateSequencingChain.initialize, (ADMIN, PERMISSION_MODULE, TEST_APPCHAIN_ID)); + + proxy = new ERC1967Proxy(address(syndicateV1), initData); + syndicateV1 = SyndicateSequencingChain(address(proxy)); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + STORAGE LAYOUT VERIFICATION + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that all V1 storage is preserved after upgrade to V2 + function testStoragePreservationAfterUpgrade() public { + vm.startPrank(ADMIN); + + // Capture original storage state + OriginalStorageData memory originalData = OriginalStorageData({ + appchainId: syndicateV1.appchainId(), permissionModule: address(syndicateV1.permissionRequirementModule()) + }); + + // Deploy V2 implementation + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + + // Upgrade proxy to V2 + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + + // Cast proxy to V2 interface + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Verify all original storage is preserved + assertEq(syndicateV2.appchainId(), originalData.appchainId, "appchainId should be preserved"); + assertEq( + address(syndicateV2.permissionRequirementModule()), + originalData.permissionModule, + "permissionRequirementModule should be preserved" + ); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + NAMESPACED STORAGE SAFETY TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that namespaced storage (ERC-7201) works correctly after upgrade + function testNamespacedStorageAfterUpgrade() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Test namespaced storage fields work correctly + // Note: These should be zero-initialized since they're new fields added during upgrade + assertEq(syndicateV2.maxTransactionsPerBatch(), 0, "maxTransactionsPerBatch should be zero-initialized"); + assertFalse(syndicateV2.batchProcessingEnabled(), "batchProcessingEnabled should be false (zero-initialized)"); + assertEq(syndicateV2.lastPermissionUpdate(), 0, "lastPermissionUpdate should be zero-initialized"); + + // Test that we can modify namespaced storage + syndicateV2.toggleBatchProcessing(); // Enable batch processing first + assertTrue(syndicateV2.batchProcessingEnabled(), "batchProcessingEnabled should be enabled"); + + syndicateV2.setMaxTransactionsPerBatch(50); + assertEq(syndicateV2.maxTransactionsPerBatch(), 50, "maxTransactionsPerBatch should be updated"); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + TRADITIONAL STORAGE SAFETY TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that new traditional storage fields work correctly + function testNewTraditionalStorageFields() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Test new traditional storage fields are zero-initialized during upgrade + assertEq(syndicateV2.maxGasPerTransaction(), 0, "maxGasPerTransaction should be zero-initialized"); + assertFalse(syndicateV2.replayProtectionEnabled(), "replayProtectionEnabled should be false (zero-initialized)"); + assertEq(syndicateV2.minTimeBetweenTxs(), 0, "minTimeBetweenTxs should be zero-initialized"); + + // Test that we can modify new fields + vm.expectEmit(true, true, true, true); + emit MaxGasPerTransactionUpdated(500000); + syndicateV2.setMaxGasPerTransaction(500000); + assertEq(syndicateV2.maxGasPerTransaction(), 500000, "maxGasPerTransaction should be updated"); + + syndicateV2.toggleReplayProtection(); + assertTrue(syndicateV2.replayProtectionEnabled(), "replayProtectionEnabled should be toggled to true"); + + syndicateV2.setMinTimeBetweenTxs(60); // 1 minute + assertEq(syndicateV2.minTimeBetweenTxs(), 60, "minTimeBetweenTxs should be updated"); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + FUNCTIONALITY TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that V1 functionality still works after upgrade + function testV1FunctionalityAfterUpgrade() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Enable batch processing for V2 functionality + syndicateV2.toggleBatchProcessing(); + syndicateV2.setMaxTransactionsPerBatch(10); // Set a reasonable limit + + vm.stopPrank(); + + // Test transaction processing still works + bytes memory testData = "test transaction data"; + + vm.expectEmit(true, true, true, true); + emit TransactionProcessed(address(this), testData); + syndicateV2.processTransaction(testData); + + // Test batch processing still works + bytes[] memory batchData = new bytes[](2); + batchData[0] = "tx1"; + batchData[1] = "tx2"; + + vm.expectEmit(true, true, true, true); + emit TransactionProcessed(address(this), batchData[0]); + vm.expectEmit(true, true, true, true); + emit TransactionProcessed(address(this), batchData[1]); + syndicateV2.processTransactionsBulk(batchData); + } + + /// @notice Test new V2 functionality works correctly + function testV2NewFunctionality() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Enable batch processing first, then test batch limit enforcement + syndicateV2.toggleBatchProcessing(); + syndicateV2.setMaxTransactionsPerBatch(1); + + bytes[] memory largeBatch = new bytes[](2); + largeBatch[0] = "tx1"; + largeBatch[1] = "tx2"; + + vm.stopPrank(); + + vm.expectRevert("Too many transactions in batch"); + syndicateV2.processTransactionsBulk(largeBatch); + + // Test replay protection + vm.startPrank(ADMIN); + syndicateV2.toggleReplayProtection(); // Enable replay protection first + syndicateV2.setMinTimeBetweenTxs(5); // 5 seconds (less than current timestamp) + vm.stopPrank(); + + // Set timestamp to something reasonable for testing + vm.warp(100); + + bytes memory txData = "replay test"; + + // Use a completely fresh address for replay protection test + address replayTester = address(0xDEADBEEF); + vm.prank(replayTester); + syndicateV2.processTransaction(txData); // First tx should work + + vm.expectRevert("Transaction too soon after previous"); + vm.prank(replayTester); + syndicateV2.processTransaction(txData); // Immediate second tx should fail + + // Should work after time passes + vm.warp(block.timestamp + 6); // Wait longer than minTimeBetweenTxs (5) + vm.prank(replayTester); + syndicateV2.processTransaction(txData); + } + + /*////////////////////////////////////////////////////////////// + STORAGE COLLISION TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that there are no storage collisions between V1 and V2 + function testNoStorageCollisions() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Set new V2 values + syndicateV2.setMaxGasPerTransaction(999999); + syndicateV2.setMaxTransactionsPerBatch(77); + syndicateV2.setMinTimeBetweenTxs(123); + + // Verify V1 storage is still intact after V2 modifications + assertEq(syndicateV2.appchainId(), TEST_APPCHAIN_ID, "V1 storage should remain intact"); + + // Verify V2 storage is working correctly + assertEq(syndicateV2.maxGasPerTransaction(), 999999, "V2 storage should work correctly"); + assertEq(syndicateV2.maxTransactionsPerBatch(), 77, "V2 namespaced storage should work correctly"); + assertEq(syndicateV2.minTimeBetweenTxs(), 123, "V2 storage should work correctly"); + + vm.stopPrank(); + } +} diff --git a/synd-contracts/test/upgrade/UpgradeFlowIntegrationTest.t.sol b/synd-contracts/test/upgrade/UpgradeFlowIntegrationTest.t.sol new file mode 100644 index 000000000..a32138d55 --- /dev/null +++ b/synd-contracts/test/upgrade/UpgradeFlowIntegrationTest.t.sol @@ -0,0 +1,346 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Test, console2} from "forge-std/Test.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +// Core contracts +import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; +import {GasAggregator} from "src/staking/GasAggregator.sol"; +import {EpochTracker} from "src/staking/EpochTracker.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; + +// Test upgrades +import {SyndicateSequencingChainUpgradeV2} from "./helpers/SyndicateSequencingChainUpgradeV2.sol"; + +// Interfaces and modules +import {IRequirementModule} from "src/interfaces/IRequirementModule.sol"; +import {AlwaysAllowedModule} from "src/sequencing-modules/AlwaysAllowedModule.sol"; + +/// @title UpgradeFlowIntegrationTest +/// @notice Comprehensive integration test for the full upgrade flow +/// @dev Tests the complete upgrade process: +/// 1. Create sequencing chains +/// 2. Upgrade sequencing chain to V2 +/// 3. Verify all storage preserved and new functionality works +/// @dev This test runs as a fork test against risa_devnet +/// @dev Run with: forge test --match-contract UpgradeFlowIntegrationTest --fork-url risa_devnet -vv +contract UpgradeFlowIntegrationTest is Test, EpochTracker { + /*////////////////////////////////////////////////////////////// + TEST CONSTANTS + //////////////////////////////////////////////////////////////*/ + + address constant ADMIN = address(0x1111); + address constant USER = address(0x2222); + uint256 constant TEST_NONCE_1 = 1; + uint256 constant TEST_NONCE_2 = 2; + + /*////////////////////////////////////////////////////////////// + CONTRACT INSTANCES + //////////////////////////////////////////////////////////////*/ + + // V1 Contracts + GasAggregator gasAggregator; + address sequencingChainImpl; + AlwaysAllowedModule permissionModule; + address gasMeter; + + // Created chains + SyndicateSequencingChain chain1; + uint256 chain1Id; + + // V2 Upgrades + SyndicateSequencingChainUpgradeV2 chainV2; + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event SyndicateSequencingChainCreated( + uint256 indexed appchainId, address indexed sequencingChainAddress, address indexed permissionModuleAddress + ); + event TransactionProcessed(address indexed sender, bytes data); + event ProcessingFeeUpdated(uint256 newFee); + event ChainCreationToggled(bool enabled); + + /*////////////////////////////////////////////////////////////// + SETUP + //////////////////////////////////////////////////////////////*/ + + function setUp() public { + // Skip test in CI since the RPC is flaky + vm.skip(true); + + // Create fork from risa_devnet + vm.createSelectFork("risa_devnet"); + + // Fund test accounts with native currency + vm.deal(ADMIN, 100 ether); + vm.deal(USER, 100 ether); + + // Set timestamp to start of epoch 1 + 1 day to ensure we're in a valid epoch + vm.warp(getEpochStart(1) + 1 days); + + // Deploy as ADMIN (simulating the deterministic deployment process) + vm.startPrank(ADMIN); + + // 1. Deploy GasMeter + GasMeter gasMeterImpl = new GasMeter(); + gasMeter = address(new ERC1967Proxy(address(gasMeterImpl), abi.encodeCall(GasMeter.initialize, ()))); + + // 2. Deploy SyndicateSequencingChain implementation + sequencingChainImpl = address(new SyndicateSequencingChain(gasMeter)); + console2.log("Sequencing chain implementation deployed:", address(sequencingChainImpl)); + + // 3. Deploy permission module + permissionModule = new AlwaysAllowedModule(); + console2.log("Permission module deployed:", address(permissionModule)); + + vm.stopPrank(); + } + + function deployChain(address admin, address _permissionModule, uint256 nonce) + public + returns (SyndicateSequencingChain) + { + return SyndicateSequencingChain( + address( + new ERC1967Proxy( + sequencingChainImpl, + abi.encodeCall(SyndicateSequencingChain.initialize, (admin, _permissionModule, nonce)) + ) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + TEST: INITIAL DEPLOYMENT + //////////////////////////////////////////////////////////////*/ + + function test_InitialDeployment() public view { + // Verify gas meter + assertTrue(gasMeter != address(0), "GasMeter should be deployed"); + assertEq(GasMeter(gasMeter).VERSION(), 1_000_000, "GasMeter VERSION should be 1.0.0"); + } + + /*////////////////////////////////////////////////////////////// + TEST: CREATE SEQUENCING CHAIN + //////////////////////////////////////////////////////////////*/ + + function test_CreateSequencingChain() public { + vm.startPrank(ADMIN); + + // Create chain + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + chain1Id = chain1.appchainId(); + + console2.log("Chain created:", address(chain1)); + console2.log("Chain ID:", chain1Id); + + // Verify chain + assertEq(chain1.appchainId(), chain1Id, "Chain ID should match"); + assertEq(chain1.owner(), ADMIN, "Chain owner should be admin"); + assertEq( + address(chain1.permissionRequirementModule()), address(permissionModule), "Permission module should match" + ); + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + TEST: PROCESS TRANSACTIONS ON V1 CHAIN + //////////////////////////////////////////////////////////////*/ + + function test_ProcessTransactionV1() public { + // Create chain first + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Process transaction + bytes memory txData = hex"1234567890"; + + vm.prank(USER); + chain1.processTransaction(txData); + } + + /*////////////////////////////////////////////////////////////// + TEST: UPGRADE SEQUENCING CHAIN TO V2 + //////////////////////////////////////////////////////////////*/ + + function test_UpgradeSequencingChainToV2() public { + // Create chain first + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Store pre-upgrade state + uint256 preAppchainId = chain1.appchainId(); + address preOwner = chain1.owner(); + address prePermissionModule = address(chain1.permissionRequirementModule()); + + vm.startPrank(ADMIN); + + // Deploy V2 implementation + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + console2.log("Chain V2 implementation deployed:", address(chainV2)); + + // Upgrade chain + chain1.upgradeToAndCall(address(chainV2), ""); + console2.log("Chain upgraded to V2"); + + // Cast to V2 interface + SyndicateSequencingChainUpgradeV2 chainProxyV2 = SyndicateSequencingChainUpgradeV2(address(chain1)); + + vm.stopPrank(); + + // Verify storage preserved + assertEq(chainProxyV2.appchainId(), preAppchainId, "AppchainId should be preserved"); + assertEq(chainProxyV2.owner(), preOwner, "Owner should be preserved"); + assertEq( + address(chainProxyV2.permissionRequirementModule()), + prePermissionModule, + "Permission module should be preserved" + ); + + // Verify new V2 functionality + assertEq(chainProxyV2.contractVersion(), "2.0.0", "Chain V2 version should be 2.0.0"); + assertEq(chainProxyV2.processingFee(), 0, "Initial processing fee should be 0"); + assertFalse(chainProxyV2.feeCollectionEnabled(), "Fee collection should be disabled by default"); + assertEq(chainProxyV2.totalFeesCollected(), 0, "Initial total fees should be 0"); + } + + /*////////////////////////////////////////////////////////////// + TEST: FULL UPGRADE FLOW WITH FUNCTIONALITY + //////////////////////////////////////////////////////////////*/ + + function test_FullUpgradeFlowWithFunctionality() public { + // 1. Create chain on V1 + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + chain1Id = chain1.appchainId(); + console2.log("=== Step 1: Chain created on V1 ==="); + + // 2. Process transaction on V1 + bytes memory txData = hex"1234567890"; + vm.prank(USER); + chain1.processTransaction(txData); + console2.log("=== Step 2: Transaction processed on V1 ==="); + + // 5. Upgrade Chain to V2 + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + chain1.upgradeToAndCall(address(chainV2), ""); + SyndicateSequencingChainUpgradeV2 chainProxyV2 = SyndicateSequencingChainUpgradeV2(address(chain1)); + console2.log("=== Step 5: Chain upgraded to V2 ==="); + + // 6. Test new Chain V2 functionality + uint256 testFee = 0.01 ether; + vm.expectEmit(true, true, true, true); + emit ProcessingFeeUpdated(testFee); + chainProxyV2.setProcessingFee(testFee); + assertEq(chainProxyV2.processingFee(), testFee, "Processing fee should be set"); + + chainProxyV2.toggleFeeCollection(); + assertTrue(chainProxyV2.feeCollectionEnabled(), "Fee collection should be enabled"); + console2.log("=== Step 6: Chain V2 functionality configured ==="); + + vm.stopPrank(); + + // 7. Process transaction with fee on V2 + vm.deal(USER, 1 ether); + vm.prank(USER); + chainProxyV2.processTransactionWithFee{value: testFee}(txData); + assertEq(chainProxyV2.totalFeesCollected(), testFee, "Fee should be collected"); + console2.log("=== Step 7: Transaction with fee processed on V2 ==="); + + // 8. Verify old functionality still works + vm.prank(USER); + chainProxyV2.processTransaction(hex"abcdef"); + console2.log("=== Step 8: Old functionality verified ==="); + + // 9. Verify all storage preserved + assertEq(chainProxyV2.appchainId(), chain1Id, "AppchainId should be preserved"); + assertEq(chainProxyV2.owner(), ADMIN, "Owner should be preserved"); + console2.log("=== Step 9: All storage verified ==="); + + console2.log("\n=== FULL UPGRADE FLOW COMPLETED SUCCESSFULLY ==="); + } + + /*////////////////////////////////////////////////////////////// + TEST: MULTIPLE CHAINS UPGRADE + //////////////////////////////////////////////////////////////*/ + + function test_MultipleSequencingChainsUpgrade() public { + vm.startPrank(ADMIN); + + // Create multiple chains on V1 + address chain1Addr = address(deployChain(ADMIN, address(permissionModule), TEST_NONCE_1)); + address chain2Addr = address(deployChain(ADMIN, address(permissionModule), TEST_NONCE_2)); + + console2.log("Two chains created"); + + // Deploy V2 implementation + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + + // Upgrade both chains + SyndicateSequencingChain(chain1Addr).upgradeToAndCall(address(chainV2), ""); + SyndicateSequencingChain(chain2Addr).upgradeToAndCall(address(chainV2), ""); + + console2.log("Both chains upgraded to V2"); + + vm.stopPrank(); + + // Verify both chains + SyndicateSequencingChainUpgradeV2 chain1V2 = SyndicateSequencingChainUpgradeV2(chain1Addr); + SyndicateSequencingChainUpgradeV2 chain2V2 = SyndicateSequencingChainUpgradeV2(chain2Addr); + + assertEq(chain1V2.contractVersion(), "2.0.0", "Chain 1 should be V2"); + assertEq(chain2V2.contractVersion(), "2.0.0", "Chain 2 should be V2"); + assertEq(chain1V2.owner(), ADMIN, "Chain 1 owner preserved"); + assertEq(chain2V2.owner(), ADMIN, "Chain 2 owner preserved"); + + console2.log("Multiple chains upgrade verified"); + } + + /*////////////////////////////////////////////////////////////// + TEST: UPGRADE AUTHORIZATION + //////////////////////////////////////////////////////////////*/ + + function test_RevertWhen_UnauthorizedUpgradeAttempt() public { + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Deploy V2 + vm.prank(ADMIN); + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + + // Try to upgrade as non-owner + vm.prank(USER); + vm.expectRevert(); + chain1.upgradeToAndCall(address(chainV2), ""); + } + + /*////////////////////////////////////////////////////////////// + TEST: STORAGE LAYOUT VALIDATION + //////////////////////////////////////////////////////////////*/ + + function test_StorageLayoutPreservation() public { + // Create chain and set various storage values + vm.startPrank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Capture all storage + uint256 preAppchainId = chain1.appchainId(); + address preOwner = chain1.owner(); + address preGasMeter = chain1.gasMeter(); + + // Upgrade + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + chain1.upgradeToAndCall(address(chainV2), ""); + SyndicateSequencingChainUpgradeV2 chainProxyV2 = SyndicateSequencingChainUpgradeV2(address(chain1)); + + vm.stopPrank(); + + // Verify ALL storage preserved + assertEq(chainProxyV2.appchainId(), preAppchainId, "AppchainId must be preserved"); + assertEq(chainProxyV2.owner(), preOwner, "Owner must be preserved"); + assertEq(chainProxyV2.gasMeter(), preGasMeter, "GasMeter must be preserved"); + } +} diff --git a/synd-contracts/test/upgrade/helpers/SequencingModuleCheckerTestingUpgradeability.sol b/synd-contracts/test/upgrade/helpers/SequencingModuleCheckerTestingUpgradeability.sol new file mode 100644 index 000000000..b9c56aa32 --- /dev/null +++ b/synd-contracts/test/upgrade/helpers/SequencingModuleCheckerTestingUpgradeability.sol @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {DataTooLarge} from "@arbitrum/nitro-contracts/src/libraries/Error.sol"; + +/// @custom:storage-location erc7201:syndicate.storage.SequencingModule +struct SequencingModuleStorage { + /// @notice The requirement module that handles checks + IPermissionModule permissionRequirementModule; + /// @notice NEW FIELD: Maximum number of transactions per batch + uint256 maxTransactionsPerBatch; + /// @notice NEW FIELD: Enable/disable batch processing + bool batchProcessingEnabled; + /// @notice NEW FIELD: Timestamp of last permission update + uint256 lastPermissionUpdate; +} + +/// @title SequencingModuleCheckerTestingUpgradeability +/// @notice Upgraded version with additional storage fields - tests namespaced storage safety +abstract contract SequencingModuleCheckerTestingUpgradeability is Initializable, OwnableUpgradeable, IPermissionModule { + event RequirementModuleUpdated(address indexed newModule); + event MaxTransactionsPerBatchUpdated(uint256 newMax); + event BatchProcessingToggled(bool enabled); + + // Just in case, limit the amount of tx data sent to the isAllowed function. + uint256 public constant maxDataSize = 200000; + + // cast index-erc7201 syndicate.storage.SequencingModule + bytes32 public constant SEQUENCING_MODULE_STORAGE_LOCATION = + 0x5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500; + + function _getSequencingModuleStorage() private pure returns (SequencingModuleStorage storage $) { + assembly { + $.slot := SEQUENCING_MODULE_STORAGE_LOCATION + } + } + + function permissionRequirementModule() public view returns (IPermissionModule) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.permissionRequirementModule; + } + + /// @notice NEW GETTER: Get max transactions per batch + function maxTransactionsPerBatch() public view returns (uint256) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.maxTransactionsPerBatch; + } + + /// @notice NEW GETTER: Check if batch processing is enabled + function batchProcessingEnabled() public view returns (bool) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.batchProcessingEnabled; + } + + /// @notice NEW GETTER: Get last permission update timestamp + function lastPermissionUpdate() public view returns (uint256) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.lastPermissionUpdate; + } + + function __SequencingModuleChecker_init(address admin, address _permissionRequirementModule) + internal + onlyInitializing + { + __Ownable_init(admin); + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_permissionRequirementModule); + // Initialize new fields with default values + _getSequencingModuleStorage().maxTransactionsPerBatch = 100; + _getSequencingModuleStorage().batchProcessingEnabled = true; + _getSequencingModuleStorage().lastPermissionUpdate = block.timestamp; + } + + /// @notice Updates the requirement module + /// @param _newModule The address of the new requirement module + function updateRequirementModule(address _newModule) external onlyOwner { + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_newModule); + _getSequencingModuleStorage().lastPermissionUpdate = block.timestamp; // NEW: Track update time + + emit RequirementModuleUpdated(_newModule); + } + + /// @notice NEW FUNCTION: Set max transactions per batch + function setMaxTransactionsPerBatch(uint256 _max) external onlyOwner { + require(_max > 0, "Max must be greater than 0"); + _getSequencingModuleStorage().maxTransactionsPerBatch = _max; + emit MaxTransactionsPerBatchUpdated(_max); + } + + /// @notice NEW FUNCTION: Toggle batch processing + function toggleBatchProcessing() external onlyOwner { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + $.batchProcessingEnabled = !$.batchProcessingEnabled; + emit BatchProcessingToggled($.batchProcessingEnabled); + } + + /// @notice Checks if both the proposer and calldata are allowed + function isAllowed(address proposer, address originator, bytes memory data) public view returns (bool) { + require(data.length <= maxDataSize, DataTooLarge(data.length, maxDataSize)); + return address(permissionRequirementModule()) == address(1) + || permissionRequirementModule().isAllowed(proposer, originator, data); + } +} diff --git a/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainTestingUpgradeability.sol b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainTestingUpgradeability.sol new file mode 100644 index 000000000..a61f45047 --- /dev/null +++ b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainTestingUpgradeability.sol @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {ISyndicateSequencingChain} from "src/interfaces/ISyndicateSequencingChain.sol"; +import {GasCounter} from "src/staking/GasCounter.sol"; +import "./SequencingModuleCheckerTestingUpgradeability.sol"; + +/// @custom:storage-location erc7201:syndicate.storage.SyndicateSequencingChain +struct SyndicateSequencingChainStorage { + /// @notice The ID of the App chain that this contract is sequencing transactions for. + uint256 appchainId; + /// @notice Version of the SyndicateSequencingChain contract (updatable during upgrades) + uint256 version; +} + +/// @title SyndicateSequencingChainTestingUpgradeability +/// @notice Upgraded version with additional storage fields - tests upgrade safety +/// @dev This tests both traditional storage (appended to end) and namespaced storage safety +contract SyndicateSequencingChainTestingUpgradeability is + Initializable, + SequencingModuleCheckerTestingUpgradeability, + ISyndicateSequencingChain, + GasCounter, + UUPSUpgradeable +{ + error NoTxData(); + error TransactionOrSenderNotAllowed(); + + /*////////////////////////////////////////////////////////////// + NAMESPACED STORAGE + //////////////////////////////////////////////////////////////*/ + + // cast index-erc7201 syndicate.storage.SyndicateSequencingChain + bytes32 public constant SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION = + 0xc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400; + + function _getSyndicateSequencingChainStorage() private pure returns (SyndicateSequencingChainStorage storage $) { + assembly { + $.slot := SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + } + } + + function appchainId() public view returns (uint256) { + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + return $.appchainId; + } + + function version() public view returns (uint256) { + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + return $.version; + } + + /*////////////////////////////////////////////////////////////// + NEW V2 GLOBAL VARIABLES - APPENDED SAFELY + //////////////////////////////////////////////////////////////*/ + + /// @notice V2: Maximum gas limit per transaction + uint256 public maxGasPerTransaction; + + /// @notice V2: Enable/disable transaction replay protection + bool public replayProtectionEnabled; + + /// @notice V2: Minimum time between transactions from same address + uint256 public minTimeBetweenTxs; + + /// @notice V2: Mapping of address to last transaction timestamp + mapping(address => uint256) public lastTransactionTime; + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event TransactionProcessed(address indexed sender, bytes data); + event MaxGasPerTransactionUpdated(uint256 newMax); + event ReplayProtectionToggled(bool enabled); + event MinTimeBetweenTxsUpdated(uint256 newMin); + + /*////////////////////////////////////////////////////////////// + INITIALIZATION + //////////////////////////////////////////////////////////////*/ + + function initialize(address admin, address, address _permissionRequirementModule, address, uint256 _appchainId) + external + initializer + { + // Initialize parent contracts + __SequencingModuleChecker_init(admin, _permissionRequirementModule); + __UUPSUpgradeable_init(); + + // Initialize namespaced storage variables + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + $.appchainId = _appchainId; + $.version = 1_000_000; // 1.0.0 + + // Enable gas tracking + _enableGasTracking(); + + // Initialize new V2 fields with default values + maxGasPerTransaction = 1000000; // 1M gas default + replayProtectionEnabled = true; + minTimeBetweenTxs = 0; // No minimum by default + } + + /*////////////////////////////////////////////////////////////// + NEW V2 FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /// @notice NEW FUNCTION: Set maximum gas per transaction + function setMaxGasPerTransaction(uint256 _maxGas) external onlyOwner { + require(_maxGas > 0, "Max gas must be greater than 0"); + maxGasPerTransaction = _maxGas; + emit MaxGasPerTransactionUpdated(_maxGas); + } + + /// @notice NEW FUNCTION: Toggle replay protection + function toggleReplayProtection() external onlyOwner { + replayProtectionEnabled = !replayProtectionEnabled; + emit ReplayProtectionToggled(replayProtectionEnabled); + } + + /// @notice NEW FUNCTION: Set minimum time between transactions + function setMinTimeBetweenTxs(uint256 _minTime) external onlyOwner { + minTimeBetweenTxs = _minTime; + emit MinTimeBetweenTxsUpdated(_minTime); + } + + /*////////////////////////////////////////////////////////////// + TRANSACTION PROCESSING + //////////////////////////////////////////////////////////////*/ + + modifier onlyWhenAllowed(bytes calldata data) { + if (!isAllowed(msg.sender, tx.origin, data)) { + revert TransactionOrSenderNotAllowed(); + } + _; + } + + modifier checkReplayProtection() { + if (replayProtectionEnabled && minTimeBetweenTxs > 0) { + require( + block.timestamp >= lastTransactionTime[msg.sender] + minTimeBetweenTxs, + "Transaction too soon after previous" + ); + lastTransactionTime[msg.sender] = block.timestamp; + } + _; + } + + function processTransaction(bytes calldata data) + external + onlyWhenAllowed(data) + checkReplayProtection // NEW: Check replay protection + + { + if (data.length == 0) { + revert NoTxData(); + } + + // NEW: Check gas limit if set + if (maxGasPerTransaction > 0) { + require(gasleft() <= maxGasPerTransaction, "Transaction exceeds gas limit"); + } + + emit TransactionProcessed(msg.sender, data); + } + + function processTransactionsBulk(bytes[] calldata data) + external + checkReplayProtection // NEW: Check replay protection + + { + // Check permission for bulk transaction + bytes memory bulkData = abi.encode(data); + if (!isAllowed(msg.sender, tx.origin, bulkData)) { + revert TransactionOrSenderNotAllowed(); + } + + require(batchProcessingEnabled(), "Batch processing is disabled"); // NEW: Check if batch processing enabled + + uint256 length = data.length; + require(length > 0, "No transactions provided"); + require(length <= maxTransactionsPerBatch(), "Too many transactions in batch"); // NEW: Check batch limit + + for (uint256 i = 0; i < length; i++) { + if (data[i].length > 0) { + emit TransactionProcessed(msg.sender, data[i]); + } + } + } + + /*////////////////////////////////////////////////////////////// + EMISSIONS & OWNERSHIP + //////////////////////////////////////////////////////////////*/ + + function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + + /*////////////////////////////////////////////////////////////// + GAS TRACKING ADMIN FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function disableGasTracking() external onlyOwner { + _disableGasTracking(); + } + + function enableGasTracking() external onlyOwner { + _enableGasTracking(); + } + + /*////////////////////////////////////////////////////////////// + UTILITY FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function encodeTransaction(bytes calldata data) public pure returns (bytes memory) { + return data; + } +} diff --git a/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainUpgradeV2.sol b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainUpgradeV2.sol new file mode 100644 index 000000000..9423b75c8 --- /dev/null +++ b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainUpgradeV2.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; + +/// @title SyndicateSequencingChainUpgradeV2 +/// @notice V2 upgrade for testing - adds new functionality safely +/// @dev This demonstrates safe upgrade patterns: +/// - Traditional storage: New variables appended at end +/// - Namespaced storage: New fields in ERC-7201 namespace +contract SyndicateSequencingChainUpgradeV2 is SyndicateSequencingChain { + constructor(address _gasMeter) SyndicateSequencingChain(_gasMeter) {} + + /*////////////////////////////////////////////////////////////// + NEW V2 STORAGE - APPENDED SAFELY + //////////////////////////////////////////////////////////////*/ + + /// @notice V2: Transaction processing fee in wei + uint256 public processingFee; + + /// @notice V2: Enable/disable fee collection + bool public feeCollectionEnabled; + + /// @notice V2: Total fees collected + uint256 public totalFeesCollected; + + /*////////////////////////////////////////////////////////////// + NEW V2 EVENTS + //////////////////////////////////////////////////////////////*/ + + event ProcessingFeeUpdated(uint256 newFee); + event FeeCollectionToggled(bool enabled); + event FeeCollected(address indexed payer, uint256 amount); + + /*////////////////////////////////////////////////////////////// + NEW V2 FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /// @notice Set the processing fee for transactions + /// @param _fee New fee amount in wei + function setProcessingFee(uint256 _fee) external onlyOwner { + processingFee = _fee; + emit ProcessingFeeUpdated(_fee); + } + + /// @notice Toggle fee collection on/off + function toggleFeeCollection() external onlyOwner { + feeCollectionEnabled = !feeCollectionEnabled; + emit FeeCollectionToggled(feeCollectionEnabled); + } + + /// @notice Process transaction with fee (new V2 functionality) + /// @dev Adds fee collection to existing functionality + function processTransactionWithFee(bytes calldata data) external payable { + require(data.length > 0, NoTxData()); + + // Encode transaction + bytes memory transaction = encodeTransaction(data); + + // Check authorization + require(isAllowed(msg.sender, tx.origin, transaction), TransactionOrSenderNotAllowed()); + + // Collect fee if enabled + if (feeCollectionEnabled && processingFee > 0) { + require(msg.value >= processingFee, "Insufficient fee"); + totalFeesCollected += msg.value; + emit FeeCollected(msg.sender, msg.value); + } + + emit TransactionProcessed(msg.sender, transaction); + } + + /// @notice Withdraw collected fees + /// @param recipient Address to receive fees + function withdrawFees(address payable recipient) external onlyOwner { + require(recipient != address(0), "Invalid recipient"); + uint256 amount = address(this).balance; + require(amount > 0, "No fees to withdraw"); + + (bool success,) = recipient.call{value: amount}(""); + require(success, "Transfer failed"); + } + + /// @notice Get contract version + /// @return Version string + function contractVersion() external pure returns (string memory) { + return "2.0.0"; + } +} diff --git a/synd-stake-cli/src/proofs.rs b/synd-stake-cli/src/proofs.rs index f2fd8a85b..28ef5d5f7 100644 --- a/synd-stake-cli/src/proofs.rs +++ b/synd-stake-cli/src/proofs.rs @@ -22,6 +22,14 @@ use shared::{ use tracing::{debug, info}; use url::Url; +// Legacy interface for Sequencing Chain +sol! { + #[sol(rpc)] + contract ILegacySequencingChain { + function getTokensForEpoch(uint256 epoch) external view returns (uint256); + } +} + /// Arguments for updating base and ethereum block hashes #[derive(Args, Debug)] pub struct UpdateBaseAndEthereumBlockHashesArgs { @@ -358,7 +366,32 @@ async fn get_aggregated_chain_data( let logs = filter.query().await.unwrap_or_else(|e| panic!("failed to get logs: {e}")); assert_eq!(logs.len(), 1); - (logs[0].0.chainIds.clone(), logs[0].0.tokens.clone()) + let appchains = gas_aggregator + .getTrackedChainIds() + .call() + .await + .unwrap_or_else(|e| panic!("failed to get tracked chain IDs: {e}")); + let mut tokens = vec![]; + + for chain_id in appchains.iter().copied() { + // Prefer any explicit override set in the aggregator; otherwise use factory computation + let appchain_addr = + gas_aggregator.appchainContract(chain_id).call().await.unwrap_or_else(|e| { + panic!("failed to get appchain contract override for {chain_id}: {e}") + }); + + // TODO: Handle legacy and new sequencing chain implementations + let appchain = + ILegacySequencingChain::new(appchain_addr, gas_aggregator.provider().clone()); + tokens.push( + appchain + .getTokensForEpoch(epoch) + .call() + .await + .unwrap_or_else(|e| panic!("failed to get tokens for epoch {epoch}: {e}")), + ); + } + (appchains, tokens) } /// Arguments for running both `update_base_and_ethereum_block_hashes` and `submit_gas_proofs` diff --git a/test-framework/src/components/test_components.rs b/test-framework/src/components/test_components.rs index 763866392..2330eeb7a 100644 --- a/test-framework/src/components/test_components.rs +++ b/test-framework/src/components/test_components.rs @@ -12,15 +12,18 @@ use crate::components::{ use alloy::{ consensus::{EthereumTxEnvelope, TxEip4844Variant}, eips::{BlockNumberOrTag, Encodable2718}, - primitives::{address, hex, keccak256, utils::parse_ether, Address, Bytes, TxHash, U160, U256}, + primitives::{address, hex, keccak256, utils::parse_ether, Address, Bytes, TxHash, U256}, providers::{ext::AnvilApi, Provider, WalletProvider}, rpc::types::{anvil::MineOptions, TransactionReceipt}, sol_types::SolCall, }; use contract_bindings::synd::{ assertion_poster::AssertionPoster, + erc1967_proxy::ERC1967Proxy, + gas_meter::GasMeter, i_inbox::IInbox, i_upgrade_executor::IUpgradeExecutor, + r#always_allowed_module::AlwaysAllowedModule, rollup::Rollup, syndicate_sequencing_chain::SyndicateSequencingChain::{ self, SyndicateSequencingChainInstance, @@ -186,16 +189,13 @@ impl TestComponents { provider: seq_provider, http_url: _, } = match options.base_chains_type { - BaseChainsType::Anvil => { + BaseChainsType::Anvil | BaseChainsType::PreLoaded(_) => { start_anvil_with_args( SEQUENCING_CHAIN_ID, &["--timestamp", 1756209109.to_string().as_str()], ) .await? } - BaseChainsType::PreLoaded(_) => { - start_anvil_with_args(SEQUENCING_CHAIN_ID, &["--timestamp", "0"]).await? - } BaseChainsType::Nitro | BaseChainsType::NitroWithEigenda => { let chain_id = SEQUENCING_CHAIN_ID; let l1_info = l1_info.as_ref().unwrap(); @@ -251,30 +251,50 @@ impl TestComponents { info!("Sequencing chain Nitro URL: {}", seq_rpc_ws_url); - let _ = SyndicateSequencingChain::deploy_builder( + let _ = GasMeter::deploy_builder(&seq_provider).send().await?; + let gas_meter_address_impl = seq_provider.default_signer_address().create(0); + + let _ = ERC1967Proxy::deploy_builder(&seq_provider, gas_meter_address_impl, Bytes::new()) + .send() + .await?; + let gas_meter_address = seq_provider.default_signer_address().create(1); + + let _ = SyndicateSequencingChain::deploy_builder(&seq_provider, gas_meter_address) + .send() + .await?; + let sequencing_contract_address_impl = seq_provider.default_signer_address().create(2); + + let _ = ERC1967Proxy::deploy_builder( &seq_provider, - U256::from(options.appchain_chain_id), + sequencing_contract_address_impl, + Bytes::new(), ) .send() .await?; - let sequencing_contract_address = seq_provider.default_signer_address().create(0); + let sequencing_contract_address = seq_provider.default_signer_address().create(3); + + let _ = AlwaysAllowedModule::deploy_builder(&seq_provider).send().await?; + let always_allowed_module_address = seq_provider.default_signer_address().create(4); + + // Setup Gas Meter + let gas_meter = GasMeter::new(gas_meter_address, &seq_provider); + let _ = gas_meter.initialize().send().await?; // Setup the sequencing contract let provider_clone = seq_provider.clone(); let sequencing_contract = SyndicateSequencingChain::new(sequencing_contract_address, provider_clone); - - // Set the requirement module to address(1) to allow all transactions - let _ = sequencing_contract.updateRequirementModule(U160::from(1).into()).send().await?; + let _ = sequencing_contract + .initialize( + seq_provider.default_signer_address(), + always_allowed_module_address, + U256::from(options.appchain_chain_id), + ) + .send() + .await?; match options.base_chains_type { - BaseChainsType::Anvil => { - mine_block(&seq_provider, 0).await?; - } - BaseChainsType::PreLoaded(_) => { - // disable gas tracking, otherwise there will be an underflow error with anvil - // timstamp 0 - let _ = sequencing_contract.disableGasTracking().send().await?; + BaseChainsType::Anvil | BaseChainsType::PreLoaded(_) => { mine_block(&seq_provider, 0).await?; } _ => {} diff --git a/test-framework/tests/e2e/e2e_tests_migration.rs b/test-framework/tests/e2e/e2e_tests_migration.rs index 1465a8cec..6ba7a55ab 100644 --- a/test-framework/tests/e2e/e2e_tests_migration.rs +++ b/test-framework/tests/e2e/e2e_tests_migration.rs @@ -1,12 +1,14 @@ use crate::e2e::e2e_tests::Storage; use alloy::{ eips::BlockNumberOrTag, - primitives::{utils::parse_ether, Address, U160, U256}, + primitives::{utils::parse_ether, Address, Bytes, U160, U256}, providers::{ext::AnvilApi, Provider, WalletProvider}, rpc::types::anvil::MineOptions, }; use contract_bindings::synd::{ arb_owner::ArbOwner, + erc1967_proxy::ERC1967Proxy, + gas_meter::GasMeter, i_bridge::IBridge, i_inbox::IInbox, i_sequencer_inbox::ISequencerInbox, @@ -48,11 +50,28 @@ async fn start_base_chain(chain_id: u64) -> Result { Ok(chain_info) } -async fn deploy_sequencing_contract( +async fn deploy_sequencing_contract( provider: P, appchain_chain_id: U256, ) -> Result> { - let contract_instance = SyndicateSequencingChain::deploy(provider, appchain_chain_id).await?; + let gas_meter_impl = GasMeter::deploy(provider.clone()).await?; + let gas_meter = + ERC1967Proxy::deploy(provider.clone(), *gas_meter_impl.address(), Bytes::new()).await?; + + let seq_chain_impl = + SyndicateSequencingChain::deploy(provider.clone(), *gas_meter.address()).await?; + let seq_chain = + ERC1967Proxy::deploy(provider.clone(), *seq_chain_impl.address(), Bytes::new()).await?; + + let contract_instance = SyndicateSequencingChain::new(*seq_chain.address(), provider); + + assert!(contract_instance + .initialize(test_account1().address, U160::from(1).into(), appchain_chain_id) + .send() + .await? + .get_receipt() + .await? + .status()); assert!(contract_instance .updateRequirementModule(U160::from(1).into()) .send()