hopr_bindings/codegen/
hoprnodemanagementmodule.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library Enum {
6    type Operation is uint8;
7}
8```*/
9#[allow(
10    non_camel_case_types,
11    non_snake_case,
12    clippy::pub_underscore_fields,
13    clippy::style,
14    clippy::empty_structs_with_brackets
15)]
16pub mod Enum {
17    use super::*;
18    use alloy::sol_types as alloy_sol_types;
19    #[derive(serde::Serialize, serde::Deserialize)]
20    #[derive(Default, Debug, PartialEq, Eq, Hash)]
21    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
22    #[derive(Clone)]
23    pub struct Operation(u8);
24    const _: () = {
25        use alloy::sol_types as alloy_sol_types;
26        #[automatically_derived]
27        impl alloy_sol_types::private::SolTypeValue<Operation> for u8 {
28            #[inline]
29            fn stv_to_tokens(
30                &self,
31            ) -> <alloy::sol_types::sol_data::Uint<
32                8,
33            > as alloy_sol_types::SolType>::Token<'_> {
34                alloy_sol_types::private::SolTypeValue::<
35                    alloy::sol_types::sol_data::Uint<8>,
36                >::stv_to_tokens(self)
37            }
38            #[inline]
39            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
40                <alloy::sol_types::sol_data::Uint<
41                    8,
42                > as alloy_sol_types::SolType>::tokenize(self)
43                    .0
44            }
45            #[inline]
46            fn stv_abi_encode_packed_to(
47                &self,
48                out: &mut alloy_sol_types::private::Vec<u8>,
49            ) {
50                <alloy::sol_types::sol_data::Uint<
51                    8,
52                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
53            }
54            #[inline]
55            fn stv_abi_packed_encoded_size(&self) -> usize {
56                <alloy::sol_types::sol_data::Uint<
57                    8,
58                > as alloy_sol_types::SolType>::abi_encoded_size(self)
59            }
60        }
61        #[automatically_derived]
62        impl Operation {
63            /// The Solidity type name.
64            pub const NAME: &'static str = stringify!(@ name);
65            /// Convert from the underlying value type.
66            #[inline]
67            pub const fn from_underlying(value: u8) -> Self {
68                Self(value)
69            }
70            /// Return the underlying value.
71            #[inline]
72            pub const fn into_underlying(self) -> u8 {
73                self.0
74            }
75            /// Return the single encoding of this value, delegating to the
76            /// underlying type.
77            #[inline]
78            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
79                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
80            }
81            /// Return the packed encoding of this value, delegating to the
82            /// underlying type.
83            #[inline]
84            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
85                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
86            }
87        }
88        #[automatically_derived]
89        impl From<u8> for Operation {
90            fn from(value: u8) -> Self {
91                Self::from_underlying(value)
92            }
93        }
94        #[automatically_derived]
95        impl From<Operation> for u8 {
96            fn from(value: Operation) -> Self {
97                value.into_underlying()
98            }
99        }
100        #[automatically_derived]
101        impl alloy_sol_types::SolType for Operation {
102            type RustType = u8;
103            type Token<'a> = <alloy::sol_types::sol_data::Uint<
104                8,
105            > as alloy_sol_types::SolType>::Token<'a>;
106            const SOL_NAME: &'static str = Self::NAME;
107            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
108                8,
109            > as alloy_sol_types::SolType>::ENCODED_SIZE;
110            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
111                8,
112            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
113            #[inline]
114            fn valid_token(token: &Self::Token<'_>) -> bool {
115                Self::type_check(token).is_ok()
116            }
117            #[inline]
118            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
119                <alloy::sol_types::sol_data::Uint<
120                    8,
121                > as alloy_sol_types::SolType>::type_check(token)
122            }
123            #[inline]
124            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
125                <alloy::sol_types::sol_data::Uint<
126                    8,
127                > as alloy_sol_types::SolType>::detokenize(token)
128            }
129        }
130        #[automatically_derived]
131        impl alloy_sol_types::EventTopic for Operation {
132            #[inline]
133            fn topic_preimage_length(rust: &Self::RustType) -> usize {
134                <alloy::sol_types::sol_data::Uint<
135                    8,
136                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
137            }
138            #[inline]
139            fn encode_topic_preimage(
140                rust: &Self::RustType,
141                out: &mut alloy_sol_types::private::Vec<u8>,
142            ) {
143                <alloy::sol_types::sol_data::Uint<
144                    8,
145                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
146            }
147            #[inline]
148            fn encode_topic(
149                rust: &Self::RustType,
150            ) -> alloy_sol_types::abi::token::WordToken {
151                <alloy::sol_types::sol_data::Uint<
152                    8,
153                > as alloy_sol_types::EventTopic>::encode_topic(rust)
154            }
155        }
156    };
157    use alloy::contract as alloy_contract;
158    /**Creates a new wrapper around an on-chain [`Enum`](self) contract instance.
159
160See the [wrapper's documentation](`EnumInstance`) for more details.*/
161    #[inline]
162    pub const fn new<
163        P: alloy_contract::private::Provider<N>,
164        N: alloy_contract::private::Network,
165    >(address: alloy_sol_types::private::Address, provider: P) -> EnumInstance<P, N> {
166        EnumInstance::<P, N>::new(address, provider)
167    }
168    /**A [`Enum`](self) instance.
169
170Contains type-safe methods for interacting with an on-chain instance of the
171[`Enum`](self) contract located at a given `address`, using a given
172provider `P`.
173
174If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
175documentation on how to provide it), the `deploy` and `deploy_builder` methods can
176be used to deploy a new instance of the contract.
177
178See the [module-level documentation](self) for all the available methods.*/
179    #[derive(Clone)]
180    pub struct EnumInstance<P, N = alloy_contract::private::Ethereum> {
181        address: alloy_sol_types::private::Address,
182        provider: P,
183        _network: ::core::marker::PhantomData<N>,
184    }
185    #[automatically_derived]
186    impl<P, N> ::core::fmt::Debug for EnumInstance<P, N> {
187        #[inline]
188        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
189            f.debug_tuple("EnumInstance").field(&self.address).finish()
190        }
191    }
192    /// Instantiation and getters/setters.
193    #[automatically_derived]
194    impl<
195        P: alloy_contract::private::Provider<N>,
196        N: alloy_contract::private::Network,
197    > EnumInstance<P, N> {
198        /**Creates a new wrapper around an on-chain [`Enum`](self) contract instance.
199
200See the [wrapper's documentation](`EnumInstance`) for more details.*/
201        #[inline]
202        pub const fn new(
203            address: alloy_sol_types::private::Address,
204            provider: P,
205        ) -> Self {
206            Self {
207                address,
208                provider,
209                _network: ::core::marker::PhantomData,
210            }
211        }
212        /// Returns a reference to the address.
213        #[inline]
214        pub const fn address(&self) -> &alloy_sol_types::private::Address {
215            &self.address
216        }
217        /// Sets the address.
218        #[inline]
219        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
220            self.address = address;
221        }
222        /// Sets the address and returns `self`.
223        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
224            self.set_address(address);
225            self
226        }
227        /// Returns a reference to the provider.
228        #[inline]
229        pub const fn provider(&self) -> &P {
230            &self.provider
231        }
232    }
233    impl<P: ::core::clone::Clone, N> EnumInstance<&P, N> {
234        /// Clones the provider and returns a new instance with the cloned provider.
235        #[inline]
236        pub fn with_cloned_provider(self) -> EnumInstance<P, N> {
237            EnumInstance {
238                address: self.address,
239                provider: ::core::clone::Clone::clone(&self.provider),
240                _network: ::core::marker::PhantomData,
241            }
242        }
243    }
244    /// Function calls.
245    #[automatically_derived]
246    impl<
247        P: alloy_contract::private::Provider<N>,
248        N: alloy_contract::private::Network,
249    > EnumInstance<P, N> {
250        /// Creates a new call builder using this contract instance's provider and address.
251        ///
252        /// Note that the call can be any function call, not just those defined in this
253        /// contract. Prefer using the other methods for building type-safe contract calls.
254        pub fn call_builder<C: alloy_sol_types::SolCall>(
255            &self,
256            call: &C,
257        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
258            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
259        }
260    }
261    /// Event filters.
262    #[automatically_derived]
263    impl<
264        P: alloy_contract::private::Provider<N>,
265        N: alloy_contract::private::Network,
266    > EnumInstance<P, N> {
267        /// Creates a new event filter using this contract instance's provider and address.
268        ///
269        /// Note that the type can be any event, not just those defined in this contract.
270        /// Prefer using the other methods for building type-safe event filters.
271        pub fn event_filter<E: alloy_sol_types::SolEvent>(
272            &self,
273        ) -> alloy_contract::Event<&P, E, N> {
274            alloy_contract::Event::new_sol(&self.provider, &self.address)
275        }
276    }
277}
278/**
279
280Generated by the following Solidity interface...
281```solidity
282library Enum {
283    type Operation is uint8;
284}
285
286interface HoprNodeManagementModule {
287    type GranularPermission is uint8;
288    type Target is uint256;
289
290    error AddressIsZero();
291    error AlreadyInitialized();
292    error ArrayTooLong();
293    error ArraysDifferentLength();
294    error CalldataOutOfBounds();
295    error CannotChangeOwner();
296    error DefaultPermissionRejected();
297    error DelegateCallNotAllowed();
298    error FunctionSignatureTooShort();
299    error GranularPermissionRejected();
300    error NoMembership();
301    error NodePermissionRejected();
302    error NonExistentKey();
303    error ParameterNotAllowed();
304    error PermissionNotConfigured();
305    error PermissionNotFound();
306    error SafeMultisendSameAddress();
307    error SendNotAllowed();
308    error TargetAddressNotAllowed();
309    error TargetIsNotScoped();
310    error TargetIsScoped();
311    error TooManyCapabilities();
312    error UnacceptableMultiSendOffset();
313    error WithMembership();
314
315    event AdminChanged(address previousAdmin, address newAdmin);
316    event BeaconUpgraded(address indexed beacon);
317    event ExecutionFailure();
318    event ExecutionSuccess();
319    event Initialized(uint8 version);
320    event NodeAdded(address indexed node);
321    event NodeRemoved(address indexed node);
322    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
323    event SetMultisendAddress(address indexed multisendAddress);
324    event Upgraded(address indexed implementation);
325
326    constructor();
327
328    function addChannelsAndTokenTarget(Target defaultTarget) external;
329    function addNode(address nodeAddress) external;
330    function decodeFunctionSigsAndPermissions(bytes32 encoded, uint256 length) external pure returns (bytes4[] memory functionSigs, GranularPermission[] memory permissions);
331    function encodeFunctionSigsAndPermissions(bytes4[] memory functionSigs, GranularPermission[] memory permissions) external pure returns (bytes32 encoded, uint256 length);
332    function execTransactionFromModule(address to, uint256 value, bytes memory data, Enum.Operation operation) external returns (bool success);
333    function execTransactionFromModuleReturnData(address to, uint256 value, bytes memory data, Enum.Operation operation) external returns (bool, bytes memory);
334    function getGranularPermissions(bytes32 capabilityKey, bytes32 pairId) external view returns (GranularPermission);
335    function getTargets() external view returns (Target[] memory);
336    function includeNode(Target nodeDefaultTarget) external;
337    function initialize(bytes memory initParams) external;
338    function isHoprNodeManagementModule() external view returns (bool);
339    function isNode(address nodeAddress) external view returns (bool);
340    function multisend() external view returns (address);
341    function owner() external view returns (address);
342    function proxiableUUID() external view returns (bytes32);
343    function removeNode(address nodeAddress) external;
344    function renounceOwnership() external;
345    function revokeTarget(address targetAddress) external;
346    function scopeChannelsCapabilities(address targetAddress, bytes32 channelId, bytes32 encodedSigsPermissions) external;
347    function scopeSendCapability(address nodeAddress, address beneficiary, GranularPermission permission) external;
348    function scopeTargetChannels(Target defaultTarget) external;
349    function scopeTargetSend(Target defaultTarget) external;
350    function scopeTargetToken(Target defaultTarget) external;
351    function scopeTokenCapabilities(address nodeAddress, address targetAddress, address beneficiary, bytes32 encodedSigsPermissions) external;
352    function setMultisend(address _multisend) external;
353    function transferOwnership(address newOwner) external;
354    function tryGetTarget(address targetAddress) external view returns (bool, Target);
355    function upgradeTo(address newImplementation) external;
356    function upgradeToAndCall(address newImplementation, bytes memory data) external payable;
357}
358```
359
360...which was generated by the following JSON ABI:
361```json
362[
363  {
364    "type": "constructor",
365    "inputs": [],
366    "stateMutability": "nonpayable"
367  },
368  {
369    "type": "function",
370    "name": "addChannelsAndTokenTarget",
371    "inputs": [
372      {
373        "name": "defaultTarget",
374        "type": "uint256",
375        "internalType": "Target"
376      }
377    ],
378    "outputs": [],
379    "stateMutability": "nonpayable"
380  },
381  {
382    "type": "function",
383    "name": "addNode",
384    "inputs": [
385      {
386        "name": "nodeAddress",
387        "type": "address",
388        "internalType": "address"
389      }
390    ],
391    "outputs": [],
392    "stateMutability": "nonpayable"
393  },
394  {
395    "type": "function",
396    "name": "decodeFunctionSigsAndPermissions",
397    "inputs": [
398      {
399        "name": "encoded",
400        "type": "bytes32",
401        "internalType": "bytes32"
402      },
403      {
404        "name": "length",
405        "type": "uint256",
406        "internalType": "uint256"
407      }
408    ],
409    "outputs": [
410      {
411        "name": "functionSigs",
412        "type": "bytes4[]",
413        "internalType": "bytes4[]"
414      },
415      {
416        "name": "permissions",
417        "type": "uint8[]",
418        "internalType": "enum GranularPermission[]"
419      }
420    ],
421    "stateMutability": "pure"
422  },
423  {
424    "type": "function",
425    "name": "encodeFunctionSigsAndPermissions",
426    "inputs": [
427      {
428        "name": "functionSigs",
429        "type": "bytes4[]",
430        "internalType": "bytes4[]"
431      },
432      {
433        "name": "permissions",
434        "type": "uint8[]",
435        "internalType": "enum GranularPermission[]"
436      }
437    ],
438    "outputs": [
439      {
440        "name": "encoded",
441        "type": "bytes32",
442        "internalType": "bytes32"
443      },
444      {
445        "name": "length",
446        "type": "uint256",
447        "internalType": "uint256"
448      }
449    ],
450    "stateMutability": "pure"
451  },
452  {
453    "type": "function",
454    "name": "execTransactionFromModule",
455    "inputs": [
456      {
457        "name": "to",
458        "type": "address",
459        "internalType": "address"
460      },
461      {
462        "name": "value",
463        "type": "uint256",
464        "internalType": "uint256"
465      },
466      {
467        "name": "data",
468        "type": "bytes",
469        "internalType": "bytes"
470      },
471      {
472        "name": "operation",
473        "type": "uint8",
474        "internalType": "enum Enum.Operation"
475      }
476    ],
477    "outputs": [
478      {
479        "name": "success",
480        "type": "bool",
481        "internalType": "bool"
482      }
483    ],
484    "stateMutability": "nonpayable"
485  },
486  {
487    "type": "function",
488    "name": "execTransactionFromModuleReturnData",
489    "inputs": [
490      {
491        "name": "to",
492        "type": "address",
493        "internalType": "address"
494      },
495      {
496        "name": "value",
497        "type": "uint256",
498        "internalType": "uint256"
499      },
500      {
501        "name": "data",
502        "type": "bytes",
503        "internalType": "bytes"
504      },
505      {
506        "name": "operation",
507        "type": "uint8",
508        "internalType": "enum Enum.Operation"
509      }
510    ],
511    "outputs": [
512      {
513        "name": "",
514        "type": "bool",
515        "internalType": "bool"
516      },
517      {
518        "name": "",
519        "type": "bytes",
520        "internalType": "bytes"
521      }
522    ],
523    "stateMutability": "nonpayable"
524  },
525  {
526    "type": "function",
527    "name": "getGranularPermissions",
528    "inputs": [
529      {
530        "name": "capabilityKey",
531        "type": "bytes32",
532        "internalType": "bytes32"
533      },
534      {
535        "name": "pairId",
536        "type": "bytes32",
537        "internalType": "bytes32"
538      }
539    ],
540    "outputs": [
541      {
542        "name": "",
543        "type": "uint8",
544        "internalType": "enum GranularPermission"
545      }
546    ],
547    "stateMutability": "view"
548  },
549  {
550    "type": "function",
551    "name": "getTargets",
552    "inputs": [],
553    "outputs": [
554      {
555        "name": "",
556        "type": "uint256[]",
557        "internalType": "Target[]"
558      }
559    ],
560    "stateMutability": "view"
561  },
562  {
563    "type": "function",
564    "name": "includeNode",
565    "inputs": [
566      {
567        "name": "nodeDefaultTarget",
568        "type": "uint256",
569        "internalType": "Target"
570      }
571    ],
572    "outputs": [],
573    "stateMutability": "nonpayable"
574  },
575  {
576    "type": "function",
577    "name": "initialize",
578    "inputs": [
579      {
580        "name": "initParams",
581        "type": "bytes",
582        "internalType": "bytes"
583      }
584    ],
585    "outputs": [],
586    "stateMutability": "nonpayable"
587  },
588  {
589    "type": "function",
590    "name": "isHoprNodeManagementModule",
591    "inputs": [],
592    "outputs": [
593      {
594        "name": "",
595        "type": "bool",
596        "internalType": "bool"
597      }
598    ],
599    "stateMutability": "view"
600  },
601  {
602    "type": "function",
603    "name": "isNode",
604    "inputs": [
605      {
606        "name": "nodeAddress",
607        "type": "address",
608        "internalType": "address"
609      }
610    ],
611    "outputs": [
612      {
613        "name": "",
614        "type": "bool",
615        "internalType": "bool"
616      }
617    ],
618    "stateMutability": "view"
619  },
620  {
621    "type": "function",
622    "name": "multisend",
623    "inputs": [],
624    "outputs": [
625      {
626        "name": "",
627        "type": "address",
628        "internalType": "address"
629      }
630    ],
631    "stateMutability": "view"
632  },
633  {
634    "type": "function",
635    "name": "owner",
636    "inputs": [],
637    "outputs": [
638      {
639        "name": "",
640        "type": "address",
641        "internalType": "address"
642      }
643    ],
644    "stateMutability": "view"
645  },
646  {
647    "type": "function",
648    "name": "proxiableUUID",
649    "inputs": [],
650    "outputs": [
651      {
652        "name": "",
653        "type": "bytes32",
654        "internalType": "bytes32"
655      }
656    ],
657    "stateMutability": "view"
658  },
659  {
660    "type": "function",
661    "name": "removeNode",
662    "inputs": [
663      {
664        "name": "nodeAddress",
665        "type": "address",
666        "internalType": "address"
667      }
668    ],
669    "outputs": [],
670    "stateMutability": "nonpayable"
671  },
672  {
673    "type": "function",
674    "name": "renounceOwnership",
675    "inputs": [],
676    "outputs": [],
677    "stateMutability": "nonpayable"
678  },
679  {
680    "type": "function",
681    "name": "revokeTarget",
682    "inputs": [
683      {
684        "name": "targetAddress",
685        "type": "address",
686        "internalType": "address"
687      }
688    ],
689    "outputs": [],
690    "stateMutability": "nonpayable"
691  },
692  {
693    "type": "function",
694    "name": "scopeChannelsCapabilities",
695    "inputs": [
696      {
697        "name": "targetAddress",
698        "type": "address",
699        "internalType": "address"
700      },
701      {
702        "name": "channelId",
703        "type": "bytes32",
704        "internalType": "bytes32"
705      },
706      {
707        "name": "encodedSigsPermissions",
708        "type": "bytes32",
709        "internalType": "bytes32"
710      }
711    ],
712    "outputs": [],
713    "stateMutability": "nonpayable"
714  },
715  {
716    "type": "function",
717    "name": "scopeSendCapability",
718    "inputs": [
719      {
720        "name": "nodeAddress",
721        "type": "address",
722        "internalType": "address"
723      },
724      {
725        "name": "beneficiary",
726        "type": "address",
727        "internalType": "address"
728      },
729      {
730        "name": "permission",
731        "type": "uint8",
732        "internalType": "enum GranularPermission"
733      }
734    ],
735    "outputs": [],
736    "stateMutability": "nonpayable"
737  },
738  {
739    "type": "function",
740    "name": "scopeTargetChannels",
741    "inputs": [
742      {
743        "name": "defaultTarget",
744        "type": "uint256",
745        "internalType": "Target"
746      }
747    ],
748    "outputs": [],
749    "stateMutability": "nonpayable"
750  },
751  {
752    "type": "function",
753    "name": "scopeTargetSend",
754    "inputs": [
755      {
756        "name": "defaultTarget",
757        "type": "uint256",
758        "internalType": "Target"
759      }
760    ],
761    "outputs": [],
762    "stateMutability": "nonpayable"
763  },
764  {
765    "type": "function",
766    "name": "scopeTargetToken",
767    "inputs": [
768      {
769        "name": "defaultTarget",
770        "type": "uint256",
771        "internalType": "Target"
772      }
773    ],
774    "outputs": [],
775    "stateMutability": "nonpayable"
776  },
777  {
778    "type": "function",
779    "name": "scopeTokenCapabilities",
780    "inputs": [
781      {
782        "name": "nodeAddress",
783        "type": "address",
784        "internalType": "address"
785      },
786      {
787        "name": "targetAddress",
788        "type": "address",
789        "internalType": "address"
790      },
791      {
792        "name": "beneficiary",
793        "type": "address",
794        "internalType": "address"
795      },
796      {
797        "name": "encodedSigsPermissions",
798        "type": "bytes32",
799        "internalType": "bytes32"
800      }
801    ],
802    "outputs": [],
803    "stateMutability": "nonpayable"
804  },
805  {
806    "type": "function",
807    "name": "setMultisend",
808    "inputs": [
809      {
810        "name": "_multisend",
811        "type": "address",
812        "internalType": "address"
813      }
814    ],
815    "outputs": [],
816    "stateMutability": "nonpayable"
817  },
818  {
819    "type": "function",
820    "name": "transferOwnership",
821    "inputs": [
822      {
823        "name": "newOwner",
824        "type": "address",
825        "internalType": "address"
826      }
827    ],
828    "outputs": [],
829    "stateMutability": "nonpayable"
830  },
831  {
832    "type": "function",
833    "name": "tryGetTarget",
834    "inputs": [
835      {
836        "name": "targetAddress",
837        "type": "address",
838        "internalType": "address"
839      }
840    ],
841    "outputs": [
842      {
843        "name": "",
844        "type": "bool",
845        "internalType": "bool"
846      },
847      {
848        "name": "",
849        "type": "uint256",
850        "internalType": "Target"
851      }
852    ],
853    "stateMutability": "view"
854  },
855  {
856    "type": "function",
857    "name": "upgradeTo",
858    "inputs": [
859      {
860        "name": "newImplementation",
861        "type": "address",
862        "internalType": "address"
863      }
864    ],
865    "outputs": [],
866    "stateMutability": "nonpayable"
867  },
868  {
869    "type": "function",
870    "name": "upgradeToAndCall",
871    "inputs": [
872      {
873        "name": "newImplementation",
874        "type": "address",
875        "internalType": "address"
876      },
877      {
878        "name": "data",
879        "type": "bytes",
880        "internalType": "bytes"
881      }
882    ],
883    "outputs": [],
884    "stateMutability": "payable"
885  },
886  {
887    "type": "event",
888    "name": "AdminChanged",
889    "inputs": [
890      {
891        "name": "previousAdmin",
892        "type": "address",
893        "indexed": false,
894        "internalType": "address"
895      },
896      {
897        "name": "newAdmin",
898        "type": "address",
899        "indexed": false,
900        "internalType": "address"
901      }
902    ],
903    "anonymous": false
904  },
905  {
906    "type": "event",
907    "name": "BeaconUpgraded",
908    "inputs": [
909      {
910        "name": "beacon",
911        "type": "address",
912        "indexed": true,
913        "internalType": "address"
914      }
915    ],
916    "anonymous": false
917  },
918  {
919    "type": "event",
920    "name": "ExecutionFailure",
921    "inputs": [],
922    "anonymous": false
923  },
924  {
925    "type": "event",
926    "name": "ExecutionSuccess",
927    "inputs": [],
928    "anonymous": false
929  },
930  {
931    "type": "event",
932    "name": "Initialized",
933    "inputs": [
934      {
935        "name": "version",
936        "type": "uint8",
937        "indexed": false,
938        "internalType": "uint8"
939      }
940    ],
941    "anonymous": false
942  },
943  {
944    "type": "event",
945    "name": "NodeAdded",
946    "inputs": [
947      {
948        "name": "node",
949        "type": "address",
950        "indexed": true,
951        "internalType": "address"
952      }
953    ],
954    "anonymous": false
955  },
956  {
957    "type": "event",
958    "name": "NodeRemoved",
959    "inputs": [
960      {
961        "name": "node",
962        "type": "address",
963        "indexed": true,
964        "internalType": "address"
965      }
966    ],
967    "anonymous": false
968  },
969  {
970    "type": "event",
971    "name": "OwnershipTransferred",
972    "inputs": [
973      {
974        "name": "previousOwner",
975        "type": "address",
976        "indexed": true,
977        "internalType": "address"
978      },
979      {
980        "name": "newOwner",
981        "type": "address",
982        "indexed": true,
983        "internalType": "address"
984      }
985    ],
986    "anonymous": false
987  },
988  {
989    "type": "event",
990    "name": "SetMultisendAddress",
991    "inputs": [
992      {
993        "name": "multisendAddress",
994        "type": "address",
995        "indexed": true,
996        "internalType": "address"
997      }
998    ],
999    "anonymous": false
1000  },
1001  {
1002    "type": "event",
1003    "name": "Upgraded",
1004    "inputs": [
1005      {
1006        "name": "implementation",
1007        "type": "address",
1008        "indexed": true,
1009        "internalType": "address"
1010      }
1011    ],
1012    "anonymous": false
1013  },
1014  {
1015    "type": "error",
1016    "name": "AddressIsZero",
1017    "inputs": []
1018  },
1019  {
1020    "type": "error",
1021    "name": "AlreadyInitialized",
1022    "inputs": []
1023  },
1024  {
1025    "type": "error",
1026    "name": "ArrayTooLong",
1027    "inputs": []
1028  },
1029  {
1030    "type": "error",
1031    "name": "ArraysDifferentLength",
1032    "inputs": []
1033  },
1034  {
1035    "type": "error",
1036    "name": "CalldataOutOfBounds",
1037    "inputs": []
1038  },
1039  {
1040    "type": "error",
1041    "name": "CannotChangeOwner",
1042    "inputs": []
1043  },
1044  {
1045    "type": "error",
1046    "name": "DefaultPermissionRejected",
1047    "inputs": []
1048  },
1049  {
1050    "type": "error",
1051    "name": "DelegateCallNotAllowed",
1052    "inputs": []
1053  },
1054  {
1055    "type": "error",
1056    "name": "FunctionSignatureTooShort",
1057    "inputs": []
1058  },
1059  {
1060    "type": "error",
1061    "name": "GranularPermissionRejected",
1062    "inputs": []
1063  },
1064  {
1065    "type": "error",
1066    "name": "NoMembership",
1067    "inputs": []
1068  },
1069  {
1070    "type": "error",
1071    "name": "NodePermissionRejected",
1072    "inputs": []
1073  },
1074  {
1075    "type": "error",
1076    "name": "NonExistentKey",
1077    "inputs": []
1078  },
1079  {
1080    "type": "error",
1081    "name": "ParameterNotAllowed",
1082    "inputs": []
1083  },
1084  {
1085    "type": "error",
1086    "name": "PermissionNotConfigured",
1087    "inputs": []
1088  },
1089  {
1090    "type": "error",
1091    "name": "PermissionNotFound",
1092    "inputs": []
1093  },
1094  {
1095    "type": "error",
1096    "name": "SafeMultisendSameAddress",
1097    "inputs": []
1098  },
1099  {
1100    "type": "error",
1101    "name": "SendNotAllowed",
1102    "inputs": []
1103  },
1104  {
1105    "type": "error",
1106    "name": "TargetAddressNotAllowed",
1107    "inputs": []
1108  },
1109  {
1110    "type": "error",
1111    "name": "TargetIsNotScoped",
1112    "inputs": []
1113  },
1114  {
1115    "type": "error",
1116    "name": "TargetIsScoped",
1117    "inputs": []
1118  },
1119  {
1120    "type": "error",
1121    "name": "TooManyCapabilities",
1122    "inputs": []
1123  },
1124  {
1125    "type": "error",
1126    "name": "UnacceptableMultiSendOffset",
1127    "inputs": []
1128  },
1129  {
1130    "type": "error",
1131    "name": "WithMembership",
1132    "inputs": []
1133  }
1134]
1135```*/
1136#[allow(
1137    non_camel_case_types,
1138    non_snake_case,
1139    clippy::pub_underscore_fields,
1140    clippy::style,
1141    clippy::empty_structs_with_brackets
1142)]
1143pub mod HoprNodeManagementModule {
1144    use super::*;
1145    use alloy::sol_types as alloy_sol_types;
1146    /// The creation / init bytecode of the contract.
1147    ///
1148    /// ```text
1149    ///0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516136806200011f600039600081816106040152818161064d015281816109cf01528181610a0f0152610b3f01526136806000f3fe6080604052600436106101c25760003560e01c8063739c4b08116100f7578063b573696211610095578063dc446a4a11610064578063dc446a4a14610540578063df4e6f8a1461056d578063f2fde38b146105a4578063fa19501d146105c457600080fd5b8063b5736962146104c0578063c68605c8146104e0578063c68c3a8314610500578063dc06109d1461052057600080fd5b80639d95f1cc116100d15780639d95f1cc14610440578063a2450f8914610460578063a76c9a2f14610480578063b2b99ec9146104a057600080fd5b8063739c4b08146103e25780638b95eccd146104025780638da5cb5b1461042257600080fd5b80634f1ef2861161016457806356f551171161013e57806356f551171461034857806360976c4b1461037d57806363fe3b56146103ab578063715018a6146103cd57600080fd5b80634f1ef286146102e45780635229073f146102f757806352d1902d1461032557600080fd5b80633659cfe6116101a05780633659cfe61461026f578063439fab911461028f578063468721a7146102af5780634a1ba408146102cf57600080fd5b806301750152146101c7578063294402cc146102155780633401cde81461024d575b600080fd5b3480156101d357600080fd5b506102006101e2366004612ca4565b6001600160a01b0316600090815260cc602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561022157600080fd5b5060c954610235906001600160a01b031681565b6040516001600160a01b03909116815260200161020c565b34801561025957600080fd5b5061026d610268366004612ca4565b6105e4565b005b34801561027b57600080fd5b5061026d61028a366004612ca4565b6105fa565b34801561029b57600080fd5b5061026d6102aa366004612d86565b6106df565b3480156102bb57600080fd5b506102006102ca366004612dbb565b61092b565b3480156102db57600080fd5b50610200600181565b61026d6102f2366004612e63565b6109c5565b34801561030357600080fd5b50610317610312366004612dbb565b610a91565b60405161020c929190612f03565b34801561033157600080fd5b5061033a610b32565b60405190815260200161020c565b34801561035457600080fd5b50610368610363366004612fc3565b610be5565b6040805192835260208301919091520161020c565b34801561038957600080fd5b5061039d610398366004613089565b610bfe565b60405161020c9291906130d5565b3480156103b757600080fd5b506103c0610c0b565b60405161020c9190613161565b3480156103d957600080fd5b5061026d610c1c565b3480156103ee57600080fd5b5061026d6103fd3660046131a5565b610c30565b34801561040e57600080fd5b5061026d61041d366004612ca4565b610c43565b34801561042e57600080fd5b506097546001600160a01b0316610235565b34801561044c57600080fd5b5061026d61045b366004612ca4565b610c95565b34801561046c57600080fd5b5061026d61047b3660046131a5565b610ca6565b34801561048c57600080fd5b5061026d61049b3660046131a5565b610cb7565b3480156104ac57600080fd5b5061026d6104bb366004612ca4565b610cca565b3480156104cc57600080fd5b5061026d6104db3660046131a5565b610d54565b3480156104ec57600080fd5b5061026d6104fb3660046131be565b610d8c565b34801561050c57600080fd5b5061026d61051b36600461320f565b610da8565b34801561052c57600080fd5b5061026d61053b3660046131a5565b610dc2565b34801561054c57600080fd5b5061056061055b366004613089565b610e1d565b60405161020c9190613256565b34801561057957600080fd5b5061058d610588366004612ca4565b610e41565b60408051921515835260208301919091520161020c565b3480156105b057600080fd5b5061026d6105bf366004612ca4565b610e58565b3480156105d057600080fd5b5061026d6105df366004613264565b610ece565b6105ec610ee3565b6105f760ca82610f3d565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361064b5760405162461bcd60e51b815260040161064290613299565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610694600080516020613604833981519152546001600160a01b031690565b6001600160a01b0316146106ba5760405162461bcd60e51b8152600401610642906132e5565b6106c381610fa3565b604080516000808252602082019092526105f791839190610fab565b600054610100900460ff16158080156106ff5750600054600160ff909116105b806107195750303b158015610719575060005460ff166001145b61077c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610642565b6000805460ff19166001179055801561079f576000805461ff0019166101001790555b6000806000848060200190518101906107b89190613331565b919450925090506001600160a01b03831615806107dc57506001600160a01b038216155b156107fa5760405163867915ab60e01b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03160361082c5760405163598a0e2160e01b815260040160405180910390fd5b60006108406097546001600160a01b031690565b6001600160a01b0316141580610860575060c9546001600160a01b031615155b1561087d5760405162dc149f60e41b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384161790556108a181611116565b6108aa836111dc565b6040516001600160a01b038316907f5fe6aabf4e790843df43ae0e22b58620066fb389295bedc06a92df6c3b28777d90600090a25050508015610927576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b33600090815260cc602052604081205460ff1661095b57604051631fb1d3e560e31b815260040160405180910390fd5b60c9546109789060ca906001600160a01b0316888888888861122e565b6109bb868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892506112d9915050565b9695505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610a0d5760405162461bcd60e51b815260040161064290613299565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a56600080516020613604833981519152546001600160a01b031690565b6001600160a01b031614610a7c5760405162461bcd60e51b8152600401610642906132e5565b610a8582610fa3565b61092782826001610fab565b33600090815260cc602052604081205460609060ff16610ac457604051631fb1d3e560e31b815260040160405180910390fd5b60c954610ae19060ca906001600160a01b0316898989898961122e565b610b24878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508992506113c9915050565b915091509550959350505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bd25760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610642565b5060008051602061360483398151915290565b600080610bf284846114c3565b915091505b9250929050565b606080610bf284846115d7565b6060610c1760ca611786565b905090565b610c24610ee3565b610c2e60006111dc565b565b610c38610ee3565b6105f760ca826117e2565b610c4b610ee3565b60c980546001600160a01b0319166001600160a01b0383169081179091556040517f5fe6aabf4e790843df43ae0e22b58620066fb389295bedc06a92df6c3b28777d90600090a250565b610c9d610ee3565b6105f7816118a2565b610cae610ee3565b6105f781611116565b610cbf610ee3565b6105f760ca82611928565b610cd2610ee3565b6001600160a01b038116600090815260cc602052604090205460ff16610d0b57604051631fb1d3e560e31b815260040160405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19169055517fcfc24166db4bb677e857cacabd1541fb2b30645021b27c5130419589b84db52b9190a250565b610d5c610ee3565b6000610d688260601c90565b9050610d73816118a2565b610d7e60ca836119d9565b61092760ca82836001611a8b565b610d94610ee3565b610da260ca85858585611b27565b50505050565b610db0610ee3565b610dbd60ca848484611a8b565b505050565b610dca610ee3565b6000610dd68260601c90565b6001600160a01b038116600090815260cc602052604090205490915060ff16610e1257604051631fb1d3e560e31b815260040160405180910390fd5b61092760ca836119d9565b600082815260cd6020908152604080832084845290915290205460ff165b92915050565b600080610e4f60ca84611cab565b91509150915091565b610e60610ee3565b6001600160a01b038116610ec55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610642565b6105f7816111dc565b610ed6610ee3565b610dbd60ca848484611d0e565b6097546001600160a01b03163314610c2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610642565b6000610f498383611e55565b90508015610f8a576040516001600160a01b038316907f0dfce1ea4ba1eeba891ffb2a066790fbc293a9e517fe61d49d156a30165f93f390600090a2505050565b604051634a89032160e01b815260040160405180910390fd5b6105f7610ee3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610fde57610dbd83611f7d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611038575060408051601f3d908101601f1916820190925261103591810190613374565b60015b61109b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610642565b600080516020613604833981519152811461110a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610642565b50610dbd838383612019565b60006111228260601c90565b90506000816001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611164573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611188919061338d565b90506111b360ca6bffffffffffffffffffffffff8516606085901b6001600160601b031916176117e2565b610dbd60ca6bffffffffffffffffffffffff8516606084901b6001600160601b03191617611928565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b846001600160a01b0316866001600160a01b03160361128c576112878784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061203e92505050565b6112d0565b6112d087868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892506120df915050565b50505050505050565b60006112ed6097546001600160a01b031690565b6001600160a01b031663468721a7868686866040518563ffffffff1660e01b815260040161131e94939291906133aa565b6020604051808303816000875af115801561133d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113619190613402565b90508015611397576040517f4e2e86d21375ebcbf6e93df5ebdd5a915bf830245904c3b54f48adf0170aae4b90600090a16113c1565b6040517fc24d93608a03d263ff191d7677141f5e94c496e593108f3aae0cb5b70494c4d390600090a15b949350505050565b600060606113df6097546001600160a01b031690565b6001600160a01b0316635229073f878787876040518563ffffffff1660e01b815260040161141094939291906133aa565b6000604051808303816000875af115801561142f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611457919081019061341d565b90925090508115611490576040517f4e2e86d21375ebcbf6e93df5ebdd5a915bf830245904c3b54f48adf0170aae4b90600090a16114ba565b6040517fc24d93608a03d263ff191d7677141f5e94c496e593108f3aae0cb5b70494c4d390600090a15b94509492505050565b8151600090819060078111156114ec576040516317a4d98760e31b815260040160405180910390fd5b835185511461150e576040516374f4d53760e01b815260040160405180910390fd5b6000805b82811015611571576115258160206134bd565b6115309060e06134d4565b60e0888381518110611544576115446134e7565b60200260200101516001600160e01b031916901c901b821791508080611569906134fd565b915050611512565b5060005b828110156115cc576115888160026134bd565b86828151811061159a5761159a6134e7565b602002602001015160028111156115b3576115b36130ab565b901b9190911790806115c4816134fd565b915050611575565b509590945092505050565b60608060078311156115fc576040516317a4d98760e31b815260040160405180910390fd5b8267ffffffffffffffff81111561161557611615612cc1565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5091508267ffffffffffffffff81111561165a5761165a612cc1565b604051908082528060200260200182016040528015611683578160200160208202803683370190505b50905060005b838110156116eb5760e061169e8260206134bd565b6116a99060e06134d4565b86901c901b8382815181106116c0576116c06134e7565b6001600160e01b031990921660209283029190910190910152806116e3816134fd565b915050611689565b5060005b8381101561177e5760fe6117048260026134bd565b61170f9060fe6134d4565b8660001c901b901c60ff16600281111561172b5761172b6130ab565b82828151811061173d5761173d6134e7565b60200260200101906002811115611756576117566130ab565b90816002811115611769576117696130ab565b90525080611776816134fd565b9150506116ef565b509250929050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156117d657602002820191906000526020600020905b8154815260200190600101908083116117c2575b50505050509050919050565b60006117ee8260601c90565b90506001600160a01b0381166118175760405163867915ab60e01b815260040160405180910390fd5b611821838261231f565b1561183f576040516374603e9560e11b815260040160405180910390fd5b600061184c836001612340565b905061185884826123d2565b50816001600160a01b03167f5ffb06b0b0e8ad6a8f3c5831d499dfa612d9c9d4dc107bbd66f18f61a6492e718260405161189491815260200190565b60405180910390a250505050565b6001600160a01b038116600090815260cc602052604090205460ff16156118dc576040516338e816a560e21b815260040160405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19166001179055517fb25d03aaf308d7291709be1ea28b800463cf3a9a4c4a5555d7333a964c1dfebd9190a250565b60006119348260601c90565b90506001600160a01b03811661195d5760405163867915ab60e01b815260040160405180910390fd5b611967838261231f565b15611985576040516374603e9560e11b815260040160405180910390fd5b60006119918382612340565b905061199d84826123d2565b50816001600160a01b03167faaf26bb12aa89ee96bbe19667a6a055727b75d3f6ed7b8b611ef6519180209d68260405161189491815260200190565b60006119e58260601c90565b90506001600160a01b038116611a0e5760405163867915ab60e01b815260040160405180910390fd5b611a18838261231f565b15611a36576040516374603e9560e11b815260040160405180910390fd5b6000611a43836002612340565b9050611a4f84826123d2565b50816001600160a01b03167f1ee2791f2caf0e92a9dc32a37a9ea53ab6ac7a6fb8f2d090e53a067d3a43f6ac8260405161189491815260200190565b600080805260038501602052604081208291611aa7868661243e565b81526020810191909152604001600020805460ff19166001836002811115611ad157611ad16130ab565b0217905550816001600160a01b0316836001600160a01b03167f7487530ddff120799505e52b1b19b6933f85a9eeae9220c80a7ad7c429b612ae83604051611b199190613256565b60405180910390a350505050565b600080611b358360026115d7565b9150915060005b6002811015611ca1578251600090849083908110611b5c57611b5c6134e7565b60200260200101516001600160e01b03191614611c8f576000611b9887858481518110611b8b57611b8b6134e7565b6020026020010151612483565b9050828281518110611bac57611bac6134e7565b60200260200101518960030160008381526020019081526020016000206000611bd58b8b61243e565b81526020810191909152604001600020805460ff19166001836002811115611bff57611bff6130ab565b0217905550856001600160a01b0316876001600160a01b0316896001600160a01b03167fa3df710420b01cc30ff300309abbc7fadd4630d4ab385b0f5a126fb4babe762b878681518110611c5557611c556134e7565b6020026020010151878781518110611c6f57611c6f6134e7565b6020026020010151604051611c85929190613516565b60405180910390a4505b80611c99816134fd565b915050611b3c565b5050505050505050565b6001600160a01b03811660009081526001830160205260408120548190808203611cdc576000809250925050610bf7565b600185611ce982846134d4565b81548110611cf957611cf96134e7565b90600052602060002001549250925050610bf7565b600080611d1c8360076115d7565b9150915060005b60078110156112d0578251600090849083908110611d4357611d436134e7565b60200260200101516001600160e01b03191614611e43576000611d7287858481518110611b8b57611b8b6134e7565b9050828281518110611d8657611d866134e7565b602090810291909101810151600083815260038b01835260408082208a835290935291909120805460ff19166001836002811115611dc657611dc66130ab565b021790555085876001600160a01b03167ff2ffd4f09d58d06824188033d3318d06eb957bfb1a8ffed9af78e1f19168b904868581518110611e0957611e096134e7565b6020026020010151868681518110611e2357611e236134e7565b6020026020010151604051611e39929190613516565b60405180910390a3505b80611e4d816134fd565b915050611d23565b6001600160a01b03811660009081526001830160205260408120548015611f73576000611e836001836134d4565b8554909150600090611e97906001906134d4565b9050818114611f15576000866000018281548110611eb757611eb76134e7565b9060005260206000200154905080876000018481548110611eda57611eda6134e7565b906000526020600020018190555083876001016000611ef98460601c90565b6001600160a01b03168152602081019190915260400160002055505b8554869080611f2657611f26613534565b60019003818190600052602060002001600090559055856001016000866001600160a01b03166001600160a01b031681526020019081526020016000206000905560019350505050610e3b565b6000915050610e3b565b6001600160a01b0381163b611fea5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610642565b60008051602061360483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612022836124cf565b60008251118061202f5750805b15610dbd57610da2838361250f565b60008060006060600080602487015190508060201461207057604051637ed1113760e01b815260040160405180910390fd5b60645b87518110156120d4578088015160f81c96506001810188015160601c955060158101880151945060358101880151925060358101880193506120b8898787878b6120df565b6120c383605561354a565b6120cd908261354a565b9050612073565b505050505050505050565b8151158015906120f0575060048251105b1561210e57604051632342609160e11b815260040160405180910390fd5b600061211a8686612534565b905061212784838361259f565b60006121328461355d565b9050600061214285518484612641565b90506000816003811115612158576121586130ab565b0361217657604051635872303760e01b815260040160405180910390fd5b600381600381111561218a5761218a6130ab565b0361219757505050612318565b6000806121a3856127e9565b60028111156121b4576121b46130ab565b036121d5576121ce896121c78a86612483565b8589612804565b9050612239565b60016121e0856127e9565b60028111156121f1576121f16130ab565b0361220b576121ce896122048a86612483565b858961289b565b6002612216856127e9565b6002811115612227576122276130ab565b036122395761223689896129ca565b90505b600281600281111561224d5761224d6130ab565b148061228657506000816002811115612268576122686130ab565b14801561228657506001826003811115612284576122846130ab565b145b156122a45760405163864dd1e760e01b815260040160405180910390fd5b60018160028111156122b8576122b86130ab565b14806122f1575060008160028111156122d3576122d36130ab565b1480156122f1575060028260038111156122ef576122ef6130ab565b145b156122ff5750505050612318565b6040516308d5a8b160e31b815260040160405180910390fd5b5050505050565b6001600160a01b031660009081526001919091016020526040902054151590565b600080806001846002811115612358576123586130ab565b0361237057506aff0000000000000000ffff196123ab565b6000846002811115612384576123846130ab565b0361239c57506aff00ffffffffffffff0000196123ab565b506aff00ffffffffffffffffff195b808516915060508460028111156123c4576123c46130ab565b901b91909117949350505050565b60006123e7836123e28460601c90565b61231f565b61243657825460018181018555600085815260208120909201849055845491908501906124148560601c90565b6001600160a01b03168152602081019190915260400160002055506001610e3b565b506000610e3b565b6040516001600160601b0319606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b6040516001600160601b0319606084901b1660208201526001600160e01b0319821660348201526000906038016040516020818303038152906040526124c890613594565b9392505050565b6124d881611f7d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606124c88383604051806060016040528060278152602001613624602791396129fe565b6001600160a01b038116600090815260018301602052604081205480820361256f57604051632d0519ad60e01b815260040160405180910390fd5b8361257b6001836134d4565b8154811061258b5761258b6134e7565b906000526020600020015491505092915050565b60016125aa82612a6c565b60018111156125bb576125bb6130ab565b146125d957604051633bcd102b60e21b815260040160405180910390fd5b60018260018111156125ed576125ed6130ab565b0361260b576040516306c4a1c760e11b815260040160405180910390fd5b6000831180156126235750612621816002612a87565b155b15610dbd576040516309e9cd4960e01b815260040160405180910390fd5b60008061264d84612abd565b905084158061266457506001600160e01b03198316155b806126805750600381600381111561267e5761267e6130ab565b145b8061269c5750600081600381111561269a5761269a6130ab565b145b156126a85790506124c8565b6000637993b94760e11b6001600160e01b03198516016126d4576126cd856000612ad8565b90506127bf565b63ab5d120b60e01b6001600160e01b03198516016126f7576126cd856002612ad8565b634259a0bb60e01b6001600160e01b031985160161271a576126cd856003612ad8565b639aeaeb4160e01b6001600160e01b031985160161273d576126cd856004612ad8565b63f5413a7160e01b6001600160e01b0319851601612760576126cd856005612ad8565b63f6a1584d60e01b6001600160e01b0319851601612783576126cd856007612ad8565b633213221d60e11b6001600160e01b03198516016127a6576126cd856008612ad8565b6040516318f4c12360e11b815260040160405180910390fd5b60008160048111156127d3576127d36130ab565b036127e0575090506124c8565b6109bb81612b2c565b600060ff605083901c166002811115610e3b57610e3b6130ab565b60006001600160e01b0319831663095ea7b360e01b1480159061283857506001600160e01b03198316634decdde360e11b14155b15612856576040516318f4c12360e11b815260040160405180910390fd5b6000612863600084612b86565b90506000612871338361243e565b60008781526003890160209081526040808320938352929052205460ff1692505050949350505050565b6000806128a9600084612b86565b90506001600160a01b03811633146128d457604051636eb0315f60e01b815260040160405180910390fd5b6000637993b94760e11b6001600160e01b0319861601612900576128f9600185612b86565b90506129a1565b63ab5d120b60e01b6001600160e01b0319861601612939576000612925600186612b86565b9050612931818461243e565b9150506129a1565b6001600160e01b0319851663bda65f4560e01b148061296857506001600160e01b0319851663651514bf60e01b145b8061298357506001600160e01b03198516630abec58f60e01b145b156127a6576000612995600186612b86565b9050612931838261243e565b60008681526003880160209081526040808320938352929052205460ff16915050949350505050565b6000806129d7338461243e565b60008080526003860160209081526040808320938352929052205460ff1691505092915050565b6060600080856001600160a01b031685604051612a1b91906135bb565b600060405180830381855af49150503d8060008114612a56576040519150601f19603f3d011682016040523d82523d6000602084013e612a5b565b606091505b50915091506109bb86838387612bf1565b600060ff605883901c166001811115610e3b57610e3b6130ab565b6000816002811115612a9b57612a9b6130ab565b612aa4846127e9565b6002811115612ab557612ab56130ab565b149392505050565b600060ff604883901c166003811115610e3b57610e3b6130ab565b600060098210612afb5760405163b44af9af60e01b815260040160405180910390fd5b6000612b088360086134bd565b612b139060b861354a565b905083811b60f81c60048111156113c1576113c16130ab565b600080826004811115612b4157612b416130ab565b90508060ff16600003612b675760405163d8455a1360e01b815260040160405180910390fd5b612b726001826135d7565b60ff1660038111156124c8576124c86130ab565b6000612b938360206134bd565b612b9e90600461354a565b612ba990602061354a565b82511015612bca57604051631d098e2d60e21b815260040160405180910390fd5b6000612bd78460206134bd565b612be290600461354a565b92909201602001519392505050565b60608315612c60578251600003612c59576001600160a01b0385163b612c595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610642565b50816113c1565b6113c18383815115612c755781518083602001fd5b8060405162461bcd60e51b815260040161064291906135f0565b6001600160a01b03811681146105f757600080fd5b600060208284031215612cb657600080fd5b81356124c881612c8f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d0057612d00612cc1565b604052919050565b600067ffffffffffffffff821115612d2257612d22612cc1565b50601f01601f191660200190565b600082601f830112612d4157600080fd5b8135612d54612d4f82612d08565b612cd7565b818152846020838601011115612d6957600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612d9857600080fd5b813567ffffffffffffffff811115612daf57600080fd5b6113c184828501612d30565b600080600080600060808688031215612dd357600080fd5b8535612dde81612c8f565b945060208601359350604086013567ffffffffffffffff80821115612e0257600080fd5b818801915088601f830112612e1657600080fd5b813581811115612e2557600080fd5b896020828501011115612e3757600080fd5b602083019550809450505050606086013560028110612e5557600080fd5b809150509295509295909350565b60008060408385031215612e7657600080fd5b8235612e8181612c8f565b9150602083013567ffffffffffffffff811115612e9d57600080fd5b612ea985828601612d30565b9150509250929050565b60005b83811015612ece578181015183820152602001612eb6565b50506000910152565b60008151808452612eef816020860160208601612eb3565b601f01601f19169290920160200192915050565b82151581526040602082015260006113c16040830184612ed7565b600067ffffffffffffffff821115612f3857612f38612cc1565b5060051b60200190565b803560038110612f5157600080fd5b919050565b600082601f830112612f6757600080fd5b81356020612f77612d4f83612f1e565b82815260059290921b84018101918181019086841115612f9657600080fd5b8286015b84811015612fb857612fab81612f42565b8352918301918301612f9a565b509695505050505050565b60008060408385031215612fd657600080fd5b823567ffffffffffffffff80821115612fee57600080fd5b818501915085601f83011261300257600080fd5b81356020613012612d4f83612f1e565b82815260059290921b8401810191818101908984111561303157600080fd5b948201945b838610156130665785356001600160e01b0319811681146130575760008081fd5b82529482019490820190613036565b9650508601359250508082111561307c57600080fd5b50612ea985828601612f56565b6000806040838503121561309c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106130d1576130d16130ab565b9052565b604080825283519082018190526000906020906060840190828701845b828110156131185781516001600160e01b031916845292840192908401906001016130f2565b5050508381038285015284518082528583019183019060005b81811015613154576131448385516130c1565b9284019291840191600101613131565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131995783518352928401929184019160010161317d565b50909695505050505050565b6000602082840312156131b757600080fd5b5035919050565b600080600080608085870312156131d457600080fd5b84356131df81612c8f565b935060208501356131ef81612c8f565b925060408501356131ff81612c8f565b9396929550929360600135925050565b60008060006060848603121561322457600080fd5b833561322f81612c8f565b9250602084013561323f81612c8f565b915061324d60408501612f42565b90509250925092565b60208101610e3b82846130c1565b60008060006060848603121561327957600080fd5b833561328481612c8f565b95602085013595506040909401359392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60008060006060848603121561334657600080fd5b835161335181612c8f565b602085015190935061336281612c8f565b80925050604084015190509250925092565b60006020828403121561338657600080fd5b5051919050565b60006020828403121561339f57600080fd5b81516124c881612c8f565b60018060a01b03851681528360208201526080604082015260006133d16080830185612ed7565b9050600283106133e3576133e36130ab565b82606083015295945050505050565b80518015158114612f5157600080fd5b60006020828403121561341457600080fd5b6124c8826133f2565b6000806040838503121561343057600080fd5b613439836133f2565b9150602083015167ffffffffffffffff81111561345557600080fd5b8301601f8101851361346657600080fd5b8051613474612d4f82612d08565b81815286602083850101111561348957600080fd5b61349a826020830160208601612eb3565b8093505050509250929050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e3b57610e3b6134a7565b81810381811115610e3b57610e3b6134a7565b634e487b7160e01b600052603260045260246000fd5b60006001820161350f5761350f6134a7565b5060010190565b6001600160e01b031983168152604081016124c860208301846130c1565b634e487b7160e01b600052603160045260246000fd5b80820180821115610e3b57610e3b6134a7565b805160208201516001600160e01b0319808216929190600483101561358c5780818460040360031b1b83161693505b505050919050565b805160208083015191908110156135b5576000198160200360031b1b821691505b50919050565b600082516135cd818460208701612eb3565b9190910192915050565b60ff8281168282160390811115610e3b57610e3b6134a7565b6020815260006124c86020830184612ed756fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ec1b42309ca1be4e1dea19d21acd6d364096f019a09d088fde775ab08446545564736f6c63430008130033
1150    /// ```
1151    #[rustfmt::skip]
1152    #[allow(clippy::all)]
1153    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
1154        b"`\xA0`@R0`\x80R4\x80\x15b\0\0\x15W`\0\x80\xFD[Pb\0\0 b\0\0&V[b\0\0\xE7V[`\0Ta\x01\0\x90\x04`\xFF\x16\x15b\0\0\x93W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FInitializable: contract is initi`D\x82\x01Rfalizing`\xC8\x1B`d\x82\x01R`\x84\x01`@Q\x80\x91\x03\x90\xFD[`\0T`\xFF\x90\x81\x16\x14b\0\0\xE5W`\0\x80T`\xFF\x19\x16`\xFF\x90\x81\x17\x90\x91U`@Q\x90\x81R\x7F\x7F&\xB8?\xF9n\x1F+jh/\x138R\xF6y\x8A\t\xC4e\xDA\x95\x92\x14`\xCE\xFB8G@$\x98\x90` \x01`@Q\x80\x91\x03\x90\xA1[V[`\x80Qa6\x80b\0\x01\x1F`\09`\0\x81\x81a\x06\x04\x01R\x81\x81a\x06M\x01R\x81\x81a\t\xCF\x01R\x81\x81a\n\x0F\x01Ra\x0B?\x01Ra6\x80`\0\xF3\xFE`\x80`@R`\x046\x10a\x01\xC2W`\x005`\xE0\x1C\x80cs\x9CK\x08\x11a\0\xF7W\x80c\xB5sib\x11a\0\x95W\x80c\xDCDjJ\x11a\0dW\x80c\xDCDjJ\x14a\x05@W\x80c\xDFNo\x8A\x14a\x05mW\x80c\xF2\xFD\xE3\x8B\x14a\x05\xA4W\x80c\xFA\x19P\x1D\x14a\x05\xC4W`\0\x80\xFD[\x80c\xB5sib\x14a\x04\xC0W\x80c\xC6\x86\x05\xC8\x14a\x04\xE0W\x80c\xC6\x8C:\x83\x14a\x05\0W\x80c\xDC\x06\x10\x9D\x14a\x05 W`\0\x80\xFD[\x80c\x9D\x95\xF1\xCC\x11a\0\xD1W\x80c\x9D\x95\xF1\xCC\x14a\x04@W\x80c\xA2E\x0F\x89\x14a\x04`W\x80c\xA7l\x9A/\x14a\x04\x80W\x80c\xB2\xB9\x9E\xC9\x14a\x04\xA0W`\0\x80\xFD[\x80cs\x9CK\x08\x14a\x03\xE2W\x80c\x8B\x95\xEC\xCD\x14a\x04\x02W\x80c\x8D\xA5\xCB[\x14a\x04\"W`\0\x80\xFD[\x80cO\x1E\xF2\x86\x11a\x01dW\x80cV\xF5Q\x17\x11a\x01>W\x80cV\xF5Q\x17\x14a\x03HW\x80c`\x97lK\x14a\x03}W\x80cc\xFE;V\x14a\x03\xABW\x80cqP\x18\xA6\x14a\x03\xCDW`\0\x80\xFD[\x80cO\x1E\xF2\x86\x14a\x02\xE4W\x80cR)\x07?\x14a\x02\xF7W\x80cR\xD1\x90-\x14a\x03%W`\0\x80\xFD[\x80c6Y\xCF\xE6\x11a\x01\xA0W\x80c6Y\xCF\xE6\x14a\x02oW\x80cC\x9F\xAB\x91\x14a\x02\x8FW\x80cF\x87!\xA7\x14a\x02\xAFW\x80cJ\x1B\xA4\x08\x14a\x02\xCFW`\0\x80\xFD[\x80c\x01u\x01R\x14a\x01\xC7W\x80c)D\x02\xCC\x14a\x02\x15W\x80c4\x01\xCD\xE8\x14a\x02MW[`\0\x80\xFD[4\x80\x15a\x01\xD3W`\0\x80\xFD[Pa\x02\0a\x01\xE26`\x04a,\xA4V[`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\xCC` R`@\x90 T`\xFF\x16\x90V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02!W`\0\x80\xFD[P`\xC9Ta\x025\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02\x0CV[4\x80\x15a\x02YW`\0\x80\xFD[Pa\x02ma\x02h6`\x04a,\xA4V[a\x05\xE4V[\0[4\x80\x15a\x02{W`\0\x80\xFD[Pa\x02ma\x02\x8A6`\x04a,\xA4V[a\x05\xFAV[4\x80\x15a\x02\x9BW`\0\x80\xFD[Pa\x02ma\x02\xAA6`\x04a-\x86V[a\x06\xDFV[4\x80\x15a\x02\xBBW`\0\x80\xFD[Pa\x02\0a\x02\xCA6`\x04a-\xBBV[a\t+V[4\x80\x15a\x02\xDBW`\0\x80\xFD[Pa\x02\0`\x01\x81V[a\x02ma\x02\xF26`\x04a.cV[a\t\xC5V[4\x80\x15a\x03\x03W`\0\x80\xFD[Pa\x03\x17a\x03\x126`\x04a-\xBBV[a\n\x91V[`@Qa\x02\x0C\x92\x91\x90a/\x03V[4\x80\x15a\x031W`\0\x80\xFD[Pa\x03:a\x0B2V[`@Q\x90\x81R` \x01a\x02\x0CV[4\x80\x15a\x03TW`\0\x80\xFD[Pa\x03ha\x03c6`\x04a/\xC3V[a\x0B\xE5V[`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x02\x0CV[4\x80\x15a\x03\x89W`\0\x80\xFD[Pa\x03\x9Da\x03\x986`\x04a0\x89V[a\x0B\xFEV[`@Qa\x02\x0C\x92\x91\x90a0\xD5V[4\x80\x15a\x03\xB7W`\0\x80\xFD[Pa\x03\xC0a\x0C\x0BV[`@Qa\x02\x0C\x91\x90a1aV[4\x80\x15a\x03\xD9W`\0\x80\xFD[Pa\x02ma\x0C\x1CV[4\x80\x15a\x03\xEEW`\0\x80\xFD[Pa\x02ma\x03\xFD6`\x04a1\xA5V[a\x0C0V[4\x80\x15a\x04\x0EW`\0\x80\xFD[Pa\x02ma\x04\x1D6`\x04a,\xA4V[a\x0CCV[4\x80\x15a\x04.W`\0\x80\xFD[P`\x97T`\x01`\x01`\xA0\x1B\x03\x16a\x025V[4\x80\x15a\x04LW`\0\x80\xFD[Pa\x02ma\x04[6`\x04a,\xA4V[a\x0C\x95V[4\x80\x15a\x04lW`\0\x80\xFD[Pa\x02ma\x04{6`\x04a1\xA5V[a\x0C\xA6V[4\x80\x15a\x04\x8CW`\0\x80\xFD[Pa\x02ma\x04\x9B6`\x04a1\xA5V[a\x0C\xB7V[4\x80\x15a\x04\xACW`\0\x80\xFD[Pa\x02ma\x04\xBB6`\x04a,\xA4V[a\x0C\xCAV[4\x80\x15a\x04\xCCW`\0\x80\xFD[Pa\x02ma\x04\xDB6`\x04a1\xA5V[a\rTV[4\x80\x15a\x04\xECW`\0\x80\xFD[Pa\x02ma\x04\xFB6`\x04a1\xBEV[a\r\x8CV[4\x80\x15a\x05\x0CW`\0\x80\xFD[Pa\x02ma\x05\x1B6`\x04a2\x0FV[a\r\xA8V[4\x80\x15a\x05,W`\0\x80\xFD[Pa\x02ma\x05;6`\x04a1\xA5V[a\r\xC2V[4\x80\x15a\x05LW`\0\x80\xFD[Pa\x05`a\x05[6`\x04a0\x89V[a\x0E\x1DV[`@Qa\x02\x0C\x91\x90a2VV[4\x80\x15a\x05yW`\0\x80\xFD[Pa\x05\x8Da\x05\x886`\x04a,\xA4V[a\x0EAV[`@\x80Q\x92\x15\x15\x83R` \x83\x01\x91\x90\x91R\x01a\x02\x0CV[4\x80\x15a\x05\xB0W`\0\x80\xFD[Pa\x02ma\x05\xBF6`\x04a,\xA4V[a\x0EXV[4\x80\x15a\x05\xD0W`\0\x80\xFD[Pa\x02ma\x05\xDF6`\x04a2dV[a\x0E\xCEV[a\x05\xECa\x0E\xE3V[a\x05\xF7`\xCA\x82a\x0F=V[PV[`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x06KW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\x99V[`@Q\x80\x91\x03\x90\xFD[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16a\x06\x94`\0\x80Q` a6\x04\x839\x81Q\x91RT`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\xBAW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\xE5V[a\x06\xC3\x81a\x0F\xA3V[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92Ra\x05\xF7\x91\x83\x91\x90a\x0F\xABV[`\0Ta\x01\0\x90\x04`\xFF\x16\x15\x80\x80\x15a\x06\xFFWP`\0T`\x01`\xFF\x90\x91\x16\x10[\x80a\x07\x19WP0;\x15\x80\x15a\x07\x19WP`\0T`\xFF\x16`\x01\x14[a\x07|W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7FInitializable: contract is alrea`D\x82\x01Rm\x19\x1EH\x1A[\x9A]\x1AX[\x1A^\x99Y`\x92\x1B`d\x82\x01R`\x84\x01a\x06BV[`\0\x80T`\xFF\x19\x16`\x01\x17\x90U\x80\x15a\x07\x9FW`\0\x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U[`\0\x80`\0\x84\x80` \x01\x90Q\x81\x01\x90a\x07\xB8\x91\x90a31V[\x91\x94P\x92P\x90P`\x01`\x01`\xA0\x1B\x03\x83\x16\x15\x80a\x07\xDCWP`\x01`\x01`\xA0\x1B\x03\x82\x16\x15[\x15a\x07\xFAW`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x03a\x08,W`@QcY\x8A\x0E!`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x08@`\x97T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x14\x15\x80a\x08`WP`\xC9T`\x01`\x01`\xA0\x1B\x03\x16\x15\x15[\x15a\x08}W`@Qb\xDC\x14\x9F`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\xC9\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x84\x16\x17\x90Ua\x08\xA1\x81a\x11\x16V[a\x08\xAA\x83a\x11\xDCV[`@Q`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F_\xE6\xAA\xBFNy\x08C\xDFC\xAE\x0E\"\xB5\x86 \x06o\xB3\x89)[\xED\xC0j\x92\xDFl;(w}\x90`\0\x90\xA2PPP\x80\x15a\t'W`\0\x80Ta\xFF\0\x19\x16\x90U`@Q`\x01\x81R\x7F\x7F&\xB8?\xF9n\x1F+jh/\x138R\xF6y\x8A\t\xC4e\xDA\x95\x92\x14`\xCE\xFB8G@$\x98\x90` \x01`@Q\x80\x91\x03\x90\xA1[PPV[3`\0\x90\x81R`\xCC` R`@\x81 T`\xFF\x16a\t[W`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\xC9Ta\tx\x90`\xCA\x90`\x01`\x01`\xA0\x1B\x03\x16\x88\x88\x88\x88\x88a\x12.V[a\t\xBB\x86\x86\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x88\x92Pa\x12\xD9\x91PPV[\x96\x95PPPPPPV[`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\n\rW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\x99V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16a\nV`\0\x80Q` a6\x04\x839\x81Q\x91RT`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\xE5V[a\n\x85\x82a\x0F\xA3V[a\t'\x82\x82`\x01a\x0F\xABV[3`\0\x90\x81R`\xCC` R`@\x81 T``\x90`\xFF\x16a\n\xC4W`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\xC9Ta\n\xE1\x90`\xCA\x90`\x01`\x01`\xA0\x1B\x03\x16\x89\x89\x89\x89\x89a\x12.V[a\x0B$\x87\x87\x87\x87\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x89\x92Pa\x13\xC9\x91PPV[\x91P\x91P\x95P\x95\x93PPPPV[`\x000`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x0B\xD2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7FUUPSUpgradeable: must not be cal`D\x82\x01R\x7Fled through delegatecall\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06BV[P`\0\x80Q` a6\x04\x839\x81Q\x91R\x90V[`\0\x80a\x0B\xF2\x84\x84a\x14\xC3V[\x91P\x91P[\x92P\x92\x90PV[``\x80a\x0B\xF2\x84\x84a\x15\xD7V[``a\x0C\x17`\xCAa\x17\x86V[\x90P\x90V[a\x0C$a\x0E\xE3V[a\x0C.`\0a\x11\xDCV[V[a\x0C8a\x0E\xE3V[a\x05\xF7`\xCA\x82a\x17\xE2V[a\x0CKa\x0E\xE3V[`\xC9\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x81\x17\x90\x91U`@Q\x7F_\xE6\xAA\xBFNy\x08C\xDFC\xAE\x0E\"\xB5\x86 \x06o\xB3\x89)[\xED\xC0j\x92\xDFl;(w}\x90`\0\x90\xA2PV[a\x0C\x9Da\x0E\xE3V[a\x05\xF7\x81a\x18\xA2V[a\x0C\xAEa\x0E\xE3V[a\x05\xF7\x81a\x11\x16V[a\x0C\xBFa\x0E\xE3V[a\x05\xF7`\xCA\x82a\x19(V[a\x0C\xD2a\x0E\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\xCC` R`@\x90 T`\xFF\x16a\r\x0BW`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x81\x81R`\xCC` R`@\x80\x82 \x80T`\xFF\x19\x16\x90UQ\x7F\xCF\xC2Af\xDBK\xB6w\xE8W\xCA\xCA\xBD\x15A\xFB+0dP!\xB2|Q0A\x95\x89\xB8M\xB5+\x91\x90\xA2PV[a\r\\a\x0E\xE3V[`\0a\rh\x82``\x1C\x90V[\x90Pa\rs\x81a\x18\xA2V[a\r~`\xCA\x83a\x19\xD9V[a\t'`\xCA\x82\x83`\x01a\x1A\x8BV[a\r\x94a\x0E\xE3V[a\r\xA2`\xCA\x85\x85\x85\x85a\x1B'V[PPPPV[a\r\xB0a\x0E\xE3V[a\r\xBD`\xCA\x84\x84\x84a\x1A\x8BV[PPPV[a\r\xCAa\x0E\xE3V[`\0a\r\xD6\x82``\x1C\x90V[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\xCC` R`@\x90 T\x90\x91P`\xFF\x16a\x0E\x12W`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\t'`\xCA\x83a\x19\xD9V[`\0\x82\x81R`\xCD` \x90\x81R`@\x80\x83 \x84\x84R\x90\x91R\x90 T`\xFF\x16[\x92\x91PPV[`\0\x80a\x0EO`\xCA\x84a\x1C\xABV[\x91P\x91P\x91P\x91V[a\x0E`a\x0E\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0E\xC5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06BV[a\x05\xF7\x81a\x11\xDCV[a\x0E\xD6a\x0E\xE3V[a\r\xBD`\xCA\x84\x84\x84a\x1D\x0EV[`\x97T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x0C.W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06BV[`\0a\x0FI\x83\x83a\x1EUV[\x90P\x80\x15a\x0F\x8AW`@Q`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\r\xFC\xE1\xEAK\xA1\xEE\xBA\x89\x1F\xFB*\x06g\x90\xFB\xC2\x93\xA9\xE5\x17\xFEa\xD4\x9D\x15j0\x16_\x93\xF3\x90`\0\x90\xA2PPPV[`@QcJ\x89\x03!`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05\xF7a\x0E\xE3V[\x7FI\x10\xFD\xFA\x16\xFE\xD3&\x0E\xD0\xE7\x14\x7F|\xC6\xDA\x11\xA6\x02\x08\xB5\xB9@m\x12\xA65aO\xFD\x91CT`\xFF\x16\x15a\x0F\xDEWa\r\xBD\x83a\x1F}V[\x82`\x01`\x01`\xA0\x1B\x03\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x108WP`@\x80Q`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01\x90\x92Ra\x105\x91\x81\x01\x90a3tV[`\x01[a\x10\x9BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7FERC1967Upgrade: new implementati`D\x82\x01Rmon is not UUPS`\x90\x1B`d\x82\x01R`\x84\x01a\x06BV[`\0\x80Q` a6\x04\x839\x81Q\x91R\x81\x14a\x11\nW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FERC1967Upgrade: unsupported prox`D\x82\x01Rh\x1AXX\x9B\x19UURQ`\xBA\x1B`d\x82\x01R`\x84\x01a\x06BV[Pa\r\xBD\x83\x83\x83a \x19V[`\0a\x11\"\x82``\x1C\x90V[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xFC\x0CTj`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11dW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\x88\x91\x90a3\x8DV[\x90Pa\x11\xB3`\xCAk\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16``\x85\x90\x1B`\x01`\x01``\x1B\x03\x19\x16\x17a\x17\xE2V[a\r\xBD`\xCAk\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16``\x84\x90\x1B`\x01`\x01``\x1B\x03\x19\x16\x17a\x19(V[`\x97\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x90\x93U`@Q\x91\x16\x91\x90\x82\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90`\0\x90\xA3PPV[\x84`\x01`\x01`\xA0\x1B\x03\x16\x86`\x01`\x01`\xA0\x1B\x03\x16\x03a\x12\x8CWa\x12\x87\x87\x84\x84\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa >\x92PPPV[a\x12\xD0V[a\x12\xD0\x87\x86\x86\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x88\x92Pa \xDF\x91PPV[PPPPPPPV[`\0a\x12\xED`\x97T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16cF\x87!\xA7\x86\x86\x86\x86`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x1E\x94\x93\x92\x91\x90a3\xAAV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x13=W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13a\x91\x90a4\x02V[\x90P\x80\x15a\x13\x97W`@Q\x7FN.\x86\xD2\x13u\xEB\xCB\xF6\xE9=\xF5\xEB\xDDZ\x91[\xF80$Y\x04\xC3\xB5OH\xAD\xF0\x17\n\xAEK\x90`\0\x90\xA1a\x13\xC1V[`@Q\x7F\xC2M\x93`\x8A\x03\xD2c\xFF\x19\x1Dvw\x14\x1F^\x94\xC4\x96\xE5\x93\x10\x8F:\xAE\x0C\xB5\xB7\x04\x94\xC4\xD3\x90`\0\x90\xA1[\x94\x93PPPPV[`\0``a\x13\xDF`\x97T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16cR)\x07?\x87\x87\x87\x87`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x14\x10\x94\x93\x92\x91\x90a3\xAAV[`\0`@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x14/W=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x14W\x91\x90\x81\x01\x90a4\x1DV[\x90\x92P\x90P\x81\x15a\x14\x90W`@Q\x7FN.\x86\xD2\x13u\xEB\xCB\xF6\xE9=\xF5\xEB\xDDZ\x91[\xF80$Y\x04\xC3\xB5OH\xAD\xF0\x17\n\xAEK\x90`\0\x90\xA1a\x14\xBAV[`@Q\x7F\xC2M\x93`\x8A\x03\xD2c\xFF\x19\x1Dvw\x14\x1F^\x94\xC4\x96\xE5\x93\x10\x8F:\xAE\x0C\xB5\xB7\x04\x94\xC4\xD3\x90`\0\x90\xA1[\x94P\x94\x92PPPV[\x81Q`\0\x90\x81\x90`\x07\x81\x11\x15a\x14\xECW`@Qc\x17\xA4\xD9\x87`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x83Q\x85Q\x14a\x15\x0EW`@Qct\xF4\xD57`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80[\x82\x81\x10\x15a\x15qWa\x15%\x81` a4\xBDV[a\x150\x90`\xE0a4\xD4V[`\xE0\x88\x83\x81Q\x81\x10a\x15DWa\x15Da4\xE7V[` \x02` \x01\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x90\x1C\x90\x1B\x82\x17\x91P\x80\x80a\x15i\x90a4\xFDV[\x91PPa\x15\x12V[P`\0[\x82\x81\x10\x15a\x15\xCCWa\x15\x88\x81`\x02a4\xBDV[\x86\x82\x81Q\x81\x10a\x15\x9AWa\x15\x9Aa4\xE7V[` \x02` \x01\x01Q`\x02\x81\x11\x15a\x15\xB3Wa\x15\xB3a0\xABV[\x90\x1B\x91\x90\x91\x17\x90\x80a\x15\xC4\x81a4\xFDV[\x91PPa\x15uV[P\x95\x90\x94P\x92PPPV[``\x80`\x07\x83\x11\x15a\x15\xFCW`@Qc\x17\xA4\xD9\x87`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x16\x15Wa\x16\x15a,\xC1V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x16>W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x91P\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x16ZWa\x16Za,\xC1V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x16\x83W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x83\x81\x10\x15a\x16\xEBW`\xE0a\x16\x9E\x82` a4\xBDV[a\x16\xA9\x90`\xE0a4\xD4V[\x86\x90\x1C\x90\x1B\x83\x82\x81Q\x81\x10a\x16\xC0Wa\x16\xC0a4\xE7V[`\x01`\x01`\xE0\x1B\x03\x19\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x80a\x16\xE3\x81a4\xFDV[\x91PPa\x16\x89V[P`\0[\x83\x81\x10\x15a\x17~W`\xFEa\x17\x04\x82`\x02a4\xBDV[a\x17\x0F\x90`\xFEa4\xD4V[\x86`\0\x1C\x90\x1B\x90\x1C`\xFF\x16`\x02\x81\x11\x15a\x17+Wa\x17+a0\xABV[\x82\x82\x81Q\x81\x10a\x17=Wa\x17=a4\xE7V[` \x02` \x01\x01\x90`\x02\x81\x11\x15a\x17VWa\x17Va0\xABV[\x90\x81`\x02\x81\x11\x15a\x17iWa\x17ia0\xABV[\x90RP\x80a\x17v\x81a4\xFDV[\x91PPa\x16\xEFV[P\x92P\x92\x90PV[``\x81`\0\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x17\xD6W` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x17\xC2W[PPPPP\x90P\x91\x90PV[`\0a\x17\xEE\x82``\x1C\x90V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16a\x18\x17W`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x18!\x83\x82a#\x1FV[\x15a\x18?W`@Qct`>\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x18L\x83`\x01a#@V[\x90Pa\x18X\x84\x82a#\xD2V[P\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F_\xFB\x06\xB0\xB0\xE8\xADj\x8F<X1\xD4\x99\xDF\xA6\x12\xD9\xC9\xD4\xDC\x10{\xBDf\xF1\x8Fa\xA6I.q\x82`@Qa\x18\x94\x91\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA2PPPPV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\xCC` R`@\x90 T`\xFF\x16\x15a\x18\xDCW`@Qc8\xE8\x16\xA5`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x81\x81R`\xCC` R`@\x80\x82 \x80T`\xFF\x19\x16`\x01\x17\x90UQ\x7F\xB2]\x03\xAA\xF3\x08\xD7)\x17\t\xBE\x1E\xA2\x8B\x80\x04c\xCF:\x9ALJUU\xD73:\x96L\x1D\xFE\xBD\x91\x90\xA2PV[`\0a\x194\x82``\x1C\x90V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16a\x19]W`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x19g\x83\x82a#\x1FV[\x15a\x19\x85W`@Qct`>\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x19\x91\x83\x82a#@V[\x90Pa\x19\x9D\x84\x82a#\xD2V[P\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F\xAA\xF2k\xB1*\xA8\x9E\xE9k\xBE\x19fzj\x05W'\xB7]?n\xD7\xB8\xB6\x11\xEFe\x19\x18\x02\t\xD6\x82`@Qa\x18\x94\x91\x81R` \x01\x90V[`\0a\x19\xE5\x82``\x1C\x90V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16a\x1A\x0EW`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1A\x18\x83\x82a#\x1FV[\x15a\x1A6W`@Qct`>\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x1AC\x83`\x02a#@V[\x90Pa\x1AO\x84\x82a#\xD2V[P\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F\x1E\xE2y\x1F,\xAF\x0E\x92\xA9\xDC2\xA3z\x9E\xA5:\xB6\xACzo\xB8\xF2\xD0\x90\xE5:\x06}:C\xF6\xAC\x82`@Qa\x18\x94\x91\x81R` \x01\x90V[`\0\x80\x80R`\x03\x85\x01` R`@\x81 \x82\x91a\x1A\xA7\x86\x86a$>V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 \x80T`\xFF\x19\x16`\x01\x83`\x02\x81\x11\x15a\x1A\xD1Wa\x1A\xD1a0\xABV[\x02\x17\x90UP\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x7Ft\x87S\r\xDF\xF1 y\x95\x05\xE5+\x1B\x19\xB6\x93?\x85\xA9\xEE\xAE\x92 \xC8\nz\xD7\xC4)\xB6\x12\xAE\x83`@Qa\x1B\x19\x91\x90a2VV[`@Q\x80\x91\x03\x90\xA3PPPPV[`\0\x80a\x1B5\x83`\x02a\x15\xD7V[\x91P\x91P`\0[`\x02\x81\x10\x15a\x1C\xA1W\x82Q`\0\x90\x84\x90\x83\x90\x81\x10a\x1B\\Wa\x1B\\a4\xE7V[` \x02` \x01\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x14a\x1C\x8FW`\0a\x1B\x98\x87\x85\x84\x81Q\x81\x10a\x1B\x8BWa\x1B\x8Ba4\xE7V[` \x02` \x01\x01Qa$\x83V[\x90P\x82\x82\x81Q\x81\x10a\x1B\xACWa\x1B\xACa4\xE7V[` \x02` \x01\x01Q\x89`\x03\x01`\0\x83\x81R` \x01\x90\x81R` \x01`\0 `\0a\x1B\xD5\x8B\x8Ba$>V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 \x80T`\xFF\x19\x16`\x01\x83`\x02\x81\x11\x15a\x1B\xFFWa\x1B\xFFa0\xABV[\x02\x17\x90UP\x85`\x01`\x01`\xA0\x1B\x03\x16\x87`\x01`\x01`\xA0\x1B\x03\x16\x89`\x01`\x01`\xA0\x1B\x03\x16\x7F\xA3\xDFq\x04 \xB0\x1C\xC3\x0F\xF3\x000\x9A\xBB\xC7\xFA\xDDF0\xD4\xAB8[\x0FZ\x12o\xB4\xBA\xBEv+\x87\x86\x81Q\x81\x10a\x1CUWa\x1CUa4\xE7V[` \x02` \x01\x01Q\x87\x87\x81Q\x81\x10a\x1CoWa\x1Coa4\xE7V[` \x02` \x01\x01Q`@Qa\x1C\x85\x92\x91\x90a5\x16V[`@Q\x80\x91\x03\x90\xA4P[\x80a\x1C\x99\x81a4\xFDV[\x91PPa\x1B<V[PPPPPPPPV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x01\x83\x01` R`@\x81 T\x81\x90\x80\x82\x03a\x1C\xDCW`\0\x80\x92P\x92PPa\x0B\xF7V[`\x01\x85a\x1C\xE9\x82\x84a4\xD4V[\x81T\x81\x10a\x1C\xF9Wa\x1C\xF9a4\xE7V[\x90`\0R` `\0 \x01T\x92P\x92PPa\x0B\xF7V[`\0\x80a\x1D\x1C\x83`\x07a\x15\xD7V[\x91P\x91P`\0[`\x07\x81\x10\x15a\x12\xD0W\x82Q`\0\x90\x84\x90\x83\x90\x81\x10a\x1DCWa\x1DCa4\xE7V[` \x02` \x01\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x14a\x1ECW`\0a\x1Dr\x87\x85\x84\x81Q\x81\x10a\x1B\x8BWa\x1B\x8Ba4\xE7V[\x90P\x82\x82\x81Q\x81\x10a\x1D\x86Wa\x1D\x86a4\xE7V[` \x90\x81\x02\x91\x90\x91\x01\x81\x01Q`\0\x83\x81R`\x03\x8B\x01\x83R`@\x80\x82 \x8A\x83R\x90\x93R\x91\x90\x91 \x80T`\xFF\x19\x16`\x01\x83`\x02\x81\x11\x15a\x1D\xC6Wa\x1D\xC6a0\xABV[\x02\x17\x90UP\x85\x87`\x01`\x01`\xA0\x1B\x03\x16\x7F\xF2\xFF\xD4\xF0\x9DX\xD0h$\x18\x803\xD31\x8D\x06\xEB\x95{\xFB\x1A\x8F\xFE\xD9\xAFx\xE1\xF1\x91h\xB9\x04\x86\x85\x81Q\x81\x10a\x1E\tWa\x1E\ta4\xE7V[` \x02` \x01\x01Q\x86\x86\x81Q\x81\x10a\x1E#Wa\x1E#a4\xE7V[` \x02` \x01\x01Q`@Qa\x1E9\x92\x91\x90a5\x16V[`@Q\x80\x91\x03\x90\xA3P[\x80a\x1EM\x81a4\xFDV[\x91PPa\x1D#V[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x01\x83\x01` R`@\x81 T\x80\x15a\x1FsW`\0a\x1E\x83`\x01\x83a4\xD4V[\x85T\x90\x91P`\0\x90a\x1E\x97\x90`\x01\x90a4\xD4V[\x90P\x81\x81\x14a\x1F\x15W`\0\x86`\0\x01\x82\x81T\x81\x10a\x1E\xB7Wa\x1E\xB7a4\xE7V[\x90`\0R` `\0 \x01T\x90P\x80\x87`\0\x01\x84\x81T\x81\x10a\x1E\xDAWa\x1E\xDAa4\xE7V[\x90`\0R` `\0 \x01\x81\x90UP\x83\x87`\x01\x01`\0a\x1E\xF9\x84``\x1C\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 UP[\x85T\x86\x90\x80a\x1F&Wa\x1F&a54V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x85`\x01\x01`\0\x86`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01\x90\x81R` \x01`\0 `\0\x90U`\x01\x93PPPPa\x0E;V[`\0\x91PPa\x0E;V[`\x01`\x01`\xA0\x1B\x03\x81\x16;a\x1F\xEAW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FERC1967: new implementation is n`D\x82\x01Rl\x1B\xDD\x08\x18H\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x9A\x1B`d\x82\x01R`\x84\x01a\x06BV[`\0\x80Q` a6\x04\x839\x81Q\x91R\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a \"\x83a$\xCFV[`\0\x82Q\x11\x80a /WP\x80[\x15a\r\xBDWa\r\xA2\x83\x83a%\x0FV[`\0\x80`\0```\0\x80`$\x87\x01Q\x90P\x80` \x14a pW`@Qc~\xD1\x117`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`d[\x87Q\x81\x10\x15a \xD4W\x80\x88\x01Q`\xF8\x1C\x96P`\x01\x81\x01\x88\x01Q``\x1C\x95P`\x15\x81\x01\x88\x01Q\x94P`5\x81\x01\x88\x01Q\x92P`5\x81\x01\x88\x01\x93Pa \xB8\x89\x87\x87\x87\x8Ba \xDFV[a \xC3\x83`Ua5JV[a \xCD\x90\x82a5JV[\x90Pa sV[PPPPPPPPPV[\x81Q\x15\x80\x15\x90a \xF0WP`\x04\x82Q\x10[\x15a!\x0EW`@Qc#B`\x91`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a!\x1A\x86\x86a%4V[\x90Pa!'\x84\x83\x83a%\x9FV[`\0a!2\x84a5]V[\x90P`\0a!B\x85Q\x84\x84a&AV[\x90P`\0\x81`\x03\x81\x11\x15a!XWa!Xa0\xABV[\x03a!vW`@QcXr07`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x03\x81`\x03\x81\x11\x15a!\x8AWa!\x8Aa0\xABV[\x03a!\x97WPPPa#\x18V[`\0\x80a!\xA3\x85a'\xE9V[`\x02\x81\x11\x15a!\xB4Wa!\xB4a0\xABV[\x03a!\xD5Wa!\xCE\x89a!\xC7\x8A\x86a$\x83V[\x85\x89a(\x04V[\x90Pa\"9V[`\x01a!\xE0\x85a'\xE9V[`\x02\x81\x11\x15a!\xF1Wa!\xF1a0\xABV[\x03a\"\x0BWa!\xCE\x89a\"\x04\x8A\x86a$\x83V[\x85\x89a(\x9BV[`\x02a\"\x16\x85a'\xE9V[`\x02\x81\x11\x15a\"'Wa\"'a0\xABV[\x03a\"9Wa\"6\x89\x89a)\xCAV[\x90P[`\x02\x81`\x02\x81\x11\x15a\"MWa\"Ma0\xABV[\x14\x80a\"\x86WP`\0\x81`\x02\x81\x11\x15a\"hWa\"ha0\xABV[\x14\x80\x15a\"\x86WP`\x01\x82`\x03\x81\x11\x15a\"\x84Wa\"\x84a0\xABV[\x14[\x15a\"\xA4W`@Qc\x86M\xD1\xE7`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x81`\x02\x81\x11\x15a\"\xB8Wa\"\xB8a0\xABV[\x14\x80a\"\xF1WP`\0\x81`\x02\x81\x11\x15a\"\xD3Wa\"\xD3a0\xABV[\x14\x80\x15a\"\xF1WP`\x02\x82`\x03\x81\x11\x15a\"\xEFWa\"\xEFa0\xABV[\x14[\x15a\"\xFFWPPPPa#\x18V[`@Qc\x08\xD5\xA8\xB1`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPV[`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x01\x91\x90\x91\x01` R`@\x90 T\x15\x15\x90V[`\0\x80\x80`\x01\x84`\x02\x81\x11\x15a#XWa#Xa0\xABV[\x03a#pWPj\xFF\0\0\0\0\0\0\0\0\xFF\xFF\x19a#\xABV[`\0\x84`\x02\x81\x11\x15a#\x84Wa#\x84a0\xABV[\x03a#\x9CWPj\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\x19a#\xABV[Pj\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19[\x80\x85\x16\x91P`P\x84`\x02\x81\x11\x15a#\xC4Wa#\xC4a0\xABV[\x90\x1B\x91\x90\x91\x17\x94\x93PPPPV[`\0a#\xE7\x83a#\xE2\x84``\x1C\x90V[a#\x1FV[a$6W\x82T`\x01\x81\x81\x01\x85U`\0\x85\x81R` \x81 \x90\x92\x01\x84\x90U\x84T\x91\x90\x85\x01\x90a$\x14\x85``\x1C\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 UP`\x01a\x0E;V[P`\0a\x0E;V[`@Q`\x01`\x01``\x1B\x03\x19``\x84\x81\x1B\x82\x16` \x84\x01R\x83\x90\x1B\x16`4\x82\x01R`\0\x90`H\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[`@Q`\x01`\x01``\x1B\x03\x19``\x84\x90\x1B\x16` \x82\x01R`\x01`\x01`\xE0\x1B\x03\x19\x82\x16`4\x82\x01R`\0\x90`8\x01`@Q` \x81\x83\x03\x03\x81R\x90`@Ra$\xC8\x90a5\x94V[\x93\x92PPPV[a$\xD8\x81a\x1F}V[`@Q`\x01`\x01`\xA0\x1B\x03\x82\x16\x90\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x90`\0\x90\xA2PV[``a$\xC8\x83\x83`@Q\x80``\x01`@R\x80`'\x81R` \x01a6$`'\x919a)\xFEV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x01\x83\x01` R`@\x81 T\x80\x82\x03a%oW`@Qc-\x05\x19\xAD`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x83a%{`\x01\x83a4\xD4V[\x81T\x81\x10a%\x8BWa%\x8Ba4\xE7V[\x90`\0R` `\0 \x01T\x91PP\x92\x91PPV[`\x01a%\xAA\x82a*lV[`\x01\x81\x11\x15a%\xBBWa%\xBBa0\xABV[\x14a%\xD9W`@Qc;\xCD\x10+`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x82`\x01\x81\x11\x15a%\xEDWa%\xEDa0\xABV[\x03a&\x0BW`@Qc\x06\xC4\xA1\xC7`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83\x11\x80\x15a&#WPa&!\x81`\x02a*\x87V[\x15[\x15a\r\xBDW`@Qc\t\xE9\xCDI`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80a&M\x84a*\xBDV[\x90P\x84\x15\x80a&dWP`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x15[\x80a&\x80WP`\x03\x81`\x03\x81\x11\x15a&~Wa&~a0\xABV[\x14[\x80a&\x9CWP`\0\x81`\x03\x81\x11\x15a&\x9AWa&\x9Aa0\xABV[\x14[\x15a&\xA8W\x90Pa$\xC8V[`\0cy\x93\xB9G`\xE1\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a&\xD4Wa&\xCD\x85`\0a*\xD8V[\x90Pa'\xBFV[c\xAB]\x12\x0B`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a&\xF7Wa&\xCD\x85`\x02a*\xD8V[cBY\xA0\xBB`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'\x1AWa&\xCD\x85`\x03a*\xD8V[c\x9A\xEA\xEBA`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'=Wa&\xCD\x85`\x04a*\xD8V[c\xF5A:q`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'`Wa&\xCD\x85`\x05a*\xD8V[c\xF6\xA1XM`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'\x83Wa&\xCD\x85`\x07a*\xD8V[c2\x13\"\x1D`\xE1\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'\xA6Wa&\xCD\x85`\x08a*\xD8V[`@Qc\x18\xF4\xC1#`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x81`\x04\x81\x11\x15a'\xD3Wa'\xD3a0\xABV[\x03a'\xE0WP\x90Pa$\xC8V[a\t\xBB\x81a+,V[`\0`\xFF`P\x83\x90\x1C\x16`\x02\x81\x11\x15a\x0E;Wa\x0E;a0\xABV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x83\x16c\t^\xA7\xB3`\xE0\x1B\x14\x80\x15\x90a(8WP`\x01`\x01`\xE0\x1B\x03\x19\x83\x16cM\xEC\xDD\xE3`\xE1\x1B\x14\x15[\x15a(VW`@Qc\x18\xF4\xC1#`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a(c`\0\x84a+\x86V[\x90P`\0a(q3\x83a$>V[`\0\x87\x81R`\x03\x89\x01` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T`\xFF\x16\x92PPP\x94\x93PPPPV[`\0\x80a(\xA9`\0\x84a+\x86V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a(\xD4W`@Qcn\xB01_`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0cy\x93\xB9G`\xE1\x1B`\x01`\x01`\xE0\x1B\x03\x19\x86\x16\x01a)\0Wa(\xF9`\x01\x85a+\x86V[\x90Pa)\xA1V[c\xAB]\x12\x0B`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x86\x16\x01a)9W`\0a)%`\x01\x86a+\x86V[\x90Pa)1\x81\x84a$>V[\x91PPa)\xA1V[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16c\xBD\xA6_E`\xE0\x1B\x14\x80a)hWP`\x01`\x01`\xE0\x1B\x03\x19\x85\x16ce\x15\x14\xBF`\xE0\x1B\x14[\x80a)\x83WP`\x01`\x01`\xE0\x1B\x03\x19\x85\x16c\n\xBE\xC5\x8F`\xE0\x1B\x14[\x15a'\xA6W`\0a)\x95`\x01\x86a+\x86V[\x90Pa)1\x83\x82a$>V[`\0\x86\x81R`\x03\x88\x01` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T`\xFF\x16\x91PP\x94\x93PPPPV[`\0\x80a)\xD73\x84a$>V[`\0\x80\x80R`\x03\x86\x01` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T`\xFF\x16\x91PP\x92\x91PPV[```\0\x80\x85`\x01`\x01`\xA0\x1B\x03\x16\x85`@Qa*\x1B\x91\x90a5\xBBV[`\0`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80`\0\x81\x14a*VW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a*[V[``\x91P[P\x91P\x91Pa\t\xBB\x86\x83\x83\x87a+\xF1V[`\0`\xFF`X\x83\x90\x1C\x16`\x01\x81\x11\x15a\x0E;Wa\x0E;a0\xABV[`\0\x81`\x02\x81\x11\x15a*\x9BWa*\x9Ba0\xABV[a*\xA4\x84a'\xE9V[`\x02\x81\x11\x15a*\xB5Wa*\xB5a0\xABV[\x14\x93\x92PPPV[`\0`\xFF`H\x83\x90\x1C\x16`\x03\x81\x11\x15a\x0E;Wa\x0E;a0\xABV[`\0`\t\x82\x10a*\xFBW`@Qc\xB4J\xF9\xAF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a+\x08\x83`\x08a4\xBDV[a+\x13\x90`\xB8a5JV[\x90P\x83\x81\x1B`\xF8\x1C`\x04\x81\x11\x15a\x13\xC1Wa\x13\xC1a0\xABV[`\0\x80\x82`\x04\x81\x11\x15a+AWa+Aa0\xABV[\x90P\x80`\xFF\x16`\0\x03a+gW`@Qc\xD8EZ\x13`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a+r`\x01\x82a5\xD7V[`\xFF\x16`\x03\x81\x11\x15a$\xC8Wa$\xC8a0\xABV[`\0a+\x93\x83` a4\xBDV[a+\x9E\x90`\x04a5JV[a+\xA9\x90` a5JV[\x82Q\x10\x15a+\xCAW`@Qc\x1D\t\x8E-`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a+\xD7\x84` a4\xBDV[a+\xE2\x90`\x04a5JV[\x92\x90\x92\x01` \x01Q\x93\x92PPPV[``\x83\x15a,`W\x82Q`\0\x03a,YW`\x01`\x01`\xA0\x1B\x03\x85\x16;a,YW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R`d\x01a\x06BV[P\x81a\x13\xC1V[a\x13\xC1\x83\x83\x81Q\x15a,uW\x81Q\x80\x83` \x01\xFD[\x80`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x91\x90a5\xF0V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05\xF7W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a,\xB6W`\0\x80\xFD[\x815a$\xC8\x81a,\x8FV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a-\0Wa-\0a,\xC1V[`@R\x91\x90PV[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a-\"Wa-\"a,\xC1V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a-AW`\0\x80\xFD[\x815a-Ta-O\x82a-\x08V[a,\xD7V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a-iW`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a-\x98W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a-\xAFW`\0\x80\xFD[a\x13\xC1\x84\x82\x85\x01a-0V[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a-\xD3W`\0\x80\xFD[\x855a-\xDE\x81a,\x8FV[\x94P` \x86\x015\x93P`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a.\x02W`\0\x80\xFD[\x81\x88\x01\x91P\x88`\x1F\x83\x01\x12a.\x16W`\0\x80\xFD[\x815\x81\x81\x11\x15a.%W`\0\x80\xFD[\x89` \x82\x85\x01\x01\x11\x15a.7W`\0\x80\xFD[` \x83\x01\x95P\x80\x94PPPP``\x86\x015`\x02\x81\x10a.UW`\0\x80\xFD[\x80\x91PP\x92\x95P\x92\x95\x90\x93PV[`\0\x80`@\x83\x85\x03\x12\x15a.vW`\0\x80\xFD[\x825a.\x81\x81a,\x8FV[\x91P` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a.\x9DW`\0\x80\xFD[a.\xA9\x85\x82\x86\x01a-0V[\x91PP\x92P\x92\x90PV[`\0[\x83\x81\x10\x15a.\xCEW\x81\x81\x01Q\x83\x82\x01R` \x01a.\xB6V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra.\xEF\x81` \x86\x01` \x86\x01a.\xB3V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x13\xC1`@\x83\x01\x84a.\xD7V[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a/8Wa/8a,\xC1V[P`\x05\x1B` \x01\x90V[\x805`\x03\x81\x10a/QW`\0\x80\xFD[\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a/gW`\0\x80\xFD[\x815` a/wa-O\x83a/\x1EV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a/\x96W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a/\xB8Wa/\xAB\x81a/BV[\x83R\x91\x83\x01\x91\x83\x01a/\x9AV[P\x96\x95PPPPPPV[`\0\x80`@\x83\x85\x03\x12\x15a/\xD6W`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a/\xEEW`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a0\x02W`\0\x80\xFD[\x815` a0\x12a-O\x83a/\x1EV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x89\x84\x11\x15a01W`\0\x80\xFD[\x94\x82\x01\x94[\x83\x86\x10\x15a0fW\x855`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a0WW`\0\x80\x81\xFD[\x82R\x94\x82\x01\x94\x90\x82\x01\x90a06V[\x96PP\x86\x015\x92PP\x80\x82\x11\x15a0|W`\0\x80\xFD[Pa.\xA9\x85\x82\x86\x01a/VV[`\0\x80`@\x83\x85\x03\x12\x15a0\x9CW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a0\xD1Wa0\xD1a0\xABV[\x90RV[`@\x80\x82R\x83Q\x90\x82\x01\x81\x90R`\0\x90` \x90``\x84\x01\x90\x82\x87\x01\x84[\x82\x81\x10\x15a1\x18W\x81Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x84R\x92\x84\x01\x92\x90\x84\x01\x90`\x01\x01a0\xF2V[PPP\x83\x81\x03\x82\x85\x01R\x84Q\x80\x82R\x85\x83\x01\x91\x83\x01\x90`\0[\x81\x81\x10\x15a1TWa1D\x83\x85Qa0\xC1V[\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a11V[P\x90\x97\x96PPPPPPPV[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15a1\x99W\x83Q\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a1}V[P\x90\x96\x95PPPPPPV[`\0` \x82\x84\x03\x12\x15a1\xB7W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a1\xD4W`\0\x80\xFD[\x845a1\xDF\x81a,\x8FV[\x93P` \x85\x015a1\xEF\x81a,\x8FV[\x92P`@\x85\x015a1\xFF\x81a,\x8FV[\x93\x96\x92\x95P\x92\x93``\x015\x92PPV[`\0\x80`\0``\x84\x86\x03\x12\x15a2$W`\0\x80\xFD[\x835a2/\x81a,\x8FV[\x92P` \x84\x015a2?\x81a,\x8FV[\x91Pa2M`@\x85\x01a/BV[\x90P\x92P\x92P\x92V[` \x81\x01a\x0E;\x82\x84a0\xC1V[`\0\x80`\0``\x84\x86\x03\x12\x15a2yW`\0\x80\xFD[\x835a2\x84\x81a,\x8FV[\x95` \x85\x015\x95P`@\x90\x94\x015\x93\x92PPPV[` \x80\x82R`,\x90\x82\x01R\x7FFunction must be called through `@\x82\x01Rk\x19\x19[\x19Y\xD8]\x19X\xD8[\x1B`\xA2\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`,\x90\x82\x01R\x7FFunction must be called through `@\x82\x01Rkactive proxy`\xA0\x1B``\x82\x01R`\x80\x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a3FW`\0\x80\xFD[\x83Qa3Q\x81a,\x8FV[` \x85\x01Q\x90\x93Pa3b\x81a,\x8FV[\x80\x92PP`@\x84\x01Q\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a3\x86W`\0\x80\xFD[PQ\x91\x90PV[`\0` \x82\x84\x03\x12\x15a3\x9FW`\0\x80\xFD[\x81Qa$\xC8\x81a,\x8FV[`\x01\x80`\xA0\x1B\x03\x85\x16\x81R\x83` \x82\x01R`\x80`@\x82\x01R`\0a3\xD1`\x80\x83\x01\x85a.\xD7V[\x90P`\x02\x83\x10a3\xE3Wa3\xE3a0\xABV[\x82``\x83\x01R\x95\x94PPPPPV[\x80Q\x80\x15\x15\x81\x14a/QW`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a4\x14W`\0\x80\xFD[a$\xC8\x82a3\xF2V[`\0\x80`@\x83\x85\x03\x12\x15a40W`\0\x80\xFD[a49\x83a3\xF2V[\x91P` \x83\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4UW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a4fW`\0\x80\xFD[\x80Qa4ta-O\x82a-\x08V[\x81\x81R\x86` \x83\x85\x01\x01\x11\x15a4\x89W`\0\x80\xFD[a4\x9A\x82` \x83\x01` \x86\x01a.\xB3V[\x80\x93PPPP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0E;Wa\x0E;a4\xA7V[\x81\x81\x03\x81\x81\x11\x15a\x0E;Wa\x0E;a4\xA7V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0`\x01\x82\x01a5\x0FWa5\x0Fa4\xA7V[P`\x01\x01\x90V[`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x81R`@\x81\x01a$\xC8` \x83\x01\x84a0\xC1V[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0E;Wa\x0E;a4\xA7V[\x80Q` \x82\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x80\x82\x16\x92\x91\x90`\x04\x83\x10\x15a5\x8CW\x80\x81\x84`\x04\x03`\x03\x1B\x1B\x83\x16\x16\x93P[PPP\x91\x90PV[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15a5\xB5W`\0\x19\x81` \x03`\x03\x1B\x1B\x82\x16\x91P[P\x91\x90PV[`\0\x82Qa5\xCD\x81\x84` \x87\x01a.\xB3V[\x91\x90\x91\x01\x92\x91PPV[`\xFF\x82\x81\x16\x82\x82\x16\x03\x90\x81\x11\x15a\x0E;Wa\x0E;a4\xA7V[` \x81R`\0a$\xC8` \x83\x01\x84a.\xD7V\xFE6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCAddress: low-level delegate call failed\xA2dipfsX\"\x12 \xEC\x1BB0\x9C\xA1\xBEN\x1D\xEA\x19\xD2\x1A\xCDm6@\x96\xF0\x19\xA0\x9D\x08\x8F\xDEwZ\xB0\x84FTUdsolcC\0\x08\x13\x003",
1155    );
1156    /// The runtime bytecode of the contract, as deployed on the network.
1157    ///
1158    /// ```text
1159    ///0x6080604052600436106101c25760003560e01c8063739c4b08116100f7578063b573696211610095578063dc446a4a11610064578063dc446a4a14610540578063df4e6f8a1461056d578063f2fde38b146105a4578063fa19501d146105c457600080fd5b8063b5736962146104c0578063c68605c8146104e0578063c68c3a8314610500578063dc06109d1461052057600080fd5b80639d95f1cc116100d15780639d95f1cc14610440578063a2450f8914610460578063a76c9a2f14610480578063b2b99ec9146104a057600080fd5b8063739c4b08146103e25780638b95eccd146104025780638da5cb5b1461042257600080fd5b80634f1ef2861161016457806356f551171161013e57806356f551171461034857806360976c4b1461037d57806363fe3b56146103ab578063715018a6146103cd57600080fd5b80634f1ef286146102e45780635229073f146102f757806352d1902d1461032557600080fd5b80633659cfe6116101a05780633659cfe61461026f578063439fab911461028f578063468721a7146102af5780634a1ba408146102cf57600080fd5b806301750152146101c7578063294402cc146102155780633401cde81461024d575b600080fd5b3480156101d357600080fd5b506102006101e2366004612ca4565b6001600160a01b0316600090815260cc602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561022157600080fd5b5060c954610235906001600160a01b031681565b6040516001600160a01b03909116815260200161020c565b34801561025957600080fd5b5061026d610268366004612ca4565b6105e4565b005b34801561027b57600080fd5b5061026d61028a366004612ca4565b6105fa565b34801561029b57600080fd5b5061026d6102aa366004612d86565b6106df565b3480156102bb57600080fd5b506102006102ca366004612dbb565b61092b565b3480156102db57600080fd5b50610200600181565b61026d6102f2366004612e63565b6109c5565b34801561030357600080fd5b50610317610312366004612dbb565b610a91565b60405161020c929190612f03565b34801561033157600080fd5b5061033a610b32565b60405190815260200161020c565b34801561035457600080fd5b50610368610363366004612fc3565b610be5565b6040805192835260208301919091520161020c565b34801561038957600080fd5b5061039d610398366004613089565b610bfe565b60405161020c9291906130d5565b3480156103b757600080fd5b506103c0610c0b565b60405161020c9190613161565b3480156103d957600080fd5b5061026d610c1c565b3480156103ee57600080fd5b5061026d6103fd3660046131a5565b610c30565b34801561040e57600080fd5b5061026d61041d366004612ca4565b610c43565b34801561042e57600080fd5b506097546001600160a01b0316610235565b34801561044c57600080fd5b5061026d61045b366004612ca4565b610c95565b34801561046c57600080fd5b5061026d61047b3660046131a5565b610ca6565b34801561048c57600080fd5b5061026d61049b3660046131a5565b610cb7565b3480156104ac57600080fd5b5061026d6104bb366004612ca4565b610cca565b3480156104cc57600080fd5b5061026d6104db3660046131a5565b610d54565b3480156104ec57600080fd5b5061026d6104fb3660046131be565b610d8c565b34801561050c57600080fd5b5061026d61051b36600461320f565b610da8565b34801561052c57600080fd5b5061026d61053b3660046131a5565b610dc2565b34801561054c57600080fd5b5061056061055b366004613089565b610e1d565b60405161020c9190613256565b34801561057957600080fd5b5061058d610588366004612ca4565b610e41565b60408051921515835260208301919091520161020c565b3480156105b057600080fd5b5061026d6105bf366004612ca4565b610e58565b3480156105d057600080fd5b5061026d6105df366004613264565b610ece565b6105ec610ee3565b6105f760ca82610f3d565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361064b5760405162461bcd60e51b815260040161064290613299565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610694600080516020613604833981519152546001600160a01b031690565b6001600160a01b0316146106ba5760405162461bcd60e51b8152600401610642906132e5565b6106c381610fa3565b604080516000808252602082019092526105f791839190610fab565b600054610100900460ff16158080156106ff5750600054600160ff909116105b806107195750303b158015610719575060005460ff166001145b61077c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610642565b6000805460ff19166001179055801561079f576000805461ff0019166101001790555b6000806000848060200190518101906107b89190613331565b919450925090506001600160a01b03831615806107dc57506001600160a01b038216155b156107fa5760405163867915ab60e01b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03160361082c5760405163598a0e2160e01b815260040160405180910390fd5b60006108406097546001600160a01b031690565b6001600160a01b0316141580610860575060c9546001600160a01b031615155b1561087d5760405162dc149f60e41b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384161790556108a181611116565b6108aa836111dc565b6040516001600160a01b038316907f5fe6aabf4e790843df43ae0e22b58620066fb389295bedc06a92df6c3b28777d90600090a25050508015610927576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b33600090815260cc602052604081205460ff1661095b57604051631fb1d3e560e31b815260040160405180910390fd5b60c9546109789060ca906001600160a01b0316888888888861122e565b6109bb868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892506112d9915050565b9695505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610a0d5760405162461bcd60e51b815260040161064290613299565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a56600080516020613604833981519152546001600160a01b031690565b6001600160a01b031614610a7c5760405162461bcd60e51b8152600401610642906132e5565b610a8582610fa3565b61092782826001610fab565b33600090815260cc602052604081205460609060ff16610ac457604051631fb1d3e560e31b815260040160405180910390fd5b60c954610ae19060ca906001600160a01b0316898989898961122e565b610b24878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508992506113c9915050565b915091509550959350505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bd25760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610642565b5060008051602061360483398151915290565b600080610bf284846114c3565b915091505b9250929050565b606080610bf284846115d7565b6060610c1760ca611786565b905090565b610c24610ee3565b610c2e60006111dc565b565b610c38610ee3565b6105f760ca826117e2565b610c4b610ee3565b60c980546001600160a01b0319166001600160a01b0383169081179091556040517f5fe6aabf4e790843df43ae0e22b58620066fb389295bedc06a92df6c3b28777d90600090a250565b610c9d610ee3565b6105f7816118a2565b610cae610ee3565b6105f781611116565b610cbf610ee3565b6105f760ca82611928565b610cd2610ee3565b6001600160a01b038116600090815260cc602052604090205460ff16610d0b57604051631fb1d3e560e31b815260040160405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19169055517fcfc24166db4bb677e857cacabd1541fb2b30645021b27c5130419589b84db52b9190a250565b610d5c610ee3565b6000610d688260601c90565b9050610d73816118a2565b610d7e60ca836119d9565b61092760ca82836001611a8b565b610d94610ee3565b610da260ca85858585611b27565b50505050565b610db0610ee3565b610dbd60ca848484611a8b565b505050565b610dca610ee3565b6000610dd68260601c90565b6001600160a01b038116600090815260cc602052604090205490915060ff16610e1257604051631fb1d3e560e31b815260040160405180910390fd5b61092760ca836119d9565b600082815260cd6020908152604080832084845290915290205460ff165b92915050565b600080610e4f60ca84611cab565b91509150915091565b610e60610ee3565b6001600160a01b038116610ec55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610642565b6105f7816111dc565b610ed6610ee3565b610dbd60ca848484611d0e565b6097546001600160a01b03163314610c2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610642565b6000610f498383611e55565b90508015610f8a576040516001600160a01b038316907f0dfce1ea4ba1eeba891ffb2a066790fbc293a9e517fe61d49d156a30165f93f390600090a2505050565b604051634a89032160e01b815260040160405180910390fd5b6105f7610ee3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610fde57610dbd83611f7d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611038575060408051601f3d908101601f1916820190925261103591810190613374565b60015b61109b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610642565b600080516020613604833981519152811461110a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610642565b50610dbd838383612019565b60006111228260601c90565b90506000816001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611164573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611188919061338d565b90506111b360ca6bffffffffffffffffffffffff8516606085901b6001600160601b031916176117e2565b610dbd60ca6bffffffffffffffffffffffff8516606084901b6001600160601b03191617611928565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b846001600160a01b0316866001600160a01b03160361128c576112878784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061203e92505050565b6112d0565b6112d087868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892506120df915050565b50505050505050565b60006112ed6097546001600160a01b031690565b6001600160a01b031663468721a7868686866040518563ffffffff1660e01b815260040161131e94939291906133aa565b6020604051808303816000875af115801561133d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113619190613402565b90508015611397576040517f4e2e86d21375ebcbf6e93df5ebdd5a915bf830245904c3b54f48adf0170aae4b90600090a16113c1565b6040517fc24d93608a03d263ff191d7677141f5e94c496e593108f3aae0cb5b70494c4d390600090a15b949350505050565b600060606113df6097546001600160a01b031690565b6001600160a01b0316635229073f878787876040518563ffffffff1660e01b815260040161141094939291906133aa565b6000604051808303816000875af115801561142f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611457919081019061341d565b90925090508115611490576040517f4e2e86d21375ebcbf6e93df5ebdd5a915bf830245904c3b54f48adf0170aae4b90600090a16114ba565b6040517fc24d93608a03d263ff191d7677141f5e94c496e593108f3aae0cb5b70494c4d390600090a15b94509492505050565b8151600090819060078111156114ec576040516317a4d98760e31b815260040160405180910390fd5b835185511461150e576040516374f4d53760e01b815260040160405180910390fd5b6000805b82811015611571576115258160206134bd565b6115309060e06134d4565b60e0888381518110611544576115446134e7565b60200260200101516001600160e01b031916901c901b821791508080611569906134fd565b915050611512565b5060005b828110156115cc576115888160026134bd565b86828151811061159a5761159a6134e7565b602002602001015160028111156115b3576115b36130ab565b901b9190911790806115c4816134fd565b915050611575565b509590945092505050565b60608060078311156115fc576040516317a4d98760e31b815260040160405180910390fd5b8267ffffffffffffffff81111561161557611615612cc1565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5091508267ffffffffffffffff81111561165a5761165a612cc1565b604051908082528060200260200182016040528015611683578160200160208202803683370190505b50905060005b838110156116eb5760e061169e8260206134bd565b6116a99060e06134d4565b86901c901b8382815181106116c0576116c06134e7565b6001600160e01b031990921660209283029190910190910152806116e3816134fd565b915050611689565b5060005b8381101561177e5760fe6117048260026134bd565b61170f9060fe6134d4565b8660001c901b901c60ff16600281111561172b5761172b6130ab565b82828151811061173d5761173d6134e7565b60200260200101906002811115611756576117566130ab565b90816002811115611769576117696130ab565b90525080611776816134fd565b9150506116ef565b509250929050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156117d657602002820191906000526020600020905b8154815260200190600101908083116117c2575b50505050509050919050565b60006117ee8260601c90565b90506001600160a01b0381166118175760405163867915ab60e01b815260040160405180910390fd5b611821838261231f565b1561183f576040516374603e9560e11b815260040160405180910390fd5b600061184c836001612340565b905061185884826123d2565b50816001600160a01b03167f5ffb06b0b0e8ad6a8f3c5831d499dfa612d9c9d4dc107bbd66f18f61a6492e718260405161189491815260200190565b60405180910390a250505050565b6001600160a01b038116600090815260cc602052604090205460ff16156118dc576040516338e816a560e21b815260040160405180910390fd5b6001600160a01b038116600081815260cc6020526040808220805460ff19166001179055517fb25d03aaf308d7291709be1ea28b800463cf3a9a4c4a5555d7333a964c1dfebd9190a250565b60006119348260601c90565b90506001600160a01b03811661195d5760405163867915ab60e01b815260040160405180910390fd5b611967838261231f565b15611985576040516374603e9560e11b815260040160405180910390fd5b60006119918382612340565b905061199d84826123d2565b50816001600160a01b03167faaf26bb12aa89ee96bbe19667a6a055727b75d3f6ed7b8b611ef6519180209d68260405161189491815260200190565b60006119e58260601c90565b90506001600160a01b038116611a0e5760405163867915ab60e01b815260040160405180910390fd5b611a18838261231f565b15611a36576040516374603e9560e11b815260040160405180910390fd5b6000611a43836002612340565b9050611a4f84826123d2565b50816001600160a01b03167f1ee2791f2caf0e92a9dc32a37a9ea53ab6ac7a6fb8f2d090e53a067d3a43f6ac8260405161189491815260200190565b600080805260038501602052604081208291611aa7868661243e565b81526020810191909152604001600020805460ff19166001836002811115611ad157611ad16130ab565b0217905550816001600160a01b0316836001600160a01b03167f7487530ddff120799505e52b1b19b6933f85a9eeae9220c80a7ad7c429b612ae83604051611b199190613256565b60405180910390a350505050565b600080611b358360026115d7565b9150915060005b6002811015611ca1578251600090849083908110611b5c57611b5c6134e7565b60200260200101516001600160e01b03191614611c8f576000611b9887858481518110611b8b57611b8b6134e7565b6020026020010151612483565b9050828281518110611bac57611bac6134e7565b60200260200101518960030160008381526020019081526020016000206000611bd58b8b61243e565b81526020810191909152604001600020805460ff19166001836002811115611bff57611bff6130ab565b0217905550856001600160a01b0316876001600160a01b0316896001600160a01b03167fa3df710420b01cc30ff300309abbc7fadd4630d4ab385b0f5a126fb4babe762b878681518110611c5557611c556134e7565b6020026020010151878781518110611c6f57611c6f6134e7565b6020026020010151604051611c85929190613516565b60405180910390a4505b80611c99816134fd565b915050611b3c565b5050505050505050565b6001600160a01b03811660009081526001830160205260408120548190808203611cdc576000809250925050610bf7565b600185611ce982846134d4565b81548110611cf957611cf96134e7565b90600052602060002001549250925050610bf7565b600080611d1c8360076115d7565b9150915060005b60078110156112d0578251600090849083908110611d4357611d436134e7565b60200260200101516001600160e01b03191614611e43576000611d7287858481518110611b8b57611b8b6134e7565b9050828281518110611d8657611d866134e7565b602090810291909101810151600083815260038b01835260408082208a835290935291909120805460ff19166001836002811115611dc657611dc66130ab565b021790555085876001600160a01b03167ff2ffd4f09d58d06824188033d3318d06eb957bfb1a8ffed9af78e1f19168b904868581518110611e0957611e096134e7565b6020026020010151868681518110611e2357611e236134e7565b6020026020010151604051611e39929190613516565b60405180910390a3505b80611e4d816134fd565b915050611d23565b6001600160a01b03811660009081526001830160205260408120548015611f73576000611e836001836134d4565b8554909150600090611e97906001906134d4565b9050818114611f15576000866000018281548110611eb757611eb76134e7565b9060005260206000200154905080876000018481548110611eda57611eda6134e7565b906000526020600020018190555083876001016000611ef98460601c90565b6001600160a01b03168152602081019190915260400160002055505b8554869080611f2657611f26613534565b60019003818190600052602060002001600090559055856001016000866001600160a01b03166001600160a01b031681526020019081526020016000206000905560019350505050610e3b565b6000915050610e3b565b6001600160a01b0381163b611fea5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610642565b60008051602061360483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612022836124cf565b60008251118061202f5750805b15610dbd57610da2838361250f565b60008060006060600080602487015190508060201461207057604051637ed1113760e01b815260040160405180910390fd5b60645b87518110156120d4578088015160f81c96506001810188015160601c955060158101880151945060358101880151925060358101880193506120b8898787878b6120df565b6120c383605561354a565b6120cd908261354a565b9050612073565b505050505050505050565b8151158015906120f0575060048251105b1561210e57604051632342609160e11b815260040160405180910390fd5b600061211a8686612534565b905061212784838361259f565b60006121328461355d565b9050600061214285518484612641565b90506000816003811115612158576121586130ab565b0361217657604051635872303760e01b815260040160405180910390fd5b600381600381111561218a5761218a6130ab565b0361219757505050612318565b6000806121a3856127e9565b60028111156121b4576121b46130ab565b036121d5576121ce896121c78a86612483565b8589612804565b9050612239565b60016121e0856127e9565b60028111156121f1576121f16130ab565b0361220b576121ce896122048a86612483565b858961289b565b6002612216856127e9565b6002811115612227576122276130ab565b036122395761223689896129ca565b90505b600281600281111561224d5761224d6130ab565b148061228657506000816002811115612268576122686130ab565b14801561228657506001826003811115612284576122846130ab565b145b156122a45760405163864dd1e760e01b815260040160405180910390fd5b60018160028111156122b8576122b86130ab565b14806122f1575060008160028111156122d3576122d36130ab565b1480156122f1575060028260038111156122ef576122ef6130ab565b145b156122ff5750505050612318565b6040516308d5a8b160e31b815260040160405180910390fd5b5050505050565b6001600160a01b031660009081526001919091016020526040902054151590565b600080806001846002811115612358576123586130ab565b0361237057506aff0000000000000000ffff196123ab565b6000846002811115612384576123846130ab565b0361239c57506aff00ffffffffffffff0000196123ab565b506aff00ffffffffffffffffff195b808516915060508460028111156123c4576123c46130ab565b901b91909117949350505050565b60006123e7836123e28460601c90565b61231f565b61243657825460018181018555600085815260208120909201849055845491908501906124148560601c90565b6001600160a01b03168152602081019190915260400160002055506001610e3b565b506000610e3b565b6040516001600160601b0319606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b6040516001600160601b0319606084901b1660208201526001600160e01b0319821660348201526000906038016040516020818303038152906040526124c890613594565b9392505050565b6124d881611f7d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606124c88383604051806060016040528060278152602001613624602791396129fe565b6001600160a01b038116600090815260018301602052604081205480820361256f57604051632d0519ad60e01b815260040160405180910390fd5b8361257b6001836134d4565b8154811061258b5761258b6134e7565b906000526020600020015491505092915050565b60016125aa82612a6c565b60018111156125bb576125bb6130ab565b146125d957604051633bcd102b60e21b815260040160405180910390fd5b60018260018111156125ed576125ed6130ab565b0361260b576040516306c4a1c760e11b815260040160405180910390fd5b6000831180156126235750612621816002612a87565b155b15610dbd576040516309e9cd4960e01b815260040160405180910390fd5b60008061264d84612abd565b905084158061266457506001600160e01b03198316155b806126805750600381600381111561267e5761267e6130ab565b145b8061269c5750600081600381111561269a5761269a6130ab565b145b156126a85790506124c8565b6000637993b94760e11b6001600160e01b03198516016126d4576126cd856000612ad8565b90506127bf565b63ab5d120b60e01b6001600160e01b03198516016126f7576126cd856002612ad8565b634259a0bb60e01b6001600160e01b031985160161271a576126cd856003612ad8565b639aeaeb4160e01b6001600160e01b031985160161273d576126cd856004612ad8565b63f5413a7160e01b6001600160e01b0319851601612760576126cd856005612ad8565b63f6a1584d60e01b6001600160e01b0319851601612783576126cd856007612ad8565b633213221d60e11b6001600160e01b03198516016127a6576126cd856008612ad8565b6040516318f4c12360e11b815260040160405180910390fd5b60008160048111156127d3576127d36130ab565b036127e0575090506124c8565b6109bb81612b2c565b600060ff605083901c166002811115610e3b57610e3b6130ab565b60006001600160e01b0319831663095ea7b360e01b1480159061283857506001600160e01b03198316634decdde360e11b14155b15612856576040516318f4c12360e11b815260040160405180910390fd5b6000612863600084612b86565b90506000612871338361243e565b60008781526003890160209081526040808320938352929052205460ff1692505050949350505050565b6000806128a9600084612b86565b90506001600160a01b03811633146128d457604051636eb0315f60e01b815260040160405180910390fd5b6000637993b94760e11b6001600160e01b0319861601612900576128f9600185612b86565b90506129a1565b63ab5d120b60e01b6001600160e01b0319861601612939576000612925600186612b86565b9050612931818461243e565b9150506129a1565b6001600160e01b0319851663bda65f4560e01b148061296857506001600160e01b0319851663651514bf60e01b145b8061298357506001600160e01b03198516630abec58f60e01b145b156127a6576000612995600186612b86565b9050612931838261243e565b60008681526003880160209081526040808320938352929052205460ff16915050949350505050565b6000806129d7338461243e565b60008080526003860160209081526040808320938352929052205460ff1691505092915050565b6060600080856001600160a01b031685604051612a1b91906135bb565b600060405180830381855af49150503d8060008114612a56576040519150601f19603f3d011682016040523d82523d6000602084013e612a5b565b606091505b50915091506109bb86838387612bf1565b600060ff605883901c166001811115610e3b57610e3b6130ab565b6000816002811115612a9b57612a9b6130ab565b612aa4846127e9565b6002811115612ab557612ab56130ab565b149392505050565b600060ff604883901c166003811115610e3b57610e3b6130ab565b600060098210612afb5760405163b44af9af60e01b815260040160405180910390fd5b6000612b088360086134bd565b612b139060b861354a565b905083811b60f81c60048111156113c1576113c16130ab565b600080826004811115612b4157612b416130ab565b90508060ff16600003612b675760405163d8455a1360e01b815260040160405180910390fd5b612b726001826135d7565b60ff1660038111156124c8576124c86130ab565b6000612b938360206134bd565b612b9e90600461354a565b612ba990602061354a565b82511015612bca57604051631d098e2d60e21b815260040160405180910390fd5b6000612bd78460206134bd565b612be290600461354a565b92909201602001519392505050565b60608315612c60578251600003612c59576001600160a01b0385163b612c595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610642565b50816113c1565b6113c18383815115612c755781518083602001fd5b8060405162461bcd60e51b815260040161064291906135f0565b6001600160a01b03811681146105f757600080fd5b600060208284031215612cb657600080fd5b81356124c881612c8f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d0057612d00612cc1565b604052919050565b600067ffffffffffffffff821115612d2257612d22612cc1565b50601f01601f191660200190565b600082601f830112612d4157600080fd5b8135612d54612d4f82612d08565b612cd7565b818152846020838601011115612d6957600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612d9857600080fd5b813567ffffffffffffffff811115612daf57600080fd5b6113c184828501612d30565b600080600080600060808688031215612dd357600080fd5b8535612dde81612c8f565b945060208601359350604086013567ffffffffffffffff80821115612e0257600080fd5b818801915088601f830112612e1657600080fd5b813581811115612e2557600080fd5b896020828501011115612e3757600080fd5b602083019550809450505050606086013560028110612e5557600080fd5b809150509295509295909350565b60008060408385031215612e7657600080fd5b8235612e8181612c8f565b9150602083013567ffffffffffffffff811115612e9d57600080fd5b612ea985828601612d30565b9150509250929050565b60005b83811015612ece578181015183820152602001612eb6565b50506000910152565b60008151808452612eef816020860160208601612eb3565b601f01601f19169290920160200192915050565b82151581526040602082015260006113c16040830184612ed7565b600067ffffffffffffffff821115612f3857612f38612cc1565b5060051b60200190565b803560038110612f5157600080fd5b919050565b600082601f830112612f6757600080fd5b81356020612f77612d4f83612f1e565b82815260059290921b84018101918181019086841115612f9657600080fd5b8286015b84811015612fb857612fab81612f42565b8352918301918301612f9a565b509695505050505050565b60008060408385031215612fd657600080fd5b823567ffffffffffffffff80821115612fee57600080fd5b818501915085601f83011261300257600080fd5b81356020613012612d4f83612f1e565b82815260059290921b8401810191818101908984111561303157600080fd5b948201945b838610156130665785356001600160e01b0319811681146130575760008081fd5b82529482019490820190613036565b9650508601359250508082111561307c57600080fd5b50612ea985828601612f56565b6000806040838503121561309c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106130d1576130d16130ab565b9052565b604080825283519082018190526000906020906060840190828701845b828110156131185781516001600160e01b031916845292840192908401906001016130f2565b5050508381038285015284518082528583019183019060005b81811015613154576131448385516130c1565b9284019291840191600101613131565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131995783518352928401929184019160010161317d565b50909695505050505050565b6000602082840312156131b757600080fd5b5035919050565b600080600080608085870312156131d457600080fd5b84356131df81612c8f565b935060208501356131ef81612c8f565b925060408501356131ff81612c8f565b9396929550929360600135925050565b60008060006060848603121561322457600080fd5b833561322f81612c8f565b9250602084013561323f81612c8f565b915061324d60408501612f42565b90509250925092565b60208101610e3b82846130c1565b60008060006060848603121561327957600080fd5b833561328481612c8f565b95602085013595506040909401359392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60008060006060848603121561334657600080fd5b835161335181612c8f565b602085015190935061336281612c8f565b80925050604084015190509250925092565b60006020828403121561338657600080fd5b5051919050565b60006020828403121561339f57600080fd5b81516124c881612c8f565b60018060a01b03851681528360208201526080604082015260006133d16080830185612ed7565b9050600283106133e3576133e36130ab565b82606083015295945050505050565b80518015158114612f5157600080fd5b60006020828403121561341457600080fd5b6124c8826133f2565b6000806040838503121561343057600080fd5b613439836133f2565b9150602083015167ffffffffffffffff81111561345557600080fd5b8301601f8101851361346657600080fd5b8051613474612d4f82612d08565b81815286602083850101111561348957600080fd5b61349a826020830160208601612eb3565b8093505050509250929050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e3b57610e3b6134a7565b81810381811115610e3b57610e3b6134a7565b634e487b7160e01b600052603260045260246000fd5b60006001820161350f5761350f6134a7565b5060010190565b6001600160e01b031983168152604081016124c860208301846130c1565b634e487b7160e01b600052603160045260246000fd5b80820180821115610e3b57610e3b6134a7565b805160208201516001600160e01b0319808216929190600483101561358c5780818460040360031b1b83161693505b505050919050565b805160208083015191908110156135b5576000198160200360031b1b821691505b50919050565b600082516135cd818460208701612eb3565b9190910192915050565b60ff8281168282160390811115610e3b57610e3b6134a7565b6020815260006124c86020830184612ed756fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ec1b42309ca1be4e1dea19d21acd6d364096f019a09d088fde775ab08446545564736f6c63430008130033
1160    /// ```
1161    #[rustfmt::skip]
1162    #[allow(clippy::all)]
1163    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
1164        b"`\x80`@R`\x046\x10a\x01\xC2W`\x005`\xE0\x1C\x80cs\x9CK\x08\x11a\0\xF7W\x80c\xB5sib\x11a\0\x95W\x80c\xDCDjJ\x11a\0dW\x80c\xDCDjJ\x14a\x05@W\x80c\xDFNo\x8A\x14a\x05mW\x80c\xF2\xFD\xE3\x8B\x14a\x05\xA4W\x80c\xFA\x19P\x1D\x14a\x05\xC4W`\0\x80\xFD[\x80c\xB5sib\x14a\x04\xC0W\x80c\xC6\x86\x05\xC8\x14a\x04\xE0W\x80c\xC6\x8C:\x83\x14a\x05\0W\x80c\xDC\x06\x10\x9D\x14a\x05 W`\0\x80\xFD[\x80c\x9D\x95\xF1\xCC\x11a\0\xD1W\x80c\x9D\x95\xF1\xCC\x14a\x04@W\x80c\xA2E\x0F\x89\x14a\x04`W\x80c\xA7l\x9A/\x14a\x04\x80W\x80c\xB2\xB9\x9E\xC9\x14a\x04\xA0W`\0\x80\xFD[\x80cs\x9CK\x08\x14a\x03\xE2W\x80c\x8B\x95\xEC\xCD\x14a\x04\x02W\x80c\x8D\xA5\xCB[\x14a\x04\"W`\0\x80\xFD[\x80cO\x1E\xF2\x86\x11a\x01dW\x80cV\xF5Q\x17\x11a\x01>W\x80cV\xF5Q\x17\x14a\x03HW\x80c`\x97lK\x14a\x03}W\x80cc\xFE;V\x14a\x03\xABW\x80cqP\x18\xA6\x14a\x03\xCDW`\0\x80\xFD[\x80cO\x1E\xF2\x86\x14a\x02\xE4W\x80cR)\x07?\x14a\x02\xF7W\x80cR\xD1\x90-\x14a\x03%W`\0\x80\xFD[\x80c6Y\xCF\xE6\x11a\x01\xA0W\x80c6Y\xCF\xE6\x14a\x02oW\x80cC\x9F\xAB\x91\x14a\x02\x8FW\x80cF\x87!\xA7\x14a\x02\xAFW\x80cJ\x1B\xA4\x08\x14a\x02\xCFW`\0\x80\xFD[\x80c\x01u\x01R\x14a\x01\xC7W\x80c)D\x02\xCC\x14a\x02\x15W\x80c4\x01\xCD\xE8\x14a\x02MW[`\0\x80\xFD[4\x80\x15a\x01\xD3W`\0\x80\xFD[Pa\x02\0a\x01\xE26`\x04a,\xA4V[`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\xCC` R`@\x90 T`\xFF\x16\x90V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02!W`\0\x80\xFD[P`\xC9Ta\x025\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02\x0CV[4\x80\x15a\x02YW`\0\x80\xFD[Pa\x02ma\x02h6`\x04a,\xA4V[a\x05\xE4V[\0[4\x80\x15a\x02{W`\0\x80\xFD[Pa\x02ma\x02\x8A6`\x04a,\xA4V[a\x05\xFAV[4\x80\x15a\x02\x9BW`\0\x80\xFD[Pa\x02ma\x02\xAA6`\x04a-\x86V[a\x06\xDFV[4\x80\x15a\x02\xBBW`\0\x80\xFD[Pa\x02\0a\x02\xCA6`\x04a-\xBBV[a\t+V[4\x80\x15a\x02\xDBW`\0\x80\xFD[Pa\x02\0`\x01\x81V[a\x02ma\x02\xF26`\x04a.cV[a\t\xC5V[4\x80\x15a\x03\x03W`\0\x80\xFD[Pa\x03\x17a\x03\x126`\x04a-\xBBV[a\n\x91V[`@Qa\x02\x0C\x92\x91\x90a/\x03V[4\x80\x15a\x031W`\0\x80\xFD[Pa\x03:a\x0B2V[`@Q\x90\x81R` \x01a\x02\x0CV[4\x80\x15a\x03TW`\0\x80\xFD[Pa\x03ha\x03c6`\x04a/\xC3V[a\x0B\xE5V[`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x02\x0CV[4\x80\x15a\x03\x89W`\0\x80\xFD[Pa\x03\x9Da\x03\x986`\x04a0\x89V[a\x0B\xFEV[`@Qa\x02\x0C\x92\x91\x90a0\xD5V[4\x80\x15a\x03\xB7W`\0\x80\xFD[Pa\x03\xC0a\x0C\x0BV[`@Qa\x02\x0C\x91\x90a1aV[4\x80\x15a\x03\xD9W`\0\x80\xFD[Pa\x02ma\x0C\x1CV[4\x80\x15a\x03\xEEW`\0\x80\xFD[Pa\x02ma\x03\xFD6`\x04a1\xA5V[a\x0C0V[4\x80\x15a\x04\x0EW`\0\x80\xFD[Pa\x02ma\x04\x1D6`\x04a,\xA4V[a\x0CCV[4\x80\x15a\x04.W`\0\x80\xFD[P`\x97T`\x01`\x01`\xA0\x1B\x03\x16a\x025V[4\x80\x15a\x04LW`\0\x80\xFD[Pa\x02ma\x04[6`\x04a,\xA4V[a\x0C\x95V[4\x80\x15a\x04lW`\0\x80\xFD[Pa\x02ma\x04{6`\x04a1\xA5V[a\x0C\xA6V[4\x80\x15a\x04\x8CW`\0\x80\xFD[Pa\x02ma\x04\x9B6`\x04a1\xA5V[a\x0C\xB7V[4\x80\x15a\x04\xACW`\0\x80\xFD[Pa\x02ma\x04\xBB6`\x04a,\xA4V[a\x0C\xCAV[4\x80\x15a\x04\xCCW`\0\x80\xFD[Pa\x02ma\x04\xDB6`\x04a1\xA5V[a\rTV[4\x80\x15a\x04\xECW`\0\x80\xFD[Pa\x02ma\x04\xFB6`\x04a1\xBEV[a\r\x8CV[4\x80\x15a\x05\x0CW`\0\x80\xFD[Pa\x02ma\x05\x1B6`\x04a2\x0FV[a\r\xA8V[4\x80\x15a\x05,W`\0\x80\xFD[Pa\x02ma\x05;6`\x04a1\xA5V[a\r\xC2V[4\x80\x15a\x05LW`\0\x80\xFD[Pa\x05`a\x05[6`\x04a0\x89V[a\x0E\x1DV[`@Qa\x02\x0C\x91\x90a2VV[4\x80\x15a\x05yW`\0\x80\xFD[Pa\x05\x8Da\x05\x886`\x04a,\xA4V[a\x0EAV[`@\x80Q\x92\x15\x15\x83R` \x83\x01\x91\x90\x91R\x01a\x02\x0CV[4\x80\x15a\x05\xB0W`\0\x80\xFD[Pa\x02ma\x05\xBF6`\x04a,\xA4V[a\x0EXV[4\x80\x15a\x05\xD0W`\0\x80\xFD[Pa\x02ma\x05\xDF6`\x04a2dV[a\x0E\xCEV[a\x05\xECa\x0E\xE3V[a\x05\xF7`\xCA\x82a\x0F=V[PV[`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x06KW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\x99V[`@Q\x80\x91\x03\x90\xFD[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16a\x06\x94`\0\x80Q` a6\x04\x839\x81Q\x91RT`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\xBAW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\xE5V[a\x06\xC3\x81a\x0F\xA3V[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92Ra\x05\xF7\x91\x83\x91\x90a\x0F\xABV[`\0Ta\x01\0\x90\x04`\xFF\x16\x15\x80\x80\x15a\x06\xFFWP`\0T`\x01`\xFF\x90\x91\x16\x10[\x80a\x07\x19WP0;\x15\x80\x15a\x07\x19WP`\0T`\xFF\x16`\x01\x14[a\x07|W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7FInitializable: contract is alrea`D\x82\x01Rm\x19\x1EH\x1A[\x9A]\x1AX[\x1A^\x99Y`\x92\x1B`d\x82\x01R`\x84\x01a\x06BV[`\0\x80T`\xFF\x19\x16`\x01\x17\x90U\x80\x15a\x07\x9FW`\0\x80Ta\xFF\0\x19\x16a\x01\0\x17\x90U[`\0\x80`\0\x84\x80` \x01\x90Q\x81\x01\x90a\x07\xB8\x91\x90a31V[\x91\x94P\x92P\x90P`\x01`\x01`\xA0\x1B\x03\x83\x16\x15\x80a\x07\xDCWP`\x01`\x01`\xA0\x1B\x03\x82\x16\x15[\x15a\x07\xFAW`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x03a\x08,W`@QcY\x8A\x0E!`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x08@`\x97T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x14\x15\x80a\x08`WP`\xC9T`\x01`\x01`\xA0\x1B\x03\x16\x15\x15[\x15a\x08}W`@Qb\xDC\x14\x9F`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\xC9\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x84\x16\x17\x90Ua\x08\xA1\x81a\x11\x16V[a\x08\xAA\x83a\x11\xDCV[`@Q`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F_\xE6\xAA\xBFNy\x08C\xDFC\xAE\x0E\"\xB5\x86 \x06o\xB3\x89)[\xED\xC0j\x92\xDFl;(w}\x90`\0\x90\xA2PPP\x80\x15a\t'W`\0\x80Ta\xFF\0\x19\x16\x90U`@Q`\x01\x81R\x7F\x7F&\xB8?\xF9n\x1F+jh/\x138R\xF6y\x8A\t\xC4e\xDA\x95\x92\x14`\xCE\xFB8G@$\x98\x90` \x01`@Q\x80\x91\x03\x90\xA1[PPV[3`\0\x90\x81R`\xCC` R`@\x81 T`\xFF\x16a\t[W`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\xC9Ta\tx\x90`\xCA\x90`\x01`\x01`\xA0\x1B\x03\x16\x88\x88\x88\x88\x88a\x12.V[a\t\xBB\x86\x86\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x88\x92Pa\x12\xD9\x91PPV[\x96\x95PPPPPPV[`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\n\rW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\x99V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16a\nV`\0\x80Q` a6\x04\x839\x81Q\x91RT`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x90a2\xE5V[a\n\x85\x82a\x0F\xA3V[a\t'\x82\x82`\x01a\x0F\xABV[3`\0\x90\x81R`\xCC` R`@\x81 T``\x90`\xFF\x16a\n\xC4W`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\xC9Ta\n\xE1\x90`\xCA\x90`\x01`\x01`\xA0\x1B\x03\x16\x89\x89\x89\x89\x89a\x12.V[a\x0B$\x87\x87\x87\x87\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x89\x92Pa\x13\xC9\x91PPV[\x91P\x91P\x95P\x95\x93PPPPV[`\x000`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x0B\xD2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7FUUPSUpgradeable: must not be cal`D\x82\x01R\x7Fled through delegatecall\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06BV[P`\0\x80Q` a6\x04\x839\x81Q\x91R\x90V[`\0\x80a\x0B\xF2\x84\x84a\x14\xC3V[\x91P\x91P[\x92P\x92\x90PV[``\x80a\x0B\xF2\x84\x84a\x15\xD7V[``a\x0C\x17`\xCAa\x17\x86V[\x90P\x90V[a\x0C$a\x0E\xE3V[a\x0C.`\0a\x11\xDCV[V[a\x0C8a\x0E\xE3V[a\x05\xF7`\xCA\x82a\x17\xE2V[a\x0CKa\x0E\xE3V[`\xC9\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x81\x17\x90\x91U`@Q\x7F_\xE6\xAA\xBFNy\x08C\xDFC\xAE\x0E\"\xB5\x86 \x06o\xB3\x89)[\xED\xC0j\x92\xDFl;(w}\x90`\0\x90\xA2PV[a\x0C\x9Da\x0E\xE3V[a\x05\xF7\x81a\x18\xA2V[a\x0C\xAEa\x0E\xE3V[a\x05\xF7\x81a\x11\x16V[a\x0C\xBFa\x0E\xE3V[a\x05\xF7`\xCA\x82a\x19(V[a\x0C\xD2a\x0E\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\xCC` R`@\x90 T`\xFF\x16a\r\x0BW`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x81\x81R`\xCC` R`@\x80\x82 \x80T`\xFF\x19\x16\x90UQ\x7F\xCF\xC2Af\xDBK\xB6w\xE8W\xCA\xCA\xBD\x15A\xFB+0dP!\xB2|Q0A\x95\x89\xB8M\xB5+\x91\x90\xA2PV[a\r\\a\x0E\xE3V[`\0a\rh\x82``\x1C\x90V[\x90Pa\rs\x81a\x18\xA2V[a\r~`\xCA\x83a\x19\xD9V[a\t'`\xCA\x82\x83`\x01a\x1A\x8BV[a\r\x94a\x0E\xE3V[a\r\xA2`\xCA\x85\x85\x85\x85a\x1B'V[PPPPV[a\r\xB0a\x0E\xE3V[a\r\xBD`\xCA\x84\x84\x84a\x1A\x8BV[PPPV[a\r\xCAa\x0E\xE3V[`\0a\r\xD6\x82``\x1C\x90V[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\xCC` R`@\x90 T\x90\x91P`\xFF\x16a\x0E\x12W`@Qc\x1F\xB1\xD3\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\t'`\xCA\x83a\x19\xD9V[`\0\x82\x81R`\xCD` \x90\x81R`@\x80\x83 \x84\x84R\x90\x91R\x90 T`\xFF\x16[\x92\x91PPV[`\0\x80a\x0EO`\xCA\x84a\x1C\xABV[\x91P\x91P\x91P\x91V[a\x0E`a\x0E\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x0E\xC5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06BV[a\x05\xF7\x81a\x11\xDCV[a\x0E\xD6a\x0E\xE3V[a\r\xBD`\xCA\x84\x84\x84a\x1D\x0EV[`\x97T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x0C.W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06BV[`\0a\x0FI\x83\x83a\x1EUV[\x90P\x80\x15a\x0F\x8AW`@Q`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\r\xFC\xE1\xEAK\xA1\xEE\xBA\x89\x1F\xFB*\x06g\x90\xFB\xC2\x93\xA9\xE5\x17\xFEa\xD4\x9D\x15j0\x16_\x93\xF3\x90`\0\x90\xA2PPPV[`@QcJ\x89\x03!`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x05\xF7a\x0E\xE3V[\x7FI\x10\xFD\xFA\x16\xFE\xD3&\x0E\xD0\xE7\x14\x7F|\xC6\xDA\x11\xA6\x02\x08\xB5\xB9@m\x12\xA65aO\xFD\x91CT`\xFF\x16\x15a\x0F\xDEWa\r\xBD\x83a\x1F}V[\x82`\x01`\x01`\xA0\x1B\x03\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x108WP`@\x80Q`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01\x90\x92Ra\x105\x91\x81\x01\x90a3tV[`\x01[a\x10\x9BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7FERC1967Upgrade: new implementati`D\x82\x01Rmon is not UUPS`\x90\x1B`d\x82\x01R`\x84\x01a\x06BV[`\0\x80Q` a6\x04\x839\x81Q\x91R\x81\x14a\x11\nW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FERC1967Upgrade: unsupported prox`D\x82\x01Rh\x1AXX\x9B\x19UURQ`\xBA\x1B`d\x82\x01R`\x84\x01a\x06BV[Pa\r\xBD\x83\x83\x83a \x19V[`\0a\x11\"\x82``\x1C\x90V[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xFC\x0CTj`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11dW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\x88\x91\x90a3\x8DV[\x90Pa\x11\xB3`\xCAk\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16``\x85\x90\x1B`\x01`\x01``\x1B\x03\x19\x16\x17a\x17\xE2V[a\r\xBD`\xCAk\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16``\x84\x90\x1B`\x01`\x01``\x1B\x03\x19\x16\x17a\x19(V[`\x97\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x90\x93U`@Q\x91\x16\x91\x90\x82\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90`\0\x90\xA3PPV[\x84`\x01`\x01`\xA0\x1B\x03\x16\x86`\x01`\x01`\xA0\x1B\x03\x16\x03a\x12\x8CWa\x12\x87\x87\x84\x84\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa >\x92PPPV[a\x12\xD0V[a\x12\xD0\x87\x86\x86\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x88\x92Pa \xDF\x91PPV[PPPPPPPV[`\0a\x12\xED`\x97T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16cF\x87!\xA7\x86\x86\x86\x86`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x1E\x94\x93\x92\x91\x90a3\xAAV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x13=W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13a\x91\x90a4\x02V[\x90P\x80\x15a\x13\x97W`@Q\x7FN.\x86\xD2\x13u\xEB\xCB\xF6\xE9=\xF5\xEB\xDDZ\x91[\xF80$Y\x04\xC3\xB5OH\xAD\xF0\x17\n\xAEK\x90`\0\x90\xA1a\x13\xC1V[`@Q\x7F\xC2M\x93`\x8A\x03\xD2c\xFF\x19\x1Dvw\x14\x1F^\x94\xC4\x96\xE5\x93\x10\x8F:\xAE\x0C\xB5\xB7\x04\x94\xC4\xD3\x90`\0\x90\xA1[\x94\x93PPPPV[`\0``a\x13\xDF`\x97T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\x01`\x01`\xA0\x1B\x03\x16cR)\x07?\x87\x87\x87\x87`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x14\x10\x94\x93\x92\x91\x90a3\xAAV[`\0`@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x14/W=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x14W\x91\x90\x81\x01\x90a4\x1DV[\x90\x92P\x90P\x81\x15a\x14\x90W`@Q\x7FN.\x86\xD2\x13u\xEB\xCB\xF6\xE9=\xF5\xEB\xDDZ\x91[\xF80$Y\x04\xC3\xB5OH\xAD\xF0\x17\n\xAEK\x90`\0\x90\xA1a\x14\xBAV[`@Q\x7F\xC2M\x93`\x8A\x03\xD2c\xFF\x19\x1Dvw\x14\x1F^\x94\xC4\x96\xE5\x93\x10\x8F:\xAE\x0C\xB5\xB7\x04\x94\xC4\xD3\x90`\0\x90\xA1[\x94P\x94\x92PPPV[\x81Q`\0\x90\x81\x90`\x07\x81\x11\x15a\x14\xECW`@Qc\x17\xA4\xD9\x87`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x83Q\x85Q\x14a\x15\x0EW`@Qct\xF4\xD57`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80[\x82\x81\x10\x15a\x15qWa\x15%\x81` a4\xBDV[a\x150\x90`\xE0a4\xD4V[`\xE0\x88\x83\x81Q\x81\x10a\x15DWa\x15Da4\xE7V[` \x02` \x01\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x90\x1C\x90\x1B\x82\x17\x91P\x80\x80a\x15i\x90a4\xFDV[\x91PPa\x15\x12V[P`\0[\x82\x81\x10\x15a\x15\xCCWa\x15\x88\x81`\x02a4\xBDV[\x86\x82\x81Q\x81\x10a\x15\x9AWa\x15\x9Aa4\xE7V[` \x02` \x01\x01Q`\x02\x81\x11\x15a\x15\xB3Wa\x15\xB3a0\xABV[\x90\x1B\x91\x90\x91\x17\x90\x80a\x15\xC4\x81a4\xFDV[\x91PPa\x15uV[P\x95\x90\x94P\x92PPPV[``\x80`\x07\x83\x11\x15a\x15\xFCW`@Qc\x17\xA4\xD9\x87`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x16\x15Wa\x16\x15a,\xC1V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x16>W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x91P\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x16ZWa\x16Za,\xC1V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x16\x83W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0[\x83\x81\x10\x15a\x16\xEBW`\xE0a\x16\x9E\x82` a4\xBDV[a\x16\xA9\x90`\xE0a4\xD4V[\x86\x90\x1C\x90\x1B\x83\x82\x81Q\x81\x10a\x16\xC0Wa\x16\xC0a4\xE7V[`\x01`\x01`\xE0\x1B\x03\x19\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R\x80a\x16\xE3\x81a4\xFDV[\x91PPa\x16\x89V[P`\0[\x83\x81\x10\x15a\x17~W`\xFEa\x17\x04\x82`\x02a4\xBDV[a\x17\x0F\x90`\xFEa4\xD4V[\x86`\0\x1C\x90\x1B\x90\x1C`\xFF\x16`\x02\x81\x11\x15a\x17+Wa\x17+a0\xABV[\x82\x82\x81Q\x81\x10a\x17=Wa\x17=a4\xE7V[` \x02` \x01\x01\x90`\x02\x81\x11\x15a\x17VWa\x17Va0\xABV[\x90\x81`\x02\x81\x11\x15a\x17iWa\x17ia0\xABV[\x90RP\x80a\x17v\x81a4\xFDV[\x91PPa\x16\xEFV[P\x92P\x92\x90PV[``\x81`\0\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x17\xD6W` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x17\xC2W[PPPPP\x90P\x91\x90PV[`\0a\x17\xEE\x82``\x1C\x90V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16a\x18\x17W`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x18!\x83\x82a#\x1FV[\x15a\x18?W`@Qct`>\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x18L\x83`\x01a#@V[\x90Pa\x18X\x84\x82a#\xD2V[P\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F_\xFB\x06\xB0\xB0\xE8\xADj\x8F<X1\xD4\x99\xDF\xA6\x12\xD9\xC9\xD4\xDC\x10{\xBDf\xF1\x8Fa\xA6I.q\x82`@Qa\x18\x94\x91\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA2PPPPV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\xCC` R`@\x90 T`\xFF\x16\x15a\x18\xDCW`@Qc8\xE8\x16\xA5`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x81\x81R`\xCC` R`@\x80\x82 \x80T`\xFF\x19\x16`\x01\x17\x90UQ\x7F\xB2]\x03\xAA\xF3\x08\xD7)\x17\t\xBE\x1E\xA2\x8B\x80\x04c\xCF:\x9ALJUU\xD73:\x96L\x1D\xFE\xBD\x91\x90\xA2PV[`\0a\x194\x82``\x1C\x90V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16a\x19]W`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x19g\x83\x82a#\x1FV[\x15a\x19\x85W`@Qct`>\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x19\x91\x83\x82a#@V[\x90Pa\x19\x9D\x84\x82a#\xD2V[P\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F\xAA\xF2k\xB1*\xA8\x9E\xE9k\xBE\x19fzj\x05W'\xB7]?n\xD7\xB8\xB6\x11\xEFe\x19\x18\x02\t\xD6\x82`@Qa\x18\x94\x91\x81R` \x01\x90V[`\0a\x19\xE5\x82``\x1C\x90V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16a\x1A\x0EW`@Qc\x86y\x15\xAB`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1A\x18\x83\x82a#\x1FV[\x15a\x1A6W`@Qct`>\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x1AC\x83`\x02a#@V[\x90Pa\x1AO\x84\x82a#\xD2V[P\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F\x1E\xE2y\x1F,\xAF\x0E\x92\xA9\xDC2\xA3z\x9E\xA5:\xB6\xACzo\xB8\xF2\xD0\x90\xE5:\x06}:C\xF6\xAC\x82`@Qa\x18\x94\x91\x81R` \x01\x90V[`\0\x80\x80R`\x03\x85\x01` R`@\x81 \x82\x91a\x1A\xA7\x86\x86a$>V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 \x80T`\xFF\x19\x16`\x01\x83`\x02\x81\x11\x15a\x1A\xD1Wa\x1A\xD1a0\xABV[\x02\x17\x90UP\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x7Ft\x87S\r\xDF\xF1 y\x95\x05\xE5+\x1B\x19\xB6\x93?\x85\xA9\xEE\xAE\x92 \xC8\nz\xD7\xC4)\xB6\x12\xAE\x83`@Qa\x1B\x19\x91\x90a2VV[`@Q\x80\x91\x03\x90\xA3PPPPV[`\0\x80a\x1B5\x83`\x02a\x15\xD7V[\x91P\x91P`\0[`\x02\x81\x10\x15a\x1C\xA1W\x82Q`\0\x90\x84\x90\x83\x90\x81\x10a\x1B\\Wa\x1B\\a4\xE7V[` \x02` \x01\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x14a\x1C\x8FW`\0a\x1B\x98\x87\x85\x84\x81Q\x81\x10a\x1B\x8BWa\x1B\x8Ba4\xE7V[` \x02` \x01\x01Qa$\x83V[\x90P\x82\x82\x81Q\x81\x10a\x1B\xACWa\x1B\xACa4\xE7V[` \x02` \x01\x01Q\x89`\x03\x01`\0\x83\x81R` \x01\x90\x81R` \x01`\0 `\0a\x1B\xD5\x8B\x8Ba$>V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 \x80T`\xFF\x19\x16`\x01\x83`\x02\x81\x11\x15a\x1B\xFFWa\x1B\xFFa0\xABV[\x02\x17\x90UP\x85`\x01`\x01`\xA0\x1B\x03\x16\x87`\x01`\x01`\xA0\x1B\x03\x16\x89`\x01`\x01`\xA0\x1B\x03\x16\x7F\xA3\xDFq\x04 \xB0\x1C\xC3\x0F\xF3\x000\x9A\xBB\xC7\xFA\xDDF0\xD4\xAB8[\x0FZ\x12o\xB4\xBA\xBEv+\x87\x86\x81Q\x81\x10a\x1CUWa\x1CUa4\xE7V[` \x02` \x01\x01Q\x87\x87\x81Q\x81\x10a\x1CoWa\x1Coa4\xE7V[` \x02` \x01\x01Q`@Qa\x1C\x85\x92\x91\x90a5\x16V[`@Q\x80\x91\x03\x90\xA4P[\x80a\x1C\x99\x81a4\xFDV[\x91PPa\x1B<V[PPPPPPPPV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x01\x83\x01` R`@\x81 T\x81\x90\x80\x82\x03a\x1C\xDCW`\0\x80\x92P\x92PPa\x0B\xF7V[`\x01\x85a\x1C\xE9\x82\x84a4\xD4V[\x81T\x81\x10a\x1C\xF9Wa\x1C\xF9a4\xE7V[\x90`\0R` `\0 \x01T\x92P\x92PPa\x0B\xF7V[`\0\x80a\x1D\x1C\x83`\x07a\x15\xD7V[\x91P\x91P`\0[`\x07\x81\x10\x15a\x12\xD0W\x82Q`\0\x90\x84\x90\x83\x90\x81\x10a\x1DCWa\x1DCa4\xE7V[` \x02` \x01\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x14a\x1ECW`\0a\x1Dr\x87\x85\x84\x81Q\x81\x10a\x1B\x8BWa\x1B\x8Ba4\xE7V[\x90P\x82\x82\x81Q\x81\x10a\x1D\x86Wa\x1D\x86a4\xE7V[` \x90\x81\x02\x91\x90\x91\x01\x81\x01Q`\0\x83\x81R`\x03\x8B\x01\x83R`@\x80\x82 \x8A\x83R\x90\x93R\x91\x90\x91 \x80T`\xFF\x19\x16`\x01\x83`\x02\x81\x11\x15a\x1D\xC6Wa\x1D\xC6a0\xABV[\x02\x17\x90UP\x85\x87`\x01`\x01`\xA0\x1B\x03\x16\x7F\xF2\xFF\xD4\xF0\x9DX\xD0h$\x18\x803\xD31\x8D\x06\xEB\x95{\xFB\x1A\x8F\xFE\xD9\xAFx\xE1\xF1\x91h\xB9\x04\x86\x85\x81Q\x81\x10a\x1E\tWa\x1E\ta4\xE7V[` \x02` \x01\x01Q\x86\x86\x81Q\x81\x10a\x1E#Wa\x1E#a4\xE7V[` \x02` \x01\x01Q`@Qa\x1E9\x92\x91\x90a5\x16V[`@Q\x80\x91\x03\x90\xA3P[\x80a\x1EM\x81a4\xFDV[\x91PPa\x1D#V[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x01\x83\x01` R`@\x81 T\x80\x15a\x1FsW`\0a\x1E\x83`\x01\x83a4\xD4V[\x85T\x90\x91P`\0\x90a\x1E\x97\x90`\x01\x90a4\xD4V[\x90P\x81\x81\x14a\x1F\x15W`\0\x86`\0\x01\x82\x81T\x81\x10a\x1E\xB7Wa\x1E\xB7a4\xE7V[\x90`\0R` `\0 \x01T\x90P\x80\x87`\0\x01\x84\x81T\x81\x10a\x1E\xDAWa\x1E\xDAa4\xE7V[\x90`\0R` `\0 \x01\x81\x90UP\x83\x87`\x01\x01`\0a\x1E\xF9\x84``\x1C\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 UP[\x85T\x86\x90\x80a\x1F&Wa\x1F&a54V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x85`\x01\x01`\0\x86`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01\x90\x81R` \x01`\0 `\0\x90U`\x01\x93PPPPa\x0E;V[`\0\x91PPa\x0E;V[`\x01`\x01`\xA0\x1B\x03\x81\x16;a\x1F\xEAW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FERC1967: new implementation is n`D\x82\x01Rl\x1B\xDD\x08\x18H\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x9A\x1B`d\x82\x01R`\x84\x01a\x06BV[`\0\x80Q` a6\x04\x839\x81Q\x91R\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a \"\x83a$\xCFV[`\0\x82Q\x11\x80a /WP\x80[\x15a\r\xBDWa\r\xA2\x83\x83a%\x0FV[`\0\x80`\0```\0\x80`$\x87\x01Q\x90P\x80` \x14a pW`@Qc~\xD1\x117`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`d[\x87Q\x81\x10\x15a \xD4W\x80\x88\x01Q`\xF8\x1C\x96P`\x01\x81\x01\x88\x01Q``\x1C\x95P`\x15\x81\x01\x88\x01Q\x94P`5\x81\x01\x88\x01Q\x92P`5\x81\x01\x88\x01\x93Pa \xB8\x89\x87\x87\x87\x8Ba \xDFV[a \xC3\x83`Ua5JV[a \xCD\x90\x82a5JV[\x90Pa sV[PPPPPPPPPV[\x81Q\x15\x80\x15\x90a \xF0WP`\x04\x82Q\x10[\x15a!\x0EW`@Qc#B`\x91`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a!\x1A\x86\x86a%4V[\x90Pa!'\x84\x83\x83a%\x9FV[`\0a!2\x84a5]V[\x90P`\0a!B\x85Q\x84\x84a&AV[\x90P`\0\x81`\x03\x81\x11\x15a!XWa!Xa0\xABV[\x03a!vW`@QcXr07`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x03\x81`\x03\x81\x11\x15a!\x8AWa!\x8Aa0\xABV[\x03a!\x97WPPPa#\x18V[`\0\x80a!\xA3\x85a'\xE9V[`\x02\x81\x11\x15a!\xB4Wa!\xB4a0\xABV[\x03a!\xD5Wa!\xCE\x89a!\xC7\x8A\x86a$\x83V[\x85\x89a(\x04V[\x90Pa\"9V[`\x01a!\xE0\x85a'\xE9V[`\x02\x81\x11\x15a!\xF1Wa!\xF1a0\xABV[\x03a\"\x0BWa!\xCE\x89a\"\x04\x8A\x86a$\x83V[\x85\x89a(\x9BV[`\x02a\"\x16\x85a'\xE9V[`\x02\x81\x11\x15a\"'Wa\"'a0\xABV[\x03a\"9Wa\"6\x89\x89a)\xCAV[\x90P[`\x02\x81`\x02\x81\x11\x15a\"MWa\"Ma0\xABV[\x14\x80a\"\x86WP`\0\x81`\x02\x81\x11\x15a\"hWa\"ha0\xABV[\x14\x80\x15a\"\x86WP`\x01\x82`\x03\x81\x11\x15a\"\x84Wa\"\x84a0\xABV[\x14[\x15a\"\xA4W`@Qc\x86M\xD1\xE7`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x81`\x02\x81\x11\x15a\"\xB8Wa\"\xB8a0\xABV[\x14\x80a\"\xF1WP`\0\x81`\x02\x81\x11\x15a\"\xD3Wa\"\xD3a0\xABV[\x14\x80\x15a\"\xF1WP`\x02\x82`\x03\x81\x11\x15a\"\xEFWa\"\xEFa0\xABV[\x14[\x15a\"\xFFWPPPPa#\x18V[`@Qc\x08\xD5\xA8\xB1`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPV[`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x01\x91\x90\x91\x01` R`@\x90 T\x15\x15\x90V[`\0\x80\x80`\x01\x84`\x02\x81\x11\x15a#XWa#Xa0\xABV[\x03a#pWPj\xFF\0\0\0\0\0\0\0\0\xFF\xFF\x19a#\xABV[`\0\x84`\x02\x81\x11\x15a#\x84Wa#\x84a0\xABV[\x03a#\x9CWPj\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\x19a#\xABV[Pj\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19[\x80\x85\x16\x91P`P\x84`\x02\x81\x11\x15a#\xC4Wa#\xC4a0\xABV[\x90\x1B\x91\x90\x91\x17\x94\x93PPPPV[`\0a#\xE7\x83a#\xE2\x84``\x1C\x90V[a#\x1FV[a$6W\x82T`\x01\x81\x81\x01\x85U`\0\x85\x81R` \x81 \x90\x92\x01\x84\x90U\x84T\x91\x90\x85\x01\x90a$\x14\x85``\x1C\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 UP`\x01a\x0E;V[P`\0a\x0E;V[`@Q`\x01`\x01``\x1B\x03\x19``\x84\x81\x1B\x82\x16` \x84\x01R\x83\x90\x1B\x16`4\x82\x01R`\0\x90`H\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[`@Q`\x01`\x01``\x1B\x03\x19``\x84\x90\x1B\x16` \x82\x01R`\x01`\x01`\xE0\x1B\x03\x19\x82\x16`4\x82\x01R`\0\x90`8\x01`@Q` \x81\x83\x03\x03\x81R\x90`@Ra$\xC8\x90a5\x94V[\x93\x92PPPV[a$\xD8\x81a\x1F}V[`@Q`\x01`\x01`\xA0\x1B\x03\x82\x16\x90\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x90`\0\x90\xA2PV[``a$\xC8\x83\x83`@Q\x80``\x01`@R\x80`'\x81R` \x01a6$`'\x919a)\xFEV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x01\x83\x01` R`@\x81 T\x80\x82\x03a%oW`@Qc-\x05\x19\xAD`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x83a%{`\x01\x83a4\xD4V[\x81T\x81\x10a%\x8BWa%\x8Ba4\xE7V[\x90`\0R` `\0 \x01T\x91PP\x92\x91PPV[`\x01a%\xAA\x82a*lV[`\x01\x81\x11\x15a%\xBBWa%\xBBa0\xABV[\x14a%\xD9W`@Qc;\xCD\x10+`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x82`\x01\x81\x11\x15a%\xEDWa%\xEDa0\xABV[\x03a&\x0BW`@Qc\x06\xC4\xA1\xC7`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83\x11\x80\x15a&#WPa&!\x81`\x02a*\x87V[\x15[\x15a\r\xBDW`@Qc\t\xE9\xCDI`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80a&M\x84a*\xBDV[\x90P\x84\x15\x80a&dWP`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x15[\x80a&\x80WP`\x03\x81`\x03\x81\x11\x15a&~Wa&~a0\xABV[\x14[\x80a&\x9CWP`\0\x81`\x03\x81\x11\x15a&\x9AWa&\x9Aa0\xABV[\x14[\x15a&\xA8W\x90Pa$\xC8V[`\0cy\x93\xB9G`\xE1\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a&\xD4Wa&\xCD\x85`\0a*\xD8V[\x90Pa'\xBFV[c\xAB]\x12\x0B`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a&\xF7Wa&\xCD\x85`\x02a*\xD8V[cBY\xA0\xBB`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'\x1AWa&\xCD\x85`\x03a*\xD8V[c\x9A\xEA\xEBA`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'=Wa&\xCD\x85`\x04a*\xD8V[c\xF5A:q`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'`Wa&\xCD\x85`\x05a*\xD8V[c\xF6\xA1XM`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'\x83Wa&\xCD\x85`\x07a*\xD8V[c2\x13\"\x1D`\xE1\x1B`\x01`\x01`\xE0\x1B\x03\x19\x85\x16\x01a'\xA6Wa&\xCD\x85`\x08a*\xD8V[`@Qc\x18\xF4\xC1#`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x81`\x04\x81\x11\x15a'\xD3Wa'\xD3a0\xABV[\x03a'\xE0WP\x90Pa$\xC8V[a\t\xBB\x81a+,V[`\0`\xFF`P\x83\x90\x1C\x16`\x02\x81\x11\x15a\x0E;Wa\x0E;a0\xABV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x83\x16c\t^\xA7\xB3`\xE0\x1B\x14\x80\x15\x90a(8WP`\x01`\x01`\xE0\x1B\x03\x19\x83\x16cM\xEC\xDD\xE3`\xE1\x1B\x14\x15[\x15a(VW`@Qc\x18\xF4\xC1#`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a(c`\0\x84a+\x86V[\x90P`\0a(q3\x83a$>V[`\0\x87\x81R`\x03\x89\x01` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T`\xFF\x16\x92PPP\x94\x93PPPPV[`\0\x80a(\xA9`\0\x84a+\x86V[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a(\xD4W`@Qcn\xB01_`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0cy\x93\xB9G`\xE1\x1B`\x01`\x01`\xE0\x1B\x03\x19\x86\x16\x01a)\0Wa(\xF9`\x01\x85a+\x86V[\x90Pa)\xA1V[c\xAB]\x12\x0B`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x86\x16\x01a)9W`\0a)%`\x01\x86a+\x86V[\x90Pa)1\x81\x84a$>V[\x91PPa)\xA1V[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16c\xBD\xA6_E`\xE0\x1B\x14\x80a)hWP`\x01`\x01`\xE0\x1B\x03\x19\x85\x16ce\x15\x14\xBF`\xE0\x1B\x14[\x80a)\x83WP`\x01`\x01`\xE0\x1B\x03\x19\x85\x16c\n\xBE\xC5\x8F`\xE0\x1B\x14[\x15a'\xA6W`\0a)\x95`\x01\x86a+\x86V[\x90Pa)1\x83\x82a$>V[`\0\x86\x81R`\x03\x88\x01` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T`\xFF\x16\x91PP\x94\x93PPPPV[`\0\x80a)\xD73\x84a$>V[`\0\x80\x80R`\x03\x86\x01` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T`\xFF\x16\x91PP\x92\x91PPV[```\0\x80\x85`\x01`\x01`\xA0\x1B\x03\x16\x85`@Qa*\x1B\x91\x90a5\xBBV[`\0`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80`\0\x81\x14a*VW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a*[V[``\x91P[P\x91P\x91Pa\t\xBB\x86\x83\x83\x87a+\xF1V[`\0`\xFF`X\x83\x90\x1C\x16`\x01\x81\x11\x15a\x0E;Wa\x0E;a0\xABV[`\0\x81`\x02\x81\x11\x15a*\x9BWa*\x9Ba0\xABV[a*\xA4\x84a'\xE9V[`\x02\x81\x11\x15a*\xB5Wa*\xB5a0\xABV[\x14\x93\x92PPPV[`\0`\xFF`H\x83\x90\x1C\x16`\x03\x81\x11\x15a\x0E;Wa\x0E;a0\xABV[`\0`\t\x82\x10a*\xFBW`@Qc\xB4J\xF9\xAF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a+\x08\x83`\x08a4\xBDV[a+\x13\x90`\xB8a5JV[\x90P\x83\x81\x1B`\xF8\x1C`\x04\x81\x11\x15a\x13\xC1Wa\x13\xC1a0\xABV[`\0\x80\x82`\x04\x81\x11\x15a+AWa+Aa0\xABV[\x90P\x80`\xFF\x16`\0\x03a+gW`@Qc\xD8EZ\x13`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a+r`\x01\x82a5\xD7V[`\xFF\x16`\x03\x81\x11\x15a$\xC8Wa$\xC8a0\xABV[`\0a+\x93\x83` a4\xBDV[a+\x9E\x90`\x04a5JV[a+\xA9\x90` a5JV[\x82Q\x10\x15a+\xCAW`@Qc\x1D\t\x8E-`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a+\xD7\x84` a4\xBDV[a+\xE2\x90`\x04a5JV[\x92\x90\x92\x01` \x01Q\x93\x92PPPV[``\x83\x15a,`W\x82Q`\0\x03a,YW`\x01`\x01`\xA0\x1B\x03\x85\x16;a,YW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R`d\x01a\x06BV[P\x81a\x13\xC1V[a\x13\xC1\x83\x83\x81Q\x15a,uW\x81Q\x80\x83` \x01\xFD[\x80`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06B\x91\x90a5\xF0V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05\xF7W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a,\xB6W`\0\x80\xFD[\x815a$\xC8\x81a,\x8FV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a-\0Wa-\0a,\xC1V[`@R\x91\x90PV[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a-\"Wa-\"a,\xC1V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a-AW`\0\x80\xFD[\x815a-Ta-O\x82a-\x08V[a,\xD7V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a-iW`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a-\x98W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a-\xAFW`\0\x80\xFD[a\x13\xC1\x84\x82\x85\x01a-0V[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a-\xD3W`\0\x80\xFD[\x855a-\xDE\x81a,\x8FV[\x94P` \x86\x015\x93P`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a.\x02W`\0\x80\xFD[\x81\x88\x01\x91P\x88`\x1F\x83\x01\x12a.\x16W`\0\x80\xFD[\x815\x81\x81\x11\x15a.%W`\0\x80\xFD[\x89` \x82\x85\x01\x01\x11\x15a.7W`\0\x80\xFD[` \x83\x01\x95P\x80\x94PPPP``\x86\x015`\x02\x81\x10a.UW`\0\x80\xFD[\x80\x91PP\x92\x95P\x92\x95\x90\x93PV[`\0\x80`@\x83\x85\x03\x12\x15a.vW`\0\x80\xFD[\x825a.\x81\x81a,\x8FV[\x91P` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a.\x9DW`\0\x80\xFD[a.\xA9\x85\x82\x86\x01a-0V[\x91PP\x92P\x92\x90PV[`\0[\x83\x81\x10\x15a.\xCEW\x81\x81\x01Q\x83\x82\x01R` \x01a.\xB6V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra.\xEF\x81` \x86\x01` \x86\x01a.\xB3V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x13\xC1`@\x83\x01\x84a.\xD7V[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a/8Wa/8a,\xC1V[P`\x05\x1B` \x01\x90V[\x805`\x03\x81\x10a/QW`\0\x80\xFD[\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a/gW`\0\x80\xFD[\x815` a/wa-O\x83a/\x1EV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a/\x96W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a/\xB8Wa/\xAB\x81a/BV[\x83R\x91\x83\x01\x91\x83\x01a/\x9AV[P\x96\x95PPPPPPV[`\0\x80`@\x83\x85\x03\x12\x15a/\xD6W`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a/\xEEW`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a0\x02W`\0\x80\xFD[\x815` a0\x12a-O\x83a/\x1EV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x89\x84\x11\x15a01W`\0\x80\xFD[\x94\x82\x01\x94[\x83\x86\x10\x15a0fW\x855`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a0WW`\0\x80\x81\xFD[\x82R\x94\x82\x01\x94\x90\x82\x01\x90a06V[\x96PP\x86\x015\x92PP\x80\x82\x11\x15a0|W`\0\x80\xFD[Pa.\xA9\x85\x82\x86\x01a/VV[`\0\x80`@\x83\x85\x03\x12\x15a0\x9CW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a0\xD1Wa0\xD1a0\xABV[\x90RV[`@\x80\x82R\x83Q\x90\x82\x01\x81\x90R`\0\x90` \x90``\x84\x01\x90\x82\x87\x01\x84[\x82\x81\x10\x15a1\x18W\x81Q`\x01`\x01`\xE0\x1B\x03\x19\x16\x84R\x92\x84\x01\x92\x90\x84\x01\x90`\x01\x01a0\xF2V[PPP\x83\x81\x03\x82\x85\x01R\x84Q\x80\x82R\x85\x83\x01\x91\x83\x01\x90`\0[\x81\x81\x10\x15a1TWa1D\x83\x85Qa0\xC1V[\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a11V[P\x90\x97\x96PPPPPPPV[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15a1\x99W\x83Q\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a1}V[P\x90\x96\x95PPPPPPV[`\0` \x82\x84\x03\x12\x15a1\xB7W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a1\xD4W`\0\x80\xFD[\x845a1\xDF\x81a,\x8FV[\x93P` \x85\x015a1\xEF\x81a,\x8FV[\x92P`@\x85\x015a1\xFF\x81a,\x8FV[\x93\x96\x92\x95P\x92\x93``\x015\x92PPV[`\0\x80`\0``\x84\x86\x03\x12\x15a2$W`\0\x80\xFD[\x835a2/\x81a,\x8FV[\x92P` \x84\x015a2?\x81a,\x8FV[\x91Pa2M`@\x85\x01a/BV[\x90P\x92P\x92P\x92V[` \x81\x01a\x0E;\x82\x84a0\xC1V[`\0\x80`\0``\x84\x86\x03\x12\x15a2yW`\0\x80\xFD[\x835a2\x84\x81a,\x8FV[\x95` \x85\x015\x95P`@\x90\x94\x015\x93\x92PPPV[` \x80\x82R`,\x90\x82\x01R\x7FFunction must be called through `@\x82\x01Rk\x19\x19[\x19Y\xD8]\x19X\xD8[\x1B`\xA2\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`,\x90\x82\x01R\x7FFunction must be called through `@\x82\x01Rkactive proxy`\xA0\x1B``\x82\x01R`\x80\x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a3FW`\0\x80\xFD[\x83Qa3Q\x81a,\x8FV[` \x85\x01Q\x90\x93Pa3b\x81a,\x8FV[\x80\x92PP`@\x84\x01Q\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a3\x86W`\0\x80\xFD[PQ\x91\x90PV[`\0` \x82\x84\x03\x12\x15a3\x9FW`\0\x80\xFD[\x81Qa$\xC8\x81a,\x8FV[`\x01\x80`\xA0\x1B\x03\x85\x16\x81R\x83` \x82\x01R`\x80`@\x82\x01R`\0a3\xD1`\x80\x83\x01\x85a.\xD7V[\x90P`\x02\x83\x10a3\xE3Wa3\xE3a0\xABV[\x82``\x83\x01R\x95\x94PPPPPV[\x80Q\x80\x15\x15\x81\x14a/QW`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a4\x14W`\0\x80\xFD[a$\xC8\x82a3\xF2V[`\0\x80`@\x83\x85\x03\x12\x15a40W`\0\x80\xFD[a49\x83a3\xF2V[\x91P` \x83\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4UW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a4fW`\0\x80\xFD[\x80Qa4ta-O\x82a-\x08V[\x81\x81R\x86` \x83\x85\x01\x01\x11\x15a4\x89W`\0\x80\xFD[a4\x9A\x82` \x83\x01` \x86\x01a.\xB3V[\x80\x93PPPP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0E;Wa\x0E;a4\xA7V[\x81\x81\x03\x81\x81\x11\x15a\x0E;Wa\x0E;a4\xA7V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0`\x01\x82\x01a5\x0FWa5\x0Fa4\xA7V[P`\x01\x01\x90V[`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x81R`@\x81\x01a$\xC8` \x83\x01\x84a0\xC1V[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x0E;Wa\x0E;a4\xA7V[\x80Q` \x82\x01Q`\x01`\x01`\xE0\x1B\x03\x19\x80\x82\x16\x92\x91\x90`\x04\x83\x10\x15a5\x8CW\x80\x81\x84`\x04\x03`\x03\x1B\x1B\x83\x16\x16\x93P[PPP\x91\x90PV[\x80Q` \x80\x83\x01Q\x91\x90\x81\x10\x15a5\xB5W`\0\x19\x81` \x03`\x03\x1B\x1B\x82\x16\x91P[P\x91\x90PV[`\0\x82Qa5\xCD\x81\x84` \x87\x01a.\xB3V[\x91\x90\x91\x01\x92\x91PPV[`\xFF\x82\x81\x16\x82\x82\x16\x03\x90\x81\x11\x15a\x0E;Wa\x0E;a4\xA7V[` \x81R`\0a$\xC8` \x83\x01\x84a.\xD7V\xFE6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCAddress: low-level delegate call failed\xA2dipfsX\"\x12 \xEC\x1BB0\x9C\xA1\xBEN\x1D\xEA\x19\xD2\x1A\xCDm6@\x96\xF0\x19\xA0\x9D\x08\x8F\xDEwZ\xB0\x84FTUdsolcC\0\x08\x13\x003",
1165    );
1166    #[derive(serde::Serialize, serde::Deserialize)]
1167    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1168    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1169    #[derive(Clone)]
1170    pub struct GranularPermission(u8);
1171    const _: () = {
1172        use alloy::sol_types as alloy_sol_types;
1173        #[automatically_derived]
1174        impl alloy_sol_types::private::SolTypeValue<GranularPermission> for u8 {
1175            #[inline]
1176            fn stv_to_tokens(
1177                &self,
1178            ) -> <alloy::sol_types::sol_data::Uint<
1179                8,
1180            > as alloy_sol_types::SolType>::Token<'_> {
1181                alloy_sol_types::private::SolTypeValue::<
1182                    alloy::sol_types::sol_data::Uint<8>,
1183                >::stv_to_tokens(self)
1184            }
1185            #[inline]
1186            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
1187                <alloy::sol_types::sol_data::Uint<
1188                    8,
1189                > as alloy_sol_types::SolType>::tokenize(self)
1190                    .0
1191            }
1192            #[inline]
1193            fn stv_abi_encode_packed_to(
1194                &self,
1195                out: &mut alloy_sol_types::private::Vec<u8>,
1196            ) {
1197                <alloy::sol_types::sol_data::Uint<
1198                    8,
1199                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
1200            }
1201            #[inline]
1202            fn stv_abi_packed_encoded_size(&self) -> usize {
1203                <alloy::sol_types::sol_data::Uint<
1204                    8,
1205                > as alloy_sol_types::SolType>::abi_encoded_size(self)
1206            }
1207        }
1208        #[automatically_derived]
1209        impl GranularPermission {
1210            /// The Solidity type name.
1211            pub const NAME: &'static str = stringify!(@ name);
1212            /// Convert from the underlying value type.
1213            #[inline]
1214            pub const fn from_underlying(value: u8) -> Self {
1215                Self(value)
1216            }
1217            /// Return the underlying value.
1218            #[inline]
1219            pub const fn into_underlying(self) -> u8 {
1220                self.0
1221            }
1222            /// Return the single encoding of this value, delegating to the
1223            /// underlying type.
1224            #[inline]
1225            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
1226                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
1227            }
1228            /// Return the packed encoding of this value, delegating to the
1229            /// underlying type.
1230            #[inline]
1231            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
1232                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
1233            }
1234        }
1235        #[automatically_derived]
1236        impl From<u8> for GranularPermission {
1237            fn from(value: u8) -> Self {
1238                Self::from_underlying(value)
1239            }
1240        }
1241        #[automatically_derived]
1242        impl From<GranularPermission> for u8 {
1243            fn from(value: GranularPermission) -> Self {
1244                value.into_underlying()
1245            }
1246        }
1247        #[automatically_derived]
1248        impl alloy_sol_types::SolType for GranularPermission {
1249            type RustType = u8;
1250            type Token<'a> = <alloy::sol_types::sol_data::Uint<
1251                8,
1252            > as alloy_sol_types::SolType>::Token<'a>;
1253            const SOL_NAME: &'static str = Self::NAME;
1254            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
1255                8,
1256            > as alloy_sol_types::SolType>::ENCODED_SIZE;
1257            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
1258                8,
1259            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
1260            #[inline]
1261            fn valid_token(token: &Self::Token<'_>) -> bool {
1262                Self::type_check(token).is_ok()
1263            }
1264            #[inline]
1265            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
1266                <alloy::sol_types::sol_data::Uint<
1267                    8,
1268                > as alloy_sol_types::SolType>::type_check(token)
1269            }
1270            #[inline]
1271            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
1272                <alloy::sol_types::sol_data::Uint<
1273                    8,
1274                > as alloy_sol_types::SolType>::detokenize(token)
1275            }
1276        }
1277        #[automatically_derived]
1278        impl alloy_sol_types::EventTopic for GranularPermission {
1279            #[inline]
1280            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1281                <alloy::sol_types::sol_data::Uint<
1282                    8,
1283                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
1284            }
1285            #[inline]
1286            fn encode_topic_preimage(
1287                rust: &Self::RustType,
1288                out: &mut alloy_sol_types::private::Vec<u8>,
1289            ) {
1290                <alloy::sol_types::sol_data::Uint<
1291                    8,
1292                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
1293            }
1294            #[inline]
1295            fn encode_topic(
1296                rust: &Self::RustType,
1297            ) -> alloy_sol_types::abi::token::WordToken {
1298                <alloy::sol_types::sol_data::Uint<
1299                    8,
1300                > as alloy_sol_types::EventTopic>::encode_topic(rust)
1301            }
1302        }
1303    };
1304    #[derive(serde::Serialize, serde::Deserialize)]
1305    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1306    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1307    #[derive(Clone)]
1308    pub struct Target(alloy::sol_types::private::primitives::aliases::U256);
1309    const _: () = {
1310        use alloy::sol_types as alloy_sol_types;
1311        #[automatically_derived]
1312        impl alloy_sol_types::private::SolTypeValue<Target>
1313        for alloy::sol_types::private::primitives::aliases::U256 {
1314            #[inline]
1315            fn stv_to_tokens(
1316                &self,
1317            ) -> <alloy::sol_types::sol_data::Uint<
1318                256,
1319            > as alloy_sol_types::SolType>::Token<'_> {
1320                alloy_sol_types::private::SolTypeValue::<
1321                    alloy::sol_types::sol_data::Uint<256>,
1322                >::stv_to_tokens(self)
1323            }
1324            #[inline]
1325            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
1326                <alloy::sol_types::sol_data::Uint<
1327                    256,
1328                > as alloy_sol_types::SolType>::tokenize(self)
1329                    .0
1330            }
1331            #[inline]
1332            fn stv_abi_encode_packed_to(
1333                &self,
1334                out: &mut alloy_sol_types::private::Vec<u8>,
1335            ) {
1336                <alloy::sol_types::sol_data::Uint<
1337                    256,
1338                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
1339            }
1340            #[inline]
1341            fn stv_abi_packed_encoded_size(&self) -> usize {
1342                <alloy::sol_types::sol_data::Uint<
1343                    256,
1344                > as alloy_sol_types::SolType>::abi_encoded_size(self)
1345            }
1346        }
1347        #[automatically_derived]
1348        impl Target {
1349            /// The Solidity type name.
1350            pub const NAME: &'static str = stringify!(@ name);
1351            /// Convert from the underlying value type.
1352            #[inline]
1353            pub const fn from_underlying(
1354                value: alloy::sol_types::private::primitives::aliases::U256,
1355            ) -> Self {
1356                Self(value)
1357            }
1358            /// Return the underlying value.
1359            #[inline]
1360            pub const fn into_underlying(
1361                self,
1362            ) -> alloy::sol_types::private::primitives::aliases::U256 {
1363                self.0
1364            }
1365            /// Return the single encoding of this value, delegating to the
1366            /// underlying type.
1367            #[inline]
1368            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
1369                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
1370            }
1371            /// Return the packed encoding of this value, delegating to the
1372            /// underlying type.
1373            #[inline]
1374            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
1375                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
1376            }
1377        }
1378        #[automatically_derived]
1379        impl From<alloy::sol_types::private::primitives::aliases::U256> for Target {
1380            fn from(
1381                value: alloy::sol_types::private::primitives::aliases::U256,
1382            ) -> Self {
1383                Self::from_underlying(value)
1384            }
1385        }
1386        #[automatically_derived]
1387        impl From<Target> for alloy::sol_types::private::primitives::aliases::U256 {
1388            fn from(value: Target) -> Self {
1389                value.into_underlying()
1390            }
1391        }
1392        #[automatically_derived]
1393        impl alloy_sol_types::SolType for Target {
1394            type RustType = alloy::sol_types::private::primitives::aliases::U256;
1395            type Token<'a> = <alloy::sol_types::sol_data::Uint<
1396                256,
1397            > as alloy_sol_types::SolType>::Token<'a>;
1398            const SOL_NAME: &'static str = Self::NAME;
1399            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
1400                256,
1401            > as alloy_sol_types::SolType>::ENCODED_SIZE;
1402            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
1403                256,
1404            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
1405            #[inline]
1406            fn valid_token(token: &Self::Token<'_>) -> bool {
1407                Self::type_check(token).is_ok()
1408            }
1409            #[inline]
1410            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
1411                <alloy::sol_types::sol_data::Uint<
1412                    256,
1413                > as alloy_sol_types::SolType>::type_check(token)
1414            }
1415            #[inline]
1416            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
1417                <alloy::sol_types::sol_data::Uint<
1418                    256,
1419                > as alloy_sol_types::SolType>::detokenize(token)
1420            }
1421        }
1422        #[automatically_derived]
1423        impl alloy_sol_types::EventTopic for Target {
1424            #[inline]
1425            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1426                <alloy::sol_types::sol_data::Uint<
1427                    256,
1428                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
1429            }
1430            #[inline]
1431            fn encode_topic_preimage(
1432                rust: &Self::RustType,
1433                out: &mut alloy_sol_types::private::Vec<u8>,
1434            ) {
1435                <alloy::sol_types::sol_data::Uint<
1436                    256,
1437                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
1438            }
1439            #[inline]
1440            fn encode_topic(
1441                rust: &Self::RustType,
1442            ) -> alloy_sol_types::abi::token::WordToken {
1443                <alloy::sol_types::sol_data::Uint<
1444                    256,
1445                > as alloy_sol_types::EventTopic>::encode_topic(rust)
1446            }
1447        }
1448    };
1449    #[derive(serde::Serialize, serde::Deserialize)]
1450    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1451    /**Custom error with signature `AddressIsZero()` and selector `0x867915ab`.
1452```solidity
1453error AddressIsZero();
1454```*/
1455    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1456    #[derive(Clone)]
1457    pub struct AddressIsZero;
1458    #[allow(
1459        non_camel_case_types,
1460        non_snake_case,
1461        clippy::pub_underscore_fields,
1462        clippy::style
1463    )]
1464    const _: () = {
1465        use alloy::sol_types as alloy_sol_types;
1466        #[doc(hidden)]
1467        type UnderlyingSolTuple<'a> = ();
1468        #[doc(hidden)]
1469        type UnderlyingRustTuple<'a> = ();
1470        #[cfg(test)]
1471        #[allow(dead_code, unreachable_patterns)]
1472        fn _type_assertion(
1473            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1474        ) {
1475            match _t {
1476                alloy_sol_types::private::AssertTypeEq::<
1477                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1478                >(_) => {}
1479            }
1480        }
1481        #[automatically_derived]
1482        #[doc(hidden)]
1483        impl ::core::convert::From<AddressIsZero> for UnderlyingRustTuple<'_> {
1484            fn from(value: AddressIsZero) -> Self {
1485                ()
1486            }
1487        }
1488        #[automatically_derived]
1489        #[doc(hidden)]
1490        impl ::core::convert::From<UnderlyingRustTuple<'_>> for AddressIsZero {
1491            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1492                Self
1493            }
1494        }
1495        #[automatically_derived]
1496        impl alloy_sol_types::SolError for AddressIsZero {
1497            type Parameters<'a> = UnderlyingSolTuple<'a>;
1498            type Token<'a> = <Self::Parameters<
1499                'a,
1500            > as alloy_sol_types::SolType>::Token<'a>;
1501            const SIGNATURE: &'static str = "AddressIsZero()";
1502            const SELECTOR: [u8; 4] = [134u8, 121u8, 21u8, 171u8];
1503            #[inline]
1504            fn new<'a>(
1505                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1506            ) -> Self {
1507                tuple.into()
1508            }
1509            #[inline]
1510            fn tokenize(&self) -> Self::Token<'_> {
1511                ()
1512            }
1513            #[inline]
1514            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
1515                <Self::Parameters<
1516                    '_,
1517                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1518                    .map(Self::new)
1519            }
1520        }
1521    };
1522    #[derive(serde::Serialize, serde::Deserialize)]
1523    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1524    /**Custom error with signature `AlreadyInitialized()` and selector `0x0dc149f0`.
1525```solidity
1526error AlreadyInitialized();
1527```*/
1528    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1529    #[derive(Clone)]
1530    pub struct AlreadyInitialized;
1531    #[allow(
1532        non_camel_case_types,
1533        non_snake_case,
1534        clippy::pub_underscore_fields,
1535        clippy::style
1536    )]
1537    const _: () = {
1538        use alloy::sol_types as alloy_sol_types;
1539        #[doc(hidden)]
1540        type UnderlyingSolTuple<'a> = ();
1541        #[doc(hidden)]
1542        type UnderlyingRustTuple<'a> = ();
1543        #[cfg(test)]
1544        #[allow(dead_code, unreachable_patterns)]
1545        fn _type_assertion(
1546            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1547        ) {
1548            match _t {
1549                alloy_sol_types::private::AssertTypeEq::<
1550                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1551                >(_) => {}
1552            }
1553        }
1554        #[automatically_derived]
1555        #[doc(hidden)]
1556        impl ::core::convert::From<AlreadyInitialized> for UnderlyingRustTuple<'_> {
1557            fn from(value: AlreadyInitialized) -> Self {
1558                ()
1559            }
1560        }
1561        #[automatically_derived]
1562        #[doc(hidden)]
1563        impl ::core::convert::From<UnderlyingRustTuple<'_>> for AlreadyInitialized {
1564            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1565                Self
1566            }
1567        }
1568        #[automatically_derived]
1569        impl alloy_sol_types::SolError for AlreadyInitialized {
1570            type Parameters<'a> = UnderlyingSolTuple<'a>;
1571            type Token<'a> = <Self::Parameters<
1572                'a,
1573            > as alloy_sol_types::SolType>::Token<'a>;
1574            const SIGNATURE: &'static str = "AlreadyInitialized()";
1575            const SELECTOR: [u8; 4] = [13u8, 193u8, 73u8, 240u8];
1576            #[inline]
1577            fn new<'a>(
1578                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1579            ) -> Self {
1580                tuple.into()
1581            }
1582            #[inline]
1583            fn tokenize(&self) -> Self::Token<'_> {
1584                ()
1585            }
1586            #[inline]
1587            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
1588                <Self::Parameters<
1589                    '_,
1590                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1591                    .map(Self::new)
1592            }
1593        }
1594    };
1595    #[derive(serde::Serialize, serde::Deserialize)]
1596    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1597    /**Custom error with signature `ArrayTooLong()` and selector `0xbd26cc38`.
1598```solidity
1599error ArrayTooLong();
1600```*/
1601    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1602    #[derive(Clone)]
1603    pub struct ArrayTooLong;
1604    #[allow(
1605        non_camel_case_types,
1606        non_snake_case,
1607        clippy::pub_underscore_fields,
1608        clippy::style
1609    )]
1610    const _: () = {
1611        use alloy::sol_types as alloy_sol_types;
1612        #[doc(hidden)]
1613        type UnderlyingSolTuple<'a> = ();
1614        #[doc(hidden)]
1615        type UnderlyingRustTuple<'a> = ();
1616        #[cfg(test)]
1617        #[allow(dead_code, unreachable_patterns)]
1618        fn _type_assertion(
1619            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1620        ) {
1621            match _t {
1622                alloy_sol_types::private::AssertTypeEq::<
1623                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1624                >(_) => {}
1625            }
1626        }
1627        #[automatically_derived]
1628        #[doc(hidden)]
1629        impl ::core::convert::From<ArrayTooLong> for UnderlyingRustTuple<'_> {
1630            fn from(value: ArrayTooLong) -> Self {
1631                ()
1632            }
1633        }
1634        #[automatically_derived]
1635        #[doc(hidden)]
1636        impl ::core::convert::From<UnderlyingRustTuple<'_>> for ArrayTooLong {
1637            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1638                Self
1639            }
1640        }
1641        #[automatically_derived]
1642        impl alloy_sol_types::SolError for ArrayTooLong {
1643            type Parameters<'a> = UnderlyingSolTuple<'a>;
1644            type Token<'a> = <Self::Parameters<
1645                'a,
1646            > as alloy_sol_types::SolType>::Token<'a>;
1647            const SIGNATURE: &'static str = "ArrayTooLong()";
1648            const SELECTOR: [u8; 4] = [189u8, 38u8, 204u8, 56u8];
1649            #[inline]
1650            fn new<'a>(
1651                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1652            ) -> Self {
1653                tuple.into()
1654            }
1655            #[inline]
1656            fn tokenize(&self) -> Self::Token<'_> {
1657                ()
1658            }
1659            #[inline]
1660            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
1661                <Self::Parameters<
1662                    '_,
1663                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1664                    .map(Self::new)
1665            }
1666        }
1667    };
1668    #[derive(serde::Serialize, serde::Deserialize)]
1669    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1670    /**Custom error with signature `ArraysDifferentLength()` and selector `0x74f4d537`.
1671```solidity
1672error ArraysDifferentLength();
1673```*/
1674    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1675    #[derive(Clone)]
1676    pub struct ArraysDifferentLength;
1677    #[allow(
1678        non_camel_case_types,
1679        non_snake_case,
1680        clippy::pub_underscore_fields,
1681        clippy::style
1682    )]
1683    const _: () = {
1684        use alloy::sol_types as alloy_sol_types;
1685        #[doc(hidden)]
1686        type UnderlyingSolTuple<'a> = ();
1687        #[doc(hidden)]
1688        type UnderlyingRustTuple<'a> = ();
1689        #[cfg(test)]
1690        #[allow(dead_code, unreachable_patterns)]
1691        fn _type_assertion(
1692            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1693        ) {
1694            match _t {
1695                alloy_sol_types::private::AssertTypeEq::<
1696                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1697                >(_) => {}
1698            }
1699        }
1700        #[automatically_derived]
1701        #[doc(hidden)]
1702        impl ::core::convert::From<ArraysDifferentLength> for UnderlyingRustTuple<'_> {
1703            fn from(value: ArraysDifferentLength) -> Self {
1704                ()
1705            }
1706        }
1707        #[automatically_derived]
1708        #[doc(hidden)]
1709        impl ::core::convert::From<UnderlyingRustTuple<'_>> for ArraysDifferentLength {
1710            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1711                Self
1712            }
1713        }
1714        #[automatically_derived]
1715        impl alloy_sol_types::SolError for ArraysDifferentLength {
1716            type Parameters<'a> = UnderlyingSolTuple<'a>;
1717            type Token<'a> = <Self::Parameters<
1718                'a,
1719            > as alloy_sol_types::SolType>::Token<'a>;
1720            const SIGNATURE: &'static str = "ArraysDifferentLength()";
1721            const SELECTOR: [u8; 4] = [116u8, 244u8, 213u8, 55u8];
1722            #[inline]
1723            fn new<'a>(
1724                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1725            ) -> Self {
1726                tuple.into()
1727            }
1728            #[inline]
1729            fn tokenize(&self) -> Self::Token<'_> {
1730                ()
1731            }
1732            #[inline]
1733            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
1734                <Self::Parameters<
1735                    '_,
1736                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1737                    .map(Self::new)
1738            }
1739        }
1740    };
1741    #[derive(serde::Serialize, serde::Deserialize)]
1742    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1743    /**Custom error with signature `CalldataOutOfBounds()` and selector `0x742638b4`.
1744```solidity
1745error CalldataOutOfBounds();
1746```*/
1747    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1748    #[derive(Clone)]
1749    pub struct CalldataOutOfBounds;
1750    #[allow(
1751        non_camel_case_types,
1752        non_snake_case,
1753        clippy::pub_underscore_fields,
1754        clippy::style
1755    )]
1756    const _: () = {
1757        use alloy::sol_types as alloy_sol_types;
1758        #[doc(hidden)]
1759        type UnderlyingSolTuple<'a> = ();
1760        #[doc(hidden)]
1761        type UnderlyingRustTuple<'a> = ();
1762        #[cfg(test)]
1763        #[allow(dead_code, unreachable_patterns)]
1764        fn _type_assertion(
1765            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1766        ) {
1767            match _t {
1768                alloy_sol_types::private::AssertTypeEq::<
1769                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1770                >(_) => {}
1771            }
1772        }
1773        #[automatically_derived]
1774        #[doc(hidden)]
1775        impl ::core::convert::From<CalldataOutOfBounds> for UnderlyingRustTuple<'_> {
1776            fn from(value: CalldataOutOfBounds) -> Self {
1777                ()
1778            }
1779        }
1780        #[automatically_derived]
1781        #[doc(hidden)]
1782        impl ::core::convert::From<UnderlyingRustTuple<'_>> for CalldataOutOfBounds {
1783            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1784                Self
1785            }
1786        }
1787        #[automatically_derived]
1788        impl alloy_sol_types::SolError for CalldataOutOfBounds {
1789            type Parameters<'a> = UnderlyingSolTuple<'a>;
1790            type Token<'a> = <Self::Parameters<
1791                'a,
1792            > as alloy_sol_types::SolType>::Token<'a>;
1793            const SIGNATURE: &'static str = "CalldataOutOfBounds()";
1794            const SELECTOR: [u8; 4] = [116u8, 38u8, 56u8, 180u8];
1795            #[inline]
1796            fn new<'a>(
1797                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1798            ) -> Self {
1799                tuple.into()
1800            }
1801            #[inline]
1802            fn tokenize(&self) -> Self::Token<'_> {
1803                ()
1804            }
1805            #[inline]
1806            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
1807                <Self::Parameters<
1808                    '_,
1809                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1810                    .map(Self::new)
1811            }
1812        }
1813    };
1814    #[derive(serde::Serialize, serde::Deserialize)]
1815    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1816    /**Custom error with signature `CannotChangeOwner()` and selector `0xfd670ebe`.
1817```solidity
1818error CannotChangeOwner();
1819```*/
1820    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1821    #[derive(Clone)]
1822    pub struct CannotChangeOwner;
1823    #[allow(
1824        non_camel_case_types,
1825        non_snake_case,
1826        clippy::pub_underscore_fields,
1827        clippy::style
1828    )]
1829    const _: () = {
1830        use alloy::sol_types as alloy_sol_types;
1831        #[doc(hidden)]
1832        type UnderlyingSolTuple<'a> = ();
1833        #[doc(hidden)]
1834        type UnderlyingRustTuple<'a> = ();
1835        #[cfg(test)]
1836        #[allow(dead_code, unreachable_patterns)]
1837        fn _type_assertion(
1838            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1839        ) {
1840            match _t {
1841                alloy_sol_types::private::AssertTypeEq::<
1842                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1843                >(_) => {}
1844            }
1845        }
1846        #[automatically_derived]
1847        #[doc(hidden)]
1848        impl ::core::convert::From<CannotChangeOwner> for UnderlyingRustTuple<'_> {
1849            fn from(value: CannotChangeOwner) -> Self {
1850                ()
1851            }
1852        }
1853        #[automatically_derived]
1854        #[doc(hidden)]
1855        impl ::core::convert::From<UnderlyingRustTuple<'_>> for CannotChangeOwner {
1856            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1857                Self
1858            }
1859        }
1860        #[automatically_derived]
1861        impl alloy_sol_types::SolError for CannotChangeOwner {
1862            type Parameters<'a> = UnderlyingSolTuple<'a>;
1863            type Token<'a> = <Self::Parameters<
1864                'a,
1865            > as alloy_sol_types::SolType>::Token<'a>;
1866            const SIGNATURE: &'static str = "CannotChangeOwner()";
1867            const SELECTOR: [u8; 4] = [253u8, 103u8, 14u8, 190u8];
1868            #[inline]
1869            fn new<'a>(
1870                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1871            ) -> Self {
1872                tuple.into()
1873            }
1874            #[inline]
1875            fn tokenize(&self) -> Self::Token<'_> {
1876                ()
1877            }
1878            #[inline]
1879            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
1880                <Self::Parameters<
1881                    '_,
1882                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1883                    .map(Self::new)
1884            }
1885        }
1886    };
1887    #[derive(serde::Serialize, serde::Deserialize)]
1888    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1889    /**Custom error with signature `DefaultPermissionRejected()` and selector `0x58723037`.
1890```solidity
1891error DefaultPermissionRejected();
1892```*/
1893    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1894    #[derive(Clone)]
1895    pub struct DefaultPermissionRejected;
1896    #[allow(
1897        non_camel_case_types,
1898        non_snake_case,
1899        clippy::pub_underscore_fields,
1900        clippy::style
1901    )]
1902    const _: () = {
1903        use alloy::sol_types as alloy_sol_types;
1904        #[doc(hidden)]
1905        type UnderlyingSolTuple<'a> = ();
1906        #[doc(hidden)]
1907        type UnderlyingRustTuple<'a> = ();
1908        #[cfg(test)]
1909        #[allow(dead_code, unreachable_patterns)]
1910        fn _type_assertion(
1911            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1912        ) {
1913            match _t {
1914                alloy_sol_types::private::AssertTypeEq::<
1915                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1916                >(_) => {}
1917            }
1918        }
1919        #[automatically_derived]
1920        #[doc(hidden)]
1921        impl ::core::convert::From<DefaultPermissionRejected>
1922        for UnderlyingRustTuple<'_> {
1923            fn from(value: DefaultPermissionRejected) -> Self {
1924                ()
1925            }
1926        }
1927        #[automatically_derived]
1928        #[doc(hidden)]
1929        impl ::core::convert::From<UnderlyingRustTuple<'_>>
1930        for DefaultPermissionRejected {
1931            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1932                Self
1933            }
1934        }
1935        #[automatically_derived]
1936        impl alloy_sol_types::SolError for DefaultPermissionRejected {
1937            type Parameters<'a> = UnderlyingSolTuple<'a>;
1938            type Token<'a> = <Self::Parameters<
1939                'a,
1940            > as alloy_sol_types::SolType>::Token<'a>;
1941            const SIGNATURE: &'static str = "DefaultPermissionRejected()";
1942            const SELECTOR: [u8; 4] = [88u8, 114u8, 48u8, 55u8];
1943            #[inline]
1944            fn new<'a>(
1945                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1946            ) -> Self {
1947                tuple.into()
1948            }
1949            #[inline]
1950            fn tokenize(&self) -> Self::Token<'_> {
1951                ()
1952            }
1953            #[inline]
1954            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
1955                <Self::Parameters<
1956                    '_,
1957                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1958                    .map(Self::new)
1959            }
1960        }
1961    };
1962    #[derive(serde::Serialize, serde::Deserialize)]
1963    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1964    /**Custom error with signature `DelegateCallNotAllowed()` and selector `0x0d89438e`.
1965```solidity
1966error DelegateCallNotAllowed();
1967```*/
1968    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1969    #[derive(Clone)]
1970    pub struct DelegateCallNotAllowed;
1971    #[allow(
1972        non_camel_case_types,
1973        non_snake_case,
1974        clippy::pub_underscore_fields,
1975        clippy::style
1976    )]
1977    const _: () = {
1978        use alloy::sol_types as alloy_sol_types;
1979        #[doc(hidden)]
1980        type UnderlyingSolTuple<'a> = ();
1981        #[doc(hidden)]
1982        type UnderlyingRustTuple<'a> = ();
1983        #[cfg(test)]
1984        #[allow(dead_code, unreachable_patterns)]
1985        fn _type_assertion(
1986            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1987        ) {
1988            match _t {
1989                alloy_sol_types::private::AssertTypeEq::<
1990                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1991                >(_) => {}
1992            }
1993        }
1994        #[automatically_derived]
1995        #[doc(hidden)]
1996        impl ::core::convert::From<DelegateCallNotAllowed> for UnderlyingRustTuple<'_> {
1997            fn from(value: DelegateCallNotAllowed) -> Self {
1998                ()
1999            }
2000        }
2001        #[automatically_derived]
2002        #[doc(hidden)]
2003        impl ::core::convert::From<UnderlyingRustTuple<'_>> for DelegateCallNotAllowed {
2004            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2005                Self
2006            }
2007        }
2008        #[automatically_derived]
2009        impl alloy_sol_types::SolError for DelegateCallNotAllowed {
2010            type Parameters<'a> = UnderlyingSolTuple<'a>;
2011            type Token<'a> = <Self::Parameters<
2012                'a,
2013            > as alloy_sol_types::SolType>::Token<'a>;
2014            const SIGNATURE: &'static str = "DelegateCallNotAllowed()";
2015            const SELECTOR: [u8; 4] = [13u8, 137u8, 67u8, 142u8];
2016            #[inline]
2017            fn new<'a>(
2018                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2019            ) -> Self {
2020                tuple.into()
2021            }
2022            #[inline]
2023            fn tokenize(&self) -> Self::Token<'_> {
2024                ()
2025            }
2026            #[inline]
2027            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2028                <Self::Parameters<
2029                    '_,
2030                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2031                    .map(Self::new)
2032            }
2033        }
2034    };
2035    #[derive(serde::Serialize, serde::Deserialize)]
2036    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2037    /**Custom error with signature `FunctionSignatureTooShort()` and selector `0x4684c122`.
2038```solidity
2039error FunctionSignatureTooShort();
2040```*/
2041    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2042    #[derive(Clone)]
2043    pub struct FunctionSignatureTooShort;
2044    #[allow(
2045        non_camel_case_types,
2046        non_snake_case,
2047        clippy::pub_underscore_fields,
2048        clippy::style
2049    )]
2050    const _: () = {
2051        use alloy::sol_types as alloy_sol_types;
2052        #[doc(hidden)]
2053        type UnderlyingSolTuple<'a> = ();
2054        #[doc(hidden)]
2055        type UnderlyingRustTuple<'a> = ();
2056        #[cfg(test)]
2057        #[allow(dead_code, unreachable_patterns)]
2058        fn _type_assertion(
2059            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2060        ) {
2061            match _t {
2062                alloy_sol_types::private::AssertTypeEq::<
2063                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2064                >(_) => {}
2065            }
2066        }
2067        #[automatically_derived]
2068        #[doc(hidden)]
2069        impl ::core::convert::From<FunctionSignatureTooShort>
2070        for UnderlyingRustTuple<'_> {
2071            fn from(value: FunctionSignatureTooShort) -> Self {
2072                ()
2073            }
2074        }
2075        #[automatically_derived]
2076        #[doc(hidden)]
2077        impl ::core::convert::From<UnderlyingRustTuple<'_>>
2078        for FunctionSignatureTooShort {
2079            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2080                Self
2081            }
2082        }
2083        #[automatically_derived]
2084        impl alloy_sol_types::SolError for FunctionSignatureTooShort {
2085            type Parameters<'a> = UnderlyingSolTuple<'a>;
2086            type Token<'a> = <Self::Parameters<
2087                'a,
2088            > as alloy_sol_types::SolType>::Token<'a>;
2089            const SIGNATURE: &'static str = "FunctionSignatureTooShort()";
2090            const SELECTOR: [u8; 4] = [70u8, 132u8, 193u8, 34u8];
2091            #[inline]
2092            fn new<'a>(
2093                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2094            ) -> Self {
2095                tuple.into()
2096            }
2097            #[inline]
2098            fn tokenize(&self) -> Self::Token<'_> {
2099                ()
2100            }
2101            #[inline]
2102            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2103                <Self::Parameters<
2104                    '_,
2105                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2106                    .map(Self::new)
2107            }
2108        }
2109    };
2110    #[derive(serde::Serialize, serde::Deserialize)]
2111    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2112    /**Custom error with signature `GranularPermissionRejected()` and selector `0x864dd1e7`.
2113```solidity
2114error GranularPermissionRejected();
2115```*/
2116    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2117    #[derive(Clone)]
2118    pub struct GranularPermissionRejected;
2119    #[allow(
2120        non_camel_case_types,
2121        non_snake_case,
2122        clippy::pub_underscore_fields,
2123        clippy::style
2124    )]
2125    const _: () = {
2126        use alloy::sol_types as alloy_sol_types;
2127        #[doc(hidden)]
2128        type UnderlyingSolTuple<'a> = ();
2129        #[doc(hidden)]
2130        type UnderlyingRustTuple<'a> = ();
2131        #[cfg(test)]
2132        #[allow(dead_code, unreachable_patterns)]
2133        fn _type_assertion(
2134            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2135        ) {
2136            match _t {
2137                alloy_sol_types::private::AssertTypeEq::<
2138                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2139                >(_) => {}
2140            }
2141        }
2142        #[automatically_derived]
2143        #[doc(hidden)]
2144        impl ::core::convert::From<GranularPermissionRejected>
2145        for UnderlyingRustTuple<'_> {
2146            fn from(value: GranularPermissionRejected) -> Self {
2147                ()
2148            }
2149        }
2150        #[automatically_derived]
2151        #[doc(hidden)]
2152        impl ::core::convert::From<UnderlyingRustTuple<'_>>
2153        for GranularPermissionRejected {
2154            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2155                Self
2156            }
2157        }
2158        #[automatically_derived]
2159        impl alloy_sol_types::SolError for GranularPermissionRejected {
2160            type Parameters<'a> = UnderlyingSolTuple<'a>;
2161            type Token<'a> = <Self::Parameters<
2162                'a,
2163            > as alloy_sol_types::SolType>::Token<'a>;
2164            const SIGNATURE: &'static str = "GranularPermissionRejected()";
2165            const SELECTOR: [u8; 4] = [134u8, 77u8, 209u8, 231u8];
2166            #[inline]
2167            fn new<'a>(
2168                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2169            ) -> Self {
2170                tuple.into()
2171            }
2172            #[inline]
2173            fn tokenize(&self) -> Self::Token<'_> {
2174                ()
2175            }
2176            #[inline]
2177            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2178                <Self::Parameters<
2179                    '_,
2180                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2181                    .map(Self::new)
2182            }
2183        }
2184    };
2185    #[derive(serde::Serialize, serde::Deserialize)]
2186    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2187    /**Custom error with signature `NoMembership()` and selector `0xfd8e9f28`.
2188```solidity
2189error NoMembership();
2190```*/
2191    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2192    #[derive(Clone)]
2193    pub struct NoMembership;
2194    #[allow(
2195        non_camel_case_types,
2196        non_snake_case,
2197        clippy::pub_underscore_fields,
2198        clippy::style
2199    )]
2200    const _: () = {
2201        use alloy::sol_types as alloy_sol_types;
2202        #[doc(hidden)]
2203        type UnderlyingSolTuple<'a> = ();
2204        #[doc(hidden)]
2205        type UnderlyingRustTuple<'a> = ();
2206        #[cfg(test)]
2207        #[allow(dead_code, unreachable_patterns)]
2208        fn _type_assertion(
2209            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2210        ) {
2211            match _t {
2212                alloy_sol_types::private::AssertTypeEq::<
2213                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2214                >(_) => {}
2215            }
2216        }
2217        #[automatically_derived]
2218        #[doc(hidden)]
2219        impl ::core::convert::From<NoMembership> for UnderlyingRustTuple<'_> {
2220            fn from(value: NoMembership) -> Self {
2221                ()
2222            }
2223        }
2224        #[automatically_derived]
2225        #[doc(hidden)]
2226        impl ::core::convert::From<UnderlyingRustTuple<'_>> for NoMembership {
2227            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2228                Self
2229            }
2230        }
2231        #[automatically_derived]
2232        impl alloy_sol_types::SolError for NoMembership {
2233            type Parameters<'a> = UnderlyingSolTuple<'a>;
2234            type Token<'a> = <Self::Parameters<
2235                'a,
2236            > as alloy_sol_types::SolType>::Token<'a>;
2237            const SIGNATURE: &'static str = "NoMembership()";
2238            const SELECTOR: [u8; 4] = [253u8, 142u8, 159u8, 40u8];
2239            #[inline]
2240            fn new<'a>(
2241                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2242            ) -> Self {
2243                tuple.into()
2244            }
2245            #[inline]
2246            fn tokenize(&self) -> Self::Token<'_> {
2247                ()
2248            }
2249            #[inline]
2250            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2251                <Self::Parameters<
2252                    '_,
2253                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2254                    .map(Self::new)
2255            }
2256        }
2257    };
2258    #[derive(serde::Serialize, serde::Deserialize)]
2259    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2260    /**Custom error with signature `NodePermissionRejected()` and selector `0x6eb0315f`.
2261```solidity
2262error NodePermissionRejected();
2263```*/
2264    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2265    #[derive(Clone)]
2266    pub struct NodePermissionRejected;
2267    #[allow(
2268        non_camel_case_types,
2269        non_snake_case,
2270        clippy::pub_underscore_fields,
2271        clippy::style
2272    )]
2273    const _: () = {
2274        use alloy::sol_types as alloy_sol_types;
2275        #[doc(hidden)]
2276        type UnderlyingSolTuple<'a> = ();
2277        #[doc(hidden)]
2278        type UnderlyingRustTuple<'a> = ();
2279        #[cfg(test)]
2280        #[allow(dead_code, unreachable_patterns)]
2281        fn _type_assertion(
2282            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2283        ) {
2284            match _t {
2285                alloy_sol_types::private::AssertTypeEq::<
2286                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2287                >(_) => {}
2288            }
2289        }
2290        #[automatically_derived]
2291        #[doc(hidden)]
2292        impl ::core::convert::From<NodePermissionRejected> for UnderlyingRustTuple<'_> {
2293            fn from(value: NodePermissionRejected) -> Self {
2294                ()
2295            }
2296        }
2297        #[automatically_derived]
2298        #[doc(hidden)]
2299        impl ::core::convert::From<UnderlyingRustTuple<'_>> for NodePermissionRejected {
2300            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2301                Self
2302            }
2303        }
2304        #[automatically_derived]
2305        impl alloy_sol_types::SolError for NodePermissionRejected {
2306            type Parameters<'a> = UnderlyingSolTuple<'a>;
2307            type Token<'a> = <Self::Parameters<
2308                'a,
2309            > as alloy_sol_types::SolType>::Token<'a>;
2310            const SIGNATURE: &'static str = "NodePermissionRejected()";
2311            const SELECTOR: [u8; 4] = [110u8, 176u8, 49u8, 95u8];
2312            #[inline]
2313            fn new<'a>(
2314                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2315            ) -> Self {
2316                tuple.into()
2317            }
2318            #[inline]
2319            fn tokenize(&self) -> Self::Token<'_> {
2320                ()
2321            }
2322            #[inline]
2323            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2324                <Self::Parameters<
2325                    '_,
2326                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2327                    .map(Self::new)
2328            }
2329        }
2330    };
2331    #[derive(serde::Serialize, serde::Deserialize)]
2332    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2333    /**Custom error with signature `NonExistentKey()` and selector `0x2d0519ad`.
2334```solidity
2335error NonExistentKey();
2336```*/
2337    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2338    #[derive(Clone)]
2339    pub struct NonExistentKey;
2340    #[allow(
2341        non_camel_case_types,
2342        non_snake_case,
2343        clippy::pub_underscore_fields,
2344        clippy::style
2345    )]
2346    const _: () = {
2347        use alloy::sol_types as alloy_sol_types;
2348        #[doc(hidden)]
2349        type UnderlyingSolTuple<'a> = ();
2350        #[doc(hidden)]
2351        type UnderlyingRustTuple<'a> = ();
2352        #[cfg(test)]
2353        #[allow(dead_code, unreachable_patterns)]
2354        fn _type_assertion(
2355            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2356        ) {
2357            match _t {
2358                alloy_sol_types::private::AssertTypeEq::<
2359                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2360                >(_) => {}
2361            }
2362        }
2363        #[automatically_derived]
2364        #[doc(hidden)]
2365        impl ::core::convert::From<NonExistentKey> for UnderlyingRustTuple<'_> {
2366            fn from(value: NonExistentKey) -> Self {
2367                ()
2368            }
2369        }
2370        #[automatically_derived]
2371        #[doc(hidden)]
2372        impl ::core::convert::From<UnderlyingRustTuple<'_>> for NonExistentKey {
2373            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2374                Self
2375            }
2376        }
2377        #[automatically_derived]
2378        impl alloy_sol_types::SolError for NonExistentKey {
2379            type Parameters<'a> = UnderlyingSolTuple<'a>;
2380            type Token<'a> = <Self::Parameters<
2381                'a,
2382            > as alloy_sol_types::SolType>::Token<'a>;
2383            const SIGNATURE: &'static str = "NonExistentKey()";
2384            const SELECTOR: [u8; 4] = [45u8, 5u8, 25u8, 173u8];
2385            #[inline]
2386            fn new<'a>(
2387                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2388            ) -> Self {
2389                tuple.into()
2390            }
2391            #[inline]
2392            fn tokenize(&self) -> Self::Token<'_> {
2393                ()
2394            }
2395            #[inline]
2396            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2397                <Self::Parameters<
2398                    '_,
2399                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2400                    .map(Self::new)
2401            }
2402        }
2403    };
2404    #[derive(serde::Serialize, serde::Deserialize)]
2405    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2406    /**Custom error with signature `ParameterNotAllowed()` and selector `0x31e98246`.
2407```solidity
2408error ParameterNotAllowed();
2409```*/
2410    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2411    #[derive(Clone)]
2412    pub struct ParameterNotAllowed;
2413    #[allow(
2414        non_camel_case_types,
2415        non_snake_case,
2416        clippy::pub_underscore_fields,
2417        clippy::style
2418    )]
2419    const _: () = {
2420        use alloy::sol_types as alloy_sol_types;
2421        #[doc(hidden)]
2422        type UnderlyingSolTuple<'a> = ();
2423        #[doc(hidden)]
2424        type UnderlyingRustTuple<'a> = ();
2425        #[cfg(test)]
2426        #[allow(dead_code, unreachable_patterns)]
2427        fn _type_assertion(
2428            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2429        ) {
2430            match _t {
2431                alloy_sol_types::private::AssertTypeEq::<
2432                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2433                >(_) => {}
2434            }
2435        }
2436        #[automatically_derived]
2437        #[doc(hidden)]
2438        impl ::core::convert::From<ParameterNotAllowed> for UnderlyingRustTuple<'_> {
2439            fn from(value: ParameterNotAllowed) -> Self {
2440                ()
2441            }
2442        }
2443        #[automatically_derived]
2444        #[doc(hidden)]
2445        impl ::core::convert::From<UnderlyingRustTuple<'_>> for ParameterNotAllowed {
2446            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2447                Self
2448            }
2449        }
2450        #[automatically_derived]
2451        impl alloy_sol_types::SolError for ParameterNotAllowed {
2452            type Parameters<'a> = UnderlyingSolTuple<'a>;
2453            type Token<'a> = <Self::Parameters<
2454                'a,
2455            > as alloy_sol_types::SolType>::Token<'a>;
2456            const SIGNATURE: &'static str = "ParameterNotAllowed()";
2457            const SELECTOR: [u8; 4] = [49u8, 233u8, 130u8, 70u8];
2458            #[inline]
2459            fn new<'a>(
2460                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2461            ) -> Self {
2462                tuple.into()
2463            }
2464            #[inline]
2465            fn tokenize(&self) -> Self::Token<'_> {
2466                ()
2467            }
2468            #[inline]
2469            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2470                <Self::Parameters<
2471                    '_,
2472                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2473                    .map(Self::new)
2474            }
2475        }
2476    };
2477    #[derive(serde::Serialize, serde::Deserialize)]
2478    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2479    /**Custom error with signature `PermissionNotConfigured()` and selector `0x46ad4588`.
2480```solidity
2481error PermissionNotConfigured();
2482```*/
2483    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2484    #[derive(Clone)]
2485    pub struct PermissionNotConfigured;
2486    #[allow(
2487        non_camel_case_types,
2488        non_snake_case,
2489        clippy::pub_underscore_fields,
2490        clippy::style
2491    )]
2492    const _: () = {
2493        use alloy::sol_types as alloy_sol_types;
2494        #[doc(hidden)]
2495        type UnderlyingSolTuple<'a> = ();
2496        #[doc(hidden)]
2497        type UnderlyingRustTuple<'a> = ();
2498        #[cfg(test)]
2499        #[allow(dead_code, unreachable_patterns)]
2500        fn _type_assertion(
2501            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2502        ) {
2503            match _t {
2504                alloy_sol_types::private::AssertTypeEq::<
2505                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2506                >(_) => {}
2507            }
2508        }
2509        #[automatically_derived]
2510        #[doc(hidden)]
2511        impl ::core::convert::From<PermissionNotConfigured> for UnderlyingRustTuple<'_> {
2512            fn from(value: PermissionNotConfigured) -> Self {
2513                ()
2514            }
2515        }
2516        #[automatically_derived]
2517        #[doc(hidden)]
2518        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PermissionNotConfigured {
2519            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2520                Self
2521            }
2522        }
2523        #[automatically_derived]
2524        impl alloy_sol_types::SolError for PermissionNotConfigured {
2525            type Parameters<'a> = UnderlyingSolTuple<'a>;
2526            type Token<'a> = <Self::Parameters<
2527                'a,
2528            > as alloy_sol_types::SolType>::Token<'a>;
2529            const SIGNATURE: &'static str = "PermissionNotConfigured()";
2530            const SELECTOR: [u8; 4] = [70u8, 173u8, 69u8, 136u8];
2531            #[inline]
2532            fn new<'a>(
2533                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2534            ) -> Self {
2535                tuple.into()
2536            }
2537            #[inline]
2538            fn tokenize(&self) -> Self::Token<'_> {
2539                ()
2540            }
2541            #[inline]
2542            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2543                <Self::Parameters<
2544                    '_,
2545                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2546                    .map(Self::new)
2547            }
2548        }
2549    };
2550    #[derive(serde::Serialize, serde::Deserialize)]
2551    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2552    /**Custom error with signature `PermissionNotFound()` and selector `0xd8455a13`.
2553```solidity
2554error PermissionNotFound();
2555```*/
2556    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2557    #[derive(Clone)]
2558    pub struct PermissionNotFound;
2559    #[allow(
2560        non_camel_case_types,
2561        non_snake_case,
2562        clippy::pub_underscore_fields,
2563        clippy::style
2564    )]
2565    const _: () = {
2566        use alloy::sol_types as alloy_sol_types;
2567        #[doc(hidden)]
2568        type UnderlyingSolTuple<'a> = ();
2569        #[doc(hidden)]
2570        type UnderlyingRustTuple<'a> = ();
2571        #[cfg(test)]
2572        #[allow(dead_code, unreachable_patterns)]
2573        fn _type_assertion(
2574            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2575        ) {
2576            match _t {
2577                alloy_sol_types::private::AssertTypeEq::<
2578                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2579                >(_) => {}
2580            }
2581        }
2582        #[automatically_derived]
2583        #[doc(hidden)]
2584        impl ::core::convert::From<PermissionNotFound> for UnderlyingRustTuple<'_> {
2585            fn from(value: PermissionNotFound) -> Self {
2586                ()
2587            }
2588        }
2589        #[automatically_derived]
2590        #[doc(hidden)]
2591        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PermissionNotFound {
2592            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2593                Self
2594            }
2595        }
2596        #[automatically_derived]
2597        impl alloy_sol_types::SolError for PermissionNotFound {
2598            type Parameters<'a> = UnderlyingSolTuple<'a>;
2599            type Token<'a> = <Self::Parameters<
2600                'a,
2601            > as alloy_sol_types::SolType>::Token<'a>;
2602            const SIGNATURE: &'static str = "PermissionNotFound()";
2603            const SELECTOR: [u8; 4] = [216u8, 69u8, 90u8, 19u8];
2604            #[inline]
2605            fn new<'a>(
2606                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2607            ) -> Self {
2608                tuple.into()
2609            }
2610            #[inline]
2611            fn tokenize(&self) -> Self::Token<'_> {
2612                ()
2613            }
2614            #[inline]
2615            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2616                <Self::Parameters<
2617                    '_,
2618                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2619                    .map(Self::new)
2620            }
2621        }
2622    };
2623    #[derive(serde::Serialize, serde::Deserialize)]
2624    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2625    /**Custom error with signature `SafeMultisendSameAddress()` and selector `0x598a0e21`.
2626```solidity
2627error SafeMultisendSameAddress();
2628```*/
2629    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2630    #[derive(Clone)]
2631    pub struct SafeMultisendSameAddress;
2632    #[allow(
2633        non_camel_case_types,
2634        non_snake_case,
2635        clippy::pub_underscore_fields,
2636        clippy::style
2637    )]
2638    const _: () = {
2639        use alloy::sol_types as alloy_sol_types;
2640        #[doc(hidden)]
2641        type UnderlyingSolTuple<'a> = ();
2642        #[doc(hidden)]
2643        type UnderlyingRustTuple<'a> = ();
2644        #[cfg(test)]
2645        #[allow(dead_code, unreachable_patterns)]
2646        fn _type_assertion(
2647            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2648        ) {
2649            match _t {
2650                alloy_sol_types::private::AssertTypeEq::<
2651                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2652                >(_) => {}
2653            }
2654        }
2655        #[automatically_derived]
2656        #[doc(hidden)]
2657        impl ::core::convert::From<SafeMultisendSameAddress>
2658        for UnderlyingRustTuple<'_> {
2659            fn from(value: SafeMultisendSameAddress) -> Self {
2660                ()
2661            }
2662        }
2663        #[automatically_derived]
2664        #[doc(hidden)]
2665        impl ::core::convert::From<UnderlyingRustTuple<'_>>
2666        for SafeMultisendSameAddress {
2667            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2668                Self
2669            }
2670        }
2671        #[automatically_derived]
2672        impl alloy_sol_types::SolError for SafeMultisendSameAddress {
2673            type Parameters<'a> = UnderlyingSolTuple<'a>;
2674            type Token<'a> = <Self::Parameters<
2675                'a,
2676            > as alloy_sol_types::SolType>::Token<'a>;
2677            const SIGNATURE: &'static str = "SafeMultisendSameAddress()";
2678            const SELECTOR: [u8; 4] = [89u8, 138u8, 14u8, 33u8];
2679            #[inline]
2680            fn new<'a>(
2681                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2682            ) -> Self {
2683                tuple.into()
2684            }
2685            #[inline]
2686            fn tokenize(&self) -> Self::Token<'_> {
2687                ()
2688            }
2689            #[inline]
2690            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2691                <Self::Parameters<
2692                    '_,
2693                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2694                    .map(Self::new)
2695            }
2696        }
2697    };
2698    #[derive(serde::Serialize, serde::Deserialize)]
2699    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2700    /**Custom error with signature `SendNotAllowed()` and selector `0x09e9cd49`.
2701```solidity
2702error SendNotAllowed();
2703```*/
2704    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2705    #[derive(Clone)]
2706    pub struct SendNotAllowed;
2707    #[allow(
2708        non_camel_case_types,
2709        non_snake_case,
2710        clippy::pub_underscore_fields,
2711        clippy::style
2712    )]
2713    const _: () = {
2714        use alloy::sol_types as alloy_sol_types;
2715        #[doc(hidden)]
2716        type UnderlyingSolTuple<'a> = ();
2717        #[doc(hidden)]
2718        type UnderlyingRustTuple<'a> = ();
2719        #[cfg(test)]
2720        #[allow(dead_code, unreachable_patterns)]
2721        fn _type_assertion(
2722            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2723        ) {
2724            match _t {
2725                alloy_sol_types::private::AssertTypeEq::<
2726                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2727                >(_) => {}
2728            }
2729        }
2730        #[automatically_derived]
2731        #[doc(hidden)]
2732        impl ::core::convert::From<SendNotAllowed> for UnderlyingRustTuple<'_> {
2733            fn from(value: SendNotAllowed) -> Self {
2734                ()
2735            }
2736        }
2737        #[automatically_derived]
2738        #[doc(hidden)]
2739        impl ::core::convert::From<UnderlyingRustTuple<'_>> for SendNotAllowed {
2740            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2741                Self
2742            }
2743        }
2744        #[automatically_derived]
2745        impl alloy_sol_types::SolError for SendNotAllowed {
2746            type Parameters<'a> = UnderlyingSolTuple<'a>;
2747            type Token<'a> = <Self::Parameters<
2748                'a,
2749            > as alloy_sol_types::SolType>::Token<'a>;
2750            const SIGNATURE: &'static str = "SendNotAllowed()";
2751            const SELECTOR: [u8; 4] = [9u8, 233u8, 205u8, 73u8];
2752            #[inline]
2753            fn new<'a>(
2754                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2755            ) -> Self {
2756                tuple.into()
2757            }
2758            #[inline]
2759            fn tokenize(&self) -> Self::Token<'_> {
2760                ()
2761            }
2762            #[inline]
2763            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2764                <Self::Parameters<
2765                    '_,
2766                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2767                    .map(Self::new)
2768            }
2769        }
2770    };
2771    #[derive(serde::Serialize, serde::Deserialize)]
2772    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2773    /**Custom error with signature `TargetAddressNotAllowed()` and selector `0xef3440ac`.
2774```solidity
2775error TargetAddressNotAllowed();
2776```*/
2777    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2778    #[derive(Clone)]
2779    pub struct TargetAddressNotAllowed;
2780    #[allow(
2781        non_camel_case_types,
2782        non_snake_case,
2783        clippy::pub_underscore_fields,
2784        clippy::style
2785    )]
2786    const _: () = {
2787        use alloy::sol_types as alloy_sol_types;
2788        #[doc(hidden)]
2789        type UnderlyingSolTuple<'a> = ();
2790        #[doc(hidden)]
2791        type UnderlyingRustTuple<'a> = ();
2792        #[cfg(test)]
2793        #[allow(dead_code, unreachable_patterns)]
2794        fn _type_assertion(
2795            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2796        ) {
2797            match _t {
2798                alloy_sol_types::private::AssertTypeEq::<
2799                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2800                >(_) => {}
2801            }
2802        }
2803        #[automatically_derived]
2804        #[doc(hidden)]
2805        impl ::core::convert::From<TargetAddressNotAllowed> for UnderlyingRustTuple<'_> {
2806            fn from(value: TargetAddressNotAllowed) -> Self {
2807                ()
2808            }
2809        }
2810        #[automatically_derived]
2811        #[doc(hidden)]
2812        impl ::core::convert::From<UnderlyingRustTuple<'_>> for TargetAddressNotAllowed {
2813            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2814                Self
2815            }
2816        }
2817        #[automatically_derived]
2818        impl alloy_sol_types::SolError for TargetAddressNotAllowed {
2819            type Parameters<'a> = UnderlyingSolTuple<'a>;
2820            type Token<'a> = <Self::Parameters<
2821                'a,
2822            > as alloy_sol_types::SolType>::Token<'a>;
2823            const SIGNATURE: &'static str = "TargetAddressNotAllowed()";
2824            const SELECTOR: [u8; 4] = [239u8, 52u8, 64u8, 172u8];
2825            #[inline]
2826            fn new<'a>(
2827                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2828            ) -> Self {
2829                tuple.into()
2830            }
2831            #[inline]
2832            fn tokenize(&self) -> Self::Token<'_> {
2833                ()
2834            }
2835            #[inline]
2836            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2837                <Self::Parameters<
2838                    '_,
2839                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2840                    .map(Self::new)
2841            }
2842        }
2843    };
2844    #[derive(serde::Serialize, serde::Deserialize)]
2845    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2846    /**Custom error with signature `TargetIsNotScoped()` and selector `0x4a890321`.
2847```solidity
2848error TargetIsNotScoped();
2849```*/
2850    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2851    #[derive(Clone)]
2852    pub struct TargetIsNotScoped;
2853    #[allow(
2854        non_camel_case_types,
2855        non_snake_case,
2856        clippy::pub_underscore_fields,
2857        clippy::style
2858    )]
2859    const _: () = {
2860        use alloy::sol_types as alloy_sol_types;
2861        #[doc(hidden)]
2862        type UnderlyingSolTuple<'a> = ();
2863        #[doc(hidden)]
2864        type UnderlyingRustTuple<'a> = ();
2865        #[cfg(test)]
2866        #[allow(dead_code, unreachable_patterns)]
2867        fn _type_assertion(
2868            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2869        ) {
2870            match _t {
2871                alloy_sol_types::private::AssertTypeEq::<
2872                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2873                >(_) => {}
2874            }
2875        }
2876        #[automatically_derived]
2877        #[doc(hidden)]
2878        impl ::core::convert::From<TargetIsNotScoped> for UnderlyingRustTuple<'_> {
2879            fn from(value: TargetIsNotScoped) -> Self {
2880                ()
2881            }
2882        }
2883        #[automatically_derived]
2884        #[doc(hidden)]
2885        impl ::core::convert::From<UnderlyingRustTuple<'_>> for TargetIsNotScoped {
2886            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2887                Self
2888            }
2889        }
2890        #[automatically_derived]
2891        impl alloy_sol_types::SolError for TargetIsNotScoped {
2892            type Parameters<'a> = UnderlyingSolTuple<'a>;
2893            type Token<'a> = <Self::Parameters<
2894                'a,
2895            > as alloy_sol_types::SolType>::Token<'a>;
2896            const SIGNATURE: &'static str = "TargetIsNotScoped()";
2897            const SELECTOR: [u8; 4] = [74u8, 137u8, 3u8, 33u8];
2898            #[inline]
2899            fn new<'a>(
2900                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2901            ) -> Self {
2902                tuple.into()
2903            }
2904            #[inline]
2905            fn tokenize(&self) -> Self::Token<'_> {
2906                ()
2907            }
2908            #[inline]
2909            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2910                <Self::Parameters<
2911                    '_,
2912                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2913                    .map(Self::new)
2914            }
2915        }
2916    };
2917    #[derive(serde::Serialize, serde::Deserialize)]
2918    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2919    /**Custom error with signature `TargetIsScoped()` and selector `0xe8c07d2a`.
2920```solidity
2921error TargetIsScoped();
2922```*/
2923    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2924    #[derive(Clone)]
2925    pub struct TargetIsScoped;
2926    #[allow(
2927        non_camel_case_types,
2928        non_snake_case,
2929        clippy::pub_underscore_fields,
2930        clippy::style
2931    )]
2932    const _: () = {
2933        use alloy::sol_types as alloy_sol_types;
2934        #[doc(hidden)]
2935        type UnderlyingSolTuple<'a> = ();
2936        #[doc(hidden)]
2937        type UnderlyingRustTuple<'a> = ();
2938        #[cfg(test)]
2939        #[allow(dead_code, unreachable_patterns)]
2940        fn _type_assertion(
2941            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2942        ) {
2943            match _t {
2944                alloy_sol_types::private::AssertTypeEq::<
2945                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2946                >(_) => {}
2947            }
2948        }
2949        #[automatically_derived]
2950        #[doc(hidden)]
2951        impl ::core::convert::From<TargetIsScoped> for UnderlyingRustTuple<'_> {
2952            fn from(value: TargetIsScoped) -> Self {
2953                ()
2954            }
2955        }
2956        #[automatically_derived]
2957        #[doc(hidden)]
2958        impl ::core::convert::From<UnderlyingRustTuple<'_>> for TargetIsScoped {
2959            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2960                Self
2961            }
2962        }
2963        #[automatically_derived]
2964        impl alloy_sol_types::SolError for TargetIsScoped {
2965            type Parameters<'a> = UnderlyingSolTuple<'a>;
2966            type Token<'a> = <Self::Parameters<
2967                'a,
2968            > as alloy_sol_types::SolType>::Token<'a>;
2969            const SIGNATURE: &'static str = "TargetIsScoped()";
2970            const SELECTOR: [u8; 4] = [232u8, 192u8, 125u8, 42u8];
2971            #[inline]
2972            fn new<'a>(
2973                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2974            ) -> Self {
2975                tuple.into()
2976            }
2977            #[inline]
2978            fn tokenize(&self) -> Self::Token<'_> {
2979                ()
2980            }
2981            #[inline]
2982            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
2983                <Self::Parameters<
2984                    '_,
2985                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2986                    .map(Self::new)
2987            }
2988        }
2989    };
2990    #[derive(serde::Serialize, serde::Deserialize)]
2991    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2992    /**Custom error with signature `TooManyCapabilities()` and selector `0xb44af9af`.
2993```solidity
2994error TooManyCapabilities();
2995```*/
2996    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2997    #[derive(Clone)]
2998    pub struct TooManyCapabilities;
2999    #[allow(
3000        non_camel_case_types,
3001        non_snake_case,
3002        clippy::pub_underscore_fields,
3003        clippy::style
3004    )]
3005    const _: () = {
3006        use alloy::sol_types as alloy_sol_types;
3007        #[doc(hidden)]
3008        type UnderlyingSolTuple<'a> = ();
3009        #[doc(hidden)]
3010        type UnderlyingRustTuple<'a> = ();
3011        #[cfg(test)]
3012        #[allow(dead_code, unreachable_patterns)]
3013        fn _type_assertion(
3014            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3015        ) {
3016            match _t {
3017                alloy_sol_types::private::AssertTypeEq::<
3018                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3019                >(_) => {}
3020            }
3021        }
3022        #[automatically_derived]
3023        #[doc(hidden)]
3024        impl ::core::convert::From<TooManyCapabilities> for UnderlyingRustTuple<'_> {
3025            fn from(value: TooManyCapabilities) -> Self {
3026                ()
3027            }
3028        }
3029        #[automatically_derived]
3030        #[doc(hidden)]
3031        impl ::core::convert::From<UnderlyingRustTuple<'_>> for TooManyCapabilities {
3032            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3033                Self
3034            }
3035        }
3036        #[automatically_derived]
3037        impl alloy_sol_types::SolError for TooManyCapabilities {
3038            type Parameters<'a> = UnderlyingSolTuple<'a>;
3039            type Token<'a> = <Self::Parameters<
3040                'a,
3041            > as alloy_sol_types::SolType>::Token<'a>;
3042            const SIGNATURE: &'static str = "TooManyCapabilities()";
3043            const SELECTOR: [u8; 4] = [180u8, 74u8, 249u8, 175u8];
3044            #[inline]
3045            fn new<'a>(
3046                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3047            ) -> Self {
3048                tuple.into()
3049            }
3050            #[inline]
3051            fn tokenize(&self) -> Self::Token<'_> {
3052                ()
3053            }
3054            #[inline]
3055            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3056                <Self::Parameters<
3057                    '_,
3058                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3059                    .map(Self::new)
3060            }
3061        }
3062    };
3063    #[derive(serde::Serialize, serde::Deserialize)]
3064    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3065    /**Custom error with signature `UnacceptableMultiSendOffset()` and selector `0x7ed11137`.
3066```solidity
3067error UnacceptableMultiSendOffset();
3068```*/
3069    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3070    #[derive(Clone)]
3071    pub struct UnacceptableMultiSendOffset;
3072    #[allow(
3073        non_camel_case_types,
3074        non_snake_case,
3075        clippy::pub_underscore_fields,
3076        clippy::style
3077    )]
3078    const _: () = {
3079        use alloy::sol_types as alloy_sol_types;
3080        #[doc(hidden)]
3081        type UnderlyingSolTuple<'a> = ();
3082        #[doc(hidden)]
3083        type UnderlyingRustTuple<'a> = ();
3084        #[cfg(test)]
3085        #[allow(dead_code, unreachable_patterns)]
3086        fn _type_assertion(
3087            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3088        ) {
3089            match _t {
3090                alloy_sol_types::private::AssertTypeEq::<
3091                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3092                >(_) => {}
3093            }
3094        }
3095        #[automatically_derived]
3096        #[doc(hidden)]
3097        impl ::core::convert::From<UnacceptableMultiSendOffset>
3098        for UnderlyingRustTuple<'_> {
3099            fn from(value: UnacceptableMultiSendOffset) -> Self {
3100                ()
3101            }
3102        }
3103        #[automatically_derived]
3104        #[doc(hidden)]
3105        impl ::core::convert::From<UnderlyingRustTuple<'_>>
3106        for UnacceptableMultiSendOffset {
3107            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3108                Self
3109            }
3110        }
3111        #[automatically_derived]
3112        impl alloy_sol_types::SolError for UnacceptableMultiSendOffset {
3113            type Parameters<'a> = UnderlyingSolTuple<'a>;
3114            type Token<'a> = <Self::Parameters<
3115                'a,
3116            > as alloy_sol_types::SolType>::Token<'a>;
3117            const SIGNATURE: &'static str = "UnacceptableMultiSendOffset()";
3118            const SELECTOR: [u8; 4] = [126u8, 209u8, 17u8, 55u8];
3119            #[inline]
3120            fn new<'a>(
3121                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3122            ) -> Self {
3123                tuple.into()
3124            }
3125            #[inline]
3126            fn tokenize(&self) -> Self::Token<'_> {
3127                ()
3128            }
3129            #[inline]
3130            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3131                <Self::Parameters<
3132                    '_,
3133                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3134                    .map(Self::new)
3135            }
3136        }
3137    };
3138    #[derive(serde::Serialize, serde::Deserialize)]
3139    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3140    /**Custom error with signature `WithMembership()` and selector `0xe3a05a94`.
3141```solidity
3142error WithMembership();
3143```*/
3144    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3145    #[derive(Clone)]
3146    pub struct WithMembership;
3147    #[allow(
3148        non_camel_case_types,
3149        non_snake_case,
3150        clippy::pub_underscore_fields,
3151        clippy::style
3152    )]
3153    const _: () = {
3154        use alloy::sol_types as alloy_sol_types;
3155        #[doc(hidden)]
3156        type UnderlyingSolTuple<'a> = ();
3157        #[doc(hidden)]
3158        type UnderlyingRustTuple<'a> = ();
3159        #[cfg(test)]
3160        #[allow(dead_code, unreachable_patterns)]
3161        fn _type_assertion(
3162            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3163        ) {
3164            match _t {
3165                alloy_sol_types::private::AssertTypeEq::<
3166                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3167                >(_) => {}
3168            }
3169        }
3170        #[automatically_derived]
3171        #[doc(hidden)]
3172        impl ::core::convert::From<WithMembership> for UnderlyingRustTuple<'_> {
3173            fn from(value: WithMembership) -> Self {
3174                ()
3175            }
3176        }
3177        #[automatically_derived]
3178        #[doc(hidden)]
3179        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WithMembership {
3180            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3181                Self
3182            }
3183        }
3184        #[automatically_derived]
3185        impl alloy_sol_types::SolError for WithMembership {
3186            type Parameters<'a> = UnderlyingSolTuple<'a>;
3187            type Token<'a> = <Self::Parameters<
3188                'a,
3189            > as alloy_sol_types::SolType>::Token<'a>;
3190            const SIGNATURE: &'static str = "WithMembership()";
3191            const SELECTOR: [u8; 4] = [227u8, 160u8, 90u8, 148u8];
3192            #[inline]
3193            fn new<'a>(
3194                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3195            ) -> Self {
3196                tuple.into()
3197            }
3198            #[inline]
3199            fn tokenize(&self) -> Self::Token<'_> {
3200                ()
3201            }
3202            #[inline]
3203            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3204                <Self::Parameters<
3205                    '_,
3206                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3207                    .map(Self::new)
3208            }
3209        }
3210    };
3211    #[derive(serde::Serialize, serde::Deserialize)]
3212    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3213    /**Event with signature `AdminChanged(address,address)` and selector `0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f`.
3214```solidity
3215event AdminChanged(address previousAdmin, address newAdmin);
3216```*/
3217    #[allow(
3218        non_camel_case_types,
3219        non_snake_case,
3220        clippy::pub_underscore_fields,
3221        clippy::style
3222    )]
3223    #[derive(Clone)]
3224    pub struct AdminChanged {
3225        #[allow(missing_docs)]
3226        pub previousAdmin: alloy::sol_types::private::Address,
3227        #[allow(missing_docs)]
3228        pub newAdmin: alloy::sol_types::private::Address,
3229    }
3230    #[allow(
3231        non_camel_case_types,
3232        non_snake_case,
3233        clippy::pub_underscore_fields,
3234        clippy::style
3235    )]
3236    const _: () = {
3237        use alloy::sol_types as alloy_sol_types;
3238        #[automatically_derived]
3239        impl alloy_sol_types::SolEvent for AdminChanged {
3240            type DataTuple<'a> = (
3241                alloy::sol_types::sol_data::Address,
3242                alloy::sol_types::sol_data::Address,
3243            );
3244            type DataToken<'a> = <Self::DataTuple<
3245                'a,
3246            > as alloy_sol_types::SolType>::Token<'a>;
3247            type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,);
3248            const SIGNATURE: &'static str = "AdminChanged(address,address)";
3249            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3250                126u8, 100u8, 77u8, 121u8, 66u8, 47u8, 23u8, 192u8, 30u8, 72u8, 148u8,
3251                181u8, 244u8, 245u8, 136u8, 211u8, 49u8, 235u8, 250u8, 40u8, 101u8, 61u8,
3252                66u8, 174u8, 131u8, 45u8, 197u8, 158u8, 56u8, 201u8, 121u8, 143u8,
3253            ]);
3254            const ANONYMOUS: bool = false;
3255            #[allow(unused_variables)]
3256            #[inline]
3257            fn new(
3258                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3259                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3260            ) -> Self {
3261                Self {
3262                    previousAdmin: data.0,
3263                    newAdmin: data.1,
3264                }
3265            }
3266            #[inline]
3267            fn check_signature(
3268                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
3269            ) -> alloy_sol_types::Result<()> {
3270                if topics.0 != Self::SIGNATURE_HASH {
3271                    return Err(
3272                        alloy_sol_types::Error::invalid_event_signature_hash(
3273                            Self::SIGNATURE,
3274                            topics.0,
3275                            Self::SIGNATURE_HASH,
3276                        ),
3277                    );
3278                }
3279                Ok(())
3280            }
3281            #[inline]
3282            fn tokenize_body(&self) -> Self::DataToken<'_> {
3283                (
3284                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3285                        &self.previousAdmin,
3286                    ),
3287                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3288                        &self.newAdmin,
3289                    ),
3290                )
3291            }
3292            #[inline]
3293            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
3294                (Self::SIGNATURE_HASH.into(),)
3295            }
3296            #[inline]
3297            fn encode_topics_raw(
3298                &self,
3299                out: &mut [alloy_sol_types::abi::token::WordToken],
3300            ) -> alloy_sol_types::Result<()> {
3301                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
3302                    return Err(alloy_sol_types::Error::Overrun);
3303                }
3304                out[0usize] = alloy_sol_types::abi::token::WordToken(
3305                    Self::SIGNATURE_HASH,
3306                );
3307                Ok(())
3308            }
3309        }
3310        #[automatically_derived]
3311        impl alloy_sol_types::private::IntoLogData for AdminChanged {
3312            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
3313                From::from(self)
3314            }
3315            fn into_log_data(self) -> alloy_sol_types::private::LogData {
3316                From::from(&self)
3317            }
3318        }
3319        #[automatically_derived]
3320        impl From<&AdminChanged> for alloy_sol_types::private::LogData {
3321            #[inline]
3322            fn from(this: &AdminChanged) -> alloy_sol_types::private::LogData {
3323                alloy_sol_types::SolEvent::encode_log_data(this)
3324            }
3325        }
3326    };
3327    #[derive(serde::Serialize, serde::Deserialize)]
3328    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3329    /**Event with signature `BeaconUpgraded(address)` and selector `0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e`.
3330```solidity
3331event BeaconUpgraded(address indexed beacon);
3332```*/
3333    #[allow(
3334        non_camel_case_types,
3335        non_snake_case,
3336        clippy::pub_underscore_fields,
3337        clippy::style
3338    )]
3339    #[derive(Clone)]
3340    pub struct BeaconUpgraded {
3341        #[allow(missing_docs)]
3342        pub beacon: alloy::sol_types::private::Address,
3343    }
3344    #[allow(
3345        non_camel_case_types,
3346        non_snake_case,
3347        clippy::pub_underscore_fields,
3348        clippy::style
3349    )]
3350    const _: () = {
3351        use alloy::sol_types as alloy_sol_types;
3352        #[automatically_derived]
3353        impl alloy_sol_types::SolEvent for BeaconUpgraded {
3354            type DataTuple<'a> = ();
3355            type DataToken<'a> = <Self::DataTuple<
3356                'a,
3357            > as alloy_sol_types::SolType>::Token<'a>;
3358            type TopicList = (
3359                alloy_sol_types::sol_data::FixedBytes<32>,
3360                alloy::sol_types::sol_data::Address,
3361            );
3362            const SIGNATURE: &'static str = "BeaconUpgraded(address)";
3363            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3364                28u8, 243u8, 176u8, 58u8, 108u8, 241u8, 159u8, 162u8, 186u8, 186u8, 77u8,
3365                241u8, 72u8, 233u8, 220u8, 171u8, 237u8, 234u8, 127u8, 138u8, 92u8, 7u8,
3366                132u8, 14u8, 32u8, 126u8, 92u8, 8u8, 155u8, 233u8, 93u8, 62u8,
3367            ]);
3368            const ANONYMOUS: bool = false;
3369            #[allow(unused_variables)]
3370            #[inline]
3371            fn new(
3372                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3373                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3374            ) -> Self {
3375                Self { beacon: topics.1 }
3376            }
3377            #[inline]
3378            fn check_signature(
3379                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
3380            ) -> alloy_sol_types::Result<()> {
3381                if topics.0 != Self::SIGNATURE_HASH {
3382                    return Err(
3383                        alloy_sol_types::Error::invalid_event_signature_hash(
3384                            Self::SIGNATURE,
3385                            topics.0,
3386                            Self::SIGNATURE_HASH,
3387                        ),
3388                    );
3389                }
3390                Ok(())
3391            }
3392            #[inline]
3393            fn tokenize_body(&self) -> Self::DataToken<'_> {
3394                ()
3395            }
3396            #[inline]
3397            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
3398                (Self::SIGNATURE_HASH.into(), self.beacon.clone())
3399            }
3400            #[inline]
3401            fn encode_topics_raw(
3402                &self,
3403                out: &mut [alloy_sol_types::abi::token::WordToken],
3404            ) -> alloy_sol_types::Result<()> {
3405                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
3406                    return Err(alloy_sol_types::Error::Overrun);
3407                }
3408                out[0usize] = alloy_sol_types::abi::token::WordToken(
3409                    Self::SIGNATURE_HASH,
3410                );
3411                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
3412                    &self.beacon,
3413                );
3414                Ok(())
3415            }
3416        }
3417        #[automatically_derived]
3418        impl alloy_sol_types::private::IntoLogData for BeaconUpgraded {
3419            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
3420                From::from(self)
3421            }
3422            fn into_log_data(self) -> alloy_sol_types::private::LogData {
3423                From::from(&self)
3424            }
3425        }
3426        #[automatically_derived]
3427        impl From<&BeaconUpgraded> for alloy_sol_types::private::LogData {
3428            #[inline]
3429            fn from(this: &BeaconUpgraded) -> alloy_sol_types::private::LogData {
3430                alloy_sol_types::SolEvent::encode_log_data(this)
3431            }
3432        }
3433    };
3434    #[derive(serde::Serialize, serde::Deserialize)]
3435    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3436    /**Event with signature `ExecutionFailure()` and selector `0xc24d93608a03d263ff191d7677141f5e94c496e593108f3aae0cb5b70494c4d3`.
3437```solidity
3438event ExecutionFailure();
3439```*/
3440    #[allow(
3441        non_camel_case_types,
3442        non_snake_case,
3443        clippy::pub_underscore_fields,
3444        clippy::style
3445    )]
3446    #[derive(Clone)]
3447    pub struct ExecutionFailure;
3448    #[allow(
3449        non_camel_case_types,
3450        non_snake_case,
3451        clippy::pub_underscore_fields,
3452        clippy::style
3453    )]
3454    const _: () = {
3455        use alloy::sol_types as alloy_sol_types;
3456        #[automatically_derived]
3457        impl alloy_sol_types::SolEvent for ExecutionFailure {
3458            type DataTuple<'a> = ();
3459            type DataToken<'a> = <Self::DataTuple<
3460                'a,
3461            > as alloy_sol_types::SolType>::Token<'a>;
3462            type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,);
3463            const SIGNATURE: &'static str = "ExecutionFailure()";
3464            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3465                194u8, 77u8, 147u8, 96u8, 138u8, 3u8, 210u8, 99u8, 255u8, 25u8, 29u8,
3466                118u8, 119u8, 20u8, 31u8, 94u8, 148u8, 196u8, 150u8, 229u8, 147u8, 16u8,
3467                143u8, 58u8, 174u8, 12u8, 181u8, 183u8, 4u8, 148u8, 196u8, 211u8,
3468            ]);
3469            const ANONYMOUS: bool = false;
3470            #[allow(unused_variables)]
3471            #[inline]
3472            fn new(
3473                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3474                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3475            ) -> Self {
3476                Self {}
3477            }
3478            #[inline]
3479            fn check_signature(
3480                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
3481            ) -> alloy_sol_types::Result<()> {
3482                if topics.0 != Self::SIGNATURE_HASH {
3483                    return Err(
3484                        alloy_sol_types::Error::invalid_event_signature_hash(
3485                            Self::SIGNATURE,
3486                            topics.0,
3487                            Self::SIGNATURE_HASH,
3488                        ),
3489                    );
3490                }
3491                Ok(())
3492            }
3493            #[inline]
3494            fn tokenize_body(&self) -> Self::DataToken<'_> {
3495                ()
3496            }
3497            #[inline]
3498            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
3499                (Self::SIGNATURE_HASH.into(),)
3500            }
3501            #[inline]
3502            fn encode_topics_raw(
3503                &self,
3504                out: &mut [alloy_sol_types::abi::token::WordToken],
3505            ) -> alloy_sol_types::Result<()> {
3506                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
3507                    return Err(alloy_sol_types::Error::Overrun);
3508                }
3509                out[0usize] = alloy_sol_types::abi::token::WordToken(
3510                    Self::SIGNATURE_HASH,
3511                );
3512                Ok(())
3513            }
3514        }
3515        #[automatically_derived]
3516        impl alloy_sol_types::private::IntoLogData for ExecutionFailure {
3517            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
3518                From::from(self)
3519            }
3520            fn into_log_data(self) -> alloy_sol_types::private::LogData {
3521                From::from(&self)
3522            }
3523        }
3524        #[automatically_derived]
3525        impl From<&ExecutionFailure> for alloy_sol_types::private::LogData {
3526            #[inline]
3527            fn from(this: &ExecutionFailure) -> alloy_sol_types::private::LogData {
3528                alloy_sol_types::SolEvent::encode_log_data(this)
3529            }
3530        }
3531    };
3532    #[derive(serde::Serialize, serde::Deserialize)]
3533    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3534    /**Event with signature `ExecutionSuccess()` and selector `0x4e2e86d21375ebcbf6e93df5ebdd5a915bf830245904c3b54f48adf0170aae4b`.
3535```solidity
3536event ExecutionSuccess();
3537```*/
3538    #[allow(
3539        non_camel_case_types,
3540        non_snake_case,
3541        clippy::pub_underscore_fields,
3542        clippy::style
3543    )]
3544    #[derive(Clone)]
3545    pub struct ExecutionSuccess;
3546    #[allow(
3547        non_camel_case_types,
3548        non_snake_case,
3549        clippy::pub_underscore_fields,
3550        clippy::style
3551    )]
3552    const _: () = {
3553        use alloy::sol_types as alloy_sol_types;
3554        #[automatically_derived]
3555        impl alloy_sol_types::SolEvent for ExecutionSuccess {
3556            type DataTuple<'a> = ();
3557            type DataToken<'a> = <Self::DataTuple<
3558                'a,
3559            > as alloy_sol_types::SolType>::Token<'a>;
3560            type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,);
3561            const SIGNATURE: &'static str = "ExecutionSuccess()";
3562            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3563                78u8, 46u8, 134u8, 210u8, 19u8, 117u8, 235u8, 203u8, 246u8, 233u8, 61u8,
3564                245u8, 235u8, 221u8, 90u8, 145u8, 91u8, 248u8, 48u8, 36u8, 89u8, 4u8,
3565                195u8, 181u8, 79u8, 72u8, 173u8, 240u8, 23u8, 10u8, 174u8, 75u8,
3566            ]);
3567            const ANONYMOUS: bool = false;
3568            #[allow(unused_variables)]
3569            #[inline]
3570            fn new(
3571                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3572                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3573            ) -> Self {
3574                Self {}
3575            }
3576            #[inline]
3577            fn check_signature(
3578                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
3579            ) -> alloy_sol_types::Result<()> {
3580                if topics.0 != Self::SIGNATURE_HASH {
3581                    return Err(
3582                        alloy_sol_types::Error::invalid_event_signature_hash(
3583                            Self::SIGNATURE,
3584                            topics.0,
3585                            Self::SIGNATURE_HASH,
3586                        ),
3587                    );
3588                }
3589                Ok(())
3590            }
3591            #[inline]
3592            fn tokenize_body(&self) -> Self::DataToken<'_> {
3593                ()
3594            }
3595            #[inline]
3596            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
3597                (Self::SIGNATURE_HASH.into(),)
3598            }
3599            #[inline]
3600            fn encode_topics_raw(
3601                &self,
3602                out: &mut [alloy_sol_types::abi::token::WordToken],
3603            ) -> alloy_sol_types::Result<()> {
3604                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
3605                    return Err(alloy_sol_types::Error::Overrun);
3606                }
3607                out[0usize] = alloy_sol_types::abi::token::WordToken(
3608                    Self::SIGNATURE_HASH,
3609                );
3610                Ok(())
3611            }
3612        }
3613        #[automatically_derived]
3614        impl alloy_sol_types::private::IntoLogData for ExecutionSuccess {
3615            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
3616                From::from(self)
3617            }
3618            fn into_log_data(self) -> alloy_sol_types::private::LogData {
3619                From::from(&self)
3620            }
3621        }
3622        #[automatically_derived]
3623        impl From<&ExecutionSuccess> for alloy_sol_types::private::LogData {
3624            #[inline]
3625            fn from(this: &ExecutionSuccess) -> alloy_sol_types::private::LogData {
3626                alloy_sol_types::SolEvent::encode_log_data(this)
3627            }
3628        }
3629    };
3630    #[derive(serde::Serialize, serde::Deserialize)]
3631    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3632    /**Event with signature `Initialized(uint8)` and selector `0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498`.
3633```solidity
3634event Initialized(uint8 version);
3635```*/
3636    #[allow(
3637        non_camel_case_types,
3638        non_snake_case,
3639        clippy::pub_underscore_fields,
3640        clippy::style
3641    )]
3642    #[derive(Clone)]
3643    pub struct Initialized {
3644        #[allow(missing_docs)]
3645        pub version: u8,
3646    }
3647    #[allow(
3648        non_camel_case_types,
3649        non_snake_case,
3650        clippy::pub_underscore_fields,
3651        clippy::style
3652    )]
3653    const _: () = {
3654        use alloy::sol_types as alloy_sol_types;
3655        #[automatically_derived]
3656        impl alloy_sol_types::SolEvent for Initialized {
3657            type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<8>,);
3658            type DataToken<'a> = <Self::DataTuple<
3659                'a,
3660            > as alloy_sol_types::SolType>::Token<'a>;
3661            type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,);
3662            const SIGNATURE: &'static str = "Initialized(uint8)";
3663            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3664                127u8, 38u8, 184u8, 63u8, 249u8, 110u8, 31u8, 43u8, 106u8, 104u8, 47u8,
3665                19u8, 56u8, 82u8, 246u8, 121u8, 138u8, 9u8, 196u8, 101u8, 218u8, 149u8,
3666                146u8, 20u8, 96u8, 206u8, 251u8, 56u8, 71u8, 64u8, 36u8, 152u8,
3667            ]);
3668            const ANONYMOUS: bool = false;
3669            #[allow(unused_variables)]
3670            #[inline]
3671            fn new(
3672                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3673                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3674            ) -> Self {
3675                Self { version: data.0 }
3676            }
3677            #[inline]
3678            fn check_signature(
3679                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
3680            ) -> alloy_sol_types::Result<()> {
3681                if topics.0 != Self::SIGNATURE_HASH {
3682                    return Err(
3683                        alloy_sol_types::Error::invalid_event_signature_hash(
3684                            Self::SIGNATURE,
3685                            topics.0,
3686                            Self::SIGNATURE_HASH,
3687                        ),
3688                    );
3689                }
3690                Ok(())
3691            }
3692            #[inline]
3693            fn tokenize_body(&self) -> Self::DataToken<'_> {
3694                (
3695                    <alloy::sol_types::sol_data::Uint<
3696                        8,
3697                    > as alloy_sol_types::SolType>::tokenize(&self.version),
3698                )
3699            }
3700            #[inline]
3701            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
3702                (Self::SIGNATURE_HASH.into(),)
3703            }
3704            #[inline]
3705            fn encode_topics_raw(
3706                &self,
3707                out: &mut [alloy_sol_types::abi::token::WordToken],
3708            ) -> alloy_sol_types::Result<()> {
3709                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
3710                    return Err(alloy_sol_types::Error::Overrun);
3711                }
3712                out[0usize] = alloy_sol_types::abi::token::WordToken(
3713                    Self::SIGNATURE_HASH,
3714                );
3715                Ok(())
3716            }
3717        }
3718        #[automatically_derived]
3719        impl alloy_sol_types::private::IntoLogData for Initialized {
3720            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
3721                From::from(self)
3722            }
3723            fn into_log_data(self) -> alloy_sol_types::private::LogData {
3724                From::from(&self)
3725            }
3726        }
3727        #[automatically_derived]
3728        impl From<&Initialized> for alloy_sol_types::private::LogData {
3729            #[inline]
3730            fn from(this: &Initialized) -> alloy_sol_types::private::LogData {
3731                alloy_sol_types::SolEvent::encode_log_data(this)
3732            }
3733        }
3734    };
3735    #[derive(serde::Serialize, serde::Deserialize)]
3736    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3737    /**Event with signature `NodeAdded(address)` and selector `0xb25d03aaf308d7291709be1ea28b800463cf3a9a4c4a5555d7333a964c1dfebd`.
3738```solidity
3739event NodeAdded(address indexed node);
3740```*/
3741    #[allow(
3742        non_camel_case_types,
3743        non_snake_case,
3744        clippy::pub_underscore_fields,
3745        clippy::style
3746    )]
3747    #[derive(Clone)]
3748    pub struct NodeAdded {
3749        #[allow(missing_docs)]
3750        pub node: alloy::sol_types::private::Address,
3751    }
3752    #[allow(
3753        non_camel_case_types,
3754        non_snake_case,
3755        clippy::pub_underscore_fields,
3756        clippy::style
3757    )]
3758    const _: () = {
3759        use alloy::sol_types as alloy_sol_types;
3760        #[automatically_derived]
3761        impl alloy_sol_types::SolEvent for NodeAdded {
3762            type DataTuple<'a> = ();
3763            type DataToken<'a> = <Self::DataTuple<
3764                'a,
3765            > as alloy_sol_types::SolType>::Token<'a>;
3766            type TopicList = (
3767                alloy_sol_types::sol_data::FixedBytes<32>,
3768                alloy::sol_types::sol_data::Address,
3769            );
3770            const SIGNATURE: &'static str = "NodeAdded(address)";
3771            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3772                178u8, 93u8, 3u8, 170u8, 243u8, 8u8, 215u8, 41u8, 23u8, 9u8, 190u8, 30u8,
3773                162u8, 139u8, 128u8, 4u8, 99u8, 207u8, 58u8, 154u8, 76u8, 74u8, 85u8,
3774                85u8, 215u8, 51u8, 58u8, 150u8, 76u8, 29u8, 254u8, 189u8,
3775            ]);
3776            const ANONYMOUS: bool = false;
3777            #[allow(unused_variables)]
3778            #[inline]
3779            fn new(
3780                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3781                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3782            ) -> Self {
3783                Self { node: topics.1 }
3784            }
3785            #[inline]
3786            fn check_signature(
3787                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
3788            ) -> alloy_sol_types::Result<()> {
3789                if topics.0 != Self::SIGNATURE_HASH {
3790                    return Err(
3791                        alloy_sol_types::Error::invalid_event_signature_hash(
3792                            Self::SIGNATURE,
3793                            topics.0,
3794                            Self::SIGNATURE_HASH,
3795                        ),
3796                    );
3797                }
3798                Ok(())
3799            }
3800            #[inline]
3801            fn tokenize_body(&self) -> Self::DataToken<'_> {
3802                ()
3803            }
3804            #[inline]
3805            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
3806                (Self::SIGNATURE_HASH.into(), self.node.clone())
3807            }
3808            #[inline]
3809            fn encode_topics_raw(
3810                &self,
3811                out: &mut [alloy_sol_types::abi::token::WordToken],
3812            ) -> alloy_sol_types::Result<()> {
3813                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
3814                    return Err(alloy_sol_types::Error::Overrun);
3815                }
3816                out[0usize] = alloy_sol_types::abi::token::WordToken(
3817                    Self::SIGNATURE_HASH,
3818                );
3819                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
3820                    &self.node,
3821                );
3822                Ok(())
3823            }
3824        }
3825        #[automatically_derived]
3826        impl alloy_sol_types::private::IntoLogData for NodeAdded {
3827            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
3828                From::from(self)
3829            }
3830            fn into_log_data(self) -> alloy_sol_types::private::LogData {
3831                From::from(&self)
3832            }
3833        }
3834        #[automatically_derived]
3835        impl From<&NodeAdded> for alloy_sol_types::private::LogData {
3836            #[inline]
3837            fn from(this: &NodeAdded) -> alloy_sol_types::private::LogData {
3838                alloy_sol_types::SolEvent::encode_log_data(this)
3839            }
3840        }
3841    };
3842    #[derive(serde::Serialize, serde::Deserialize)]
3843    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3844    /**Event with signature `NodeRemoved(address)` and selector `0xcfc24166db4bb677e857cacabd1541fb2b30645021b27c5130419589b84db52b`.
3845```solidity
3846event NodeRemoved(address indexed node);
3847```*/
3848    #[allow(
3849        non_camel_case_types,
3850        non_snake_case,
3851        clippy::pub_underscore_fields,
3852        clippy::style
3853    )]
3854    #[derive(Clone)]
3855    pub struct NodeRemoved {
3856        #[allow(missing_docs)]
3857        pub node: alloy::sol_types::private::Address,
3858    }
3859    #[allow(
3860        non_camel_case_types,
3861        non_snake_case,
3862        clippy::pub_underscore_fields,
3863        clippy::style
3864    )]
3865    const _: () = {
3866        use alloy::sol_types as alloy_sol_types;
3867        #[automatically_derived]
3868        impl alloy_sol_types::SolEvent for NodeRemoved {
3869            type DataTuple<'a> = ();
3870            type DataToken<'a> = <Self::DataTuple<
3871                'a,
3872            > as alloy_sol_types::SolType>::Token<'a>;
3873            type TopicList = (
3874                alloy_sol_types::sol_data::FixedBytes<32>,
3875                alloy::sol_types::sol_data::Address,
3876            );
3877            const SIGNATURE: &'static str = "NodeRemoved(address)";
3878            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3879                207u8, 194u8, 65u8, 102u8, 219u8, 75u8, 182u8, 119u8, 232u8, 87u8, 202u8,
3880                202u8, 189u8, 21u8, 65u8, 251u8, 43u8, 48u8, 100u8, 80u8, 33u8, 178u8,
3881                124u8, 81u8, 48u8, 65u8, 149u8, 137u8, 184u8, 77u8, 181u8, 43u8,
3882            ]);
3883            const ANONYMOUS: bool = false;
3884            #[allow(unused_variables)]
3885            #[inline]
3886            fn new(
3887                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3888                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3889            ) -> Self {
3890                Self { node: topics.1 }
3891            }
3892            #[inline]
3893            fn check_signature(
3894                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
3895            ) -> alloy_sol_types::Result<()> {
3896                if topics.0 != Self::SIGNATURE_HASH {
3897                    return Err(
3898                        alloy_sol_types::Error::invalid_event_signature_hash(
3899                            Self::SIGNATURE,
3900                            topics.0,
3901                            Self::SIGNATURE_HASH,
3902                        ),
3903                    );
3904                }
3905                Ok(())
3906            }
3907            #[inline]
3908            fn tokenize_body(&self) -> Self::DataToken<'_> {
3909                ()
3910            }
3911            #[inline]
3912            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
3913                (Self::SIGNATURE_HASH.into(), self.node.clone())
3914            }
3915            #[inline]
3916            fn encode_topics_raw(
3917                &self,
3918                out: &mut [alloy_sol_types::abi::token::WordToken],
3919            ) -> alloy_sol_types::Result<()> {
3920                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
3921                    return Err(alloy_sol_types::Error::Overrun);
3922                }
3923                out[0usize] = alloy_sol_types::abi::token::WordToken(
3924                    Self::SIGNATURE_HASH,
3925                );
3926                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
3927                    &self.node,
3928                );
3929                Ok(())
3930            }
3931        }
3932        #[automatically_derived]
3933        impl alloy_sol_types::private::IntoLogData for NodeRemoved {
3934            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
3935                From::from(self)
3936            }
3937            fn into_log_data(self) -> alloy_sol_types::private::LogData {
3938                From::from(&self)
3939            }
3940        }
3941        #[automatically_derived]
3942        impl From<&NodeRemoved> for alloy_sol_types::private::LogData {
3943            #[inline]
3944            fn from(this: &NodeRemoved) -> alloy_sol_types::private::LogData {
3945                alloy_sol_types::SolEvent::encode_log_data(this)
3946            }
3947        }
3948    };
3949    #[derive(serde::Serialize, serde::Deserialize)]
3950    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3951    /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`.
3952```solidity
3953event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
3954```*/
3955    #[allow(
3956        non_camel_case_types,
3957        non_snake_case,
3958        clippy::pub_underscore_fields,
3959        clippy::style
3960    )]
3961    #[derive(Clone)]
3962    pub struct OwnershipTransferred {
3963        #[allow(missing_docs)]
3964        pub previousOwner: alloy::sol_types::private::Address,
3965        #[allow(missing_docs)]
3966        pub newOwner: alloy::sol_types::private::Address,
3967    }
3968    #[allow(
3969        non_camel_case_types,
3970        non_snake_case,
3971        clippy::pub_underscore_fields,
3972        clippy::style
3973    )]
3974    const _: () = {
3975        use alloy::sol_types as alloy_sol_types;
3976        #[automatically_derived]
3977        impl alloy_sol_types::SolEvent for OwnershipTransferred {
3978            type DataTuple<'a> = ();
3979            type DataToken<'a> = <Self::DataTuple<
3980                'a,
3981            > as alloy_sol_types::SolType>::Token<'a>;
3982            type TopicList = (
3983                alloy_sol_types::sol_data::FixedBytes<32>,
3984                alloy::sol_types::sol_data::Address,
3985                alloy::sol_types::sol_data::Address,
3986            );
3987            const SIGNATURE: &'static str = "OwnershipTransferred(address,address)";
3988            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
3989                139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8,
3990                31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8,
3991                218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8,
3992            ]);
3993            const ANONYMOUS: bool = false;
3994            #[allow(unused_variables)]
3995            #[inline]
3996            fn new(
3997                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
3998                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
3999            ) -> Self {
4000                Self {
4001                    previousOwner: topics.1,
4002                    newOwner: topics.2,
4003                }
4004            }
4005            #[inline]
4006            fn check_signature(
4007                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
4008            ) -> alloy_sol_types::Result<()> {
4009                if topics.0 != Self::SIGNATURE_HASH {
4010                    return Err(
4011                        alloy_sol_types::Error::invalid_event_signature_hash(
4012                            Self::SIGNATURE,
4013                            topics.0,
4014                            Self::SIGNATURE_HASH,
4015                        ),
4016                    );
4017                }
4018                Ok(())
4019            }
4020            #[inline]
4021            fn tokenize_body(&self) -> Self::DataToken<'_> {
4022                ()
4023            }
4024            #[inline]
4025            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
4026                (
4027                    Self::SIGNATURE_HASH.into(),
4028                    self.previousOwner.clone(),
4029                    self.newOwner.clone(),
4030                )
4031            }
4032            #[inline]
4033            fn encode_topics_raw(
4034                &self,
4035                out: &mut [alloy_sol_types::abi::token::WordToken],
4036            ) -> alloy_sol_types::Result<()> {
4037                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
4038                    return Err(alloy_sol_types::Error::Overrun);
4039                }
4040                out[0usize] = alloy_sol_types::abi::token::WordToken(
4041                    Self::SIGNATURE_HASH,
4042                );
4043                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
4044                    &self.previousOwner,
4045                );
4046                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
4047                    &self.newOwner,
4048                );
4049                Ok(())
4050            }
4051        }
4052        #[automatically_derived]
4053        impl alloy_sol_types::private::IntoLogData for OwnershipTransferred {
4054            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
4055                From::from(self)
4056            }
4057            fn into_log_data(self) -> alloy_sol_types::private::LogData {
4058                From::from(&self)
4059            }
4060        }
4061        #[automatically_derived]
4062        impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData {
4063            #[inline]
4064            fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData {
4065                alloy_sol_types::SolEvent::encode_log_data(this)
4066            }
4067        }
4068    };
4069    #[derive(serde::Serialize, serde::Deserialize)]
4070    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4071    /**Event with signature `SetMultisendAddress(address)` and selector `0x5fe6aabf4e790843df43ae0e22b58620066fb389295bedc06a92df6c3b28777d`.
4072```solidity
4073event SetMultisendAddress(address indexed multisendAddress);
4074```*/
4075    #[allow(
4076        non_camel_case_types,
4077        non_snake_case,
4078        clippy::pub_underscore_fields,
4079        clippy::style
4080    )]
4081    #[derive(Clone)]
4082    pub struct SetMultisendAddress {
4083        #[allow(missing_docs)]
4084        pub multisendAddress: alloy::sol_types::private::Address,
4085    }
4086    #[allow(
4087        non_camel_case_types,
4088        non_snake_case,
4089        clippy::pub_underscore_fields,
4090        clippy::style
4091    )]
4092    const _: () = {
4093        use alloy::sol_types as alloy_sol_types;
4094        #[automatically_derived]
4095        impl alloy_sol_types::SolEvent for SetMultisendAddress {
4096            type DataTuple<'a> = ();
4097            type DataToken<'a> = <Self::DataTuple<
4098                'a,
4099            > as alloy_sol_types::SolType>::Token<'a>;
4100            type TopicList = (
4101                alloy_sol_types::sol_data::FixedBytes<32>,
4102                alloy::sol_types::sol_data::Address,
4103            );
4104            const SIGNATURE: &'static str = "SetMultisendAddress(address)";
4105            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
4106                95u8, 230u8, 170u8, 191u8, 78u8, 121u8, 8u8, 67u8, 223u8, 67u8, 174u8,
4107                14u8, 34u8, 181u8, 134u8, 32u8, 6u8, 111u8, 179u8, 137u8, 41u8, 91u8,
4108                237u8, 192u8, 106u8, 146u8, 223u8, 108u8, 59u8, 40u8, 119u8, 125u8,
4109            ]);
4110            const ANONYMOUS: bool = false;
4111            #[allow(unused_variables)]
4112            #[inline]
4113            fn new(
4114                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
4115                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
4116            ) -> Self {
4117                Self { multisendAddress: topics.1 }
4118            }
4119            #[inline]
4120            fn check_signature(
4121                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
4122            ) -> alloy_sol_types::Result<()> {
4123                if topics.0 != Self::SIGNATURE_HASH {
4124                    return Err(
4125                        alloy_sol_types::Error::invalid_event_signature_hash(
4126                            Self::SIGNATURE,
4127                            topics.0,
4128                            Self::SIGNATURE_HASH,
4129                        ),
4130                    );
4131                }
4132                Ok(())
4133            }
4134            #[inline]
4135            fn tokenize_body(&self) -> Self::DataToken<'_> {
4136                ()
4137            }
4138            #[inline]
4139            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
4140                (Self::SIGNATURE_HASH.into(), self.multisendAddress.clone())
4141            }
4142            #[inline]
4143            fn encode_topics_raw(
4144                &self,
4145                out: &mut [alloy_sol_types::abi::token::WordToken],
4146            ) -> alloy_sol_types::Result<()> {
4147                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
4148                    return Err(alloy_sol_types::Error::Overrun);
4149                }
4150                out[0usize] = alloy_sol_types::abi::token::WordToken(
4151                    Self::SIGNATURE_HASH,
4152                );
4153                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
4154                    &self.multisendAddress,
4155                );
4156                Ok(())
4157            }
4158        }
4159        #[automatically_derived]
4160        impl alloy_sol_types::private::IntoLogData for SetMultisendAddress {
4161            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
4162                From::from(self)
4163            }
4164            fn into_log_data(self) -> alloy_sol_types::private::LogData {
4165                From::from(&self)
4166            }
4167        }
4168        #[automatically_derived]
4169        impl From<&SetMultisendAddress> for alloy_sol_types::private::LogData {
4170            #[inline]
4171            fn from(this: &SetMultisendAddress) -> alloy_sol_types::private::LogData {
4172                alloy_sol_types::SolEvent::encode_log_data(this)
4173            }
4174        }
4175    };
4176    #[derive(serde::Serialize, serde::Deserialize)]
4177    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4178    /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`.
4179```solidity
4180event Upgraded(address indexed implementation);
4181```*/
4182    #[allow(
4183        non_camel_case_types,
4184        non_snake_case,
4185        clippy::pub_underscore_fields,
4186        clippy::style
4187    )]
4188    #[derive(Clone)]
4189    pub struct Upgraded {
4190        #[allow(missing_docs)]
4191        pub implementation: alloy::sol_types::private::Address,
4192    }
4193    #[allow(
4194        non_camel_case_types,
4195        non_snake_case,
4196        clippy::pub_underscore_fields,
4197        clippy::style
4198    )]
4199    const _: () = {
4200        use alloy::sol_types as alloy_sol_types;
4201        #[automatically_derived]
4202        impl alloy_sol_types::SolEvent for Upgraded {
4203            type DataTuple<'a> = ();
4204            type DataToken<'a> = <Self::DataTuple<
4205                'a,
4206            > as alloy_sol_types::SolType>::Token<'a>;
4207            type TopicList = (
4208                alloy_sol_types::sol_data::FixedBytes<32>,
4209                alloy::sol_types::sol_data::Address,
4210            );
4211            const SIGNATURE: &'static str = "Upgraded(address)";
4212            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
4213                188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8,
4214                179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8,
4215                12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8,
4216            ]);
4217            const ANONYMOUS: bool = false;
4218            #[allow(unused_variables)]
4219            #[inline]
4220            fn new(
4221                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
4222                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
4223            ) -> Self {
4224                Self { implementation: topics.1 }
4225            }
4226            #[inline]
4227            fn check_signature(
4228                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
4229            ) -> alloy_sol_types::Result<()> {
4230                if topics.0 != Self::SIGNATURE_HASH {
4231                    return Err(
4232                        alloy_sol_types::Error::invalid_event_signature_hash(
4233                            Self::SIGNATURE,
4234                            topics.0,
4235                            Self::SIGNATURE_HASH,
4236                        ),
4237                    );
4238                }
4239                Ok(())
4240            }
4241            #[inline]
4242            fn tokenize_body(&self) -> Self::DataToken<'_> {
4243                ()
4244            }
4245            #[inline]
4246            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
4247                (Self::SIGNATURE_HASH.into(), self.implementation.clone())
4248            }
4249            #[inline]
4250            fn encode_topics_raw(
4251                &self,
4252                out: &mut [alloy_sol_types::abi::token::WordToken],
4253            ) -> alloy_sol_types::Result<()> {
4254                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
4255                    return Err(alloy_sol_types::Error::Overrun);
4256                }
4257                out[0usize] = alloy_sol_types::abi::token::WordToken(
4258                    Self::SIGNATURE_HASH,
4259                );
4260                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
4261                    &self.implementation,
4262                );
4263                Ok(())
4264            }
4265        }
4266        #[automatically_derived]
4267        impl alloy_sol_types::private::IntoLogData for Upgraded {
4268            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
4269                From::from(self)
4270            }
4271            fn into_log_data(self) -> alloy_sol_types::private::LogData {
4272                From::from(&self)
4273            }
4274        }
4275        #[automatically_derived]
4276        impl From<&Upgraded> for alloy_sol_types::private::LogData {
4277            #[inline]
4278            fn from(this: &Upgraded) -> alloy_sol_types::private::LogData {
4279                alloy_sol_types::SolEvent::encode_log_data(this)
4280            }
4281        }
4282    };
4283    /**Constructor`.
4284```solidity
4285constructor();
4286```*/
4287    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4288    #[derive(Clone)]
4289    pub struct constructorCall {}
4290    const _: () = {
4291        use alloy::sol_types as alloy_sol_types;
4292        {
4293            #[doc(hidden)]
4294            type UnderlyingSolTuple<'a> = ();
4295            #[doc(hidden)]
4296            type UnderlyingRustTuple<'a> = ();
4297            #[cfg(test)]
4298            #[allow(dead_code, unreachable_patterns)]
4299            fn _type_assertion(
4300                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4301            ) {
4302                match _t {
4303                    alloy_sol_types::private::AssertTypeEq::<
4304                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4305                    >(_) => {}
4306                }
4307            }
4308            #[automatically_derived]
4309            #[doc(hidden)]
4310            impl ::core::convert::From<constructorCall> for UnderlyingRustTuple<'_> {
4311                fn from(value: constructorCall) -> Self {
4312                    ()
4313                }
4314            }
4315            #[automatically_derived]
4316            #[doc(hidden)]
4317            impl ::core::convert::From<UnderlyingRustTuple<'_>> for constructorCall {
4318                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4319                    Self {}
4320                }
4321            }
4322        }
4323        #[automatically_derived]
4324        impl alloy_sol_types::SolConstructor for constructorCall {
4325            type Parameters<'a> = ();
4326            type Token<'a> = <Self::Parameters<
4327                'a,
4328            > as alloy_sol_types::SolType>::Token<'a>;
4329            #[inline]
4330            fn new<'a>(
4331                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4332            ) -> Self {
4333                tuple.into()
4334            }
4335            #[inline]
4336            fn tokenize(&self) -> Self::Token<'_> {
4337                ()
4338            }
4339        }
4340    };
4341    #[derive(serde::Serialize, serde::Deserialize)]
4342    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4343    /**Function with signature `addChannelsAndTokenTarget(uint256)` and selector `0xa2450f89`.
4344```solidity
4345function addChannelsAndTokenTarget(Target defaultTarget) external;
4346```*/
4347    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4348    #[derive(Clone)]
4349    pub struct addChannelsAndTokenTargetCall {
4350        #[allow(missing_docs)]
4351        pub defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
4352    }
4353    ///Container type for the return parameters of the [`addChannelsAndTokenTarget(uint256)`](addChannelsAndTokenTargetCall) function.
4354    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4355    #[derive(Clone)]
4356    pub struct addChannelsAndTokenTargetReturn {}
4357    #[allow(
4358        non_camel_case_types,
4359        non_snake_case,
4360        clippy::pub_underscore_fields,
4361        clippy::style
4362    )]
4363    const _: () = {
4364        use alloy::sol_types as alloy_sol_types;
4365        {
4366            #[doc(hidden)]
4367            type UnderlyingSolTuple<'a> = (Target,);
4368            #[doc(hidden)]
4369            type UnderlyingRustTuple<'a> = (
4370                <Target as alloy::sol_types::SolType>::RustType,
4371            );
4372            #[cfg(test)]
4373            #[allow(dead_code, unreachable_patterns)]
4374            fn _type_assertion(
4375                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4376            ) {
4377                match _t {
4378                    alloy_sol_types::private::AssertTypeEq::<
4379                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4380                    >(_) => {}
4381                }
4382            }
4383            #[automatically_derived]
4384            #[doc(hidden)]
4385            impl ::core::convert::From<addChannelsAndTokenTargetCall>
4386            for UnderlyingRustTuple<'_> {
4387                fn from(value: addChannelsAndTokenTargetCall) -> Self {
4388                    (value.defaultTarget,)
4389                }
4390            }
4391            #[automatically_derived]
4392            #[doc(hidden)]
4393            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4394            for addChannelsAndTokenTargetCall {
4395                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4396                    Self { defaultTarget: tuple.0 }
4397                }
4398            }
4399        }
4400        {
4401            #[doc(hidden)]
4402            type UnderlyingSolTuple<'a> = ();
4403            #[doc(hidden)]
4404            type UnderlyingRustTuple<'a> = ();
4405            #[cfg(test)]
4406            #[allow(dead_code, unreachable_patterns)]
4407            fn _type_assertion(
4408                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4409            ) {
4410                match _t {
4411                    alloy_sol_types::private::AssertTypeEq::<
4412                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4413                    >(_) => {}
4414                }
4415            }
4416            #[automatically_derived]
4417            #[doc(hidden)]
4418            impl ::core::convert::From<addChannelsAndTokenTargetReturn>
4419            for UnderlyingRustTuple<'_> {
4420                fn from(value: addChannelsAndTokenTargetReturn) -> Self {
4421                    ()
4422                }
4423            }
4424            #[automatically_derived]
4425            #[doc(hidden)]
4426            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4427            for addChannelsAndTokenTargetReturn {
4428                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4429                    Self {}
4430                }
4431            }
4432        }
4433        impl addChannelsAndTokenTargetReturn {
4434            fn _tokenize(
4435                &self,
4436            ) -> <addChannelsAndTokenTargetCall as alloy_sol_types::SolCall>::ReturnToken<
4437                '_,
4438            > {
4439                ()
4440            }
4441        }
4442        #[automatically_derived]
4443        impl alloy_sol_types::SolCall for addChannelsAndTokenTargetCall {
4444            type Parameters<'a> = (Target,);
4445            type Token<'a> = <Self::Parameters<
4446                'a,
4447            > as alloy_sol_types::SolType>::Token<'a>;
4448            type Return = addChannelsAndTokenTargetReturn;
4449            type ReturnTuple<'a> = ();
4450            type ReturnToken<'a> = <Self::ReturnTuple<
4451                'a,
4452            > as alloy_sol_types::SolType>::Token<'a>;
4453            const SIGNATURE: &'static str = "addChannelsAndTokenTarget(uint256)";
4454            const SELECTOR: [u8; 4] = [162u8, 69u8, 15u8, 137u8];
4455            #[inline]
4456            fn new<'a>(
4457                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4458            ) -> Self {
4459                tuple.into()
4460            }
4461            #[inline]
4462            fn tokenize(&self) -> Self::Token<'_> {
4463                (<Target as alloy_sol_types::SolType>::tokenize(&self.defaultTarget),)
4464            }
4465            #[inline]
4466            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4467                addChannelsAndTokenTargetReturn::_tokenize(ret)
4468            }
4469            #[inline]
4470            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4471                <Self::ReturnTuple<
4472                    '_,
4473                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4474                    .map(Into::into)
4475            }
4476            #[inline]
4477            fn abi_decode_returns_validate(
4478                data: &[u8],
4479            ) -> alloy_sol_types::Result<Self::Return> {
4480                <Self::ReturnTuple<
4481                    '_,
4482                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4483                    .map(Into::into)
4484            }
4485        }
4486    };
4487    #[derive(serde::Serialize, serde::Deserialize)]
4488    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4489    /**Function with signature `addNode(address)` and selector `0x9d95f1cc`.
4490```solidity
4491function addNode(address nodeAddress) external;
4492```*/
4493    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4494    #[derive(Clone)]
4495    pub struct addNodeCall {
4496        #[allow(missing_docs)]
4497        pub nodeAddress: alloy::sol_types::private::Address,
4498    }
4499    ///Container type for the return parameters of the [`addNode(address)`](addNodeCall) function.
4500    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4501    #[derive(Clone)]
4502    pub struct addNodeReturn {}
4503    #[allow(
4504        non_camel_case_types,
4505        non_snake_case,
4506        clippy::pub_underscore_fields,
4507        clippy::style
4508    )]
4509    const _: () = {
4510        use alloy::sol_types as alloy_sol_types;
4511        {
4512            #[doc(hidden)]
4513            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
4514            #[doc(hidden)]
4515            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
4516            #[cfg(test)]
4517            #[allow(dead_code, unreachable_patterns)]
4518            fn _type_assertion(
4519                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4520            ) {
4521                match _t {
4522                    alloy_sol_types::private::AssertTypeEq::<
4523                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4524                    >(_) => {}
4525                }
4526            }
4527            #[automatically_derived]
4528            #[doc(hidden)]
4529            impl ::core::convert::From<addNodeCall> for UnderlyingRustTuple<'_> {
4530                fn from(value: addNodeCall) -> Self {
4531                    (value.nodeAddress,)
4532                }
4533            }
4534            #[automatically_derived]
4535            #[doc(hidden)]
4536            impl ::core::convert::From<UnderlyingRustTuple<'_>> for addNodeCall {
4537                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4538                    Self { nodeAddress: tuple.0 }
4539                }
4540            }
4541        }
4542        {
4543            #[doc(hidden)]
4544            type UnderlyingSolTuple<'a> = ();
4545            #[doc(hidden)]
4546            type UnderlyingRustTuple<'a> = ();
4547            #[cfg(test)]
4548            #[allow(dead_code, unreachable_patterns)]
4549            fn _type_assertion(
4550                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4551            ) {
4552                match _t {
4553                    alloy_sol_types::private::AssertTypeEq::<
4554                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4555                    >(_) => {}
4556                }
4557            }
4558            #[automatically_derived]
4559            #[doc(hidden)]
4560            impl ::core::convert::From<addNodeReturn> for UnderlyingRustTuple<'_> {
4561                fn from(value: addNodeReturn) -> Self {
4562                    ()
4563                }
4564            }
4565            #[automatically_derived]
4566            #[doc(hidden)]
4567            impl ::core::convert::From<UnderlyingRustTuple<'_>> for addNodeReturn {
4568                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4569                    Self {}
4570                }
4571            }
4572        }
4573        impl addNodeReturn {
4574            fn _tokenize(
4575                &self,
4576            ) -> <addNodeCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4577                ()
4578            }
4579        }
4580        #[automatically_derived]
4581        impl alloy_sol_types::SolCall for addNodeCall {
4582            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
4583            type Token<'a> = <Self::Parameters<
4584                'a,
4585            > as alloy_sol_types::SolType>::Token<'a>;
4586            type Return = addNodeReturn;
4587            type ReturnTuple<'a> = ();
4588            type ReturnToken<'a> = <Self::ReturnTuple<
4589                'a,
4590            > as alloy_sol_types::SolType>::Token<'a>;
4591            const SIGNATURE: &'static str = "addNode(address)";
4592            const SELECTOR: [u8; 4] = [157u8, 149u8, 241u8, 204u8];
4593            #[inline]
4594            fn new<'a>(
4595                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4596            ) -> Self {
4597                tuple.into()
4598            }
4599            #[inline]
4600            fn tokenize(&self) -> Self::Token<'_> {
4601                (
4602                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4603                        &self.nodeAddress,
4604                    ),
4605                )
4606            }
4607            #[inline]
4608            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4609                addNodeReturn::_tokenize(ret)
4610            }
4611            #[inline]
4612            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4613                <Self::ReturnTuple<
4614                    '_,
4615                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4616                    .map(Into::into)
4617            }
4618            #[inline]
4619            fn abi_decode_returns_validate(
4620                data: &[u8],
4621            ) -> alloy_sol_types::Result<Self::Return> {
4622                <Self::ReturnTuple<
4623                    '_,
4624                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4625                    .map(Into::into)
4626            }
4627        }
4628    };
4629    #[derive(serde::Serialize, serde::Deserialize)]
4630    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4631    /**Function with signature `decodeFunctionSigsAndPermissions(bytes32,uint256)` and selector `0x60976c4b`.
4632```solidity
4633function decodeFunctionSigsAndPermissions(bytes32 encoded, uint256 length) external pure returns (bytes4[] memory functionSigs, GranularPermission[] memory permissions);
4634```*/
4635    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4636    #[derive(Clone)]
4637    pub struct decodeFunctionSigsAndPermissionsCall {
4638        #[allow(missing_docs)]
4639        pub encoded: alloy::sol_types::private::FixedBytes<32>,
4640        #[allow(missing_docs)]
4641        pub length: alloy::sol_types::private::primitives::aliases::U256,
4642    }
4643    #[derive(serde::Serialize, serde::Deserialize)]
4644    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4645    ///Container type for the return parameters of the [`decodeFunctionSigsAndPermissions(bytes32,uint256)`](decodeFunctionSigsAndPermissionsCall) function.
4646    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4647    #[derive(Clone)]
4648    pub struct decodeFunctionSigsAndPermissionsReturn {
4649        #[allow(missing_docs)]
4650        pub functionSigs: alloy::sol_types::private::Vec<
4651            alloy::sol_types::private::FixedBytes<4>,
4652        >,
4653        #[allow(missing_docs)]
4654        pub permissions: alloy::sol_types::private::Vec<
4655            <GranularPermission as alloy::sol_types::SolType>::RustType,
4656        >,
4657    }
4658    #[allow(
4659        non_camel_case_types,
4660        non_snake_case,
4661        clippy::pub_underscore_fields,
4662        clippy::style
4663    )]
4664    const _: () = {
4665        use alloy::sol_types as alloy_sol_types;
4666        {
4667            #[doc(hidden)]
4668            type UnderlyingSolTuple<'a> = (
4669                alloy::sol_types::sol_data::FixedBytes<32>,
4670                alloy::sol_types::sol_data::Uint<256>,
4671            );
4672            #[doc(hidden)]
4673            type UnderlyingRustTuple<'a> = (
4674                alloy::sol_types::private::FixedBytes<32>,
4675                alloy::sol_types::private::primitives::aliases::U256,
4676            );
4677            #[cfg(test)]
4678            #[allow(dead_code, unreachable_patterns)]
4679            fn _type_assertion(
4680                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4681            ) {
4682                match _t {
4683                    alloy_sol_types::private::AssertTypeEq::<
4684                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4685                    >(_) => {}
4686                }
4687            }
4688            #[automatically_derived]
4689            #[doc(hidden)]
4690            impl ::core::convert::From<decodeFunctionSigsAndPermissionsCall>
4691            for UnderlyingRustTuple<'_> {
4692                fn from(value: decodeFunctionSigsAndPermissionsCall) -> Self {
4693                    (value.encoded, value.length)
4694                }
4695            }
4696            #[automatically_derived]
4697            #[doc(hidden)]
4698            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4699            for decodeFunctionSigsAndPermissionsCall {
4700                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4701                    Self {
4702                        encoded: tuple.0,
4703                        length: tuple.1,
4704                    }
4705                }
4706            }
4707        }
4708        {
4709            #[doc(hidden)]
4710            type UnderlyingSolTuple<'a> = (
4711                alloy::sol_types::sol_data::Array<
4712                    alloy::sol_types::sol_data::FixedBytes<4>,
4713                >,
4714                alloy::sol_types::sol_data::Array<GranularPermission>,
4715            );
4716            #[doc(hidden)]
4717            type UnderlyingRustTuple<'a> = (
4718                alloy::sol_types::private::Vec<alloy::sol_types::private::FixedBytes<4>>,
4719                alloy::sol_types::private::Vec<
4720                    <GranularPermission as alloy::sol_types::SolType>::RustType,
4721                >,
4722            );
4723            #[cfg(test)]
4724            #[allow(dead_code, unreachable_patterns)]
4725            fn _type_assertion(
4726                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4727            ) {
4728                match _t {
4729                    alloy_sol_types::private::AssertTypeEq::<
4730                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4731                    >(_) => {}
4732                }
4733            }
4734            #[automatically_derived]
4735            #[doc(hidden)]
4736            impl ::core::convert::From<decodeFunctionSigsAndPermissionsReturn>
4737            for UnderlyingRustTuple<'_> {
4738                fn from(value: decodeFunctionSigsAndPermissionsReturn) -> Self {
4739                    (value.functionSigs, value.permissions)
4740                }
4741            }
4742            #[automatically_derived]
4743            #[doc(hidden)]
4744            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4745            for decodeFunctionSigsAndPermissionsReturn {
4746                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4747                    Self {
4748                        functionSigs: tuple.0,
4749                        permissions: tuple.1,
4750                    }
4751                }
4752            }
4753        }
4754        impl decodeFunctionSigsAndPermissionsReturn {
4755            fn _tokenize(
4756                &self,
4757            ) -> <decodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::ReturnToken<
4758                '_,
4759            > {
4760                (
4761                    <alloy::sol_types::sol_data::Array<
4762                        alloy::sol_types::sol_data::FixedBytes<4>,
4763                    > as alloy_sol_types::SolType>::tokenize(&self.functionSigs),
4764                    <alloy::sol_types::sol_data::Array<
4765                        GranularPermission,
4766                    > as alloy_sol_types::SolType>::tokenize(&self.permissions),
4767                )
4768            }
4769        }
4770        #[automatically_derived]
4771        impl alloy_sol_types::SolCall for decodeFunctionSigsAndPermissionsCall {
4772            type Parameters<'a> = (
4773                alloy::sol_types::sol_data::FixedBytes<32>,
4774                alloy::sol_types::sol_data::Uint<256>,
4775            );
4776            type Token<'a> = <Self::Parameters<
4777                'a,
4778            > as alloy_sol_types::SolType>::Token<'a>;
4779            type Return = decodeFunctionSigsAndPermissionsReturn;
4780            type ReturnTuple<'a> = (
4781                alloy::sol_types::sol_data::Array<
4782                    alloy::sol_types::sol_data::FixedBytes<4>,
4783                >,
4784                alloy::sol_types::sol_data::Array<GranularPermission>,
4785            );
4786            type ReturnToken<'a> = <Self::ReturnTuple<
4787                'a,
4788            > as alloy_sol_types::SolType>::Token<'a>;
4789            const SIGNATURE: &'static str = "decodeFunctionSigsAndPermissions(bytes32,uint256)";
4790            const SELECTOR: [u8; 4] = [96u8, 151u8, 108u8, 75u8];
4791            #[inline]
4792            fn new<'a>(
4793                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4794            ) -> Self {
4795                tuple.into()
4796            }
4797            #[inline]
4798            fn tokenize(&self) -> Self::Token<'_> {
4799                (
4800                    <alloy::sol_types::sol_data::FixedBytes<
4801                        32,
4802                    > as alloy_sol_types::SolType>::tokenize(&self.encoded),
4803                    <alloy::sol_types::sol_data::Uint<
4804                        256,
4805                    > as alloy_sol_types::SolType>::tokenize(&self.length),
4806                )
4807            }
4808            #[inline]
4809            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4810                decodeFunctionSigsAndPermissionsReturn::_tokenize(ret)
4811            }
4812            #[inline]
4813            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4814                <Self::ReturnTuple<
4815                    '_,
4816                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4817                    .map(Into::into)
4818            }
4819            #[inline]
4820            fn abi_decode_returns_validate(
4821                data: &[u8],
4822            ) -> alloy_sol_types::Result<Self::Return> {
4823                <Self::ReturnTuple<
4824                    '_,
4825                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4826                    .map(Into::into)
4827            }
4828        }
4829    };
4830    #[derive(serde::Serialize, serde::Deserialize)]
4831    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4832    /**Function with signature `encodeFunctionSigsAndPermissions(bytes4[],uint8[])` and selector `0x56f55117`.
4833```solidity
4834function encodeFunctionSigsAndPermissions(bytes4[] memory functionSigs, GranularPermission[] memory permissions) external pure returns (bytes32 encoded, uint256 length);
4835```*/
4836    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4837    #[derive(Clone)]
4838    pub struct encodeFunctionSigsAndPermissionsCall {
4839        #[allow(missing_docs)]
4840        pub functionSigs: alloy::sol_types::private::Vec<
4841            alloy::sol_types::private::FixedBytes<4>,
4842        >,
4843        #[allow(missing_docs)]
4844        pub permissions: alloy::sol_types::private::Vec<
4845            <GranularPermission as alloy::sol_types::SolType>::RustType,
4846        >,
4847    }
4848    #[derive(serde::Serialize, serde::Deserialize)]
4849    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4850    ///Container type for the return parameters of the [`encodeFunctionSigsAndPermissions(bytes4[],uint8[])`](encodeFunctionSigsAndPermissionsCall) function.
4851    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4852    #[derive(Clone)]
4853    pub struct encodeFunctionSigsAndPermissionsReturn {
4854        #[allow(missing_docs)]
4855        pub encoded: alloy::sol_types::private::FixedBytes<32>,
4856        #[allow(missing_docs)]
4857        pub length: alloy::sol_types::private::primitives::aliases::U256,
4858    }
4859    #[allow(
4860        non_camel_case_types,
4861        non_snake_case,
4862        clippy::pub_underscore_fields,
4863        clippy::style
4864    )]
4865    const _: () = {
4866        use alloy::sol_types as alloy_sol_types;
4867        {
4868            #[doc(hidden)]
4869            type UnderlyingSolTuple<'a> = (
4870                alloy::sol_types::sol_data::Array<
4871                    alloy::sol_types::sol_data::FixedBytes<4>,
4872                >,
4873                alloy::sol_types::sol_data::Array<GranularPermission>,
4874            );
4875            #[doc(hidden)]
4876            type UnderlyingRustTuple<'a> = (
4877                alloy::sol_types::private::Vec<alloy::sol_types::private::FixedBytes<4>>,
4878                alloy::sol_types::private::Vec<
4879                    <GranularPermission as alloy::sol_types::SolType>::RustType,
4880                >,
4881            );
4882            #[cfg(test)]
4883            #[allow(dead_code, unreachable_patterns)]
4884            fn _type_assertion(
4885                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4886            ) {
4887                match _t {
4888                    alloy_sol_types::private::AssertTypeEq::<
4889                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4890                    >(_) => {}
4891                }
4892            }
4893            #[automatically_derived]
4894            #[doc(hidden)]
4895            impl ::core::convert::From<encodeFunctionSigsAndPermissionsCall>
4896            for UnderlyingRustTuple<'_> {
4897                fn from(value: encodeFunctionSigsAndPermissionsCall) -> Self {
4898                    (value.functionSigs, value.permissions)
4899                }
4900            }
4901            #[automatically_derived]
4902            #[doc(hidden)]
4903            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4904            for encodeFunctionSigsAndPermissionsCall {
4905                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4906                    Self {
4907                        functionSigs: tuple.0,
4908                        permissions: tuple.1,
4909                    }
4910                }
4911            }
4912        }
4913        {
4914            #[doc(hidden)]
4915            type UnderlyingSolTuple<'a> = (
4916                alloy::sol_types::sol_data::FixedBytes<32>,
4917                alloy::sol_types::sol_data::Uint<256>,
4918            );
4919            #[doc(hidden)]
4920            type UnderlyingRustTuple<'a> = (
4921                alloy::sol_types::private::FixedBytes<32>,
4922                alloy::sol_types::private::primitives::aliases::U256,
4923            );
4924            #[cfg(test)]
4925            #[allow(dead_code, unreachable_patterns)]
4926            fn _type_assertion(
4927                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4928            ) {
4929                match _t {
4930                    alloy_sol_types::private::AssertTypeEq::<
4931                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4932                    >(_) => {}
4933                }
4934            }
4935            #[automatically_derived]
4936            #[doc(hidden)]
4937            impl ::core::convert::From<encodeFunctionSigsAndPermissionsReturn>
4938            for UnderlyingRustTuple<'_> {
4939                fn from(value: encodeFunctionSigsAndPermissionsReturn) -> Self {
4940                    (value.encoded, value.length)
4941                }
4942            }
4943            #[automatically_derived]
4944            #[doc(hidden)]
4945            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4946            for encodeFunctionSigsAndPermissionsReturn {
4947                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4948                    Self {
4949                        encoded: tuple.0,
4950                        length: tuple.1,
4951                    }
4952                }
4953            }
4954        }
4955        impl encodeFunctionSigsAndPermissionsReturn {
4956            fn _tokenize(
4957                &self,
4958            ) -> <encodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::ReturnToken<
4959                '_,
4960            > {
4961                (
4962                    <alloy::sol_types::sol_data::FixedBytes<
4963                        32,
4964                    > as alloy_sol_types::SolType>::tokenize(&self.encoded),
4965                    <alloy::sol_types::sol_data::Uint<
4966                        256,
4967                    > as alloy_sol_types::SolType>::tokenize(&self.length),
4968                )
4969            }
4970        }
4971        #[automatically_derived]
4972        impl alloy_sol_types::SolCall for encodeFunctionSigsAndPermissionsCall {
4973            type Parameters<'a> = (
4974                alloy::sol_types::sol_data::Array<
4975                    alloy::sol_types::sol_data::FixedBytes<4>,
4976                >,
4977                alloy::sol_types::sol_data::Array<GranularPermission>,
4978            );
4979            type Token<'a> = <Self::Parameters<
4980                'a,
4981            > as alloy_sol_types::SolType>::Token<'a>;
4982            type Return = encodeFunctionSigsAndPermissionsReturn;
4983            type ReturnTuple<'a> = (
4984                alloy::sol_types::sol_data::FixedBytes<32>,
4985                alloy::sol_types::sol_data::Uint<256>,
4986            );
4987            type ReturnToken<'a> = <Self::ReturnTuple<
4988                'a,
4989            > as alloy_sol_types::SolType>::Token<'a>;
4990            const SIGNATURE: &'static str = "encodeFunctionSigsAndPermissions(bytes4[],uint8[])";
4991            const SELECTOR: [u8; 4] = [86u8, 245u8, 81u8, 23u8];
4992            #[inline]
4993            fn new<'a>(
4994                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4995            ) -> Self {
4996                tuple.into()
4997            }
4998            #[inline]
4999            fn tokenize(&self) -> Self::Token<'_> {
5000                (
5001                    <alloy::sol_types::sol_data::Array<
5002                        alloy::sol_types::sol_data::FixedBytes<4>,
5003                    > as alloy_sol_types::SolType>::tokenize(&self.functionSigs),
5004                    <alloy::sol_types::sol_data::Array<
5005                        GranularPermission,
5006                    > as alloy_sol_types::SolType>::tokenize(&self.permissions),
5007                )
5008            }
5009            #[inline]
5010            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5011                encodeFunctionSigsAndPermissionsReturn::_tokenize(ret)
5012            }
5013            #[inline]
5014            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5015                <Self::ReturnTuple<
5016                    '_,
5017                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5018                    .map(Into::into)
5019            }
5020            #[inline]
5021            fn abi_decode_returns_validate(
5022                data: &[u8],
5023            ) -> alloy_sol_types::Result<Self::Return> {
5024                <Self::ReturnTuple<
5025                    '_,
5026                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5027                    .map(Into::into)
5028            }
5029        }
5030    };
5031    #[derive(serde::Serialize, serde::Deserialize)]
5032    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5033    /**Function with signature `execTransactionFromModule(address,uint256,bytes,uint8)` and selector `0x468721a7`.
5034```solidity
5035function execTransactionFromModule(address to, uint256 value, bytes memory data, Enum.Operation operation) external returns (bool success);
5036```*/
5037    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5038    #[derive(Clone)]
5039    pub struct execTransactionFromModuleCall {
5040        #[allow(missing_docs)]
5041        pub to: alloy::sol_types::private::Address,
5042        #[allow(missing_docs)]
5043        pub value: alloy::sol_types::private::primitives::aliases::U256,
5044        #[allow(missing_docs)]
5045        pub data: alloy::sol_types::private::Bytes,
5046        #[allow(missing_docs)]
5047        pub operation: <Enum::Operation as alloy::sol_types::SolType>::RustType,
5048    }
5049    #[derive(serde::Serialize, serde::Deserialize)]
5050    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5051    ///Container type for the return parameters of the [`execTransactionFromModule(address,uint256,bytes,uint8)`](execTransactionFromModuleCall) function.
5052    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5053    #[derive(Clone)]
5054    pub struct execTransactionFromModuleReturn {
5055        #[allow(missing_docs)]
5056        pub success: bool,
5057    }
5058    #[allow(
5059        non_camel_case_types,
5060        non_snake_case,
5061        clippy::pub_underscore_fields,
5062        clippy::style
5063    )]
5064    const _: () = {
5065        use alloy::sol_types as alloy_sol_types;
5066        {
5067            #[doc(hidden)]
5068            type UnderlyingSolTuple<'a> = (
5069                alloy::sol_types::sol_data::Address,
5070                alloy::sol_types::sol_data::Uint<256>,
5071                alloy::sol_types::sol_data::Bytes,
5072                Enum::Operation,
5073            );
5074            #[doc(hidden)]
5075            type UnderlyingRustTuple<'a> = (
5076                alloy::sol_types::private::Address,
5077                alloy::sol_types::private::primitives::aliases::U256,
5078                alloy::sol_types::private::Bytes,
5079                <Enum::Operation as alloy::sol_types::SolType>::RustType,
5080            );
5081            #[cfg(test)]
5082            #[allow(dead_code, unreachable_patterns)]
5083            fn _type_assertion(
5084                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5085            ) {
5086                match _t {
5087                    alloy_sol_types::private::AssertTypeEq::<
5088                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5089                    >(_) => {}
5090                }
5091            }
5092            #[automatically_derived]
5093            #[doc(hidden)]
5094            impl ::core::convert::From<execTransactionFromModuleCall>
5095            for UnderlyingRustTuple<'_> {
5096                fn from(value: execTransactionFromModuleCall) -> Self {
5097                    (value.to, value.value, value.data, value.operation)
5098                }
5099            }
5100            #[automatically_derived]
5101            #[doc(hidden)]
5102            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5103            for execTransactionFromModuleCall {
5104                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5105                    Self {
5106                        to: tuple.0,
5107                        value: tuple.1,
5108                        data: tuple.2,
5109                        operation: tuple.3,
5110                    }
5111                }
5112            }
5113        }
5114        {
5115            #[doc(hidden)]
5116            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
5117            #[doc(hidden)]
5118            type UnderlyingRustTuple<'a> = (bool,);
5119            #[cfg(test)]
5120            #[allow(dead_code, unreachable_patterns)]
5121            fn _type_assertion(
5122                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5123            ) {
5124                match _t {
5125                    alloy_sol_types::private::AssertTypeEq::<
5126                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5127                    >(_) => {}
5128                }
5129            }
5130            #[automatically_derived]
5131            #[doc(hidden)]
5132            impl ::core::convert::From<execTransactionFromModuleReturn>
5133            for UnderlyingRustTuple<'_> {
5134                fn from(value: execTransactionFromModuleReturn) -> Self {
5135                    (value.success,)
5136                }
5137            }
5138            #[automatically_derived]
5139            #[doc(hidden)]
5140            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5141            for execTransactionFromModuleReturn {
5142                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5143                    Self { success: tuple.0 }
5144                }
5145            }
5146        }
5147        #[automatically_derived]
5148        impl alloy_sol_types::SolCall for execTransactionFromModuleCall {
5149            type Parameters<'a> = (
5150                alloy::sol_types::sol_data::Address,
5151                alloy::sol_types::sol_data::Uint<256>,
5152                alloy::sol_types::sol_data::Bytes,
5153                Enum::Operation,
5154            );
5155            type Token<'a> = <Self::Parameters<
5156                'a,
5157            > as alloy_sol_types::SolType>::Token<'a>;
5158            type Return = bool;
5159            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
5160            type ReturnToken<'a> = <Self::ReturnTuple<
5161                'a,
5162            > as alloy_sol_types::SolType>::Token<'a>;
5163            const SIGNATURE: &'static str = "execTransactionFromModule(address,uint256,bytes,uint8)";
5164            const SELECTOR: [u8; 4] = [70u8, 135u8, 33u8, 167u8];
5165            #[inline]
5166            fn new<'a>(
5167                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5168            ) -> Self {
5169                tuple.into()
5170            }
5171            #[inline]
5172            fn tokenize(&self) -> Self::Token<'_> {
5173                (
5174                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5175                        &self.to,
5176                    ),
5177                    <alloy::sol_types::sol_data::Uint<
5178                        256,
5179                    > as alloy_sol_types::SolType>::tokenize(&self.value),
5180                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5181                        &self.data,
5182                    ),
5183                    <Enum::Operation as alloy_sol_types::SolType>::tokenize(
5184                        &self.operation,
5185                    ),
5186                )
5187            }
5188            #[inline]
5189            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5190                (
5191                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
5192                        ret,
5193                    ),
5194                )
5195            }
5196            #[inline]
5197            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5198                <Self::ReturnTuple<
5199                    '_,
5200                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5201                    .map(|r| {
5202                        let r: execTransactionFromModuleReturn = r.into();
5203                        r.success
5204                    })
5205            }
5206            #[inline]
5207            fn abi_decode_returns_validate(
5208                data: &[u8],
5209            ) -> alloy_sol_types::Result<Self::Return> {
5210                <Self::ReturnTuple<
5211                    '_,
5212                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5213                    .map(|r| {
5214                        let r: execTransactionFromModuleReturn = r.into();
5215                        r.success
5216                    })
5217            }
5218        }
5219    };
5220    #[derive(serde::Serialize, serde::Deserialize)]
5221    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5222    /**Function with signature `execTransactionFromModuleReturnData(address,uint256,bytes,uint8)` and selector `0x5229073f`.
5223```solidity
5224function execTransactionFromModuleReturnData(address to, uint256 value, bytes memory data, Enum.Operation operation) external returns (bool, bytes memory);
5225```*/
5226    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5227    #[derive(Clone)]
5228    pub struct execTransactionFromModuleReturnDataCall {
5229        #[allow(missing_docs)]
5230        pub to: alloy::sol_types::private::Address,
5231        #[allow(missing_docs)]
5232        pub value: alloy::sol_types::private::primitives::aliases::U256,
5233        #[allow(missing_docs)]
5234        pub data: alloy::sol_types::private::Bytes,
5235        #[allow(missing_docs)]
5236        pub operation: <Enum::Operation as alloy::sol_types::SolType>::RustType,
5237    }
5238    #[derive(serde::Serialize, serde::Deserialize)]
5239    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5240    ///Container type for the return parameters of the [`execTransactionFromModuleReturnData(address,uint256,bytes,uint8)`](execTransactionFromModuleReturnDataCall) function.
5241    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5242    #[derive(Clone)]
5243    pub struct execTransactionFromModuleReturnDataReturn {
5244        #[allow(missing_docs)]
5245        pub _0: bool,
5246        #[allow(missing_docs)]
5247        pub _1: alloy::sol_types::private::Bytes,
5248    }
5249    #[allow(
5250        non_camel_case_types,
5251        non_snake_case,
5252        clippy::pub_underscore_fields,
5253        clippy::style
5254    )]
5255    const _: () = {
5256        use alloy::sol_types as alloy_sol_types;
5257        {
5258            #[doc(hidden)]
5259            type UnderlyingSolTuple<'a> = (
5260                alloy::sol_types::sol_data::Address,
5261                alloy::sol_types::sol_data::Uint<256>,
5262                alloy::sol_types::sol_data::Bytes,
5263                Enum::Operation,
5264            );
5265            #[doc(hidden)]
5266            type UnderlyingRustTuple<'a> = (
5267                alloy::sol_types::private::Address,
5268                alloy::sol_types::private::primitives::aliases::U256,
5269                alloy::sol_types::private::Bytes,
5270                <Enum::Operation as alloy::sol_types::SolType>::RustType,
5271            );
5272            #[cfg(test)]
5273            #[allow(dead_code, unreachable_patterns)]
5274            fn _type_assertion(
5275                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5276            ) {
5277                match _t {
5278                    alloy_sol_types::private::AssertTypeEq::<
5279                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5280                    >(_) => {}
5281                }
5282            }
5283            #[automatically_derived]
5284            #[doc(hidden)]
5285            impl ::core::convert::From<execTransactionFromModuleReturnDataCall>
5286            for UnderlyingRustTuple<'_> {
5287                fn from(value: execTransactionFromModuleReturnDataCall) -> Self {
5288                    (value.to, value.value, value.data, value.operation)
5289                }
5290            }
5291            #[automatically_derived]
5292            #[doc(hidden)]
5293            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5294            for execTransactionFromModuleReturnDataCall {
5295                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5296                    Self {
5297                        to: tuple.0,
5298                        value: tuple.1,
5299                        data: tuple.2,
5300                        operation: tuple.3,
5301                    }
5302                }
5303            }
5304        }
5305        {
5306            #[doc(hidden)]
5307            type UnderlyingSolTuple<'a> = (
5308                alloy::sol_types::sol_data::Bool,
5309                alloy::sol_types::sol_data::Bytes,
5310            );
5311            #[doc(hidden)]
5312            type UnderlyingRustTuple<'a> = (bool, alloy::sol_types::private::Bytes);
5313            #[cfg(test)]
5314            #[allow(dead_code, unreachable_patterns)]
5315            fn _type_assertion(
5316                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5317            ) {
5318                match _t {
5319                    alloy_sol_types::private::AssertTypeEq::<
5320                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5321                    >(_) => {}
5322                }
5323            }
5324            #[automatically_derived]
5325            #[doc(hidden)]
5326            impl ::core::convert::From<execTransactionFromModuleReturnDataReturn>
5327            for UnderlyingRustTuple<'_> {
5328                fn from(value: execTransactionFromModuleReturnDataReturn) -> Self {
5329                    (value._0, value._1)
5330                }
5331            }
5332            #[automatically_derived]
5333            #[doc(hidden)]
5334            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5335            for execTransactionFromModuleReturnDataReturn {
5336                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5337                    Self { _0: tuple.0, _1: tuple.1 }
5338                }
5339            }
5340        }
5341        impl execTransactionFromModuleReturnDataReturn {
5342            fn _tokenize(
5343                &self,
5344            ) -> <execTransactionFromModuleReturnDataCall as alloy_sol_types::SolCall>::ReturnToken<
5345                '_,
5346            > {
5347                (
5348                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
5349                        &self._0,
5350                    ),
5351                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5352                        &self._1,
5353                    ),
5354                )
5355            }
5356        }
5357        #[automatically_derived]
5358        impl alloy_sol_types::SolCall for execTransactionFromModuleReturnDataCall {
5359            type Parameters<'a> = (
5360                alloy::sol_types::sol_data::Address,
5361                alloy::sol_types::sol_data::Uint<256>,
5362                alloy::sol_types::sol_data::Bytes,
5363                Enum::Operation,
5364            );
5365            type Token<'a> = <Self::Parameters<
5366                'a,
5367            > as alloy_sol_types::SolType>::Token<'a>;
5368            type Return = execTransactionFromModuleReturnDataReturn;
5369            type ReturnTuple<'a> = (
5370                alloy::sol_types::sol_data::Bool,
5371                alloy::sol_types::sol_data::Bytes,
5372            );
5373            type ReturnToken<'a> = <Self::ReturnTuple<
5374                'a,
5375            > as alloy_sol_types::SolType>::Token<'a>;
5376            const SIGNATURE: &'static str = "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)";
5377            const SELECTOR: [u8; 4] = [82u8, 41u8, 7u8, 63u8];
5378            #[inline]
5379            fn new<'a>(
5380                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5381            ) -> Self {
5382                tuple.into()
5383            }
5384            #[inline]
5385            fn tokenize(&self) -> Self::Token<'_> {
5386                (
5387                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5388                        &self.to,
5389                    ),
5390                    <alloy::sol_types::sol_data::Uint<
5391                        256,
5392                    > as alloy_sol_types::SolType>::tokenize(&self.value),
5393                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5394                        &self.data,
5395                    ),
5396                    <Enum::Operation as alloy_sol_types::SolType>::tokenize(
5397                        &self.operation,
5398                    ),
5399                )
5400            }
5401            #[inline]
5402            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5403                execTransactionFromModuleReturnDataReturn::_tokenize(ret)
5404            }
5405            #[inline]
5406            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5407                <Self::ReturnTuple<
5408                    '_,
5409                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5410                    .map(Into::into)
5411            }
5412            #[inline]
5413            fn abi_decode_returns_validate(
5414                data: &[u8],
5415            ) -> alloy_sol_types::Result<Self::Return> {
5416                <Self::ReturnTuple<
5417                    '_,
5418                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5419                    .map(Into::into)
5420            }
5421        }
5422    };
5423    #[derive(serde::Serialize, serde::Deserialize)]
5424    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5425    /**Function with signature `getGranularPermissions(bytes32,bytes32)` and selector `0xdc446a4a`.
5426```solidity
5427function getGranularPermissions(bytes32 capabilityKey, bytes32 pairId) external view returns (GranularPermission);
5428```*/
5429    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5430    #[derive(Clone)]
5431    pub struct getGranularPermissionsCall {
5432        #[allow(missing_docs)]
5433        pub capabilityKey: alloy::sol_types::private::FixedBytes<32>,
5434        #[allow(missing_docs)]
5435        pub pairId: alloy::sol_types::private::FixedBytes<32>,
5436    }
5437    #[derive(serde::Serialize, serde::Deserialize)]
5438    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5439    ///Container type for the return parameters of the [`getGranularPermissions(bytes32,bytes32)`](getGranularPermissionsCall) function.
5440    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5441    #[derive(Clone)]
5442    pub struct getGranularPermissionsReturn {
5443        #[allow(missing_docs)]
5444        pub _0: <GranularPermission as alloy::sol_types::SolType>::RustType,
5445    }
5446    #[allow(
5447        non_camel_case_types,
5448        non_snake_case,
5449        clippy::pub_underscore_fields,
5450        clippy::style
5451    )]
5452    const _: () = {
5453        use alloy::sol_types as alloy_sol_types;
5454        {
5455            #[doc(hidden)]
5456            type UnderlyingSolTuple<'a> = (
5457                alloy::sol_types::sol_data::FixedBytes<32>,
5458                alloy::sol_types::sol_data::FixedBytes<32>,
5459            );
5460            #[doc(hidden)]
5461            type UnderlyingRustTuple<'a> = (
5462                alloy::sol_types::private::FixedBytes<32>,
5463                alloy::sol_types::private::FixedBytes<32>,
5464            );
5465            #[cfg(test)]
5466            #[allow(dead_code, unreachable_patterns)]
5467            fn _type_assertion(
5468                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5469            ) {
5470                match _t {
5471                    alloy_sol_types::private::AssertTypeEq::<
5472                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5473                    >(_) => {}
5474                }
5475            }
5476            #[automatically_derived]
5477            #[doc(hidden)]
5478            impl ::core::convert::From<getGranularPermissionsCall>
5479            for UnderlyingRustTuple<'_> {
5480                fn from(value: getGranularPermissionsCall) -> Self {
5481                    (value.capabilityKey, value.pairId)
5482                }
5483            }
5484            #[automatically_derived]
5485            #[doc(hidden)]
5486            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5487            for getGranularPermissionsCall {
5488                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5489                    Self {
5490                        capabilityKey: tuple.0,
5491                        pairId: tuple.1,
5492                    }
5493                }
5494            }
5495        }
5496        {
5497            #[doc(hidden)]
5498            type UnderlyingSolTuple<'a> = (GranularPermission,);
5499            #[doc(hidden)]
5500            type UnderlyingRustTuple<'a> = (
5501                <GranularPermission as alloy::sol_types::SolType>::RustType,
5502            );
5503            #[cfg(test)]
5504            #[allow(dead_code, unreachable_patterns)]
5505            fn _type_assertion(
5506                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5507            ) {
5508                match _t {
5509                    alloy_sol_types::private::AssertTypeEq::<
5510                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5511                    >(_) => {}
5512                }
5513            }
5514            #[automatically_derived]
5515            #[doc(hidden)]
5516            impl ::core::convert::From<getGranularPermissionsReturn>
5517            for UnderlyingRustTuple<'_> {
5518                fn from(value: getGranularPermissionsReturn) -> Self {
5519                    (value._0,)
5520                }
5521            }
5522            #[automatically_derived]
5523            #[doc(hidden)]
5524            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5525            for getGranularPermissionsReturn {
5526                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5527                    Self { _0: tuple.0 }
5528                }
5529            }
5530        }
5531        #[automatically_derived]
5532        impl alloy_sol_types::SolCall for getGranularPermissionsCall {
5533            type Parameters<'a> = (
5534                alloy::sol_types::sol_data::FixedBytes<32>,
5535                alloy::sol_types::sol_data::FixedBytes<32>,
5536            );
5537            type Token<'a> = <Self::Parameters<
5538                'a,
5539            > as alloy_sol_types::SolType>::Token<'a>;
5540            type Return = <GranularPermission as alloy::sol_types::SolType>::RustType;
5541            type ReturnTuple<'a> = (GranularPermission,);
5542            type ReturnToken<'a> = <Self::ReturnTuple<
5543                'a,
5544            > as alloy_sol_types::SolType>::Token<'a>;
5545            const SIGNATURE: &'static str = "getGranularPermissions(bytes32,bytes32)";
5546            const SELECTOR: [u8; 4] = [220u8, 68u8, 106u8, 74u8];
5547            #[inline]
5548            fn new<'a>(
5549                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5550            ) -> Self {
5551                tuple.into()
5552            }
5553            #[inline]
5554            fn tokenize(&self) -> Self::Token<'_> {
5555                (
5556                    <alloy::sol_types::sol_data::FixedBytes<
5557                        32,
5558                    > as alloy_sol_types::SolType>::tokenize(&self.capabilityKey),
5559                    <alloy::sol_types::sol_data::FixedBytes<
5560                        32,
5561                    > as alloy_sol_types::SolType>::tokenize(&self.pairId),
5562                )
5563            }
5564            #[inline]
5565            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5566                (<GranularPermission as alloy_sol_types::SolType>::tokenize(ret),)
5567            }
5568            #[inline]
5569            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5570                <Self::ReturnTuple<
5571                    '_,
5572                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5573                    .map(|r| {
5574                        let r: getGranularPermissionsReturn = r.into();
5575                        r._0
5576                    })
5577            }
5578            #[inline]
5579            fn abi_decode_returns_validate(
5580                data: &[u8],
5581            ) -> alloy_sol_types::Result<Self::Return> {
5582                <Self::ReturnTuple<
5583                    '_,
5584                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5585                    .map(|r| {
5586                        let r: getGranularPermissionsReturn = r.into();
5587                        r._0
5588                    })
5589            }
5590        }
5591    };
5592    #[derive(serde::Serialize, serde::Deserialize)]
5593    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5594    /**Function with signature `getTargets()` and selector `0x63fe3b56`.
5595```solidity
5596function getTargets() external view returns (Target[] memory);
5597```*/
5598    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5599    #[derive(Clone)]
5600    pub struct getTargetsCall;
5601    #[derive(serde::Serialize, serde::Deserialize)]
5602    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5603    ///Container type for the return parameters of the [`getTargets()`](getTargetsCall) function.
5604    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5605    #[derive(Clone)]
5606    pub struct getTargetsReturn {
5607        #[allow(missing_docs)]
5608        pub _0: alloy::sol_types::private::Vec<
5609            <Target as alloy::sol_types::SolType>::RustType,
5610        >,
5611    }
5612    #[allow(
5613        non_camel_case_types,
5614        non_snake_case,
5615        clippy::pub_underscore_fields,
5616        clippy::style
5617    )]
5618    const _: () = {
5619        use alloy::sol_types as alloy_sol_types;
5620        {
5621            #[doc(hidden)]
5622            type UnderlyingSolTuple<'a> = ();
5623            #[doc(hidden)]
5624            type UnderlyingRustTuple<'a> = ();
5625            #[cfg(test)]
5626            #[allow(dead_code, unreachable_patterns)]
5627            fn _type_assertion(
5628                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5629            ) {
5630                match _t {
5631                    alloy_sol_types::private::AssertTypeEq::<
5632                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5633                    >(_) => {}
5634                }
5635            }
5636            #[automatically_derived]
5637            #[doc(hidden)]
5638            impl ::core::convert::From<getTargetsCall> for UnderlyingRustTuple<'_> {
5639                fn from(value: getTargetsCall) -> Self {
5640                    ()
5641                }
5642            }
5643            #[automatically_derived]
5644            #[doc(hidden)]
5645            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getTargetsCall {
5646                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5647                    Self
5648                }
5649            }
5650        }
5651        {
5652            #[doc(hidden)]
5653            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Array<Target>,);
5654            #[doc(hidden)]
5655            type UnderlyingRustTuple<'a> = (
5656                alloy::sol_types::private::Vec<
5657                    <Target as alloy::sol_types::SolType>::RustType,
5658                >,
5659            );
5660            #[cfg(test)]
5661            #[allow(dead_code, unreachable_patterns)]
5662            fn _type_assertion(
5663                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5664            ) {
5665                match _t {
5666                    alloy_sol_types::private::AssertTypeEq::<
5667                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5668                    >(_) => {}
5669                }
5670            }
5671            #[automatically_derived]
5672            #[doc(hidden)]
5673            impl ::core::convert::From<getTargetsReturn> for UnderlyingRustTuple<'_> {
5674                fn from(value: getTargetsReturn) -> Self {
5675                    (value._0,)
5676                }
5677            }
5678            #[automatically_derived]
5679            #[doc(hidden)]
5680            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getTargetsReturn {
5681                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5682                    Self { _0: tuple.0 }
5683                }
5684            }
5685        }
5686        #[automatically_derived]
5687        impl alloy_sol_types::SolCall for getTargetsCall {
5688            type Parameters<'a> = ();
5689            type Token<'a> = <Self::Parameters<
5690                'a,
5691            > as alloy_sol_types::SolType>::Token<'a>;
5692            type Return = alloy::sol_types::private::Vec<
5693                <Target as alloy::sol_types::SolType>::RustType,
5694            >;
5695            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Array<Target>,);
5696            type ReturnToken<'a> = <Self::ReturnTuple<
5697                'a,
5698            > as alloy_sol_types::SolType>::Token<'a>;
5699            const SIGNATURE: &'static str = "getTargets()";
5700            const SELECTOR: [u8; 4] = [99u8, 254u8, 59u8, 86u8];
5701            #[inline]
5702            fn new<'a>(
5703                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5704            ) -> Self {
5705                tuple.into()
5706            }
5707            #[inline]
5708            fn tokenize(&self) -> Self::Token<'_> {
5709                ()
5710            }
5711            #[inline]
5712            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5713                (
5714                    <alloy::sol_types::sol_data::Array<
5715                        Target,
5716                    > as alloy_sol_types::SolType>::tokenize(ret),
5717                )
5718            }
5719            #[inline]
5720            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5721                <Self::ReturnTuple<
5722                    '_,
5723                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5724                    .map(|r| {
5725                        let r: getTargetsReturn = r.into();
5726                        r._0
5727                    })
5728            }
5729            #[inline]
5730            fn abi_decode_returns_validate(
5731                data: &[u8],
5732            ) -> alloy_sol_types::Result<Self::Return> {
5733                <Self::ReturnTuple<
5734                    '_,
5735                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5736                    .map(|r| {
5737                        let r: getTargetsReturn = r.into();
5738                        r._0
5739                    })
5740            }
5741        }
5742    };
5743    #[derive(serde::Serialize, serde::Deserialize)]
5744    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5745    /**Function with signature `includeNode(uint256)` and selector `0xb5736962`.
5746```solidity
5747function includeNode(Target nodeDefaultTarget) external;
5748```*/
5749    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5750    #[derive(Clone)]
5751    pub struct includeNodeCall {
5752        #[allow(missing_docs)]
5753        pub nodeDefaultTarget: <Target as alloy::sol_types::SolType>::RustType,
5754    }
5755    ///Container type for the return parameters of the [`includeNode(uint256)`](includeNodeCall) function.
5756    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5757    #[derive(Clone)]
5758    pub struct includeNodeReturn {}
5759    #[allow(
5760        non_camel_case_types,
5761        non_snake_case,
5762        clippy::pub_underscore_fields,
5763        clippy::style
5764    )]
5765    const _: () = {
5766        use alloy::sol_types as alloy_sol_types;
5767        {
5768            #[doc(hidden)]
5769            type UnderlyingSolTuple<'a> = (Target,);
5770            #[doc(hidden)]
5771            type UnderlyingRustTuple<'a> = (
5772                <Target as alloy::sol_types::SolType>::RustType,
5773            );
5774            #[cfg(test)]
5775            #[allow(dead_code, unreachable_patterns)]
5776            fn _type_assertion(
5777                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5778            ) {
5779                match _t {
5780                    alloy_sol_types::private::AssertTypeEq::<
5781                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5782                    >(_) => {}
5783                }
5784            }
5785            #[automatically_derived]
5786            #[doc(hidden)]
5787            impl ::core::convert::From<includeNodeCall> for UnderlyingRustTuple<'_> {
5788                fn from(value: includeNodeCall) -> Self {
5789                    (value.nodeDefaultTarget,)
5790                }
5791            }
5792            #[automatically_derived]
5793            #[doc(hidden)]
5794            impl ::core::convert::From<UnderlyingRustTuple<'_>> for includeNodeCall {
5795                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5796                    Self { nodeDefaultTarget: tuple.0 }
5797                }
5798            }
5799        }
5800        {
5801            #[doc(hidden)]
5802            type UnderlyingSolTuple<'a> = ();
5803            #[doc(hidden)]
5804            type UnderlyingRustTuple<'a> = ();
5805            #[cfg(test)]
5806            #[allow(dead_code, unreachable_patterns)]
5807            fn _type_assertion(
5808                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5809            ) {
5810                match _t {
5811                    alloy_sol_types::private::AssertTypeEq::<
5812                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5813                    >(_) => {}
5814                }
5815            }
5816            #[automatically_derived]
5817            #[doc(hidden)]
5818            impl ::core::convert::From<includeNodeReturn> for UnderlyingRustTuple<'_> {
5819                fn from(value: includeNodeReturn) -> Self {
5820                    ()
5821                }
5822            }
5823            #[automatically_derived]
5824            #[doc(hidden)]
5825            impl ::core::convert::From<UnderlyingRustTuple<'_>> for includeNodeReturn {
5826                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5827                    Self {}
5828                }
5829            }
5830        }
5831        impl includeNodeReturn {
5832            fn _tokenize(
5833                &self,
5834            ) -> <includeNodeCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
5835                ()
5836            }
5837        }
5838        #[automatically_derived]
5839        impl alloy_sol_types::SolCall for includeNodeCall {
5840            type Parameters<'a> = (Target,);
5841            type Token<'a> = <Self::Parameters<
5842                'a,
5843            > as alloy_sol_types::SolType>::Token<'a>;
5844            type Return = includeNodeReturn;
5845            type ReturnTuple<'a> = ();
5846            type ReturnToken<'a> = <Self::ReturnTuple<
5847                'a,
5848            > as alloy_sol_types::SolType>::Token<'a>;
5849            const SIGNATURE: &'static str = "includeNode(uint256)";
5850            const SELECTOR: [u8; 4] = [181u8, 115u8, 105u8, 98u8];
5851            #[inline]
5852            fn new<'a>(
5853                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5854            ) -> Self {
5855                tuple.into()
5856            }
5857            #[inline]
5858            fn tokenize(&self) -> Self::Token<'_> {
5859                (
5860                    <Target as alloy_sol_types::SolType>::tokenize(
5861                        &self.nodeDefaultTarget,
5862                    ),
5863                )
5864            }
5865            #[inline]
5866            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5867                includeNodeReturn::_tokenize(ret)
5868            }
5869            #[inline]
5870            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5871                <Self::ReturnTuple<
5872                    '_,
5873                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5874                    .map(Into::into)
5875            }
5876            #[inline]
5877            fn abi_decode_returns_validate(
5878                data: &[u8],
5879            ) -> alloy_sol_types::Result<Self::Return> {
5880                <Self::ReturnTuple<
5881                    '_,
5882                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5883                    .map(Into::into)
5884            }
5885        }
5886    };
5887    #[derive(serde::Serialize, serde::Deserialize)]
5888    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5889    /**Function with signature `initialize(bytes)` and selector `0x439fab91`.
5890```solidity
5891function initialize(bytes memory initParams) external;
5892```*/
5893    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5894    #[derive(Clone)]
5895    pub struct initializeCall {
5896        #[allow(missing_docs)]
5897        pub initParams: alloy::sol_types::private::Bytes,
5898    }
5899    ///Container type for the return parameters of the [`initialize(bytes)`](initializeCall) function.
5900    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5901    #[derive(Clone)]
5902    pub struct initializeReturn {}
5903    #[allow(
5904        non_camel_case_types,
5905        non_snake_case,
5906        clippy::pub_underscore_fields,
5907        clippy::style
5908    )]
5909    const _: () = {
5910        use alloy::sol_types as alloy_sol_types;
5911        {
5912            #[doc(hidden)]
5913            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,);
5914            #[doc(hidden)]
5915            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,);
5916            #[cfg(test)]
5917            #[allow(dead_code, unreachable_patterns)]
5918            fn _type_assertion(
5919                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5920            ) {
5921                match _t {
5922                    alloy_sol_types::private::AssertTypeEq::<
5923                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5924                    >(_) => {}
5925                }
5926            }
5927            #[automatically_derived]
5928            #[doc(hidden)]
5929            impl ::core::convert::From<initializeCall> for UnderlyingRustTuple<'_> {
5930                fn from(value: initializeCall) -> Self {
5931                    (value.initParams,)
5932                }
5933            }
5934            #[automatically_derived]
5935            #[doc(hidden)]
5936            impl ::core::convert::From<UnderlyingRustTuple<'_>> for initializeCall {
5937                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5938                    Self { initParams: tuple.0 }
5939                }
5940            }
5941        }
5942        {
5943            #[doc(hidden)]
5944            type UnderlyingSolTuple<'a> = ();
5945            #[doc(hidden)]
5946            type UnderlyingRustTuple<'a> = ();
5947            #[cfg(test)]
5948            #[allow(dead_code, unreachable_patterns)]
5949            fn _type_assertion(
5950                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5951            ) {
5952                match _t {
5953                    alloy_sol_types::private::AssertTypeEq::<
5954                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5955                    >(_) => {}
5956                }
5957            }
5958            #[automatically_derived]
5959            #[doc(hidden)]
5960            impl ::core::convert::From<initializeReturn> for UnderlyingRustTuple<'_> {
5961                fn from(value: initializeReturn) -> Self {
5962                    ()
5963                }
5964            }
5965            #[automatically_derived]
5966            #[doc(hidden)]
5967            impl ::core::convert::From<UnderlyingRustTuple<'_>> for initializeReturn {
5968                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5969                    Self {}
5970                }
5971            }
5972        }
5973        impl initializeReturn {
5974            fn _tokenize(
5975                &self,
5976            ) -> <initializeCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
5977                ()
5978            }
5979        }
5980        #[automatically_derived]
5981        impl alloy_sol_types::SolCall for initializeCall {
5982            type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,);
5983            type Token<'a> = <Self::Parameters<
5984                'a,
5985            > as alloy_sol_types::SolType>::Token<'a>;
5986            type Return = initializeReturn;
5987            type ReturnTuple<'a> = ();
5988            type ReturnToken<'a> = <Self::ReturnTuple<
5989                'a,
5990            > as alloy_sol_types::SolType>::Token<'a>;
5991            const SIGNATURE: &'static str = "initialize(bytes)";
5992            const SELECTOR: [u8; 4] = [67u8, 159u8, 171u8, 145u8];
5993            #[inline]
5994            fn new<'a>(
5995                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5996            ) -> Self {
5997                tuple.into()
5998            }
5999            #[inline]
6000            fn tokenize(&self) -> Self::Token<'_> {
6001                (
6002                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
6003                        &self.initParams,
6004                    ),
6005                )
6006            }
6007            #[inline]
6008            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6009                initializeReturn::_tokenize(ret)
6010            }
6011            #[inline]
6012            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6013                <Self::ReturnTuple<
6014                    '_,
6015                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6016                    .map(Into::into)
6017            }
6018            #[inline]
6019            fn abi_decode_returns_validate(
6020                data: &[u8],
6021            ) -> alloy_sol_types::Result<Self::Return> {
6022                <Self::ReturnTuple<
6023                    '_,
6024                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6025                    .map(Into::into)
6026            }
6027        }
6028    };
6029    #[derive(serde::Serialize, serde::Deserialize)]
6030    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6031    /**Function with signature `isHoprNodeManagementModule()` and selector `0x4a1ba408`.
6032```solidity
6033function isHoprNodeManagementModule() external view returns (bool);
6034```*/
6035    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6036    #[derive(Clone)]
6037    pub struct isHoprNodeManagementModuleCall;
6038    #[derive(serde::Serialize, serde::Deserialize)]
6039    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6040    ///Container type for the return parameters of the [`isHoprNodeManagementModule()`](isHoprNodeManagementModuleCall) function.
6041    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6042    #[derive(Clone)]
6043    pub struct isHoprNodeManagementModuleReturn {
6044        #[allow(missing_docs)]
6045        pub _0: bool,
6046    }
6047    #[allow(
6048        non_camel_case_types,
6049        non_snake_case,
6050        clippy::pub_underscore_fields,
6051        clippy::style
6052    )]
6053    const _: () = {
6054        use alloy::sol_types as alloy_sol_types;
6055        {
6056            #[doc(hidden)]
6057            type UnderlyingSolTuple<'a> = ();
6058            #[doc(hidden)]
6059            type UnderlyingRustTuple<'a> = ();
6060            #[cfg(test)]
6061            #[allow(dead_code, unreachable_patterns)]
6062            fn _type_assertion(
6063                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6064            ) {
6065                match _t {
6066                    alloy_sol_types::private::AssertTypeEq::<
6067                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6068                    >(_) => {}
6069                }
6070            }
6071            #[automatically_derived]
6072            #[doc(hidden)]
6073            impl ::core::convert::From<isHoprNodeManagementModuleCall>
6074            for UnderlyingRustTuple<'_> {
6075                fn from(value: isHoprNodeManagementModuleCall) -> Self {
6076                    ()
6077                }
6078            }
6079            #[automatically_derived]
6080            #[doc(hidden)]
6081            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6082            for isHoprNodeManagementModuleCall {
6083                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6084                    Self
6085                }
6086            }
6087        }
6088        {
6089            #[doc(hidden)]
6090            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
6091            #[doc(hidden)]
6092            type UnderlyingRustTuple<'a> = (bool,);
6093            #[cfg(test)]
6094            #[allow(dead_code, unreachable_patterns)]
6095            fn _type_assertion(
6096                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6097            ) {
6098                match _t {
6099                    alloy_sol_types::private::AssertTypeEq::<
6100                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6101                    >(_) => {}
6102                }
6103            }
6104            #[automatically_derived]
6105            #[doc(hidden)]
6106            impl ::core::convert::From<isHoprNodeManagementModuleReturn>
6107            for UnderlyingRustTuple<'_> {
6108                fn from(value: isHoprNodeManagementModuleReturn) -> Self {
6109                    (value._0,)
6110                }
6111            }
6112            #[automatically_derived]
6113            #[doc(hidden)]
6114            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6115            for isHoprNodeManagementModuleReturn {
6116                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6117                    Self { _0: tuple.0 }
6118                }
6119            }
6120        }
6121        #[automatically_derived]
6122        impl alloy_sol_types::SolCall for isHoprNodeManagementModuleCall {
6123            type Parameters<'a> = ();
6124            type Token<'a> = <Self::Parameters<
6125                'a,
6126            > as alloy_sol_types::SolType>::Token<'a>;
6127            type Return = bool;
6128            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
6129            type ReturnToken<'a> = <Self::ReturnTuple<
6130                'a,
6131            > as alloy_sol_types::SolType>::Token<'a>;
6132            const SIGNATURE: &'static str = "isHoprNodeManagementModule()";
6133            const SELECTOR: [u8; 4] = [74u8, 27u8, 164u8, 8u8];
6134            #[inline]
6135            fn new<'a>(
6136                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6137            ) -> Self {
6138                tuple.into()
6139            }
6140            #[inline]
6141            fn tokenize(&self) -> Self::Token<'_> {
6142                ()
6143            }
6144            #[inline]
6145            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6146                (
6147                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
6148                        ret,
6149                    ),
6150                )
6151            }
6152            #[inline]
6153            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6154                <Self::ReturnTuple<
6155                    '_,
6156                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6157                    .map(|r| {
6158                        let r: isHoprNodeManagementModuleReturn = r.into();
6159                        r._0
6160                    })
6161            }
6162            #[inline]
6163            fn abi_decode_returns_validate(
6164                data: &[u8],
6165            ) -> alloy_sol_types::Result<Self::Return> {
6166                <Self::ReturnTuple<
6167                    '_,
6168                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6169                    .map(|r| {
6170                        let r: isHoprNodeManagementModuleReturn = r.into();
6171                        r._0
6172                    })
6173            }
6174        }
6175    };
6176    #[derive(serde::Serialize, serde::Deserialize)]
6177    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6178    /**Function with signature `isNode(address)` and selector `0x01750152`.
6179```solidity
6180function isNode(address nodeAddress) external view returns (bool);
6181```*/
6182    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6183    #[derive(Clone)]
6184    pub struct isNodeCall {
6185        #[allow(missing_docs)]
6186        pub nodeAddress: alloy::sol_types::private::Address,
6187    }
6188    #[derive(serde::Serialize, serde::Deserialize)]
6189    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6190    ///Container type for the return parameters of the [`isNode(address)`](isNodeCall) function.
6191    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6192    #[derive(Clone)]
6193    pub struct isNodeReturn {
6194        #[allow(missing_docs)]
6195        pub _0: bool,
6196    }
6197    #[allow(
6198        non_camel_case_types,
6199        non_snake_case,
6200        clippy::pub_underscore_fields,
6201        clippy::style
6202    )]
6203    const _: () = {
6204        use alloy::sol_types as alloy_sol_types;
6205        {
6206            #[doc(hidden)]
6207            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
6208            #[doc(hidden)]
6209            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
6210            #[cfg(test)]
6211            #[allow(dead_code, unreachable_patterns)]
6212            fn _type_assertion(
6213                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6214            ) {
6215                match _t {
6216                    alloy_sol_types::private::AssertTypeEq::<
6217                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6218                    >(_) => {}
6219                }
6220            }
6221            #[automatically_derived]
6222            #[doc(hidden)]
6223            impl ::core::convert::From<isNodeCall> for UnderlyingRustTuple<'_> {
6224                fn from(value: isNodeCall) -> Self {
6225                    (value.nodeAddress,)
6226                }
6227            }
6228            #[automatically_derived]
6229            #[doc(hidden)]
6230            impl ::core::convert::From<UnderlyingRustTuple<'_>> for isNodeCall {
6231                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6232                    Self { nodeAddress: tuple.0 }
6233                }
6234            }
6235        }
6236        {
6237            #[doc(hidden)]
6238            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
6239            #[doc(hidden)]
6240            type UnderlyingRustTuple<'a> = (bool,);
6241            #[cfg(test)]
6242            #[allow(dead_code, unreachable_patterns)]
6243            fn _type_assertion(
6244                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6245            ) {
6246                match _t {
6247                    alloy_sol_types::private::AssertTypeEq::<
6248                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6249                    >(_) => {}
6250                }
6251            }
6252            #[automatically_derived]
6253            #[doc(hidden)]
6254            impl ::core::convert::From<isNodeReturn> for UnderlyingRustTuple<'_> {
6255                fn from(value: isNodeReturn) -> Self {
6256                    (value._0,)
6257                }
6258            }
6259            #[automatically_derived]
6260            #[doc(hidden)]
6261            impl ::core::convert::From<UnderlyingRustTuple<'_>> for isNodeReturn {
6262                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6263                    Self { _0: tuple.0 }
6264                }
6265            }
6266        }
6267        #[automatically_derived]
6268        impl alloy_sol_types::SolCall for isNodeCall {
6269            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
6270            type Token<'a> = <Self::Parameters<
6271                'a,
6272            > as alloy_sol_types::SolType>::Token<'a>;
6273            type Return = bool;
6274            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
6275            type ReturnToken<'a> = <Self::ReturnTuple<
6276                'a,
6277            > as alloy_sol_types::SolType>::Token<'a>;
6278            const SIGNATURE: &'static str = "isNode(address)";
6279            const SELECTOR: [u8; 4] = [1u8, 117u8, 1u8, 82u8];
6280            #[inline]
6281            fn new<'a>(
6282                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6283            ) -> Self {
6284                tuple.into()
6285            }
6286            #[inline]
6287            fn tokenize(&self) -> Self::Token<'_> {
6288                (
6289                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6290                        &self.nodeAddress,
6291                    ),
6292                )
6293            }
6294            #[inline]
6295            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6296                (
6297                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
6298                        ret,
6299                    ),
6300                )
6301            }
6302            #[inline]
6303            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6304                <Self::ReturnTuple<
6305                    '_,
6306                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6307                    .map(|r| {
6308                        let r: isNodeReturn = r.into();
6309                        r._0
6310                    })
6311            }
6312            #[inline]
6313            fn abi_decode_returns_validate(
6314                data: &[u8],
6315            ) -> alloy_sol_types::Result<Self::Return> {
6316                <Self::ReturnTuple<
6317                    '_,
6318                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6319                    .map(|r| {
6320                        let r: isNodeReturn = r.into();
6321                        r._0
6322                    })
6323            }
6324        }
6325    };
6326    #[derive(serde::Serialize, serde::Deserialize)]
6327    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6328    /**Function with signature `multisend()` and selector `0x294402cc`.
6329```solidity
6330function multisend() external view returns (address);
6331```*/
6332    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6333    #[derive(Clone)]
6334    pub struct multisendCall;
6335    #[derive(serde::Serialize, serde::Deserialize)]
6336    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6337    ///Container type for the return parameters of the [`multisend()`](multisendCall) function.
6338    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6339    #[derive(Clone)]
6340    pub struct multisendReturn {
6341        #[allow(missing_docs)]
6342        pub _0: alloy::sol_types::private::Address,
6343    }
6344    #[allow(
6345        non_camel_case_types,
6346        non_snake_case,
6347        clippy::pub_underscore_fields,
6348        clippy::style
6349    )]
6350    const _: () = {
6351        use alloy::sol_types as alloy_sol_types;
6352        {
6353            #[doc(hidden)]
6354            type UnderlyingSolTuple<'a> = ();
6355            #[doc(hidden)]
6356            type UnderlyingRustTuple<'a> = ();
6357            #[cfg(test)]
6358            #[allow(dead_code, unreachable_patterns)]
6359            fn _type_assertion(
6360                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6361            ) {
6362                match _t {
6363                    alloy_sol_types::private::AssertTypeEq::<
6364                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6365                    >(_) => {}
6366                }
6367            }
6368            #[automatically_derived]
6369            #[doc(hidden)]
6370            impl ::core::convert::From<multisendCall> for UnderlyingRustTuple<'_> {
6371                fn from(value: multisendCall) -> Self {
6372                    ()
6373                }
6374            }
6375            #[automatically_derived]
6376            #[doc(hidden)]
6377            impl ::core::convert::From<UnderlyingRustTuple<'_>> for multisendCall {
6378                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6379                    Self
6380                }
6381            }
6382        }
6383        {
6384            #[doc(hidden)]
6385            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
6386            #[doc(hidden)]
6387            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
6388            #[cfg(test)]
6389            #[allow(dead_code, unreachable_patterns)]
6390            fn _type_assertion(
6391                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6392            ) {
6393                match _t {
6394                    alloy_sol_types::private::AssertTypeEq::<
6395                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6396                    >(_) => {}
6397                }
6398            }
6399            #[automatically_derived]
6400            #[doc(hidden)]
6401            impl ::core::convert::From<multisendReturn> for UnderlyingRustTuple<'_> {
6402                fn from(value: multisendReturn) -> Self {
6403                    (value._0,)
6404                }
6405            }
6406            #[automatically_derived]
6407            #[doc(hidden)]
6408            impl ::core::convert::From<UnderlyingRustTuple<'_>> for multisendReturn {
6409                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6410                    Self { _0: tuple.0 }
6411                }
6412            }
6413        }
6414        #[automatically_derived]
6415        impl alloy_sol_types::SolCall for multisendCall {
6416            type Parameters<'a> = ();
6417            type Token<'a> = <Self::Parameters<
6418                'a,
6419            > as alloy_sol_types::SolType>::Token<'a>;
6420            type Return = alloy::sol_types::private::Address;
6421            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
6422            type ReturnToken<'a> = <Self::ReturnTuple<
6423                'a,
6424            > as alloy_sol_types::SolType>::Token<'a>;
6425            const SIGNATURE: &'static str = "multisend()";
6426            const SELECTOR: [u8; 4] = [41u8, 68u8, 2u8, 204u8];
6427            #[inline]
6428            fn new<'a>(
6429                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6430            ) -> Self {
6431                tuple.into()
6432            }
6433            #[inline]
6434            fn tokenize(&self) -> Self::Token<'_> {
6435                ()
6436            }
6437            #[inline]
6438            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6439                (
6440                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6441                        ret,
6442                    ),
6443                )
6444            }
6445            #[inline]
6446            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6447                <Self::ReturnTuple<
6448                    '_,
6449                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6450                    .map(|r| {
6451                        let r: multisendReturn = r.into();
6452                        r._0
6453                    })
6454            }
6455            #[inline]
6456            fn abi_decode_returns_validate(
6457                data: &[u8],
6458            ) -> alloy_sol_types::Result<Self::Return> {
6459                <Self::ReturnTuple<
6460                    '_,
6461                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6462                    .map(|r| {
6463                        let r: multisendReturn = r.into();
6464                        r._0
6465                    })
6466            }
6467        }
6468    };
6469    #[derive(serde::Serialize, serde::Deserialize)]
6470    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6471    /**Function with signature `owner()` and selector `0x8da5cb5b`.
6472```solidity
6473function owner() external view returns (address);
6474```*/
6475    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6476    #[derive(Clone)]
6477    pub struct ownerCall;
6478    #[derive(serde::Serialize, serde::Deserialize)]
6479    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6480    ///Container type for the return parameters of the [`owner()`](ownerCall) function.
6481    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6482    #[derive(Clone)]
6483    pub struct ownerReturn {
6484        #[allow(missing_docs)]
6485        pub _0: alloy::sol_types::private::Address,
6486    }
6487    #[allow(
6488        non_camel_case_types,
6489        non_snake_case,
6490        clippy::pub_underscore_fields,
6491        clippy::style
6492    )]
6493    const _: () = {
6494        use alloy::sol_types as alloy_sol_types;
6495        {
6496            #[doc(hidden)]
6497            type UnderlyingSolTuple<'a> = ();
6498            #[doc(hidden)]
6499            type UnderlyingRustTuple<'a> = ();
6500            #[cfg(test)]
6501            #[allow(dead_code, unreachable_patterns)]
6502            fn _type_assertion(
6503                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6504            ) {
6505                match _t {
6506                    alloy_sol_types::private::AssertTypeEq::<
6507                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6508                    >(_) => {}
6509                }
6510            }
6511            #[automatically_derived]
6512            #[doc(hidden)]
6513            impl ::core::convert::From<ownerCall> for UnderlyingRustTuple<'_> {
6514                fn from(value: ownerCall) -> Self {
6515                    ()
6516                }
6517            }
6518            #[automatically_derived]
6519            #[doc(hidden)]
6520            impl ::core::convert::From<UnderlyingRustTuple<'_>> for ownerCall {
6521                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6522                    Self
6523                }
6524            }
6525        }
6526        {
6527            #[doc(hidden)]
6528            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
6529            #[doc(hidden)]
6530            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
6531            #[cfg(test)]
6532            #[allow(dead_code, unreachable_patterns)]
6533            fn _type_assertion(
6534                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6535            ) {
6536                match _t {
6537                    alloy_sol_types::private::AssertTypeEq::<
6538                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6539                    >(_) => {}
6540                }
6541            }
6542            #[automatically_derived]
6543            #[doc(hidden)]
6544            impl ::core::convert::From<ownerReturn> for UnderlyingRustTuple<'_> {
6545                fn from(value: ownerReturn) -> Self {
6546                    (value._0,)
6547                }
6548            }
6549            #[automatically_derived]
6550            #[doc(hidden)]
6551            impl ::core::convert::From<UnderlyingRustTuple<'_>> for ownerReturn {
6552                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6553                    Self { _0: tuple.0 }
6554                }
6555            }
6556        }
6557        #[automatically_derived]
6558        impl alloy_sol_types::SolCall for ownerCall {
6559            type Parameters<'a> = ();
6560            type Token<'a> = <Self::Parameters<
6561                'a,
6562            > as alloy_sol_types::SolType>::Token<'a>;
6563            type Return = alloy::sol_types::private::Address;
6564            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
6565            type ReturnToken<'a> = <Self::ReturnTuple<
6566                'a,
6567            > as alloy_sol_types::SolType>::Token<'a>;
6568            const SIGNATURE: &'static str = "owner()";
6569            const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8];
6570            #[inline]
6571            fn new<'a>(
6572                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6573            ) -> Self {
6574                tuple.into()
6575            }
6576            #[inline]
6577            fn tokenize(&self) -> Self::Token<'_> {
6578                ()
6579            }
6580            #[inline]
6581            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6582                (
6583                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6584                        ret,
6585                    ),
6586                )
6587            }
6588            #[inline]
6589            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6590                <Self::ReturnTuple<
6591                    '_,
6592                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6593                    .map(|r| {
6594                        let r: ownerReturn = r.into();
6595                        r._0
6596                    })
6597            }
6598            #[inline]
6599            fn abi_decode_returns_validate(
6600                data: &[u8],
6601            ) -> alloy_sol_types::Result<Self::Return> {
6602                <Self::ReturnTuple<
6603                    '_,
6604                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6605                    .map(|r| {
6606                        let r: ownerReturn = r.into();
6607                        r._0
6608                    })
6609            }
6610        }
6611    };
6612    #[derive(serde::Serialize, serde::Deserialize)]
6613    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6614    /**Function with signature `proxiableUUID()` and selector `0x52d1902d`.
6615```solidity
6616function proxiableUUID() external view returns (bytes32);
6617```*/
6618    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6619    #[derive(Clone)]
6620    pub struct proxiableUUIDCall;
6621    #[derive(serde::Serialize, serde::Deserialize)]
6622    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6623    ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function.
6624    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6625    #[derive(Clone)]
6626    pub struct proxiableUUIDReturn {
6627        #[allow(missing_docs)]
6628        pub _0: alloy::sol_types::private::FixedBytes<32>,
6629    }
6630    #[allow(
6631        non_camel_case_types,
6632        non_snake_case,
6633        clippy::pub_underscore_fields,
6634        clippy::style
6635    )]
6636    const _: () = {
6637        use alloy::sol_types as alloy_sol_types;
6638        {
6639            #[doc(hidden)]
6640            type UnderlyingSolTuple<'a> = ();
6641            #[doc(hidden)]
6642            type UnderlyingRustTuple<'a> = ();
6643            #[cfg(test)]
6644            #[allow(dead_code, unreachable_patterns)]
6645            fn _type_assertion(
6646                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6647            ) {
6648                match _t {
6649                    alloy_sol_types::private::AssertTypeEq::<
6650                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6651                    >(_) => {}
6652                }
6653            }
6654            #[automatically_derived]
6655            #[doc(hidden)]
6656            impl ::core::convert::From<proxiableUUIDCall> for UnderlyingRustTuple<'_> {
6657                fn from(value: proxiableUUIDCall) -> Self {
6658                    ()
6659                }
6660            }
6661            #[automatically_derived]
6662            #[doc(hidden)]
6663            impl ::core::convert::From<UnderlyingRustTuple<'_>> for proxiableUUIDCall {
6664                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6665                    Self
6666                }
6667            }
6668        }
6669        {
6670            #[doc(hidden)]
6671            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
6672            #[doc(hidden)]
6673            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
6674            #[cfg(test)]
6675            #[allow(dead_code, unreachable_patterns)]
6676            fn _type_assertion(
6677                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6678            ) {
6679                match _t {
6680                    alloy_sol_types::private::AssertTypeEq::<
6681                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6682                    >(_) => {}
6683                }
6684            }
6685            #[automatically_derived]
6686            #[doc(hidden)]
6687            impl ::core::convert::From<proxiableUUIDReturn> for UnderlyingRustTuple<'_> {
6688                fn from(value: proxiableUUIDReturn) -> Self {
6689                    (value._0,)
6690                }
6691            }
6692            #[automatically_derived]
6693            #[doc(hidden)]
6694            impl ::core::convert::From<UnderlyingRustTuple<'_>> for proxiableUUIDReturn {
6695                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6696                    Self { _0: tuple.0 }
6697                }
6698            }
6699        }
6700        #[automatically_derived]
6701        impl alloy_sol_types::SolCall for proxiableUUIDCall {
6702            type Parameters<'a> = ();
6703            type Token<'a> = <Self::Parameters<
6704                'a,
6705            > as alloy_sol_types::SolType>::Token<'a>;
6706            type Return = alloy::sol_types::private::FixedBytes<32>;
6707            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
6708            type ReturnToken<'a> = <Self::ReturnTuple<
6709                'a,
6710            > as alloy_sol_types::SolType>::Token<'a>;
6711            const SIGNATURE: &'static str = "proxiableUUID()";
6712            const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8];
6713            #[inline]
6714            fn new<'a>(
6715                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6716            ) -> Self {
6717                tuple.into()
6718            }
6719            #[inline]
6720            fn tokenize(&self) -> Self::Token<'_> {
6721                ()
6722            }
6723            #[inline]
6724            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6725                (
6726                    <alloy::sol_types::sol_data::FixedBytes<
6727                        32,
6728                    > as alloy_sol_types::SolType>::tokenize(ret),
6729                )
6730            }
6731            #[inline]
6732            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6733                <Self::ReturnTuple<
6734                    '_,
6735                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6736                    .map(|r| {
6737                        let r: proxiableUUIDReturn = r.into();
6738                        r._0
6739                    })
6740            }
6741            #[inline]
6742            fn abi_decode_returns_validate(
6743                data: &[u8],
6744            ) -> alloy_sol_types::Result<Self::Return> {
6745                <Self::ReturnTuple<
6746                    '_,
6747                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6748                    .map(|r| {
6749                        let r: proxiableUUIDReturn = r.into();
6750                        r._0
6751                    })
6752            }
6753        }
6754    };
6755    #[derive(serde::Serialize, serde::Deserialize)]
6756    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6757    /**Function with signature `removeNode(address)` and selector `0xb2b99ec9`.
6758```solidity
6759function removeNode(address nodeAddress) external;
6760```*/
6761    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6762    #[derive(Clone)]
6763    pub struct removeNodeCall {
6764        #[allow(missing_docs)]
6765        pub nodeAddress: alloy::sol_types::private::Address,
6766    }
6767    ///Container type for the return parameters of the [`removeNode(address)`](removeNodeCall) function.
6768    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6769    #[derive(Clone)]
6770    pub struct removeNodeReturn {}
6771    #[allow(
6772        non_camel_case_types,
6773        non_snake_case,
6774        clippy::pub_underscore_fields,
6775        clippy::style
6776    )]
6777    const _: () = {
6778        use alloy::sol_types as alloy_sol_types;
6779        {
6780            #[doc(hidden)]
6781            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
6782            #[doc(hidden)]
6783            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
6784            #[cfg(test)]
6785            #[allow(dead_code, unreachable_patterns)]
6786            fn _type_assertion(
6787                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6788            ) {
6789                match _t {
6790                    alloy_sol_types::private::AssertTypeEq::<
6791                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6792                    >(_) => {}
6793                }
6794            }
6795            #[automatically_derived]
6796            #[doc(hidden)]
6797            impl ::core::convert::From<removeNodeCall> for UnderlyingRustTuple<'_> {
6798                fn from(value: removeNodeCall) -> Self {
6799                    (value.nodeAddress,)
6800                }
6801            }
6802            #[automatically_derived]
6803            #[doc(hidden)]
6804            impl ::core::convert::From<UnderlyingRustTuple<'_>> for removeNodeCall {
6805                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6806                    Self { nodeAddress: tuple.0 }
6807                }
6808            }
6809        }
6810        {
6811            #[doc(hidden)]
6812            type UnderlyingSolTuple<'a> = ();
6813            #[doc(hidden)]
6814            type UnderlyingRustTuple<'a> = ();
6815            #[cfg(test)]
6816            #[allow(dead_code, unreachable_patterns)]
6817            fn _type_assertion(
6818                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6819            ) {
6820                match _t {
6821                    alloy_sol_types::private::AssertTypeEq::<
6822                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6823                    >(_) => {}
6824                }
6825            }
6826            #[automatically_derived]
6827            #[doc(hidden)]
6828            impl ::core::convert::From<removeNodeReturn> for UnderlyingRustTuple<'_> {
6829                fn from(value: removeNodeReturn) -> Self {
6830                    ()
6831                }
6832            }
6833            #[automatically_derived]
6834            #[doc(hidden)]
6835            impl ::core::convert::From<UnderlyingRustTuple<'_>> for removeNodeReturn {
6836                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6837                    Self {}
6838                }
6839            }
6840        }
6841        impl removeNodeReturn {
6842            fn _tokenize(
6843                &self,
6844            ) -> <removeNodeCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
6845                ()
6846            }
6847        }
6848        #[automatically_derived]
6849        impl alloy_sol_types::SolCall for removeNodeCall {
6850            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
6851            type Token<'a> = <Self::Parameters<
6852                'a,
6853            > as alloy_sol_types::SolType>::Token<'a>;
6854            type Return = removeNodeReturn;
6855            type ReturnTuple<'a> = ();
6856            type ReturnToken<'a> = <Self::ReturnTuple<
6857                'a,
6858            > as alloy_sol_types::SolType>::Token<'a>;
6859            const SIGNATURE: &'static str = "removeNode(address)";
6860            const SELECTOR: [u8; 4] = [178u8, 185u8, 158u8, 201u8];
6861            #[inline]
6862            fn new<'a>(
6863                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6864            ) -> Self {
6865                tuple.into()
6866            }
6867            #[inline]
6868            fn tokenize(&self) -> Self::Token<'_> {
6869                (
6870                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6871                        &self.nodeAddress,
6872                    ),
6873                )
6874            }
6875            #[inline]
6876            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6877                removeNodeReturn::_tokenize(ret)
6878            }
6879            #[inline]
6880            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6881                <Self::ReturnTuple<
6882                    '_,
6883                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6884                    .map(Into::into)
6885            }
6886            #[inline]
6887            fn abi_decode_returns_validate(
6888                data: &[u8],
6889            ) -> alloy_sol_types::Result<Self::Return> {
6890                <Self::ReturnTuple<
6891                    '_,
6892                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6893                    .map(Into::into)
6894            }
6895        }
6896    };
6897    #[derive(serde::Serialize, serde::Deserialize)]
6898    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6899    /**Function with signature `renounceOwnership()` and selector `0x715018a6`.
6900```solidity
6901function renounceOwnership() external;
6902```*/
6903    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6904    #[derive(Clone)]
6905    pub struct renounceOwnershipCall;
6906    ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function.
6907    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6908    #[derive(Clone)]
6909    pub struct renounceOwnershipReturn {}
6910    #[allow(
6911        non_camel_case_types,
6912        non_snake_case,
6913        clippy::pub_underscore_fields,
6914        clippy::style
6915    )]
6916    const _: () = {
6917        use alloy::sol_types as alloy_sol_types;
6918        {
6919            #[doc(hidden)]
6920            type UnderlyingSolTuple<'a> = ();
6921            #[doc(hidden)]
6922            type UnderlyingRustTuple<'a> = ();
6923            #[cfg(test)]
6924            #[allow(dead_code, unreachable_patterns)]
6925            fn _type_assertion(
6926                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6927            ) {
6928                match _t {
6929                    alloy_sol_types::private::AssertTypeEq::<
6930                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6931                    >(_) => {}
6932                }
6933            }
6934            #[automatically_derived]
6935            #[doc(hidden)]
6936            impl ::core::convert::From<renounceOwnershipCall>
6937            for UnderlyingRustTuple<'_> {
6938                fn from(value: renounceOwnershipCall) -> Self {
6939                    ()
6940                }
6941            }
6942            #[automatically_derived]
6943            #[doc(hidden)]
6944            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6945            for renounceOwnershipCall {
6946                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6947                    Self
6948                }
6949            }
6950        }
6951        {
6952            #[doc(hidden)]
6953            type UnderlyingSolTuple<'a> = ();
6954            #[doc(hidden)]
6955            type UnderlyingRustTuple<'a> = ();
6956            #[cfg(test)]
6957            #[allow(dead_code, unreachable_patterns)]
6958            fn _type_assertion(
6959                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6960            ) {
6961                match _t {
6962                    alloy_sol_types::private::AssertTypeEq::<
6963                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6964                    >(_) => {}
6965                }
6966            }
6967            #[automatically_derived]
6968            #[doc(hidden)]
6969            impl ::core::convert::From<renounceOwnershipReturn>
6970            for UnderlyingRustTuple<'_> {
6971                fn from(value: renounceOwnershipReturn) -> Self {
6972                    ()
6973                }
6974            }
6975            #[automatically_derived]
6976            #[doc(hidden)]
6977            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6978            for renounceOwnershipReturn {
6979                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6980                    Self {}
6981                }
6982            }
6983        }
6984        impl renounceOwnershipReturn {
6985            fn _tokenize(
6986                &self,
6987            ) -> <renounceOwnershipCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
6988                ()
6989            }
6990        }
6991        #[automatically_derived]
6992        impl alloy_sol_types::SolCall for renounceOwnershipCall {
6993            type Parameters<'a> = ();
6994            type Token<'a> = <Self::Parameters<
6995                'a,
6996            > as alloy_sol_types::SolType>::Token<'a>;
6997            type Return = renounceOwnershipReturn;
6998            type ReturnTuple<'a> = ();
6999            type ReturnToken<'a> = <Self::ReturnTuple<
7000                'a,
7001            > as alloy_sol_types::SolType>::Token<'a>;
7002            const SIGNATURE: &'static str = "renounceOwnership()";
7003            const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8];
7004            #[inline]
7005            fn new<'a>(
7006                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7007            ) -> Self {
7008                tuple.into()
7009            }
7010            #[inline]
7011            fn tokenize(&self) -> Self::Token<'_> {
7012                ()
7013            }
7014            #[inline]
7015            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7016                renounceOwnershipReturn::_tokenize(ret)
7017            }
7018            #[inline]
7019            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7020                <Self::ReturnTuple<
7021                    '_,
7022                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7023                    .map(Into::into)
7024            }
7025            #[inline]
7026            fn abi_decode_returns_validate(
7027                data: &[u8],
7028            ) -> alloy_sol_types::Result<Self::Return> {
7029                <Self::ReturnTuple<
7030                    '_,
7031                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7032                    .map(Into::into)
7033            }
7034        }
7035    };
7036    #[derive(serde::Serialize, serde::Deserialize)]
7037    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7038    /**Function with signature `revokeTarget(address)` and selector `0x3401cde8`.
7039```solidity
7040function revokeTarget(address targetAddress) external;
7041```*/
7042    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7043    #[derive(Clone)]
7044    pub struct revokeTargetCall {
7045        #[allow(missing_docs)]
7046        pub targetAddress: alloy::sol_types::private::Address,
7047    }
7048    ///Container type for the return parameters of the [`revokeTarget(address)`](revokeTargetCall) function.
7049    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7050    #[derive(Clone)]
7051    pub struct revokeTargetReturn {}
7052    #[allow(
7053        non_camel_case_types,
7054        non_snake_case,
7055        clippy::pub_underscore_fields,
7056        clippy::style
7057    )]
7058    const _: () = {
7059        use alloy::sol_types as alloy_sol_types;
7060        {
7061            #[doc(hidden)]
7062            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
7063            #[doc(hidden)]
7064            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
7065            #[cfg(test)]
7066            #[allow(dead_code, unreachable_patterns)]
7067            fn _type_assertion(
7068                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7069            ) {
7070                match _t {
7071                    alloy_sol_types::private::AssertTypeEq::<
7072                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7073                    >(_) => {}
7074                }
7075            }
7076            #[automatically_derived]
7077            #[doc(hidden)]
7078            impl ::core::convert::From<revokeTargetCall> for UnderlyingRustTuple<'_> {
7079                fn from(value: revokeTargetCall) -> Self {
7080                    (value.targetAddress,)
7081                }
7082            }
7083            #[automatically_derived]
7084            #[doc(hidden)]
7085            impl ::core::convert::From<UnderlyingRustTuple<'_>> for revokeTargetCall {
7086                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7087                    Self { targetAddress: tuple.0 }
7088                }
7089            }
7090        }
7091        {
7092            #[doc(hidden)]
7093            type UnderlyingSolTuple<'a> = ();
7094            #[doc(hidden)]
7095            type UnderlyingRustTuple<'a> = ();
7096            #[cfg(test)]
7097            #[allow(dead_code, unreachable_patterns)]
7098            fn _type_assertion(
7099                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7100            ) {
7101                match _t {
7102                    alloy_sol_types::private::AssertTypeEq::<
7103                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7104                    >(_) => {}
7105                }
7106            }
7107            #[automatically_derived]
7108            #[doc(hidden)]
7109            impl ::core::convert::From<revokeTargetReturn> for UnderlyingRustTuple<'_> {
7110                fn from(value: revokeTargetReturn) -> Self {
7111                    ()
7112                }
7113            }
7114            #[automatically_derived]
7115            #[doc(hidden)]
7116            impl ::core::convert::From<UnderlyingRustTuple<'_>> for revokeTargetReturn {
7117                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7118                    Self {}
7119                }
7120            }
7121        }
7122        impl revokeTargetReturn {
7123            fn _tokenize(
7124                &self,
7125            ) -> <revokeTargetCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
7126                ()
7127            }
7128        }
7129        #[automatically_derived]
7130        impl alloy_sol_types::SolCall for revokeTargetCall {
7131            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
7132            type Token<'a> = <Self::Parameters<
7133                'a,
7134            > as alloy_sol_types::SolType>::Token<'a>;
7135            type Return = revokeTargetReturn;
7136            type ReturnTuple<'a> = ();
7137            type ReturnToken<'a> = <Self::ReturnTuple<
7138                'a,
7139            > as alloy_sol_types::SolType>::Token<'a>;
7140            const SIGNATURE: &'static str = "revokeTarget(address)";
7141            const SELECTOR: [u8; 4] = [52u8, 1u8, 205u8, 232u8];
7142            #[inline]
7143            fn new<'a>(
7144                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7145            ) -> Self {
7146                tuple.into()
7147            }
7148            #[inline]
7149            fn tokenize(&self) -> Self::Token<'_> {
7150                (
7151                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7152                        &self.targetAddress,
7153                    ),
7154                )
7155            }
7156            #[inline]
7157            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7158                revokeTargetReturn::_tokenize(ret)
7159            }
7160            #[inline]
7161            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7162                <Self::ReturnTuple<
7163                    '_,
7164                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7165                    .map(Into::into)
7166            }
7167            #[inline]
7168            fn abi_decode_returns_validate(
7169                data: &[u8],
7170            ) -> alloy_sol_types::Result<Self::Return> {
7171                <Self::ReturnTuple<
7172                    '_,
7173                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7174                    .map(Into::into)
7175            }
7176        }
7177    };
7178    #[derive(serde::Serialize, serde::Deserialize)]
7179    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7180    /**Function with signature `scopeChannelsCapabilities(address,bytes32,bytes32)` and selector `0xfa19501d`.
7181```solidity
7182function scopeChannelsCapabilities(address targetAddress, bytes32 channelId, bytes32 encodedSigsPermissions) external;
7183```*/
7184    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7185    #[derive(Clone)]
7186    pub struct scopeChannelsCapabilitiesCall {
7187        #[allow(missing_docs)]
7188        pub targetAddress: alloy::sol_types::private::Address,
7189        #[allow(missing_docs)]
7190        pub channelId: alloy::sol_types::private::FixedBytes<32>,
7191        #[allow(missing_docs)]
7192        pub encodedSigsPermissions: alloy::sol_types::private::FixedBytes<32>,
7193    }
7194    ///Container type for the return parameters of the [`scopeChannelsCapabilities(address,bytes32,bytes32)`](scopeChannelsCapabilitiesCall) function.
7195    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7196    #[derive(Clone)]
7197    pub struct scopeChannelsCapabilitiesReturn {}
7198    #[allow(
7199        non_camel_case_types,
7200        non_snake_case,
7201        clippy::pub_underscore_fields,
7202        clippy::style
7203    )]
7204    const _: () = {
7205        use alloy::sol_types as alloy_sol_types;
7206        {
7207            #[doc(hidden)]
7208            type UnderlyingSolTuple<'a> = (
7209                alloy::sol_types::sol_data::Address,
7210                alloy::sol_types::sol_data::FixedBytes<32>,
7211                alloy::sol_types::sol_data::FixedBytes<32>,
7212            );
7213            #[doc(hidden)]
7214            type UnderlyingRustTuple<'a> = (
7215                alloy::sol_types::private::Address,
7216                alloy::sol_types::private::FixedBytes<32>,
7217                alloy::sol_types::private::FixedBytes<32>,
7218            );
7219            #[cfg(test)]
7220            #[allow(dead_code, unreachable_patterns)]
7221            fn _type_assertion(
7222                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7223            ) {
7224                match _t {
7225                    alloy_sol_types::private::AssertTypeEq::<
7226                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7227                    >(_) => {}
7228                }
7229            }
7230            #[automatically_derived]
7231            #[doc(hidden)]
7232            impl ::core::convert::From<scopeChannelsCapabilitiesCall>
7233            for UnderlyingRustTuple<'_> {
7234                fn from(value: scopeChannelsCapabilitiesCall) -> Self {
7235                    (value.targetAddress, value.channelId, value.encodedSigsPermissions)
7236                }
7237            }
7238            #[automatically_derived]
7239            #[doc(hidden)]
7240            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7241            for scopeChannelsCapabilitiesCall {
7242                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7243                    Self {
7244                        targetAddress: tuple.0,
7245                        channelId: tuple.1,
7246                        encodedSigsPermissions: tuple.2,
7247                    }
7248                }
7249            }
7250        }
7251        {
7252            #[doc(hidden)]
7253            type UnderlyingSolTuple<'a> = ();
7254            #[doc(hidden)]
7255            type UnderlyingRustTuple<'a> = ();
7256            #[cfg(test)]
7257            #[allow(dead_code, unreachable_patterns)]
7258            fn _type_assertion(
7259                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7260            ) {
7261                match _t {
7262                    alloy_sol_types::private::AssertTypeEq::<
7263                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7264                    >(_) => {}
7265                }
7266            }
7267            #[automatically_derived]
7268            #[doc(hidden)]
7269            impl ::core::convert::From<scopeChannelsCapabilitiesReturn>
7270            for UnderlyingRustTuple<'_> {
7271                fn from(value: scopeChannelsCapabilitiesReturn) -> Self {
7272                    ()
7273                }
7274            }
7275            #[automatically_derived]
7276            #[doc(hidden)]
7277            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7278            for scopeChannelsCapabilitiesReturn {
7279                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7280                    Self {}
7281                }
7282            }
7283        }
7284        impl scopeChannelsCapabilitiesReturn {
7285            fn _tokenize(
7286                &self,
7287            ) -> <scopeChannelsCapabilitiesCall as alloy_sol_types::SolCall>::ReturnToken<
7288                '_,
7289            > {
7290                ()
7291            }
7292        }
7293        #[automatically_derived]
7294        impl alloy_sol_types::SolCall for scopeChannelsCapabilitiesCall {
7295            type Parameters<'a> = (
7296                alloy::sol_types::sol_data::Address,
7297                alloy::sol_types::sol_data::FixedBytes<32>,
7298                alloy::sol_types::sol_data::FixedBytes<32>,
7299            );
7300            type Token<'a> = <Self::Parameters<
7301                'a,
7302            > as alloy_sol_types::SolType>::Token<'a>;
7303            type Return = scopeChannelsCapabilitiesReturn;
7304            type ReturnTuple<'a> = ();
7305            type ReturnToken<'a> = <Self::ReturnTuple<
7306                'a,
7307            > as alloy_sol_types::SolType>::Token<'a>;
7308            const SIGNATURE: &'static str = "scopeChannelsCapabilities(address,bytes32,bytes32)";
7309            const SELECTOR: [u8; 4] = [250u8, 25u8, 80u8, 29u8];
7310            #[inline]
7311            fn new<'a>(
7312                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7313            ) -> Self {
7314                tuple.into()
7315            }
7316            #[inline]
7317            fn tokenize(&self) -> Self::Token<'_> {
7318                (
7319                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7320                        &self.targetAddress,
7321                    ),
7322                    <alloy::sol_types::sol_data::FixedBytes<
7323                        32,
7324                    > as alloy_sol_types::SolType>::tokenize(&self.channelId),
7325                    <alloy::sol_types::sol_data::FixedBytes<
7326                        32,
7327                    > as alloy_sol_types::SolType>::tokenize(
7328                        &self.encodedSigsPermissions,
7329                    ),
7330                )
7331            }
7332            #[inline]
7333            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7334                scopeChannelsCapabilitiesReturn::_tokenize(ret)
7335            }
7336            #[inline]
7337            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7338                <Self::ReturnTuple<
7339                    '_,
7340                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7341                    .map(Into::into)
7342            }
7343            #[inline]
7344            fn abi_decode_returns_validate(
7345                data: &[u8],
7346            ) -> alloy_sol_types::Result<Self::Return> {
7347                <Self::ReturnTuple<
7348                    '_,
7349                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7350                    .map(Into::into)
7351            }
7352        }
7353    };
7354    #[derive(serde::Serialize, serde::Deserialize)]
7355    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7356    /**Function with signature `scopeSendCapability(address,address,uint8)` and selector `0xc68c3a83`.
7357```solidity
7358function scopeSendCapability(address nodeAddress, address beneficiary, GranularPermission permission) external;
7359```*/
7360    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7361    #[derive(Clone)]
7362    pub struct scopeSendCapabilityCall {
7363        #[allow(missing_docs)]
7364        pub nodeAddress: alloy::sol_types::private::Address,
7365        #[allow(missing_docs)]
7366        pub beneficiary: alloy::sol_types::private::Address,
7367        #[allow(missing_docs)]
7368        pub permission: <GranularPermission as alloy::sol_types::SolType>::RustType,
7369    }
7370    ///Container type for the return parameters of the [`scopeSendCapability(address,address,uint8)`](scopeSendCapabilityCall) function.
7371    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7372    #[derive(Clone)]
7373    pub struct scopeSendCapabilityReturn {}
7374    #[allow(
7375        non_camel_case_types,
7376        non_snake_case,
7377        clippy::pub_underscore_fields,
7378        clippy::style
7379    )]
7380    const _: () = {
7381        use alloy::sol_types as alloy_sol_types;
7382        {
7383            #[doc(hidden)]
7384            type UnderlyingSolTuple<'a> = (
7385                alloy::sol_types::sol_data::Address,
7386                alloy::sol_types::sol_data::Address,
7387                GranularPermission,
7388            );
7389            #[doc(hidden)]
7390            type UnderlyingRustTuple<'a> = (
7391                alloy::sol_types::private::Address,
7392                alloy::sol_types::private::Address,
7393                <GranularPermission as alloy::sol_types::SolType>::RustType,
7394            );
7395            #[cfg(test)]
7396            #[allow(dead_code, unreachable_patterns)]
7397            fn _type_assertion(
7398                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7399            ) {
7400                match _t {
7401                    alloy_sol_types::private::AssertTypeEq::<
7402                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7403                    >(_) => {}
7404                }
7405            }
7406            #[automatically_derived]
7407            #[doc(hidden)]
7408            impl ::core::convert::From<scopeSendCapabilityCall>
7409            for UnderlyingRustTuple<'_> {
7410                fn from(value: scopeSendCapabilityCall) -> Self {
7411                    (value.nodeAddress, value.beneficiary, value.permission)
7412                }
7413            }
7414            #[automatically_derived]
7415            #[doc(hidden)]
7416            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7417            for scopeSendCapabilityCall {
7418                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7419                    Self {
7420                        nodeAddress: tuple.0,
7421                        beneficiary: tuple.1,
7422                        permission: tuple.2,
7423                    }
7424                }
7425            }
7426        }
7427        {
7428            #[doc(hidden)]
7429            type UnderlyingSolTuple<'a> = ();
7430            #[doc(hidden)]
7431            type UnderlyingRustTuple<'a> = ();
7432            #[cfg(test)]
7433            #[allow(dead_code, unreachable_patterns)]
7434            fn _type_assertion(
7435                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7436            ) {
7437                match _t {
7438                    alloy_sol_types::private::AssertTypeEq::<
7439                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7440                    >(_) => {}
7441                }
7442            }
7443            #[automatically_derived]
7444            #[doc(hidden)]
7445            impl ::core::convert::From<scopeSendCapabilityReturn>
7446            for UnderlyingRustTuple<'_> {
7447                fn from(value: scopeSendCapabilityReturn) -> Self {
7448                    ()
7449                }
7450            }
7451            #[automatically_derived]
7452            #[doc(hidden)]
7453            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7454            for scopeSendCapabilityReturn {
7455                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7456                    Self {}
7457                }
7458            }
7459        }
7460        impl scopeSendCapabilityReturn {
7461            fn _tokenize(
7462                &self,
7463            ) -> <scopeSendCapabilityCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
7464                ()
7465            }
7466        }
7467        #[automatically_derived]
7468        impl alloy_sol_types::SolCall for scopeSendCapabilityCall {
7469            type Parameters<'a> = (
7470                alloy::sol_types::sol_data::Address,
7471                alloy::sol_types::sol_data::Address,
7472                GranularPermission,
7473            );
7474            type Token<'a> = <Self::Parameters<
7475                'a,
7476            > as alloy_sol_types::SolType>::Token<'a>;
7477            type Return = scopeSendCapabilityReturn;
7478            type ReturnTuple<'a> = ();
7479            type ReturnToken<'a> = <Self::ReturnTuple<
7480                'a,
7481            > as alloy_sol_types::SolType>::Token<'a>;
7482            const SIGNATURE: &'static str = "scopeSendCapability(address,address,uint8)";
7483            const SELECTOR: [u8; 4] = [198u8, 140u8, 58u8, 131u8];
7484            #[inline]
7485            fn new<'a>(
7486                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7487            ) -> Self {
7488                tuple.into()
7489            }
7490            #[inline]
7491            fn tokenize(&self) -> Self::Token<'_> {
7492                (
7493                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7494                        &self.nodeAddress,
7495                    ),
7496                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7497                        &self.beneficiary,
7498                    ),
7499                    <GranularPermission as alloy_sol_types::SolType>::tokenize(
7500                        &self.permission,
7501                    ),
7502                )
7503            }
7504            #[inline]
7505            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7506                scopeSendCapabilityReturn::_tokenize(ret)
7507            }
7508            #[inline]
7509            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7510                <Self::ReturnTuple<
7511                    '_,
7512                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7513                    .map(Into::into)
7514            }
7515            #[inline]
7516            fn abi_decode_returns_validate(
7517                data: &[u8],
7518            ) -> alloy_sol_types::Result<Self::Return> {
7519                <Self::ReturnTuple<
7520                    '_,
7521                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7522                    .map(Into::into)
7523            }
7524        }
7525    };
7526    #[derive(serde::Serialize, serde::Deserialize)]
7527    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7528    /**Function with signature `scopeTargetChannels(uint256)` and selector `0x739c4b08`.
7529```solidity
7530function scopeTargetChannels(Target defaultTarget) external;
7531```*/
7532    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7533    #[derive(Clone)]
7534    pub struct scopeTargetChannelsCall {
7535        #[allow(missing_docs)]
7536        pub defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
7537    }
7538    ///Container type for the return parameters of the [`scopeTargetChannels(uint256)`](scopeTargetChannelsCall) function.
7539    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7540    #[derive(Clone)]
7541    pub struct scopeTargetChannelsReturn {}
7542    #[allow(
7543        non_camel_case_types,
7544        non_snake_case,
7545        clippy::pub_underscore_fields,
7546        clippy::style
7547    )]
7548    const _: () = {
7549        use alloy::sol_types as alloy_sol_types;
7550        {
7551            #[doc(hidden)]
7552            type UnderlyingSolTuple<'a> = (Target,);
7553            #[doc(hidden)]
7554            type UnderlyingRustTuple<'a> = (
7555                <Target as alloy::sol_types::SolType>::RustType,
7556            );
7557            #[cfg(test)]
7558            #[allow(dead_code, unreachable_patterns)]
7559            fn _type_assertion(
7560                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7561            ) {
7562                match _t {
7563                    alloy_sol_types::private::AssertTypeEq::<
7564                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7565                    >(_) => {}
7566                }
7567            }
7568            #[automatically_derived]
7569            #[doc(hidden)]
7570            impl ::core::convert::From<scopeTargetChannelsCall>
7571            for UnderlyingRustTuple<'_> {
7572                fn from(value: scopeTargetChannelsCall) -> Self {
7573                    (value.defaultTarget,)
7574                }
7575            }
7576            #[automatically_derived]
7577            #[doc(hidden)]
7578            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7579            for scopeTargetChannelsCall {
7580                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7581                    Self { defaultTarget: tuple.0 }
7582                }
7583            }
7584        }
7585        {
7586            #[doc(hidden)]
7587            type UnderlyingSolTuple<'a> = ();
7588            #[doc(hidden)]
7589            type UnderlyingRustTuple<'a> = ();
7590            #[cfg(test)]
7591            #[allow(dead_code, unreachable_patterns)]
7592            fn _type_assertion(
7593                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7594            ) {
7595                match _t {
7596                    alloy_sol_types::private::AssertTypeEq::<
7597                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7598                    >(_) => {}
7599                }
7600            }
7601            #[automatically_derived]
7602            #[doc(hidden)]
7603            impl ::core::convert::From<scopeTargetChannelsReturn>
7604            for UnderlyingRustTuple<'_> {
7605                fn from(value: scopeTargetChannelsReturn) -> Self {
7606                    ()
7607                }
7608            }
7609            #[automatically_derived]
7610            #[doc(hidden)]
7611            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7612            for scopeTargetChannelsReturn {
7613                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7614                    Self {}
7615                }
7616            }
7617        }
7618        impl scopeTargetChannelsReturn {
7619            fn _tokenize(
7620                &self,
7621            ) -> <scopeTargetChannelsCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
7622                ()
7623            }
7624        }
7625        #[automatically_derived]
7626        impl alloy_sol_types::SolCall for scopeTargetChannelsCall {
7627            type Parameters<'a> = (Target,);
7628            type Token<'a> = <Self::Parameters<
7629                'a,
7630            > as alloy_sol_types::SolType>::Token<'a>;
7631            type Return = scopeTargetChannelsReturn;
7632            type ReturnTuple<'a> = ();
7633            type ReturnToken<'a> = <Self::ReturnTuple<
7634                'a,
7635            > as alloy_sol_types::SolType>::Token<'a>;
7636            const SIGNATURE: &'static str = "scopeTargetChannels(uint256)";
7637            const SELECTOR: [u8; 4] = [115u8, 156u8, 75u8, 8u8];
7638            #[inline]
7639            fn new<'a>(
7640                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7641            ) -> Self {
7642                tuple.into()
7643            }
7644            #[inline]
7645            fn tokenize(&self) -> Self::Token<'_> {
7646                (<Target as alloy_sol_types::SolType>::tokenize(&self.defaultTarget),)
7647            }
7648            #[inline]
7649            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7650                scopeTargetChannelsReturn::_tokenize(ret)
7651            }
7652            #[inline]
7653            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7654                <Self::ReturnTuple<
7655                    '_,
7656                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7657                    .map(Into::into)
7658            }
7659            #[inline]
7660            fn abi_decode_returns_validate(
7661                data: &[u8],
7662            ) -> alloy_sol_types::Result<Self::Return> {
7663                <Self::ReturnTuple<
7664                    '_,
7665                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7666                    .map(Into::into)
7667            }
7668        }
7669    };
7670    #[derive(serde::Serialize, serde::Deserialize)]
7671    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7672    /**Function with signature `scopeTargetSend(uint256)` and selector `0xdc06109d`.
7673```solidity
7674function scopeTargetSend(Target defaultTarget) external;
7675```*/
7676    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7677    #[derive(Clone)]
7678    pub struct scopeTargetSendCall {
7679        #[allow(missing_docs)]
7680        pub defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
7681    }
7682    ///Container type for the return parameters of the [`scopeTargetSend(uint256)`](scopeTargetSendCall) function.
7683    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7684    #[derive(Clone)]
7685    pub struct scopeTargetSendReturn {}
7686    #[allow(
7687        non_camel_case_types,
7688        non_snake_case,
7689        clippy::pub_underscore_fields,
7690        clippy::style
7691    )]
7692    const _: () = {
7693        use alloy::sol_types as alloy_sol_types;
7694        {
7695            #[doc(hidden)]
7696            type UnderlyingSolTuple<'a> = (Target,);
7697            #[doc(hidden)]
7698            type UnderlyingRustTuple<'a> = (
7699                <Target as alloy::sol_types::SolType>::RustType,
7700            );
7701            #[cfg(test)]
7702            #[allow(dead_code, unreachable_patterns)]
7703            fn _type_assertion(
7704                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7705            ) {
7706                match _t {
7707                    alloy_sol_types::private::AssertTypeEq::<
7708                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7709                    >(_) => {}
7710                }
7711            }
7712            #[automatically_derived]
7713            #[doc(hidden)]
7714            impl ::core::convert::From<scopeTargetSendCall> for UnderlyingRustTuple<'_> {
7715                fn from(value: scopeTargetSendCall) -> Self {
7716                    (value.defaultTarget,)
7717                }
7718            }
7719            #[automatically_derived]
7720            #[doc(hidden)]
7721            impl ::core::convert::From<UnderlyingRustTuple<'_>> for scopeTargetSendCall {
7722                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7723                    Self { defaultTarget: tuple.0 }
7724                }
7725            }
7726        }
7727        {
7728            #[doc(hidden)]
7729            type UnderlyingSolTuple<'a> = ();
7730            #[doc(hidden)]
7731            type UnderlyingRustTuple<'a> = ();
7732            #[cfg(test)]
7733            #[allow(dead_code, unreachable_patterns)]
7734            fn _type_assertion(
7735                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7736            ) {
7737                match _t {
7738                    alloy_sol_types::private::AssertTypeEq::<
7739                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7740                    >(_) => {}
7741                }
7742            }
7743            #[automatically_derived]
7744            #[doc(hidden)]
7745            impl ::core::convert::From<scopeTargetSendReturn>
7746            for UnderlyingRustTuple<'_> {
7747                fn from(value: scopeTargetSendReturn) -> Self {
7748                    ()
7749                }
7750            }
7751            #[automatically_derived]
7752            #[doc(hidden)]
7753            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7754            for scopeTargetSendReturn {
7755                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7756                    Self {}
7757                }
7758            }
7759        }
7760        impl scopeTargetSendReturn {
7761            fn _tokenize(
7762                &self,
7763            ) -> <scopeTargetSendCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
7764                ()
7765            }
7766        }
7767        #[automatically_derived]
7768        impl alloy_sol_types::SolCall for scopeTargetSendCall {
7769            type Parameters<'a> = (Target,);
7770            type Token<'a> = <Self::Parameters<
7771                'a,
7772            > as alloy_sol_types::SolType>::Token<'a>;
7773            type Return = scopeTargetSendReturn;
7774            type ReturnTuple<'a> = ();
7775            type ReturnToken<'a> = <Self::ReturnTuple<
7776                'a,
7777            > as alloy_sol_types::SolType>::Token<'a>;
7778            const SIGNATURE: &'static str = "scopeTargetSend(uint256)";
7779            const SELECTOR: [u8; 4] = [220u8, 6u8, 16u8, 157u8];
7780            #[inline]
7781            fn new<'a>(
7782                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7783            ) -> Self {
7784                tuple.into()
7785            }
7786            #[inline]
7787            fn tokenize(&self) -> Self::Token<'_> {
7788                (<Target as alloy_sol_types::SolType>::tokenize(&self.defaultTarget),)
7789            }
7790            #[inline]
7791            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7792                scopeTargetSendReturn::_tokenize(ret)
7793            }
7794            #[inline]
7795            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7796                <Self::ReturnTuple<
7797                    '_,
7798                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7799                    .map(Into::into)
7800            }
7801            #[inline]
7802            fn abi_decode_returns_validate(
7803                data: &[u8],
7804            ) -> alloy_sol_types::Result<Self::Return> {
7805                <Self::ReturnTuple<
7806                    '_,
7807                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7808                    .map(Into::into)
7809            }
7810        }
7811    };
7812    #[derive(serde::Serialize, serde::Deserialize)]
7813    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7814    /**Function with signature `scopeTargetToken(uint256)` and selector `0xa76c9a2f`.
7815```solidity
7816function scopeTargetToken(Target defaultTarget) external;
7817```*/
7818    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7819    #[derive(Clone)]
7820    pub struct scopeTargetTokenCall {
7821        #[allow(missing_docs)]
7822        pub defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
7823    }
7824    ///Container type for the return parameters of the [`scopeTargetToken(uint256)`](scopeTargetTokenCall) function.
7825    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7826    #[derive(Clone)]
7827    pub struct scopeTargetTokenReturn {}
7828    #[allow(
7829        non_camel_case_types,
7830        non_snake_case,
7831        clippy::pub_underscore_fields,
7832        clippy::style
7833    )]
7834    const _: () = {
7835        use alloy::sol_types as alloy_sol_types;
7836        {
7837            #[doc(hidden)]
7838            type UnderlyingSolTuple<'a> = (Target,);
7839            #[doc(hidden)]
7840            type UnderlyingRustTuple<'a> = (
7841                <Target as alloy::sol_types::SolType>::RustType,
7842            );
7843            #[cfg(test)]
7844            #[allow(dead_code, unreachable_patterns)]
7845            fn _type_assertion(
7846                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7847            ) {
7848                match _t {
7849                    alloy_sol_types::private::AssertTypeEq::<
7850                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7851                    >(_) => {}
7852                }
7853            }
7854            #[automatically_derived]
7855            #[doc(hidden)]
7856            impl ::core::convert::From<scopeTargetTokenCall>
7857            for UnderlyingRustTuple<'_> {
7858                fn from(value: scopeTargetTokenCall) -> Self {
7859                    (value.defaultTarget,)
7860                }
7861            }
7862            #[automatically_derived]
7863            #[doc(hidden)]
7864            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7865            for scopeTargetTokenCall {
7866                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7867                    Self { defaultTarget: tuple.0 }
7868                }
7869            }
7870        }
7871        {
7872            #[doc(hidden)]
7873            type UnderlyingSolTuple<'a> = ();
7874            #[doc(hidden)]
7875            type UnderlyingRustTuple<'a> = ();
7876            #[cfg(test)]
7877            #[allow(dead_code, unreachable_patterns)]
7878            fn _type_assertion(
7879                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7880            ) {
7881                match _t {
7882                    alloy_sol_types::private::AssertTypeEq::<
7883                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7884                    >(_) => {}
7885                }
7886            }
7887            #[automatically_derived]
7888            #[doc(hidden)]
7889            impl ::core::convert::From<scopeTargetTokenReturn>
7890            for UnderlyingRustTuple<'_> {
7891                fn from(value: scopeTargetTokenReturn) -> Self {
7892                    ()
7893                }
7894            }
7895            #[automatically_derived]
7896            #[doc(hidden)]
7897            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7898            for scopeTargetTokenReturn {
7899                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7900                    Self {}
7901                }
7902            }
7903        }
7904        impl scopeTargetTokenReturn {
7905            fn _tokenize(
7906                &self,
7907            ) -> <scopeTargetTokenCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
7908                ()
7909            }
7910        }
7911        #[automatically_derived]
7912        impl alloy_sol_types::SolCall for scopeTargetTokenCall {
7913            type Parameters<'a> = (Target,);
7914            type Token<'a> = <Self::Parameters<
7915                'a,
7916            > as alloy_sol_types::SolType>::Token<'a>;
7917            type Return = scopeTargetTokenReturn;
7918            type ReturnTuple<'a> = ();
7919            type ReturnToken<'a> = <Self::ReturnTuple<
7920                'a,
7921            > as alloy_sol_types::SolType>::Token<'a>;
7922            const SIGNATURE: &'static str = "scopeTargetToken(uint256)";
7923            const SELECTOR: [u8; 4] = [167u8, 108u8, 154u8, 47u8];
7924            #[inline]
7925            fn new<'a>(
7926                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7927            ) -> Self {
7928                tuple.into()
7929            }
7930            #[inline]
7931            fn tokenize(&self) -> Self::Token<'_> {
7932                (<Target as alloy_sol_types::SolType>::tokenize(&self.defaultTarget),)
7933            }
7934            #[inline]
7935            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7936                scopeTargetTokenReturn::_tokenize(ret)
7937            }
7938            #[inline]
7939            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7940                <Self::ReturnTuple<
7941                    '_,
7942                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7943                    .map(Into::into)
7944            }
7945            #[inline]
7946            fn abi_decode_returns_validate(
7947                data: &[u8],
7948            ) -> alloy_sol_types::Result<Self::Return> {
7949                <Self::ReturnTuple<
7950                    '_,
7951                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7952                    .map(Into::into)
7953            }
7954        }
7955    };
7956    #[derive(serde::Serialize, serde::Deserialize)]
7957    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7958    /**Function with signature `scopeTokenCapabilities(address,address,address,bytes32)` and selector `0xc68605c8`.
7959```solidity
7960function scopeTokenCapabilities(address nodeAddress, address targetAddress, address beneficiary, bytes32 encodedSigsPermissions) external;
7961```*/
7962    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7963    #[derive(Clone)]
7964    pub struct scopeTokenCapabilitiesCall {
7965        #[allow(missing_docs)]
7966        pub nodeAddress: alloy::sol_types::private::Address,
7967        #[allow(missing_docs)]
7968        pub targetAddress: alloy::sol_types::private::Address,
7969        #[allow(missing_docs)]
7970        pub beneficiary: alloy::sol_types::private::Address,
7971        #[allow(missing_docs)]
7972        pub encodedSigsPermissions: alloy::sol_types::private::FixedBytes<32>,
7973    }
7974    ///Container type for the return parameters of the [`scopeTokenCapabilities(address,address,address,bytes32)`](scopeTokenCapabilitiesCall) function.
7975    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7976    #[derive(Clone)]
7977    pub struct scopeTokenCapabilitiesReturn {}
7978    #[allow(
7979        non_camel_case_types,
7980        non_snake_case,
7981        clippy::pub_underscore_fields,
7982        clippy::style
7983    )]
7984    const _: () = {
7985        use alloy::sol_types as alloy_sol_types;
7986        {
7987            #[doc(hidden)]
7988            type UnderlyingSolTuple<'a> = (
7989                alloy::sol_types::sol_data::Address,
7990                alloy::sol_types::sol_data::Address,
7991                alloy::sol_types::sol_data::Address,
7992                alloy::sol_types::sol_data::FixedBytes<32>,
7993            );
7994            #[doc(hidden)]
7995            type UnderlyingRustTuple<'a> = (
7996                alloy::sol_types::private::Address,
7997                alloy::sol_types::private::Address,
7998                alloy::sol_types::private::Address,
7999                alloy::sol_types::private::FixedBytes<32>,
8000            );
8001            #[cfg(test)]
8002            #[allow(dead_code, unreachable_patterns)]
8003            fn _type_assertion(
8004                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8005            ) {
8006                match _t {
8007                    alloy_sol_types::private::AssertTypeEq::<
8008                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8009                    >(_) => {}
8010                }
8011            }
8012            #[automatically_derived]
8013            #[doc(hidden)]
8014            impl ::core::convert::From<scopeTokenCapabilitiesCall>
8015            for UnderlyingRustTuple<'_> {
8016                fn from(value: scopeTokenCapabilitiesCall) -> Self {
8017                    (
8018                        value.nodeAddress,
8019                        value.targetAddress,
8020                        value.beneficiary,
8021                        value.encodedSigsPermissions,
8022                    )
8023                }
8024            }
8025            #[automatically_derived]
8026            #[doc(hidden)]
8027            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8028            for scopeTokenCapabilitiesCall {
8029                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8030                    Self {
8031                        nodeAddress: tuple.0,
8032                        targetAddress: tuple.1,
8033                        beneficiary: tuple.2,
8034                        encodedSigsPermissions: tuple.3,
8035                    }
8036                }
8037            }
8038        }
8039        {
8040            #[doc(hidden)]
8041            type UnderlyingSolTuple<'a> = ();
8042            #[doc(hidden)]
8043            type UnderlyingRustTuple<'a> = ();
8044            #[cfg(test)]
8045            #[allow(dead_code, unreachable_patterns)]
8046            fn _type_assertion(
8047                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8048            ) {
8049                match _t {
8050                    alloy_sol_types::private::AssertTypeEq::<
8051                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8052                    >(_) => {}
8053                }
8054            }
8055            #[automatically_derived]
8056            #[doc(hidden)]
8057            impl ::core::convert::From<scopeTokenCapabilitiesReturn>
8058            for UnderlyingRustTuple<'_> {
8059                fn from(value: scopeTokenCapabilitiesReturn) -> Self {
8060                    ()
8061                }
8062            }
8063            #[automatically_derived]
8064            #[doc(hidden)]
8065            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8066            for scopeTokenCapabilitiesReturn {
8067                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8068                    Self {}
8069                }
8070            }
8071        }
8072        impl scopeTokenCapabilitiesReturn {
8073            fn _tokenize(
8074                &self,
8075            ) -> <scopeTokenCapabilitiesCall as alloy_sol_types::SolCall>::ReturnToken<
8076                '_,
8077            > {
8078                ()
8079            }
8080        }
8081        #[automatically_derived]
8082        impl alloy_sol_types::SolCall for scopeTokenCapabilitiesCall {
8083            type Parameters<'a> = (
8084                alloy::sol_types::sol_data::Address,
8085                alloy::sol_types::sol_data::Address,
8086                alloy::sol_types::sol_data::Address,
8087                alloy::sol_types::sol_data::FixedBytes<32>,
8088            );
8089            type Token<'a> = <Self::Parameters<
8090                'a,
8091            > as alloy_sol_types::SolType>::Token<'a>;
8092            type Return = scopeTokenCapabilitiesReturn;
8093            type ReturnTuple<'a> = ();
8094            type ReturnToken<'a> = <Self::ReturnTuple<
8095                'a,
8096            > as alloy_sol_types::SolType>::Token<'a>;
8097            const SIGNATURE: &'static str = "scopeTokenCapabilities(address,address,address,bytes32)";
8098            const SELECTOR: [u8; 4] = [198u8, 134u8, 5u8, 200u8];
8099            #[inline]
8100            fn new<'a>(
8101                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8102            ) -> Self {
8103                tuple.into()
8104            }
8105            #[inline]
8106            fn tokenize(&self) -> Self::Token<'_> {
8107                (
8108                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8109                        &self.nodeAddress,
8110                    ),
8111                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8112                        &self.targetAddress,
8113                    ),
8114                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8115                        &self.beneficiary,
8116                    ),
8117                    <alloy::sol_types::sol_data::FixedBytes<
8118                        32,
8119                    > as alloy_sol_types::SolType>::tokenize(
8120                        &self.encodedSigsPermissions,
8121                    ),
8122                )
8123            }
8124            #[inline]
8125            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8126                scopeTokenCapabilitiesReturn::_tokenize(ret)
8127            }
8128            #[inline]
8129            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8130                <Self::ReturnTuple<
8131                    '_,
8132                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8133                    .map(Into::into)
8134            }
8135            #[inline]
8136            fn abi_decode_returns_validate(
8137                data: &[u8],
8138            ) -> alloy_sol_types::Result<Self::Return> {
8139                <Self::ReturnTuple<
8140                    '_,
8141                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8142                    .map(Into::into)
8143            }
8144        }
8145    };
8146    #[derive(serde::Serialize, serde::Deserialize)]
8147    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8148    /**Function with signature `setMultisend(address)` and selector `0x8b95eccd`.
8149```solidity
8150function setMultisend(address _multisend) external;
8151```*/
8152    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8153    #[derive(Clone)]
8154    pub struct setMultisendCall {
8155        #[allow(missing_docs)]
8156        pub _multisend: alloy::sol_types::private::Address,
8157    }
8158    ///Container type for the return parameters of the [`setMultisend(address)`](setMultisendCall) function.
8159    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8160    #[derive(Clone)]
8161    pub struct setMultisendReturn {}
8162    #[allow(
8163        non_camel_case_types,
8164        non_snake_case,
8165        clippy::pub_underscore_fields,
8166        clippy::style
8167    )]
8168    const _: () = {
8169        use alloy::sol_types as alloy_sol_types;
8170        {
8171            #[doc(hidden)]
8172            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
8173            #[doc(hidden)]
8174            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
8175            #[cfg(test)]
8176            #[allow(dead_code, unreachable_patterns)]
8177            fn _type_assertion(
8178                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8179            ) {
8180                match _t {
8181                    alloy_sol_types::private::AssertTypeEq::<
8182                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8183                    >(_) => {}
8184                }
8185            }
8186            #[automatically_derived]
8187            #[doc(hidden)]
8188            impl ::core::convert::From<setMultisendCall> for UnderlyingRustTuple<'_> {
8189                fn from(value: setMultisendCall) -> Self {
8190                    (value._multisend,)
8191                }
8192            }
8193            #[automatically_derived]
8194            #[doc(hidden)]
8195            impl ::core::convert::From<UnderlyingRustTuple<'_>> for setMultisendCall {
8196                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8197                    Self { _multisend: tuple.0 }
8198                }
8199            }
8200        }
8201        {
8202            #[doc(hidden)]
8203            type UnderlyingSolTuple<'a> = ();
8204            #[doc(hidden)]
8205            type UnderlyingRustTuple<'a> = ();
8206            #[cfg(test)]
8207            #[allow(dead_code, unreachable_patterns)]
8208            fn _type_assertion(
8209                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8210            ) {
8211                match _t {
8212                    alloy_sol_types::private::AssertTypeEq::<
8213                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8214                    >(_) => {}
8215                }
8216            }
8217            #[automatically_derived]
8218            #[doc(hidden)]
8219            impl ::core::convert::From<setMultisendReturn> for UnderlyingRustTuple<'_> {
8220                fn from(value: setMultisendReturn) -> Self {
8221                    ()
8222                }
8223            }
8224            #[automatically_derived]
8225            #[doc(hidden)]
8226            impl ::core::convert::From<UnderlyingRustTuple<'_>> for setMultisendReturn {
8227                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8228                    Self {}
8229                }
8230            }
8231        }
8232        impl setMultisendReturn {
8233            fn _tokenize(
8234                &self,
8235            ) -> <setMultisendCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
8236                ()
8237            }
8238        }
8239        #[automatically_derived]
8240        impl alloy_sol_types::SolCall for setMultisendCall {
8241            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
8242            type Token<'a> = <Self::Parameters<
8243                'a,
8244            > as alloy_sol_types::SolType>::Token<'a>;
8245            type Return = setMultisendReturn;
8246            type ReturnTuple<'a> = ();
8247            type ReturnToken<'a> = <Self::ReturnTuple<
8248                'a,
8249            > as alloy_sol_types::SolType>::Token<'a>;
8250            const SIGNATURE: &'static str = "setMultisend(address)";
8251            const SELECTOR: [u8; 4] = [139u8, 149u8, 236u8, 205u8];
8252            #[inline]
8253            fn new<'a>(
8254                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8255            ) -> Self {
8256                tuple.into()
8257            }
8258            #[inline]
8259            fn tokenize(&self) -> Self::Token<'_> {
8260                (
8261                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8262                        &self._multisend,
8263                    ),
8264                )
8265            }
8266            #[inline]
8267            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8268                setMultisendReturn::_tokenize(ret)
8269            }
8270            #[inline]
8271            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8272                <Self::ReturnTuple<
8273                    '_,
8274                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8275                    .map(Into::into)
8276            }
8277            #[inline]
8278            fn abi_decode_returns_validate(
8279                data: &[u8],
8280            ) -> alloy_sol_types::Result<Self::Return> {
8281                <Self::ReturnTuple<
8282                    '_,
8283                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8284                    .map(Into::into)
8285            }
8286        }
8287    };
8288    #[derive(serde::Serialize, serde::Deserialize)]
8289    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8290    /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`.
8291```solidity
8292function transferOwnership(address newOwner) external;
8293```*/
8294    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8295    #[derive(Clone)]
8296    pub struct transferOwnershipCall {
8297        #[allow(missing_docs)]
8298        pub newOwner: alloy::sol_types::private::Address,
8299    }
8300    ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function.
8301    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8302    #[derive(Clone)]
8303    pub struct transferOwnershipReturn {}
8304    #[allow(
8305        non_camel_case_types,
8306        non_snake_case,
8307        clippy::pub_underscore_fields,
8308        clippy::style
8309    )]
8310    const _: () = {
8311        use alloy::sol_types as alloy_sol_types;
8312        {
8313            #[doc(hidden)]
8314            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
8315            #[doc(hidden)]
8316            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
8317            #[cfg(test)]
8318            #[allow(dead_code, unreachable_patterns)]
8319            fn _type_assertion(
8320                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8321            ) {
8322                match _t {
8323                    alloy_sol_types::private::AssertTypeEq::<
8324                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8325                    >(_) => {}
8326                }
8327            }
8328            #[automatically_derived]
8329            #[doc(hidden)]
8330            impl ::core::convert::From<transferOwnershipCall>
8331            for UnderlyingRustTuple<'_> {
8332                fn from(value: transferOwnershipCall) -> Self {
8333                    (value.newOwner,)
8334                }
8335            }
8336            #[automatically_derived]
8337            #[doc(hidden)]
8338            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8339            for transferOwnershipCall {
8340                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8341                    Self { newOwner: tuple.0 }
8342                }
8343            }
8344        }
8345        {
8346            #[doc(hidden)]
8347            type UnderlyingSolTuple<'a> = ();
8348            #[doc(hidden)]
8349            type UnderlyingRustTuple<'a> = ();
8350            #[cfg(test)]
8351            #[allow(dead_code, unreachable_patterns)]
8352            fn _type_assertion(
8353                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8354            ) {
8355                match _t {
8356                    alloy_sol_types::private::AssertTypeEq::<
8357                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8358                    >(_) => {}
8359                }
8360            }
8361            #[automatically_derived]
8362            #[doc(hidden)]
8363            impl ::core::convert::From<transferOwnershipReturn>
8364            for UnderlyingRustTuple<'_> {
8365                fn from(value: transferOwnershipReturn) -> Self {
8366                    ()
8367                }
8368            }
8369            #[automatically_derived]
8370            #[doc(hidden)]
8371            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8372            for transferOwnershipReturn {
8373                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8374                    Self {}
8375                }
8376            }
8377        }
8378        impl transferOwnershipReturn {
8379            fn _tokenize(
8380                &self,
8381            ) -> <transferOwnershipCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
8382                ()
8383            }
8384        }
8385        #[automatically_derived]
8386        impl alloy_sol_types::SolCall for transferOwnershipCall {
8387            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
8388            type Token<'a> = <Self::Parameters<
8389                'a,
8390            > as alloy_sol_types::SolType>::Token<'a>;
8391            type Return = transferOwnershipReturn;
8392            type ReturnTuple<'a> = ();
8393            type ReturnToken<'a> = <Self::ReturnTuple<
8394                'a,
8395            > as alloy_sol_types::SolType>::Token<'a>;
8396            const SIGNATURE: &'static str = "transferOwnership(address)";
8397            const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8];
8398            #[inline]
8399            fn new<'a>(
8400                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8401            ) -> Self {
8402                tuple.into()
8403            }
8404            #[inline]
8405            fn tokenize(&self) -> Self::Token<'_> {
8406                (
8407                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8408                        &self.newOwner,
8409                    ),
8410                )
8411            }
8412            #[inline]
8413            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8414                transferOwnershipReturn::_tokenize(ret)
8415            }
8416            #[inline]
8417            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8418                <Self::ReturnTuple<
8419                    '_,
8420                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8421                    .map(Into::into)
8422            }
8423            #[inline]
8424            fn abi_decode_returns_validate(
8425                data: &[u8],
8426            ) -> alloy_sol_types::Result<Self::Return> {
8427                <Self::ReturnTuple<
8428                    '_,
8429                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8430                    .map(Into::into)
8431            }
8432        }
8433    };
8434    #[derive(serde::Serialize, serde::Deserialize)]
8435    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8436    /**Function with signature `tryGetTarget(address)` and selector `0xdf4e6f8a`.
8437```solidity
8438function tryGetTarget(address targetAddress) external view returns (bool, Target);
8439```*/
8440    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8441    #[derive(Clone)]
8442    pub struct tryGetTargetCall {
8443        #[allow(missing_docs)]
8444        pub targetAddress: alloy::sol_types::private::Address,
8445    }
8446    #[derive(serde::Serialize, serde::Deserialize)]
8447    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8448    ///Container type for the return parameters of the [`tryGetTarget(address)`](tryGetTargetCall) function.
8449    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8450    #[derive(Clone)]
8451    pub struct tryGetTargetReturn {
8452        #[allow(missing_docs)]
8453        pub _0: bool,
8454        #[allow(missing_docs)]
8455        pub _1: <Target as alloy::sol_types::SolType>::RustType,
8456    }
8457    #[allow(
8458        non_camel_case_types,
8459        non_snake_case,
8460        clippy::pub_underscore_fields,
8461        clippy::style
8462    )]
8463    const _: () = {
8464        use alloy::sol_types as alloy_sol_types;
8465        {
8466            #[doc(hidden)]
8467            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
8468            #[doc(hidden)]
8469            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
8470            #[cfg(test)]
8471            #[allow(dead_code, unreachable_patterns)]
8472            fn _type_assertion(
8473                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8474            ) {
8475                match _t {
8476                    alloy_sol_types::private::AssertTypeEq::<
8477                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8478                    >(_) => {}
8479                }
8480            }
8481            #[automatically_derived]
8482            #[doc(hidden)]
8483            impl ::core::convert::From<tryGetTargetCall> for UnderlyingRustTuple<'_> {
8484                fn from(value: tryGetTargetCall) -> Self {
8485                    (value.targetAddress,)
8486                }
8487            }
8488            #[automatically_derived]
8489            #[doc(hidden)]
8490            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tryGetTargetCall {
8491                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8492                    Self { targetAddress: tuple.0 }
8493                }
8494            }
8495        }
8496        {
8497            #[doc(hidden)]
8498            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool, Target);
8499            #[doc(hidden)]
8500            type UnderlyingRustTuple<'a> = (
8501                bool,
8502                <Target as alloy::sol_types::SolType>::RustType,
8503            );
8504            #[cfg(test)]
8505            #[allow(dead_code, unreachable_patterns)]
8506            fn _type_assertion(
8507                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8508            ) {
8509                match _t {
8510                    alloy_sol_types::private::AssertTypeEq::<
8511                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8512                    >(_) => {}
8513                }
8514            }
8515            #[automatically_derived]
8516            #[doc(hidden)]
8517            impl ::core::convert::From<tryGetTargetReturn> for UnderlyingRustTuple<'_> {
8518                fn from(value: tryGetTargetReturn) -> Self {
8519                    (value._0, value._1)
8520                }
8521            }
8522            #[automatically_derived]
8523            #[doc(hidden)]
8524            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tryGetTargetReturn {
8525                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8526                    Self { _0: tuple.0, _1: tuple.1 }
8527                }
8528            }
8529        }
8530        impl tryGetTargetReturn {
8531            fn _tokenize(
8532                &self,
8533            ) -> <tryGetTargetCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
8534                (
8535                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
8536                        &self._0,
8537                    ),
8538                    <Target as alloy_sol_types::SolType>::tokenize(&self._1),
8539                )
8540            }
8541        }
8542        #[automatically_derived]
8543        impl alloy_sol_types::SolCall for tryGetTargetCall {
8544            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
8545            type Token<'a> = <Self::Parameters<
8546                'a,
8547            > as alloy_sol_types::SolType>::Token<'a>;
8548            type Return = tryGetTargetReturn;
8549            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool, Target);
8550            type ReturnToken<'a> = <Self::ReturnTuple<
8551                'a,
8552            > as alloy_sol_types::SolType>::Token<'a>;
8553            const SIGNATURE: &'static str = "tryGetTarget(address)";
8554            const SELECTOR: [u8; 4] = [223u8, 78u8, 111u8, 138u8];
8555            #[inline]
8556            fn new<'a>(
8557                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8558            ) -> Self {
8559                tuple.into()
8560            }
8561            #[inline]
8562            fn tokenize(&self) -> Self::Token<'_> {
8563                (
8564                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8565                        &self.targetAddress,
8566                    ),
8567                )
8568            }
8569            #[inline]
8570            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8571                tryGetTargetReturn::_tokenize(ret)
8572            }
8573            #[inline]
8574            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8575                <Self::ReturnTuple<
8576                    '_,
8577                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8578                    .map(Into::into)
8579            }
8580            #[inline]
8581            fn abi_decode_returns_validate(
8582                data: &[u8],
8583            ) -> alloy_sol_types::Result<Self::Return> {
8584                <Self::ReturnTuple<
8585                    '_,
8586                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8587                    .map(Into::into)
8588            }
8589        }
8590    };
8591    #[derive(serde::Serialize, serde::Deserialize)]
8592    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8593    /**Function with signature `upgradeTo(address)` and selector `0x3659cfe6`.
8594```solidity
8595function upgradeTo(address newImplementation) external;
8596```*/
8597    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8598    #[derive(Clone)]
8599    pub struct upgradeToCall {
8600        #[allow(missing_docs)]
8601        pub newImplementation: alloy::sol_types::private::Address,
8602    }
8603    ///Container type for the return parameters of the [`upgradeTo(address)`](upgradeToCall) function.
8604    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8605    #[derive(Clone)]
8606    pub struct upgradeToReturn {}
8607    #[allow(
8608        non_camel_case_types,
8609        non_snake_case,
8610        clippy::pub_underscore_fields,
8611        clippy::style
8612    )]
8613    const _: () = {
8614        use alloy::sol_types as alloy_sol_types;
8615        {
8616            #[doc(hidden)]
8617            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
8618            #[doc(hidden)]
8619            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
8620            #[cfg(test)]
8621            #[allow(dead_code, unreachable_patterns)]
8622            fn _type_assertion(
8623                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8624            ) {
8625                match _t {
8626                    alloy_sol_types::private::AssertTypeEq::<
8627                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8628                    >(_) => {}
8629                }
8630            }
8631            #[automatically_derived]
8632            #[doc(hidden)]
8633            impl ::core::convert::From<upgradeToCall> for UnderlyingRustTuple<'_> {
8634                fn from(value: upgradeToCall) -> Self {
8635                    (value.newImplementation,)
8636                }
8637            }
8638            #[automatically_derived]
8639            #[doc(hidden)]
8640            impl ::core::convert::From<UnderlyingRustTuple<'_>> for upgradeToCall {
8641                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8642                    Self { newImplementation: tuple.0 }
8643                }
8644            }
8645        }
8646        {
8647            #[doc(hidden)]
8648            type UnderlyingSolTuple<'a> = ();
8649            #[doc(hidden)]
8650            type UnderlyingRustTuple<'a> = ();
8651            #[cfg(test)]
8652            #[allow(dead_code, unreachable_patterns)]
8653            fn _type_assertion(
8654                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8655            ) {
8656                match _t {
8657                    alloy_sol_types::private::AssertTypeEq::<
8658                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8659                    >(_) => {}
8660                }
8661            }
8662            #[automatically_derived]
8663            #[doc(hidden)]
8664            impl ::core::convert::From<upgradeToReturn> for UnderlyingRustTuple<'_> {
8665                fn from(value: upgradeToReturn) -> Self {
8666                    ()
8667                }
8668            }
8669            #[automatically_derived]
8670            #[doc(hidden)]
8671            impl ::core::convert::From<UnderlyingRustTuple<'_>> for upgradeToReturn {
8672                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8673                    Self {}
8674                }
8675            }
8676        }
8677        impl upgradeToReturn {
8678            fn _tokenize(
8679                &self,
8680            ) -> <upgradeToCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
8681                ()
8682            }
8683        }
8684        #[automatically_derived]
8685        impl alloy_sol_types::SolCall for upgradeToCall {
8686            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
8687            type Token<'a> = <Self::Parameters<
8688                'a,
8689            > as alloy_sol_types::SolType>::Token<'a>;
8690            type Return = upgradeToReturn;
8691            type ReturnTuple<'a> = ();
8692            type ReturnToken<'a> = <Self::ReturnTuple<
8693                'a,
8694            > as alloy_sol_types::SolType>::Token<'a>;
8695            const SIGNATURE: &'static str = "upgradeTo(address)";
8696            const SELECTOR: [u8; 4] = [54u8, 89u8, 207u8, 230u8];
8697            #[inline]
8698            fn new<'a>(
8699                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8700            ) -> Self {
8701                tuple.into()
8702            }
8703            #[inline]
8704            fn tokenize(&self) -> Self::Token<'_> {
8705                (
8706                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8707                        &self.newImplementation,
8708                    ),
8709                )
8710            }
8711            #[inline]
8712            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8713                upgradeToReturn::_tokenize(ret)
8714            }
8715            #[inline]
8716            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8717                <Self::ReturnTuple<
8718                    '_,
8719                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8720                    .map(Into::into)
8721            }
8722            #[inline]
8723            fn abi_decode_returns_validate(
8724                data: &[u8],
8725            ) -> alloy_sol_types::Result<Self::Return> {
8726                <Self::ReturnTuple<
8727                    '_,
8728                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8729                    .map(Into::into)
8730            }
8731        }
8732    };
8733    #[derive(serde::Serialize, serde::Deserialize)]
8734    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8735    /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`.
8736```solidity
8737function upgradeToAndCall(address newImplementation, bytes memory data) external payable;
8738```*/
8739    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8740    #[derive(Clone)]
8741    pub struct upgradeToAndCallCall {
8742        #[allow(missing_docs)]
8743        pub newImplementation: alloy::sol_types::private::Address,
8744        #[allow(missing_docs)]
8745        pub data: alloy::sol_types::private::Bytes,
8746    }
8747    ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function.
8748    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8749    #[derive(Clone)]
8750    pub struct upgradeToAndCallReturn {}
8751    #[allow(
8752        non_camel_case_types,
8753        non_snake_case,
8754        clippy::pub_underscore_fields,
8755        clippy::style
8756    )]
8757    const _: () = {
8758        use alloy::sol_types as alloy_sol_types;
8759        {
8760            #[doc(hidden)]
8761            type UnderlyingSolTuple<'a> = (
8762                alloy::sol_types::sol_data::Address,
8763                alloy::sol_types::sol_data::Bytes,
8764            );
8765            #[doc(hidden)]
8766            type UnderlyingRustTuple<'a> = (
8767                alloy::sol_types::private::Address,
8768                alloy::sol_types::private::Bytes,
8769            );
8770            #[cfg(test)]
8771            #[allow(dead_code, unreachable_patterns)]
8772            fn _type_assertion(
8773                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8774            ) {
8775                match _t {
8776                    alloy_sol_types::private::AssertTypeEq::<
8777                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8778                    >(_) => {}
8779                }
8780            }
8781            #[automatically_derived]
8782            #[doc(hidden)]
8783            impl ::core::convert::From<upgradeToAndCallCall>
8784            for UnderlyingRustTuple<'_> {
8785                fn from(value: upgradeToAndCallCall) -> Self {
8786                    (value.newImplementation, value.data)
8787                }
8788            }
8789            #[automatically_derived]
8790            #[doc(hidden)]
8791            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8792            for upgradeToAndCallCall {
8793                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8794                    Self {
8795                        newImplementation: tuple.0,
8796                        data: tuple.1,
8797                    }
8798                }
8799            }
8800        }
8801        {
8802            #[doc(hidden)]
8803            type UnderlyingSolTuple<'a> = ();
8804            #[doc(hidden)]
8805            type UnderlyingRustTuple<'a> = ();
8806            #[cfg(test)]
8807            #[allow(dead_code, unreachable_patterns)]
8808            fn _type_assertion(
8809                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8810            ) {
8811                match _t {
8812                    alloy_sol_types::private::AssertTypeEq::<
8813                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8814                    >(_) => {}
8815                }
8816            }
8817            #[automatically_derived]
8818            #[doc(hidden)]
8819            impl ::core::convert::From<upgradeToAndCallReturn>
8820            for UnderlyingRustTuple<'_> {
8821                fn from(value: upgradeToAndCallReturn) -> Self {
8822                    ()
8823                }
8824            }
8825            #[automatically_derived]
8826            #[doc(hidden)]
8827            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8828            for upgradeToAndCallReturn {
8829                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8830                    Self {}
8831                }
8832            }
8833        }
8834        impl upgradeToAndCallReturn {
8835            fn _tokenize(
8836                &self,
8837            ) -> <upgradeToAndCallCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
8838                ()
8839            }
8840        }
8841        #[automatically_derived]
8842        impl alloy_sol_types::SolCall for upgradeToAndCallCall {
8843            type Parameters<'a> = (
8844                alloy::sol_types::sol_data::Address,
8845                alloy::sol_types::sol_data::Bytes,
8846            );
8847            type Token<'a> = <Self::Parameters<
8848                'a,
8849            > as alloy_sol_types::SolType>::Token<'a>;
8850            type Return = upgradeToAndCallReturn;
8851            type ReturnTuple<'a> = ();
8852            type ReturnToken<'a> = <Self::ReturnTuple<
8853                'a,
8854            > as alloy_sol_types::SolType>::Token<'a>;
8855            const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)";
8856            const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8];
8857            #[inline]
8858            fn new<'a>(
8859                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8860            ) -> Self {
8861                tuple.into()
8862            }
8863            #[inline]
8864            fn tokenize(&self) -> Self::Token<'_> {
8865                (
8866                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8867                        &self.newImplementation,
8868                    ),
8869                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
8870                        &self.data,
8871                    ),
8872                )
8873            }
8874            #[inline]
8875            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8876                upgradeToAndCallReturn::_tokenize(ret)
8877            }
8878            #[inline]
8879            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8880                <Self::ReturnTuple<
8881                    '_,
8882                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8883                    .map(Into::into)
8884            }
8885            #[inline]
8886            fn abi_decode_returns_validate(
8887                data: &[u8],
8888            ) -> alloy_sol_types::Result<Self::Return> {
8889                <Self::ReturnTuple<
8890                    '_,
8891                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8892                    .map(Into::into)
8893            }
8894        }
8895    };
8896    ///Container for all the [`HoprNodeManagementModule`](self) function calls.
8897    #[derive(serde::Serialize, serde::Deserialize)]
8898    #[derive()]
8899    pub enum HoprNodeManagementModuleCalls {
8900        #[allow(missing_docs)]
8901        addChannelsAndTokenTarget(addChannelsAndTokenTargetCall),
8902        #[allow(missing_docs)]
8903        addNode(addNodeCall),
8904        #[allow(missing_docs)]
8905        decodeFunctionSigsAndPermissions(decodeFunctionSigsAndPermissionsCall),
8906        #[allow(missing_docs)]
8907        encodeFunctionSigsAndPermissions(encodeFunctionSigsAndPermissionsCall),
8908        #[allow(missing_docs)]
8909        execTransactionFromModule(execTransactionFromModuleCall),
8910        #[allow(missing_docs)]
8911        execTransactionFromModuleReturnData(execTransactionFromModuleReturnDataCall),
8912        #[allow(missing_docs)]
8913        getGranularPermissions(getGranularPermissionsCall),
8914        #[allow(missing_docs)]
8915        getTargets(getTargetsCall),
8916        #[allow(missing_docs)]
8917        includeNode(includeNodeCall),
8918        #[allow(missing_docs)]
8919        initialize(initializeCall),
8920        #[allow(missing_docs)]
8921        isHoprNodeManagementModule(isHoprNodeManagementModuleCall),
8922        #[allow(missing_docs)]
8923        isNode(isNodeCall),
8924        #[allow(missing_docs)]
8925        multisend(multisendCall),
8926        #[allow(missing_docs)]
8927        owner(ownerCall),
8928        #[allow(missing_docs)]
8929        proxiableUUID(proxiableUUIDCall),
8930        #[allow(missing_docs)]
8931        removeNode(removeNodeCall),
8932        #[allow(missing_docs)]
8933        renounceOwnership(renounceOwnershipCall),
8934        #[allow(missing_docs)]
8935        revokeTarget(revokeTargetCall),
8936        #[allow(missing_docs)]
8937        scopeChannelsCapabilities(scopeChannelsCapabilitiesCall),
8938        #[allow(missing_docs)]
8939        scopeSendCapability(scopeSendCapabilityCall),
8940        #[allow(missing_docs)]
8941        scopeTargetChannels(scopeTargetChannelsCall),
8942        #[allow(missing_docs)]
8943        scopeTargetSend(scopeTargetSendCall),
8944        #[allow(missing_docs)]
8945        scopeTargetToken(scopeTargetTokenCall),
8946        #[allow(missing_docs)]
8947        scopeTokenCapabilities(scopeTokenCapabilitiesCall),
8948        #[allow(missing_docs)]
8949        setMultisend(setMultisendCall),
8950        #[allow(missing_docs)]
8951        transferOwnership(transferOwnershipCall),
8952        #[allow(missing_docs)]
8953        tryGetTarget(tryGetTargetCall),
8954        #[allow(missing_docs)]
8955        upgradeTo(upgradeToCall),
8956        #[allow(missing_docs)]
8957        upgradeToAndCall(upgradeToAndCallCall),
8958    }
8959    #[automatically_derived]
8960    impl HoprNodeManagementModuleCalls {
8961        /// All the selectors of this enum.
8962        ///
8963        /// Note that the selectors might not be in the same order as the variants.
8964        /// No guarantees are made about the order of the selectors.
8965        ///
8966        /// Prefer using `SolInterface` methods instead.
8967        pub const SELECTORS: &'static [[u8; 4usize]] = &[
8968            [1u8, 117u8, 1u8, 82u8],
8969            [41u8, 68u8, 2u8, 204u8],
8970            [52u8, 1u8, 205u8, 232u8],
8971            [54u8, 89u8, 207u8, 230u8],
8972            [67u8, 159u8, 171u8, 145u8],
8973            [70u8, 135u8, 33u8, 167u8],
8974            [74u8, 27u8, 164u8, 8u8],
8975            [79u8, 30u8, 242u8, 134u8],
8976            [82u8, 41u8, 7u8, 63u8],
8977            [82u8, 209u8, 144u8, 45u8],
8978            [86u8, 245u8, 81u8, 23u8],
8979            [96u8, 151u8, 108u8, 75u8],
8980            [99u8, 254u8, 59u8, 86u8],
8981            [113u8, 80u8, 24u8, 166u8],
8982            [115u8, 156u8, 75u8, 8u8],
8983            [139u8, 149u8, 236u8, 205u8],
8984            [141u8, 165u8, 203u8, 91u8],
8985            [157u8, 149u8, 241u8, 204u8],
8986            [162u8, 69u8, 15u8, 137u8],
8987            [167u8, 108u8, 154u8, 47u8],
8988            [178u8, 185u8, 158u8, 201u8],
8989            [181u8, 115u8, 105u8, 98u8],
8990            [198u8, 134u8, 5u8, 200u8],
8991            [198u8, 140u8, 58u8, 131u8],
8992            [220u8, 6u8, 16u8, 157u8],
8993            [220u8, 68u8, 106u8, 74u8],
8994            [223u8, 78u8, 111u8, 138u8],
8995            [242u8, 253u8, 227u8, 139u8],
8996            [250u8, 25u8, 80u8, 29u8],
8997        ];
8998    }
8999    #[automatically_derived]
9000    impl alloy_sol_types::SolInterface for HoprNodeManagementModuleCalls {
9001        const NAME: &'static str = "HoprNodeManagementModuleCalls";
9002        const MIN_DATA_LENGTH: usize = 0usize;
9003        const COUNT: usize = 29usize;
9004        #[inline]
9005        fn selector(&self) -> [u8; 4] {
9006            match self {
9007                Self::addChannelsAndTokenTarget(_) => {
9008                    <addChannelsAndTokenTargetCall as alloy_sol_types::SolCall>::SELECTOR
9009                }
9010                Self::addNode(_) => <addNodeCall as alloy_sol_types::SolCall>::SELECTOR,
9011                Self::decodeFunctionSigsAndPermissions(_) => {
9012                    <decodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::SELECTOR
9013                }
9014                Self::encodeFunctionSigsAndPermissions(_) => {
9015                    <encodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::SELECTOR
9016                }
9017                Self::execTransactionFromModule(_) => {
9018                    <execTransactionFromModuleCall as alloy_sol_types::SolCall>::SELECTOR
9019                }
9020                Self::execTransactionFromModuleReturnData(_) => {
9021                    <execTransactionFromModuleReturnDataCall as alloy_sol_types::SolCall>::SELECTOR
9022                }
9023                Self::getGranularPermissions(_) => {
9024                    <getGranularPermissionsCall as alloy_sol_types::SolCall>::SELECTOR
9025                }
9026                Self::getTargets(_) => {
9027                    <getTargetsCall as alloy_sol_types::SolCall>::SELECTOR
9028                }
9029                Self::includeNode(_) => {
9030                    <includeNodeCall as alloy_sol_types::SolCall>::SELECTOR
9031                }
9032                Self::initialize(_) => {
9033                    <initializeCall as alloy_sol_types::SolCall>::SELECTOR
9034                }
9035                Self::isHoprNodeManagementModule(_) => {
9036                    <isHoprNodeManagementModuleCall as alloy_sol_types::SolCall>::SELECTOR
9037                }
9038                Self::isNode(_) => <isNodeCall as alloy_sol_types::SolCall>::SELECTOR,
9039                Self::multisend(_) => {
9040                    <multisendCall as alloy_sol_types::SolCall>::SELECTOR
9041                }
9042                Self::owner(_) => <ownerCall as alloy_sol_types::SolCall>::SELECTOR,
9043                Self::proxiableUUID(_) => {
9044                    <proxiableUUIDCall as alloy_sol_types::SolCall>::SELECTOR
9045                }
9046                Self::removeNode(_) => {
9047                    <removeNodeCall as alloy_sol_types::SolCall>::SELECTOR
9048                }
9049                Self::renounceOwnership(_) => {
9050                    <renounceOwnershipCall as alloy_sol_types::SolCall>::SELECTOR
9051                }
9052                Self::revokeTarget(_) => {
9053                    <revokeTargetCall as alloy_sol_types::SolCall>::SELECTOR
9054                }
9055                Self::scopeChannelsCapabilities(_) => {
9056                    <scopeChannelsCapabilitiesCall as alloy_sol_types::SolCall>::SELECTOR
9057                }
9058                Self::scopeSendCapability(_) => {
9059                    <scopeSendCapabilityCall as alloy_sol_types::SolCall>::SELECTOR
9060                }
9061                Self::scopeTargetChannels(_) => {
9062                    <scopeTargetChannelsCall as alloy_sol_types::SolCall>::SELECTOR
9063                }
9064                Self::scopeTargetSend(_) => {
9065                    <scopeTargetSendCall as alloy_sol_types::SolCall>::SELECTOR
9066                }
9067                Self::scopeTargetToken(_) => {
9068                    <scopeTargetTokenCall as alloy_sol_types::SolCall>::SELECTOR
9069                }
9070                Self::scopeTokenCapabilities(_) => {
9071                    <scopeTokenCapabilitiesCall as alloy_sol_types::SolCall>::SELECTOR
9072                }
9073                Self::setMultisend(_) => {
9074                    <setMultisendCall as alloy_sol_types::SolCall>::SELECTOR
9075                }
9076                Self::transferOwnership(_) => {
9077                    <transferOwnershipCall as alloy_sol_types::SolCall>::SELECTOR
9078                }
9079                Self::tryGetTarget(_) => {
9080                    <tryGetTargetCall as alloy_sol_types::SolCall>::SELECTOR
9081                }
9082                Self::upgradeTo(_) => {
9083                    <upgradeToCall as alloy_sol_types::SolCall>::SELECTOR
9084                }
9085                Self::upgradeToAndCall(_) => {
9086                    <upgradeToAndCallCall as alloy_sol_types::SolCall>::SELECTOR
9087                }
9088            }
9089        }
9090        #[inline]
9091        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
9092            Self::SELECTORS.get(i).copied()
9093        }
9094        #[inline]
9095        fn valid_selector(selector: [u8; 4]) -> bool {
9096            Self::SELECTORS.binary_search(&selector).is_ok()
9097        }
9098        #[inline]
9099        #[allow(non_snake_case)]
9100        fn abi_decode_raw(
9101            selector: [u8; 4],
9102            data: &[u8],
9103        ) -> alloy_sol_types::Result<Self> {
9104            static DECODE_SHIMS: &[fn(
9105                &[u8],
9106            ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls>] = &[
9107                {
9108                    fn isNode(
9109                        data: &[u8],
9110                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9111                        <isNodeCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
9112                            .map(HoprNodeManagementModuleCalls::isNode)
9113                    }
9114                    isNode
9115                },
9116                {
9117                    fn multisend(
9118                        data: &[u8],
9119                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9120                        <multisendCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
9121                            .map(HoprNodeManagementModuleCalls::multisend)
9122                    }
9123                    multisend
9124                },
9125                {
9126                    fn revokeTarget(
9127                        data: &[u8],
9128                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9129                        <revokeTargetCall as alloy_sol_types::SolCall>::abi_decode_raw(
9130                                data,
9131                            )
9132                            .map(HoprNodeManagementModuleCalls::revokeTarget)
9133                    }
9134                    revokeTarget
9135                },
9136                {
9137                    fn upgradeTo(
9138                        data: &[u8],
9139                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9140                        <upgradeToCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
9141                            .map(HoprNodeManagementModuleCalls::upgradeTo)
9142                    }
9143                    upgradeTo
9144                },
9145                {
9146                    fn initialize(
9147                        data: &[u8],
9148                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9149                        <initializeCall as alloy_sol_types::SolCall>::abi_decode_raw(
9150                                data,
9151                            )
9152                            .map(HoprNodeManagementModuleCalls::initialize)
9153                    }
9154                    initialize
9155                },
9156                {
9157                    fn execTransactionFromModule(
9158                        data: &[u8],
9159                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9160                        <execTransactionFromModuleCall as alloy_sol_types::SolCall>::abi_decode_raw(
9161                                data,
9162                            )
9163                            .map(
9164                                HoprNodeManagementModuleCalls::execTransactionFromModule,
9165                            )
9166                    }
9167                    execTransactionFromModule
9168                },
9169                {
9170                    fn isHoprNodeManagementModule(
9171                        data: &[u8],
9172                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9173                        <isHoprNodeManagementModuleCall as alloy_sol_types::SolCall>::abi_decode_raw(
9174                                data,
9175                            )
9176                            .map(
9177                                HoprNodeManagementModuleCalls::isHoprNodeManagementModule,
9178                            )
9179                    }
9180                    isHoprNodeManagementModule
9181                },
9182                {
9183                    fn upgradeToAndCall(
9184                        data: &[u8],
9185                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9186                        <upgradeToAndCallCall as alloy_sol_types::SolCall>::abi_decode_raw(
9187                                data,
9188                            )
9189                            .map(HoprNodeManagementModuleCalls::upgradeToAndCall)
9190                    }
9191                    upgradeToAndCall
9192                },
9193                {
9194                    fn execTransactionFromModuleReturnData(
9195                        data: &[u8],
9196                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9197                        <execTransactionFromModuleReturnDataCall as alloy_sol_types::SolCall>::abi_decode_raw(
9198                                data,
9199                            )
9200                            .map(
9201                                HoprNodeManagementModuleCalls::execTransactionFromModuleReturnData,
9202                            )
9203                    }
9204                    execTransactionFromModuleReturnData
9205                },
9206                {
9207                    fn proxiableUUID(
9208                        data: &[u8],
9209                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9210                        <proxiableUUIDCall as alloy_sol_types::SolCall>::abi_decode_raw(
9211                                data,
9212                            )
9213                            .map(HoprNodeManagementModuleCalls::proxiableUUID)
9214                    }
9215                    proxiableUUID
9216                },
9217                {
9218                    fn encodeFunctionSigsAndPermissions(
9219                        data: &[u8],
9220                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9221                        <encodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_decode_raw(
9222                                data,
9223                            )
9224                            .map(
9225                                HoprNodeManagementModuleCalls::encodeFunctionSigsAndPermissions,
9226                            )
9227                    }
9228                    encodeFunctionSigsAndPermissions
9229                },
9230                {
9231                    fn decodeFunctionSigsAndPermissions(
9232                        data: &[u8],
9233                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9234                        <decodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_decode_raw(
9235                                data,
9236                            )
9237                            .map(
9238                                HoprNodeManagementModuleCalls::decodeFunctionSigsAndPermissions,
9239                            )
9240                    }
9241                    decodeFunctionSigsAndPermissions
9242                },
9243                {
9244                    fn getTargets(
9245                        data: &[u8],
9246                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9247                        <getTargetsCall as alloy_sol_types::SolCall>::abi_decode_raw(
9248                                data,
9249                            )
9250                            .map(HoprNodeManagementModuleCalls::getTargets)
9251                    }
9252                    getTargets
9253                },
9254                {
9255                    fn renounceOwnership(
9256                        data: &[u8],
9257                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9258                        <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw(
9259                                data,
9260                            )
9261                            .map(HoprNodeManagementModuleCalls::renounceOwnership)
9262                    }
9263                    renounceOwnership
9264                },
9265                {
9266                    fn scopeTargetChannels(
9267                        data: &[u8],
9268                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9269                        <scopeTargetChannelsCall as alloy_sol_types::SolCall>::abi_decode_raw(
9270                                data,
9271                            )
9272                            .map(HoprNodeManagementModuleCalls::scopeTargetChannels)
9273                    }
9274                    scopeTargetChannels
9275                },
9276                {
9277                    fn setMultisend(
9278                        data: &[u8],
9279                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9280                        <setMultisendCall as alloy_sol_types::SolCall>::abi_decode_raw(
9281                                data,
9282                            )
9283                            .map(HoprNodeManagementModuleCalls::setMultisend)
9284                    }
9285                    setMultisend
9286                },
9287                {
9288                    fn owner(
9289                        data: &[u8],
9290                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9291                        <ownerCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
9292                            .map(HoprNodeManagementModuleCalls::owner)
9293                    }
9294                    owner
9295                },
9296                {
9297                    fn addNode(
9298                        data: &[u8],
9299                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9300                        <addNodeCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
9301                            .map(HoprNodeManagementModuleCalls::addNode)
9302                    }
9303                    addNode
9304                },
9305                {
9306                    fn addChannelsAndTokenTarget(
9307                        data: &[u8],
9308                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9309                        <addChannelsAndTokenTargetCall as alloy_sol_types::SolCall>::abi_decode_raw(
9310                                data,
9311                            )
9312                            .map(
9313                                HoprNodeManagementModuleCalls::addChannelsAndTokenTarget,
9314                            )
9315                    }
9316                    addChannelsAndTokenTarget
9317                },
9318                {
9319                    fn scopeTargetToken(
9320                        data: &[u8],
9321                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9322                        <scopeTargetTokenCall as alloy_sol_types::SolCall>::abi_decode_raw(
9323                                data,
9324                            )
9325                            .map(HoprNodeManagementModuleCalls::scopeTargetToken)
9326                    }
9327                    scopeTargetToken
9328                },
9329                {
9330                    fn removeNode(
9331                        data: &[u8],
9332                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9333                        <removeNodeCall as alloy_sol_types::SolCall>::abi_decode_raw(
9334                                data,
9335                            )
9336                            .map(HoprNodeManagementModuleCalls::removeNode)
9337                    }
9338                    removeNode
9339                },
9340                {
9341                    fn includeNode(
9342                        data: &[u8],
9343                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9344                        <includeNodeCall as alloy_sol_types::SolCall>::abi_decode_raw(
9345                                data,
9346                            )
9347                            .map(HoprNodeManagementModuleCalls::includeNode)
9348                    }
9349                    includeNode
9350                },
9351                {
9352                    fn scopeTokenCapabilities(
9353                        data: &[u8],
9354                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9355                        <scopeTokenCapabilitiesCall as alloy_sol_types::SolCall>::abi_decode_raw(
9356                                data,
9357                            )
9358                            .map(HoprNodeManagementModuleCalls::scopeTokenCapabilities)
9359                    }
9360                    scopeTokenCapabilities
9361                },
9362                {
9363                    fn scopeSendCapability(
9364                        data: &[u8],
9365                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9366                        <scopeSendCapabilityCall as alloy_sol_types::SolCall>::abi_decode_raw(
9367                                data,
9368                            )
9369                            .map(HoprNodeManagementModuleCalls::scopeSendCapability)
9370                    }
9371                    scopeSendCapability
9372                },
9373                {
9374                    fn scopeTargetSend(
9375                        data: &[u8],
9376                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9377                        <scopeTargetSendCall as alloy_sol_types::SolCall>::abi_decode_raw(
9378                                data,
9379                            )
9380                            .map(HoprNodeManagementModuleCalls::scopeTargetSend)
9381                    }
9382                    scopeTargetSend
9383                },
9384                {
9385                    fn getGranularPermissions(
9386                        data: &[u8],
9387                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9388                        <getGranularPermissionsCall as alloy_sol_types::SolCall>::abi_decode_raw(
9389                                data,
9390                            )
9391                            .map(HoprNodeManagementModuleCalls::getGranularPermissions)
9392                    }
9393                    getGranularPermissions
9394                },
9395                {
9396                    fn tryGetTarget(
9397                        data: &[u8],
9398                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9399                        <tryGetTargetCall as alloy_sol_types::SolCall>::abi_decode_raw(
9400                                data,
9401                            )
9402                            .map(HoprNodeManagementModuleCalls::tryGetTarget)
9403                    }
9404                    tryGetTarget
9405                },
9406                {
9407                    fn transferOwnership(
9408                        data: &[u8],
9409                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9410                        <transferOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw(
9411                                data,
9412                            )
9413                            .map(HoprNodeManagementModuleCalls::transferOwnership)
9414                    }
9415                    transferOwnership
9416                },
9417                {
9418                    fn scopeChannelsCapabilities(
9419                        data: &[u8],
9420                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9421                        <scopeChannelsCapabilitiesCall as alloy_sol_types::SolCall>::abi_decode_raw(
9422                                data,
9423                            )
9424                            .map(
9425                                HoprNodeManagementModuleCalls::scopeChannelsCapabilities,
9426                            )
9427                    }
9428                    scopeChannelsCapabilities
9429                },
9430            ];
9431            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
9432                return Err(
9433                    alloy_sol_types::Error::unknown_selector(
9434                        <Self as alloy_sol_types::SolInterface>::NAME,
9435                        selector,
9436                    ),
9437                );
9438            };
9439            DECODE_SHIMS[idx](data)
9440        }
9441        #[inline]
9442        #[allow(non_snake_case)]
9443        fn abi_decode_raw_validate(
9444            selector: [u8; 4],
9445            data: &[u8],
9446        ) -> alloy_sol_types::Result<Self> {
9447            static DECODE_VALIDATE_SHIMS: &[fn(
9448                &[u8],
9449            ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls>] = &[
9450                {
9451                    fn isNode(
9452                        data: &[u8],
9453                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9454                        <isNodeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9455                                data,
9456                            )
9457                            .map(HoprNodeManagementModuleCalls::isNode)
9458                    }
9459                    isNode
9460                },
9461                {
9462                    fn multisend(
9463                        data: &[u8],
9464                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9465                        <multisendCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9466                                data,
9467                            )
9468                            .map(HoprNodeManagementModuleCalls::multisend)
9469                    }
9470                    multisend
9471                },
9472                {
9473                    fn revokeTarget(
9474                        data: &[u8],
9475                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9476                        <revokeTargetCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9477                                data,
9478                            )
9479                            .map(HoprNodeManagementModuleCalls::revokeTarget)
9480                    }
9481                    revokeTarget
9482                },
9483                {
9484                    fn upgradeTo(
9485                        data: &[u8],
9486                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9487                        <upgradeToCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9488                                data,
9489                            )
9490                            .map(HoprNodeManagementModuleCalls::upgradeTo)
9491                    }
9492                    upgradeTo
9493                },
9494                {
9495                    fn initialize(
9496                        data: &[u8],
9497                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9498                        <initializeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9499                                data,
9500                            )
9501                            .map(HoprNodeManagementModuleCalls::initialize)
9502                    }
9503                    initialize
9504                },
9505                {
9506                    fn execTransactionFromModule(
9507                        data: &[u8],
9508                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9509                        <execTransactionFromModuleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9510                                data,
9511                            )
9512                            .map(
9513                                HoprNodeManagementModuleCalls::execTransactionFromModule,
9514                            )
9515                    }
9516                    execTransactionFromModule
9517                },
9518                {
9519                    fn isHoprNodeManagementModule(
9520                        data: &[u8],
9521                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9522                        <isHoprNodeManagementModuleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9523                                data,
9524                            )
9525                            .map(
9526                                HoprNodeManagementModuleCalls::isHoprNodeManagementModule,
9527                            )
9528                    }
9529                    isHoprNodeManagementModule
9530                },
9531                {
9532                    fn upgradeToAndCall(
9533                        data: &[u8],
9534                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9535                        <upgradeToAndCallCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9536                                data,
9537                            )
9538                            .map(HoprNodeManagementModuleCalls::upgradeToAndCall)
9539                    }
9540                    upgradeToAndCall
9541                },
9542                {
9543                    fn execTransactionFromModuleReturnData(
9544                        data: &[u8],
9545                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9546                        <execTransactionFromModuleReturnDataCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9547                                data,
9548                            )
9549                            .map(
9550                                HoprNodeManagementModuleCalls::execTransactionFromModuleReturnData,
9551                            )
9552                    }
9553                    execTransactionFromModuleReturnData
9554                },
9555                {
9556                    fn proxiableUUID(
9557                        data: &[u8],
9558                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9559                        <proxiableUUIDCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9560                                data,
9561                            )
9562                            .map(HoprNodeManagementModuleCalls::proxiableUUID)
9563                    }
9564                    proxiableUUID
9565                },
9566                {
9567                    fn encodeFunctionSigsAndPermissions(
9568                        data: &[u8],
9569                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9570                        <encodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9571                                data,
9572                            )
9573                            .map(
9574                                HoprNodeManagementModuleCalls::encodeFunctionSigsAndPermissions,
9575                            )
9576                    }
9577                    encodeFunctionSigsAndPermissions
9578                },
9579                {
9580                    fn decodeFunctionSigsAndPermissions(
9581                        data: &[u8],
9582                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9583                        <decodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9584                                data,
9585                            )
9586                            .map(
9587                                HoprNodeManagementModuleCalls::decodeFunctionSigsAndPermissions,
9588                            )
9589                    }
9590                    decodeFunctionSigsAndPermissions
9591                },
9592                {
9593                    fn getTargets(
9594                        data: &[u8],
9595                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9596                        <getTargetsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9597                                data,
9598                            )
9599                            .map(HoprNodeManagementModuleCalls::getTargets)
9600                    }
9601                    getTargets
9602                },
9603                {
9604                    fn renounceOwnership(
9605                        data: &[u8],
9606                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9607                        <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9608                                data,
9609                            )
9610                            .map(HoprNodeManagementModuleCalls::renounceOwnership)
9611                    }
9612                    renounceOwnership
9613                },
9614                {
9615                    fn scopeTargetChannels(
9616                        data: &[u8],
9617                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9618                        <scopeTargetChannelsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9619                                data,
9620                            )
9621                            .map(HoprNodeManagementModuleCalls::scopeTargetChannels)
9622                    }
9623                    scopeTargetChannels
9624                },
9625                {
9626                    fn setMultisend(
9627                        data: &[u8],
9628                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9629                        <setMultisendCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9630                                data,
9631                            )
9632                            .map(HoprNodeManagementModuleCalls::setMultisend)
9633                    }
9634                    setMultisend
9635                },
9636                {
9637                    fn owner(
9638                        data: &[u8],
9639                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9640                        <ownerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9641                                data,
9642                            )
9643                            .map(HoprNodeManagementModuleCalls::owner)
9644                    }
9645                    owner
9646                },
9647                {
9648                    fn addNode(
9649                        data: &[u8],
9650                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9651                        <addNodeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9652                                data,
9653                            )
9654                            .map(HoprNodeManagementModuleCalls::addNode)
9655                    }
9656                    addNode
9657                },
9658                {
9659                    fn addChannelsAndTokenTarget(
9660                        data: &[u8],
9661                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9662                        <addChannelsAndTokenTargetCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9663                                data,
9664                            )
9665                            .map(
9666                                HoprNodeManagementModuleCalls::addChannelsAndTokenTarget,
9667                            )
9668                    }
9669                    addChannelsAndTokenTarget
9670                },
9671                {
9672                    fn scopeTargetToken(
9673                        data: &[u8],
9674                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9675                        <scopeTargetTokenCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9676                                data,
9677                            )
9678                            .map(HoprNodeManagementModuleCalls::scopeTargetToken)
9679                    }
9680                    scopeTargetToken
9681                },
9682                {
9683                    fn removeNode(
9684                        data: &[u8],
9685                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9686                        <removeNodeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9687                                data,
9688                            )
9689                            .map(HoprNodeManagementModuleCalls::removeNode)
9690                    }
9691                    removeNode
9692                },
9693                {
9694                    fn includeNode(
9695                        data: &[u8],
9696                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9697                        <includeNodeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9698                                data,
9699                            )
9700                            .map(HoprNodeManagementModuleCalls::includeNode)
9701                    }
9702                    includeNode
9703                },
9704                {
9705                    fn scopeTokenCapabilities(
9706                        data: &[u8],
9707                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9708                        <scopeTokenCapabilitiesCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9709                                data,
9710                            )
9711                            .map(HoprNodeManagementModuleCalls::scopeTokenCapabilities)
9712                    }
9713                    scopeTokenCapabilities
9714                },
9715                {
9716                    fn scopeSendCapability(
9717                        data: &[u8],
9718                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9719                        <scopeSendCapabilityCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9720                                data,
9721                            )
9722                            .map(HoprNodeManagementModuleCalls::scopeSendCapability)
9723                    }
9724                    scopeSendCapability
9725                },
9726                {
9727                    fn scopeTargetSend(
9728                        data: &[u8],
9729                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9730                        <scopeTargetSendCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9731                                data,
9732                            )
9733                            .map(HoprNodeManagementModuleCalls::scopeTargetSend)
9734                    }
9735                    scopeTargetSend
9736                },
9737                {
9738                    fn getGranularPermissions(
9739                        data: &[u8],
9740                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9741                        <getGranularPermissionsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9742                                data,
9743                            )
9744                            .map(HoprNodeManagementModuleCalls::getGranularPermissions)
9745                    }
9746                    getGranularPermissions
9747                },
9748                {
9749                    fn tryGetTarget(
9750                        data: &[u8],
9751                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9752                        <tryGetTargetCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9753                                data,
9754                            )
9755                            .map(HoprNodeManagementModuleCalls::tryGetTarget)
9756                    }
9757                    tryGetTarget
9758                },
9759                {
9760                    fn transferOwnership(
9761                        data: &[u8],
9762                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9763                        <transferOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9764                                data,
9765                            )
9766                            .map(HoprNodeManagementModuleCalls::transferOwnership)
9767                    }
9768                    transferOwnership
9769                },
9770                {
9771                    fn scopeChannelsCapabilities(
9772                        data: &[u8],
9773                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleCalls> {
9774                        <scopeChannelsCapabilitiesCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
9775                                data,
9776                            )
9777                            .map(
9778                                HoprNodeManagementModuleCalls::scopeChannelsCapabilities,
9779                            )
9780                    }
9781                    scopeChannelsCapabilities
9782                },
9783            ];
9784            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
9785                return Err(
9786                    alloy_sol_types::Error::unknown_selector(
9787                        <Self as alloy_sol_types::SolInterface>::NAME,
9788                        selector,
9789                    ),
9790                );
9791            };
9792            DECODE_VALIDATE_SHIMS[idx](data)
9793        }
9794        #[inline]
9795        fn abi_encoded_size(&self) -> usize {
9796            match self {
9797                Self::addChannelsAndTokenTarget(inner) => {
9798                    <addChannelsAndTokenTargetCall as alloy_sol_types::SolCall>::abi_encoded_size(
9799                        inner,
9800                    )
9801                }
9802                Self::addNode(inner) => {
9803                    <addNodeCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9804                }
9805                Self::decodeFunctionSigsAndPermissions(inner) => {
9806                    <decodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_encoded_size(
9807                        inner,
9808                    )
9809                }
9810                Self::encodeFunctionSigsAndPermissions(inner) => {
9811                    <encodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_encoded_size(
9812                        inner,
9813                    )
9814                }
9815                Self::execTransactionFromModule(inner) => {
9816                    <execTransactionFromModuleCall as alloy_sol_types::SolCall>::abi_encoded_size(
9817                        inner,
9818                    )
9819                }
9820                Self::execTransactionFromModuleReturnData(inner) => {
9821                    <execTransactionFromModuleReturnDataCall as alloy_sol_types::SolCall>::abi_encoded_size(
9822                        inner,
9823                    )
9824                }
9825                Self::getGranularPermissions(inner) => {
9826                    <getGranularPermissionsCall as alloy_sol_types::SolCall>::abi_encoded_size(
9827                        inner,
9828                    )
9829                }
9830                Self::getTargets(inner) => {
9831                    <getTargetsCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9832                }
9833                Self::includeNode(inner) => {
9834                    <includeNodeCall as alloy_sol_types::SolCall>::abi_encoded_size(
9835                        inner,
9836                    )
9837                }
9838                Self::initialize(inner) => {
9839                    <initializeCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9840                }
9841                Self::isHoprNodeManagementModule(inner) => {
9842                    <isHoprNodeManagementModuleCall as alloy_sol_types::SolCall>::abi_encoded_size(
9843                        inner,
9844                    )
9845                }
9846                Self::isNode(inner) => {
9847                    <isNodeCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9848                }
9849                Self::multisend(inner) => {
9850                    <multisendCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9851                }
9852                Self::owner(inner) => {
9853                    <ownerCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9854                }
9855                Self::proxiableUUID(inner) => {
9856                    <proxiableUUIDCall as alloy_sol_types::SolCall>::abi_encoded_size(
9857                        inner,
9858                    )
9859                }
9860                Self::removeNode(inner) => {
9861                    <removeNodeCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9862                }
9863                Self::renounceOwnership(inner) => {
9864                    <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_encoded_size(
9865                        inner,
9866                    )
9867                }
9868                Self::revokeTarget(inner) => {
9869                    <revokeTargetCall as alloy_sol_types::SolCall>::abi_encoded_size(
9870                        inner,
9871                    )
9872                }
9873                Self::scopeChannelsCapabilities(inner) => {
9874                    <scopeChannelsCapabilitiesCall as alloy_sol_types::SolCall>::abi_encoded_size(
9875                        inner,
9876                    )
9877                }
9878                Self::scopeSendCapability(inner) => {
9879                    <scopeSendCapabilityCall as alloy_sol_types::SolCall>::abi_encoded_size(
9880                        inner,
9881                    )
9882                }
9883                Self::scopeTargetChannels(inner) => {
9884                    <scopeTargetChannelsCall as alloy_sol_types::SolCall>::abi_encoded_size(
9885                        inner,
9886                    )
9887                }
9888                Self::scopeTargetSend(inner) => {
9889                    <scopeTargetSendCall as alloy_sol_types::SolCall>::abi_encoded_size(
9890                        inner,
9891                    )
9892                }
9893                Self::scopeTargetToken(inner) => {
9894                    <scopeTargetTokenCall as alloy_sol_types::SolCall>::abi_encoded_size(
9895                        inner,
9896                    )
9897                }
9898                Self::scopeTokenCapabilities(inner) => {
9899                    <scopeTokenCapabilitiesCall as alloy_sol_types::SolCall>::abi_encoded_size(
9900                        inner,
9901                    )
9902                }
9903                Self::setMultisend(inner) => {
9904                    <setMultisendCall as alloy_sol_types::SolCall>::abi_encoded_size(
9905                        inner,
9906                    )
9907                }
9908                Self::transferOwnership(inner) => {
9909                    <transferOwnershipCall as alloy_sol_types::SolCall>::abi_encoded_size(
9910                        inner,
9911                    )
9912                }
9913                Self::tryGetTarget(inner) => {
9914                    <tryGetTargetCall as alloy_sol_types::SolCall>::abi_encoded_size(
9915                        inner,
9916                    )
9917                }
9918                Self::upgradeTo(inner) => {
9919                    <upgradeToCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
9920                }
9921                Self::upgradeToAndCall(inner) => {
9922                    <upgradeToAndCallCall as alloy_sol_types::SolCall>::abi_encoded_size(
9923                        inner,
9924                    )
9925                }
9926            }
9927        }
9928        #[inline]
9929        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
9930            match self {
9931                Self::addChannelsAndTokenTarget(inner) => {
9932                    <addChannelsAndTokenTargetCall as alloy_sol_types::SolCall>::abi_encode_raw(
9933                        inner,
9934                        out,
9935                    )
9936                }
9937                Self::addNode(inner) => {
9938                    <addNodeCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
9939                }
9940                Self::decodeFunctionSigsAndPermissions(inner) => {
9941                    <decodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_encode_raw(
9942                        inner,
9943                        out,
9944                    )
9945                }
9946                Self::encodeFunctionSigsAndPermissions(inner) => {
9947                    <encodeFunctionSigsAndPermissionsCall as alloy_sol_types::SolCall>::abi_encode_raw(
9948                        inner,
9949                        out,
9950                    )
9951                }
9952                Self::execTransactionFromModule(inner) => {
9953                    <execTransactionFromModuleCall as alloy_sol_types::SolCall>::abi_encode_raw(
9954                        inner,
9955                        out,
9956                    )
9957                }
9958                Self::execTransactionFromModuleReturnData(inner) => {
9959                    <execTransactionFromModuleReturnDataCall as alloy_sol_types::SolCall>::abi_encode_raw(
9960                        inner,
9961                        out,
9962                    )
9963                }
9964                Self::getGranularPermissions(inner) => {
9965                    <getGranularPermissionsCall as alloy_sol_types::SolCall>::abi_encode_raw(
9966                        inner,
9967                        out,
9968                    )
9969                }
9970                Self::getTargets(inner) => {
9971                    <getTargetsCall as alloy_sol_types::SolCall>::abi_encode_raw(
9972                        inner,
9973                        out,
9974                    )
9975                }
9976                Self::includeNode(inner) => {
9977                    <includeNodeCall as alloy_sol_types::SolCall>::abi_encode_raw(
9978                        inner,
9979                        out,
9980                    )
9981                }
9982                Self::initialize(inner) => {
9983                    <initializeCall as alloy_sol_types::SolCall>::abi_encode_raw(
9984                        inner,
9985                        out,
9986                    )
9987                }
9988                Self::isHoprNodeManagementModule(inner) => {
9989                    <isHoprNodeManagementModuleCall as alloy_sol_types::SolCall>::abi_encode_raw(
9990                        inner,
9991                        out,
9992                    )
9993                }
9994                Self::isNode(inner) => {
9995                    <isNodeCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
9996                }
9997                Self::multisend(inner) => {
9998                    <multisendCall as alloy_sol_types::SolCall>::abi_encode_raw(
9999                        inner,
10000                        out,
10001                    )
10002                }
10003                Self::owner(inner) => {
10004                    <ownerCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
10005                }
10006                Self::proxiableUUID(inner) => {
10007                    <proxiableUUIDCall as alloy_sol_types::SolCall>::abi_encode_raw(
10008                        inner,
10009                        out,
10010                    )
10011                }
10012                Self::removeNode(inner) => {
10013                    <removeNodeCall as alloy_sol_types::SolCall>::abi_encode_raw(
10014                        inner,
10015                        out,
10016                    )
10017                }
10018                Self::renounceOwnership(inner) => {
10019                    <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_encode_raw(
10020                        inner,
10021                        out,
10022                    )
10023                }
10024                Self::revokeTarget(inner) => {
10025                    <revokeTargetCall as alloy_sol_types::SolCall>::abi_encode_raw(
10026                        inner,
10027                        out,
10028                    )
10029                }
10030                Self::scopeChannelsCapabilities(inner) => {
10031                    <scopeChannelsCapabilitiesCall as alloy_sol_types::SolCall>::abi_encode_raw(
10032                        inner,
10033                        out,
10034                    )
10035                }
10036                Self::scopeSendCapability(inner) => {
10037                    <scopeSendCapabilityCall as alloy_sol_types::SolCall>::abi_encode_raw(
10038                        inner,
10039                        out,
10040                    )
10041                }
10042                Self::scopeTargetChannels(inner) => {
10043                    <scopeTargetChannelsCall as alloy_sol_types::SolCall>::abi_encode_raw(
10044                        inner,
10045                        out,
10046                    )
10047                }
10048                Self::scopeTargetSend(inner) => {
10049                    <scopeTargetSendCall as alloy_sol_types::SolCall>::abi_encode_raw(
10050                        inner,
10051                        out,
10052                    )
10053                }
10054                Self::scopeTargetToken(inner) => {
10055                    <scopeTargetTokenCall as alloy_sol_types::SolCall>::abi_encode_raw(
10056                        inner,
10057                        out,
10058                    )
10059                }
10060                Self::scopeTokenCapabilities(inner) => {
10061                    <scopeTokenCapabilitiesCall as alloy_sol_types::SolCall>::abi_encode_raw(
10062                        inner,
10063                        out,
10064                    )
10065                }
10066                Self::setMultisend(inner) => {
10067                    <setMultisendCall as alloy_sol_types::SolCall>::abi_encode_raw(
10068                        inner,
10069                        out,
10070                    )
10071                }
10072                Self::transferOwnership(inner) => {
10073                    <transferOwnershipCall as alloy_sol_types::SolCall>::abi_encode_raw(
10074                        inner,
10075                        out,
10076                    )
10077                }
10078                Self::tryGetTarget(inner) => {
10079                    <tryGetTargetCall as alloy_sol_types::SolCall>::abi_encode_raw(
10080                        inner,
10081                        out,
10082                    )
10083                }
10084                Self::upgradeTo(inner) => {
10085                    <upgradeToCall as alloy_sol_types::SolCall>::abi_encode_raw(
10086                        inner,
10087                        out,
10088                    )
10089                }
10090                Self::upgradeToAndCall(inner) => {
10091                    <upgradeToAndCallCall as alloy_sol_types::SolCall>::abi_encode_raw(
10092                        inner,
10093                        out,
10094                    )
10095                }
10096            }
10097        }
10098    }
10099    ///Container for all the [`HoprNodeManagementModule`](self) custom errors.
10100    #[derive(serde::Serialize, serde::Deserialize)]
10101    #[derive(Debug, PartialEq, Eq, Hash)]
10102    pub enum HoprNodeManagementModuleErrors {
10103        #[allow(missing_docs)]
10104        AddressIsZero(AddressIsZero),
10105        #[allow(missing_docs)]
10106        AlreadyInitialized(AlreadyInitialized),
10107        #[allow(missing_docs)]
10108        ArrayTooLong(ArrayTooLong),
10109        #[allow(missing_docs)]
10110        ArraysDifferentLength(ArraysDifferentLength),
10111        #[allow(missing_docs)]
10112        CalldataOutOfBounds(CalldataOutOfBounds),
10113        #[allow(missing_docs)]
10114        CannotChangeOwner(CannotChangeOwner),
10115        #[allow(missing_docs)]
10116        DefaultPermissionRejected(DefaultPermissionRejected),
10117        #[allow(missing_docs)]
10118        DelegateCallNotAllowed(DelegateCallNotAllowed),
10119        #[allow(missing_docs)]
10120        FunctionSignatureTooShort(FunctionSignatureTooShort),
10121        #[allow(missing_docs)]
10122        GranularPermissionRejected(GranularPermissionRejected),
10123        #[allow(missing_docs)]
10124        NoMembership(NoMembership),
10125        #[allow(missing_docs)]
10126        NodePermissionRejected(NodePermissionRejected),
10127        #[allow(missing_docs)]
10128        NonExistentKey(NonExistentKey),
10129        #[allow(missing_docs)]
10130        ParameterNotAllowed(ParameterNotAllowed),
10131        #[allow(missing_docs)]
10132        PermissionNotConfigured(PermissionNotConfigured),
10133        #[allow(missing_docs)]
10134        PermissionNotFound(PermissionNotFound),
10135        #[allow(missing_docs)]
10136        SafeMultisendSameAddress(SafeMultisendSameAddress),
10137        #[allow(missing_docs)]
10138        SendNotAllowed(SendNotAllowed),
10139        #[allow(missing_docs)]
10140        TargetAddressNotAllowed(TargetAddressNotAllowed),
10141        #[allow(missing_docs)]
10142        TargetIsNotScoped(TargetIsNotScoped),
10143        #[allow(missing_docs)]
10144        TargetIsScoped(TargetIsScoped),
10145        #[allow(missing_docs)]
10146        TooManyCapabilities(TooManyCapabilities),
10147        #[allow(missing_docs)]
10148        UnacceptableMultiSendOffset(UnacceptableMultiSendOffset),
10149        #[allow(missing_docs)]
10150        WithMembership(WithMembership),
10151    }
10152    #[automatically_derived]
10153    impl HoprNodeManagementModuleErrors {
10154        /// All the selectors of this enum.
10155        ///
10156        /// Note that the selectors might not be in the same order as the variants.
10157        /// No guarantees are made about the order of the selectors.
10158        ///
10159        /// Prefer using `SolInterface` methods instead.
10160        pub const SELECTORS: &'static [[u8; 4usize]] = &[
10161            [9u8, 233u8, 205u8, 73u8],
10162            [13u8, 137u8, 67u8, 142u8],
10163            [13u8, 193u8, 73u8, 240u8],
10164            [45u8, 5u8, 25u8, 173u8],
10165            [49u8, 233u8, 130u8, 70u8],
10166            [70u8, 132u8, 193u8, 34u8],
10167            [70u8, 173u8, 69u8, 136u8],
10168            [74u8, 137u8, 3u8, 33u8],
10169            [88u8, 114u8, 48u8, 55u8],
10170            [89u8, 138u8, 14u8, 33u8],
10171            [110u8, 176u8, 49u8, 95u8],
10172            [116u8, 38u8, 56u8, 180u8],
10173            [116u8, 244u8, 213u8, 55u8],
10174            [126u8, 209u8, 17u8, 55u8],
10175            [134u8, 77u8, 209u8, 231u8],
10176            [134u8, 121u8, 21u8, 171u8],
10177            [180u8, 74u8, 249u8, 175u8],
10178            [189u8, 38u8, 204u8, 56u8],
10179            [216u8, 69u8, 90u8, 19u8],
10180            [227u8, 160u8, 90u8, 148u8],
10181            [232u8, 192u8, 125u8, 42u8],
10182            [239u8, 52u8, 64u8, 172u8],
10183            [253u8, 103u8, 14u8, 190u8],
10184            [253u8, 142u8, 159u8, 40u8],
10185        ];
10186    }
10187    #[automatically_derived]
10188    impl alloy_sol_types::SolInterface for HoprNodeManagementModuleErrors {
10189        const NAME: &'static str = "HoprNodeManagementModuleErrors";
10190        const MIN_DATA_LENGTH: usize = 0usize;
10191        const COUNT: usize = 24usize;
10192        #[inline]
10193        fn selector(&self) -> [u8; 4] {
10194            match self {
10195                Self::AddressIsZero(_) => {
10196                    <AddressIsZero as alloy_sol_types::SolError>::SELECTOR
10197                }
10198                Self::AlreadyInitialized(_) => {
10199                    <AlreadyInitialized as alloy_sol_types::SolError>::SELECTOR
10200                }
10201                Self::ArrayTooLong(_) => {
10202                    <ArrayTooLong as alloy_sol_types::SolError>::SELECTOR
10203                }
10204                Self::ArraysDifferentLength(_) => {
10205                    <ArraysDifferentLength as alloy_sol_types::SolError>::SELECTOR
10206                }
10207                Self::CalldataOutOfBounds(_) => {
10208                    <CalldataOutOfBounds as alloy_sol_types::SolError>::SELECTOR
10209                }
10210                Self::CannotChangeOwner(_) => {
10211                    <CannotChangeOwner as alloy_sol_types::SolError>::SELECTOR
10212                }
10213                Self::DefaultPermissionRejected(_) => {
10214                    <DefaultPermissionRejected as alloy_sol_types::SolError>::SELECTOR
10215                }
10216                Self::DelegateCallNotAllowed(_) => {
10217                    <DelegateCallNotAllowed as alloy_sol_types::SolError>::SELECTOR
10218                }
10219                Self::FunctionSignatureTooShort(_) => {
10220                    <FunctionSignatureTooShort as alloy_sol_types::SolError>::SELECTOR
10221                }
10222                Self::GranularPermissionRejected(_) => {
10223                    <GranularPermissionRejected as alloy_sol_types::SolError>::SELECTOR
10224                }
10225                Self::NoMembership(_) => {
10226                    <NoMembership as alloy_sol_types::SolError>::SELECTOR
10227                }
10228                Self::NodePermissionRejected(_) => {
10229                    <NodePermissionRejected as alloy_sol_types::SolError>::SELECTOR
10230                }
10231                Self::NonExistentKey(_) => {
10232                    <NonExistentKey as alloy_sol_types::SolError>::SELECTOR
10233                }
10234                Self::ParameterNotAllowed(_) => {
10235                    <ParameterNotAllowed as alloy_sol_types::SolError>::SELECTOR
10236                }
10237                Self::PermissionNotConfigured(_) => {
10238                    <PermissionNotConfigured as alloy_sol_types::SolError>::SELECTOR
10239                }
10240                Self::PermissionNotFound(_) => {
10241                    <PermissionNotFound as alloy_sol_types::SolError>::SELECTOR
10242                }
10243                Self::SafeMultisendSameAddress(_) => {
10244                    <SafeMultisendSameAddress as alloy_sol_types::SolError>::SELECTOR
10245                }
10246                Self::SendNotAllowed(_) => {
10247                    <SendNotAllowed as alloy_sol_types::SolError>::SELECTOR
10248                }
10249                Self::TargetAddressNotAllowed(_) => {
10250                    <TargetAddressNotAllowed as alloy_sol_types::SolError>::SELECTOR
10251                }
10252                Self::TargetIsNotScoped(_) => {
10253                    <TargetIsNotScoped as alloy_sol_types::SolError>::SELECTOR
10254                }
10255                Self::TargetIsScoped(_) => {
10256                    <TargetIsScoped as alloy_sol_types::SolError>::SELECTOR
10257                }
10258                Self::TooManyCapabilities(_) => {
10259                    <TooManyCapabilities as alloy_sol_types::SolError>::SELECTOR
10260                }
10261                Self::UnacceptableMultiSendOffset(_) => {
10262                    <UnacceptableMultiSendOffset as alloy_sol_types::SolError>::SELECTOR
10263                }
10264                Self::WithMembership(_) => {
10265                    <WithMembership as alloy_sol_types::SolError>::SELECTOR
10266                }
10267            }
10268        }
10269        #[inline]
10270        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
10271            Self::SELECTORS.get(i).copied()
10272        }
10273        #[inline]
10274        fn valid_selector(selector: [u8; 4]) -> bool {
10275            Self::SELECTORS.binary_search(&selector).is_ok()
10276        }
10277        #[inline]
10278        #[allow(non_snake_case)]
10279        fn abi_decode_raw(
10280            selector: [u8; 4],
10281            data: &[u8],
10282        ) -> alloy_sol_types::Result<Self> {
10283            static DECODE_SHIMS: &[fn(
10284                &[u8],
10285            ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors>] = &[
10286                {
10287                    fn SendNotAllowed(
10288                        data: &[u8],
10289                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10290                        <SendNotAllowed as alloy_sol_types::SolError>::abi_decode_raw(
10291                                data,
10292                            )
10293                            .map(HoprNodeManagementModuleErrors::SendNotAllowed)
10294                    }
10295                    SendNotAllowed
10296                },
10297                {
10298                    fn DelegateCallNotAllowed(
10299                        data: &[u8],
10300                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10301                        <DelegateCallNotAllowed as alloy_sol_types::SolError>::abi_decode_raw(
10302                                data,
10303                            )
10304                            .map(HoprNodeManagementModuleErrors::DelegateCallNotAllowed)
10305                    }
10306                    DelegateCallNotAllowed
10307                },
10308                {
10309                    fn AlreadyInitialized(
10310                        data: &[u8],
10311                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10312                        <AlreadyInitialized as alloy_sol_types::SolError>::abi_decode_raw(
10313                                data,
10314                            )
10315                            .map(HoprNodeManagementModuleErrors::AlreadyInitialized)
10316                    }
10317                    AlreadyInitialized
10318                },
10319                {
10320                    fn NonExistentKey(
10321                        data: &[u8],
10322                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10323                        <NonExistentKey as alloy_sol_types::SolError>::abi_decode_raw(
10324                                data,
10325                            )
10326                            .map(HoprNodeManagementModuleErrors::NonExistentKey)
10327                    }
10328                    NonExistentKey
10329                },
10330                {
10331                    fn ParameterNotAllowed(
10332                        data: &[u8],
10333                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10334                        <ParameterNotAllowed as alloy_sol_types::SolError>::abi_decode_raw(
10335                                data,
10336                            )
10337                            .map(HoprNodeManagementModuleErrors::ParameterNotAllowed)
10338                    }
10339                    ParameterNotAllowed
10340                },
10341                {
10342                    fn FunctionSignatureTooShort(
10343                        data: &[u8],
10344                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10345                        <FunctionSignatureTooShort as alloy_sol_types::SolError>::abi_decode_raw(
10346                                data,
10347                            )
10348                            .map(
10349                                HoprNodeManagementModuleErrors::FunctionSignatureTooShort,
10350                            )
10351                    }
10352                    FunctionSignatureTooShort
10353                },
10354                {
10355                    fn PermissionNotConfigured(
10356                        data: &[u8],
10357                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10358                        <PermissionNotConfigured as alloy_sol_types::SolError>::abi_decode_raw(
10359                                data,
10360                            )
10361                            .map(HoprNodeManagementModuleErrors::PermissionNotConfigured)
10362                    }
10363                    PermissionNotConfigured
10364                },
10365                {
10366                    fn TargetIsNotScoped(
10367                        data: &[u8],
10368                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10369                        <TargetIsNotScoped as alloy_sol_types::SolError>::abi_decode_raw(
10370                                data,
10371                            )
10372                            .map(HoprNodeManagementModuleErrors::TargetIsNotScoped)
10373                    }
10374                    TargetIsNotScoped
10375                },
10376                {
10377                    fn DefaultPermissionRejected(
10378                        data: &[u8],
10379                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10380                        <DefaultPermissionRejected as alloy_sol_types::SolError>::abi_decode_raw(
10381                                data,
10382                            )
10383                            .map(
10384                                HoprNodeManagementModuleErrors::DefaultPermissionRejected,
10385                            )
10386                    }
10387                    DefaultPermissionRejected
10388                },
10389                {
10390                    fn SafeMultisendSameAddress(
10391                        data: &[u8],
10392                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10393                        <SafeMultisendSameAddress as alloy_sol_types::SolError>::abi_decode_raw(
10394                                data,
10395                            )
10396                            .map(
10397                                HoprNodeManagementModuleErrors::SafeMultisendSameAddress,
10398                            )
10399                    }
10400                    SafeMultisendSameAddress
10401                },
10402                {
10403                    fn NodePermissionRejected(
10404                        data: &[u8],
10405                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10406                        <NodePermissionRejected as alloy_sol_types::SolError>::abi_decode_raw(
10407                                data,
10408                            )
10409                            .map(HoprNodeManagementModuleErrors::NodePermissionRejected)
10410                    }
10411                    NodePermissionRejected
10412                },
10413                {
10414                    fn CalldataOutOfBounds(
10415                        data: &[u8],
10416                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10417                        <CalldataOutOfBounds as alloy_sol_types::SolError>::abi_decode_raw(
10418                                data,
10419                            )
10420                            .map(HoprNodeManagementModuleErrors::CalldataOutOfBounds)
10421                    }
10422                    CalldataOutOfBounds
10423                },
10424                {
10425                    fn ArraysDifferentLength(
10426                        data: &[u8],
10427                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10428                        <ArraysDifferentLength as alloy_sol_types::SolError>::abi_decode_raw(
10429                                data,
10430                            )
10431                            .map(HoprNodeManagementModuleErrors::ArraysDifferentLength)
10432                    }
10433                    ArraysDifferentLength
10434                },
10435                {
10436                    fn UnacceptableMultiSendOffset(
10437                        data: &[u8],
10438                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10439                        <UnacceptableMultiSendOffset as alloy_sol_types::SolError>::abi_decode_raw(
10440                                data,
10441                            )
10442                            .map(
10443                                HoprNodeManagementModuleErrors::UnacceptableMultiSendOffset,
10444                            )
10445                    }
10446                    UnacceptableMultiSendOffset
10447                },
10448                {
10449                    fn GranularPermissionRejected(
10450                        data: &[u8],
10451                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10452                        <GranularPermissionRejected as alloy_sol_types::SolError>::abi_decode_raw(
10453                                data,
10454                            )
10455                            .map(
10456                                HoprNodeManagementModuleErrors::GranularPermissionRejected,
10457                            )
10458                    }
10459                    GranularPermissionRejected
10460                },
10461                {
10462                    fn AddressIsZero(
10463                        data: &[u8],
10464                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10465                        <AddressIsZero as alloy_sol_types::SolError>::abi_decode_raw(
10466                                data,
10467                            )
10468                            .map(HoprNodeManagementModuleErrors::AddressIsZero)
10469                    }
10470                    AddressIsZero
10471                },
10472                {
10473                    fn TooManyCapabilities(
10474                        data: &[u8],
10475                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10476                        <TooManyCapabilities as alloy_sol_types::SolError>::abi_decode_raw(
10477                                data,
10478                            )
10479                            .map(HoprNodeManagementModuleErrors::TooManyCapabilities)
10480                    }
10481                    TooManyCapabilities
10482                },
10483                {
10484                    fn ArrayTooLong(
10485                        data: &[u8],
10486                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10487                        <ArrayTooLong as alloy_sol_types::SolError>::abi_decode_raw(data)
10488                            .map(HoprNodeManagementModuleErrors::ArrayTooLong)
10489                    }
10490                    ArrayTooLong
10491                },
10492                {
10493                    fn PermissionNotFound(
10494                        data: &[u8],
10495                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10496                        <PermissionNotFound as alloy_sol_types::SolError>::abi_decode_raw(
10497                                data,
10498                            )
10499                            .map(HoprNodeManagementModuleErrors::PermissionNotFound)
10500                    }
10501                    PermissionNotFound
10502                },
10503                {
10504                    fn WithMembership(
10505                        data: &[u8],
10506                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10507                        <WithMembership as alloy_sol_types::SolError>::abi_decode_raw(
10508                                data,
10509                            )
10510                            .map(HoprNodeManagementModuleErrors::WithMembership)
10511                    }
10512                    WithMembership
10513                },
10514                {
10515                    fn TargetIsScoped(
10516                        data: &[u8],
10517                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10518                        <TargetIsScoped as alloy_sol_types::SolError>::abi_decode_raw(
10519                                data,
10520                            )
10521                            .map(HoprNodeManagementModuleErrors::TargetIsScoped)
10522                    }
10523                    TargetIsScoped
10524                },
10525                {
10526                    fn TargetAddressNotAllowed(
10527                        data: &[u8],
10528                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10529                        <TargetAddressNotAllowed as alloy_sol_types::SolError>::abi_decode_raw(
10530                                data,
10531                            )
10532                            .map(HoprNodeManagementModuleErrors::TargetAddressNotAllowed)
10533                    }
10534                    TargetAddressNotAllowed
10535                },
10536                {
10537                    fn CannotChangeOwner(
10538                        data: &[u8],
10539                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10540                        <CannotChangeOwner as alloy_sol_types::SolError>::abi_decode_raw(
10541                                data,
10542                            )
10543                            .map(HoprNodeManagementModuleErrors::CannotChangeOwner)
10544                    }
10545                    CannotChangeOwner
10546                },
10547                {
10548                    fn NoMembership(
10549                        data: &[u8],
10550                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10551                        <NoMembership as alloy_sol_types::SolError>::abi_decode_raw(data)
10552                            .map(HoprNodeManagementModuleErrors::NoMembership)
10553                    }
10554                    NoMembership
10555                },
10556            ];
10557            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
10558                return Err(
10559                    alloy_sol_types::Error::unknown_selector(
10560                        <Self as alloy_sol_types::SolInterface>::NAME,
10561                        selector,
10562                    ),
10563                );
10564            };
10565            DECODE_SHIMS[idx](data)
10566        }
10567        #[inline]
10568        #[allow(non_snake_case)]
10569        fn abi_decode_raw_validate(
10570            selector: [u8; 4],
10571            data: &[u8],
10572        ) -> alloy_sol_types::Result<Self> {
10573            static DECODE_VALIDATE_SHIMS: &[fn(
10574                &[u8],
10575            ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors>] = &[
10576                {
10577                    fn SendNotAllowed(
10578                        data: &[u8],
10579                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10580                        <SendNotAllowed as alloy_sol_types::SolError>::abi_decode_raw_validate(
10581                                data,
10582                            )
10583                            .map(HoprNodeManagementModuleErrors::SendNotAllowed)
10584                    }
10585                    SendNotAllowed
10586                },
10587                {
10588                    fn DelegateCallNotAllowed(
10589                        data: &[u8],
10590                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10591                        <DelegateCallNotAllowed as alloy_sol_types::SolError>::abi_decode_raw_validate(
10592                                data,
10593                            )
10594                            .map(HoprNodeManagementModuleErrors::DelegateCallNotAllowed)
10595                    }
10596                    DelegateCallNotAllowed
10597                },
10598                {
10599                    fn AlreadyInitialized(
10600                        data: &[u8],
10601                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10602                        <AlreadyInitialized as alloy_sol_types::SolError>::abi_decode_raw_validate(
10603                                data,
10604                            )
10605                            .map(HoprNodeManagementModuleErrors::AlreadyInitialized)
10606                    }
10607                    AlreadyInitialized
10608                },
10609                {
10610                    fn NonExistentKey(
10611                        data: &[u8],
10612                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10613                        <NonExistentKey as alloy_sol_types::SolError>::abi_decode_raw_validate(
10614                                data,
10615                            )
10616                            .map(HoprNodeManagementModuleErrors::NonExistentKey)
10617                    }
10618                    NonExistentKey
10619                },
10620                {
10621                    fn ParameterNotAllowed(
10622                        data: &[u8],
10623                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10624                        <ParameterNotAllowed as alloy_sol_types::SolError>::abi_decode_raw_validate(
10625                                data,
10626                            )
10627                            .map(HoprNodeManagementModuleErrors::ParameterNotAllowed)
10628                    }
10629                    ParameterNotAllowed
10630                },
10631                {
10632                    fn FunctionSignatureTooShort(
10633                        data: &[u8],
10634                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10635                        <FunctionSignatureTooShort as alloy_sol_types::SolError>::abi_decode_raw_validate(
10636                                data,
10637                            )
10638                            .map(
10639                                HoprNodeManagementModuleErrors::FunctionSignatureTooShort,
10640                            )
10641                    }
10642                    FunctionSignatureTooShort
10643                },
10644                {
10645                    fn PermissionNotConfigured(
10646                        data: &[u8],
10647                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10648                        <PermissionNotConfigured as alloy_sol_types::SolError>::abi_decode_raw_validate(
10649                                data,
10650                            )
10651                            .map(HoprNodeManagementModuleErrors::PermissionNotConfigured)
10652                    }
10653                    PermissionNotConfigured
10654                },
10655                {
10656                    fn TargetIsNotScoped(
10657                        data: &[u8],
10658                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10659                        <TargetIsNotScoped as alloy_sol_types::SolError>::abi_decode_raw_validate(
10660                                data,
10661                            )
10662                            .map(HoprNodeManagementModuleErrors::TargetIsNotScoped)
10663                    }
10664                    TargetIsNotScoped
10665                },
10666                {
10667                    fn DefaultPermissionRejected(
10668                        data: &[u8],
10669                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10670                        <DefaultPermissionRejected as alloy_sol_types::SolError>::abi_decode_raw_validate(
10671                                data,
10672                            )
10673                            .map(
10674                                HoprNodeManagementModuleErrors::DefaultPermissionRejected,
10675                            )
10676                    }
10677                    DefaultPermissionRejected
10678                },
10679                {
10680                    fn SafeMultisendSameAddress(
10681                        data: &[u8],
10682                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10683                        <SafeMultisendSameAddress as alloy_sol_types::SolError>::abi_decode_raw_validate(
10684                                data,
10685                            )
10686                            .map(
10687                                HoprNodeManagementModuleErrors::SafeMultisendSameAddress,
10688                            )
10689                    }
10690                    SafeMultisendSameAddress
10691                },
10692                {
10693                    fn NodePermissionRejected(
10694                        data: &[u8],
10695                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10696                        <NodePermissionRejected as alloy_sol_types::SolError>::abi_decode_raw_validate(
10697                                data,
10698                            )
10699                            .map(HoprNodeManagementModuleErrors::NodePermissionRejected)
10700                    }
10701                    NodePermissionRejected
10702                },
10703                {
10704                    fn CalldataOutOfBounds(
10705                        data: &[u8],
10706                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10707                        <CalldataOutOfBounds as alloy_sol_types::SolError>::abi_decode_raw_validate(
10708                                data,
10709                            )
10710                            .map(HoprNodeManagementModuleErrors::CalldataOutOfBounds)
10711                    }
10712                    CalldataOutOfBounds
10713                },
10714                {
10715                    fn ArraysDifferentLength(
10716                        data: &[u8],
10717                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10718                        <ArraysDifferentLength as alloy_sol_types::SolError>::abi_decode_raw_validate(
10719                                data,
10720                            )
10721                            .map(HoprNodeManagementModuleErrors::ArraysDifferentLength)
10722                    }
10723                    ArraysDifferentLength
10724                },
10725                {
10726                    fn UnacceptableMultiSendOffset(
10727                        data: &[u8],
10728                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10729                        <UnacceptableMultiSendOffset as alloy_sol_types::SolError>::abi_decode_raw_validate(
10730                                data,
10731                            )
10732                            .map(
10733                                HoprNodeManagementModuleErrors::UnacceptableMultiSendOffset,
10734                            )
10735                    }
10736                    UnacceptableMultiSendOffset
10737                },
10738                {
10739                    fn GranularPermissionRejected(
10740                        data: &[u8],
10741                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10742                        <GranularPermissionRejected as alloy_sol_types::SolError>::abi_decode_raw_validate(
10743                                data,
10744                            )
10745                            .map(
10746                                HoprNodeManagementModuleErrors::GranularPermissionRejected,
10747                            )
10748                    }
10749                    GranularPermissionRejected
10750                },
10751                {
10752                    fn AddressIsZero(
10753                        data: &[u8],
10754                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10755                        <AddressIsZero as alloy_sol_types::SolError>::abi_decode_raw_validate(
10756                                data,
10757                            )
10758                            .map(HoprNodeManagementModuleErrors::AddressIsZero)
10759                    }
10760                    AddressIsZero
10761                },
10762                {
10763                    fn TooManyCapabilities(
10764                        data: &[u8],
10765                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10766                        <TooManyCapabilities as alloy_sol_types::SolError>::abi_decode_raw_validate(
10767                                data,
10768                            )
10769                            .map(HoprNodeManagementModuleErrors::TooManyCapabilities)
10770                    }
10771                    TooManyCapabilities
10772                },
10773                {
10774                    fn ArrayTooLong(
10775                        data: &[u8],
10776                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10777                        <ArrayTooLong as alloy_sol_types::SolError>::abi_decode_raw_validate(
10778                                data,
10779                            )
10780                            .map(HoprNodeManagementModuleErrors::ArrayTooLong)
10781                    }
10782                    ArrayTooLong
10783                },
10784                {
10785                    fn PermissionNotFound(
10786                        data: &[u8],
10787                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10788                        <PermissionNotFound as alloy_sol_types::SolError>::abi_decode_raw_validate(
10789                                data,
10790                            )
10791                            .map(HoprNodeManagementModuleErrors::PermissionNotFound)
10792                    }
10793                    PermissionNotFound
10794                },
10795                {
10796                    fn WithMembership(
10797                        data: &[u8],
10798                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10799                        <WithMembership as alloy_sol_types::SolError>::abi_decode_raw_validate(
10800                                data,
10801                            )
10802                            .map(HoprNodeManagementModuleErrors::WithMembership)
10803                    }
10804                    WithMembership
10805                },
10806                {
10807                    fn TargetIsScoped(
10808                        data: &[u8],
10809                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10810                        <TargetIsScoped as alloy_sol_types::SolError>::abi_decode_raw_validate(
10811                                data,
10812                            )
10813                            .map(HoprNodeManagementModuleErrors::TargetIsScoped)
10814                    }
10815                    TargetIsScoped
10816                },
10817                {
10818                    fn TargetAddressNotAllowed(
10819                        data: &[u8],
10820                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10821                        <TargetAddressNotAllowed as alloy_sol_types::SolError>::abi_decode_raw_validate(
10822                                data,
10823                            )
10824                            .map(HoprNodeManagementModuleErrors::TargetAddressNotAllowed)
10825                    }
10826                    TargetAddressNotAllowed
10827                },
10828                {
10829                    fn CannotChangeOwner(
10830                        data: &[u8],
10831                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10832                        <CannotChangeOwner as alloy_sol_types::SolError>::abi_decode_raw_validate(
10833                                data,
10834                            )
10835                            .map(HoprNodeManagementModuleErrors::CannotChangeOwner)
10836                    }
10837                    CannotChangeOwner
10838                },
10839                {
10840                    fn NoMembership(
10841                        data: &[u8],
10842                    ) -> alloy_sol_types::Result<HoprNodeManagementModuleErrors> {
10843                        <NoMembership as alloy_sol_types::SolError>::abi_decode_raw_validate(
10844                                data,
10845                            )
10846                            .map(HoprNodeManagementModuleErrors::NoMembership)
10847                    }
10848                    NoMembership
10849                },
10850            ];
10851            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
10852                return Err(
10853                    alloy_sol_types::Error::unknown_selector(
10854                        <Self as alloy_sol_types::SolInterface>::NAME,
10855                        selector,
10856                    ),
10857                );
10858            };
10859            DECODE_VALIDATE_SHIMS[idx](data)
10860        }
10861        #[inline]
10862        fn abi_encoded_size(&self) -> usize {
10863            match self {
10864                Self::AddressIsZero(inner) => {
10865                    <AddressIsZero as alloy_sol_types::SolError>::abi_encoded_size(inner)
10866                }
10867                Self::AlreadyInitialized(inner) => {
10868                    <AlreadyInitialized as alloy_sol_types::SolError>::abi_encoded_size(
10869                        inner,
10870                    )
10871                }
10872                Self::ArrayTooLong(inner) => {
10873                    <ArrayTooLong as alloy_sol_types::SolError>::abi_encoded_size(inner)
10874                }
10875                Self::ArraysDifferentLength(inner) => {
10876                    <ArraysDifferentLength as alloy_sol_types::SolError>::abi_encoded_size(
10877                        inner,
10878                    )
10879                }
10880                Self::CalldataOutOfBounds(inner) => {
10881                    <CalldataOutOfBounds as alloy_sol_types::SolError>::abi_encoded_size(
10882                        inner,
10883                    )
10884                }
10885                Self::CannotChangeOwner(inner) => {
10886                    <CannotChangeOwner as alloy_sol_types::SolError>::abi_encoded_size(
10887                        inner,
10888                    )
10889                }
10890                Self::DefaultPermissionRejected(inner) => {
10891                    <DefaultPermissionRejected as alloy_sol_types::SolError>::abi_encoded_size(
10892                        inner,
10893                    )
10894                }
10895                Self::DelegateCallNotAllowed(inner) => {
10896                    <DelegateCallNotAllowed as alloy_sol_types::SolError>::abi_encoded_size(
10897                        inner,
10898                    )
10899                }
10900                Self::FunctionSignatureTooShort(inner) => {
10901                    <FunctionSignatureTooShort as alloy_sol_types::SolError>::abi_encoded_size(
10902                        inner,
10903                    )
10904                }
10905                Self::GranularPermissionRejected(inner) => {
10906                    <GranularPermissionRejected as alloy_sol_types::SolError>::abi_encoded_size(
10907                        inner,
10908                    )
10909                }
10910                Self::NoMembership(inner) => {
10911                    <NoMembership as alloy_sol_types::SolError>::abi_encoded_size(inner)
10912                }
10913                Self::NodePermissionRejected(inner) => {
10914                    <NodePermissionRejected as alloy_sol_types::SolError>::abi_encoded_size(
10915                        inner,
10916                    )
10917                }
10918                Self::NonExistentKey(inner) => {
10919                    <NonExistentKey as alloy_sol_types::SolError>::abi_encoded_size(
10920                        inner,
10921                    )
10922                }
10923                Self::ParameterNotAllowed(inner) => {
10924                    <ParameterNotAllowed as alloy_sol_types::SolError>::abi_encoded_size(
10925                        inner,
10926                    )
10927                }
10928                Self::PermissionNotConfigured(inner) => {
10929                    <PermissionNotConfigured as alloy_sol_types::SolError>::abi_encoded_size(
10930                        inner,
10931                    )
10932                }
10933                Self::PermissionNotFound(inner) => {
10934                    <PermissionNotFound as alloy_sol_types::SolError>::abi_encoded_size(
10935                        inner,
10936                    )
10937                }
10938                Self::SafeMultisendSameAddress(inner) => {
10939                    <SafeMultisendSameAddress as alloy_sol_types::SolError>::abi_encoded_size(
10940                        inner,
10941                    )
10942                }
10943                Self::SendNotAllowed(inner) => {
10944                    <SendNotAllowed as alloy_sol_types::SolError>::abi_encoded_size(
10945                        inner,
10946                    )
10947                }
10948                Self::TargetAddressNotAllowed(inner) => {
10949                    <TargetAddressNotAllowed as alloy_sol_types::SolError>::abi_encoded_size(
10950                        inner,
10951                    )
10952                }
10953                Self::TargetIsNotScoped(inner) => {
10954                    <TargetIsNotScoped as alloy_sol_types::SolError>::abi_encoded_size(
10955                        inner,
10956                    )
10957                }
10958                Self::TargetIsScoped(inner) => {
10959                    <TargetIsScoped as alloy_sol_types::SolError>::abi_encoded_size(
10960                        inner,
10961                    )
10962                }
10963                Self::TooManyCapabilities(inner) => {
10964                    <TooManyCapabilities as alloy_sol_types::SolError>::abi_encoded_size(
10965                        inner,
10966                    )
10967                }
10968                Self::UnacceptableMultiSendOffset(inner) => {
10969                    <UnacceptableMultiSendOffset as alloy_sol_types::SolError>::abi_encoded_size(
10970                        inner,
10971                    )
10972                }
10973                Self::WithMembership(inner) => {
10974                    <WithMembership as alloy_sol_types::SolError>::abi_encoded_size(
10975                        inner,
10976                    )
10977                }
10978            }
10979        }
10980        #[inline]
10981        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
10982            match self {
10983                Self::AddressIsZero(inner) => {
10984                    <AddressIsZero as alloy_sol_types::SolError>::abi_encode_raw(
10985                        inner,
10986                        out,
10987                    )
10988                }
10989                Self::AlreadyInitialized(inner) => {
10990                    <AlreadyInitialized as alloy_sol_types::SolError>::abi_encode_raw(
10991                        inner,
10992                        out,
10993                    )
10994                }
10995                Self::ArrayTooLong(inner) => {
10996                    <ArrayTooLong as alloy_sol_types::SolError>::abi_encode_raw(
10997                        inner,
10998                        out,
10999                    )
11000                }
11001                Self::ArraysDifferentLength(inner) => {
11002                    <ArraysDifferentLength as alloy_sol_types::SolError>::abi_encode_raw(
11003                        inner,
11004                        out,
11005                    )
11006                }
11007                Self::CalldataOutOfBounds(inner) => {
11008                    <CalldataOutOfBounds as alloy_sol_types::SolError>::abi_encode_raw(
11009                        inner,
11010                        out,
11011                    )
11012                }
11013                Self::CannotChangeOwner(inner) => {
11014                    <CannotChangeOwner as alloy_sol_types::SolError>::abi_encode_raw(
11015                        inner,
11016                        out,
11017                    )
11018                }
11019                Self::DefaultPermissionRejected(inner) => {
11020                    <DefaultPermissionRejected as alloy_sol_types::SolError>::abi_encode_raw(
11021                        inner,
11022                        out,
11023                    )
11024                }
11025                Self::DelegateCallNotAllowed(inner) => {
11026                    <DelegateCallNotAllowed as alloy_sol_types::SolError>::abi_encode_raw(
11027                        inner,
11028                        out,
11029                    )
11030                }
11031                Self::FunctionSignatureTooShort(inner) => {
11032                    <FunctionSignatureTooShort as alloy_sol_types::SolError>::abi_encode_raw(
11033                        inner,
11034                        out,
11035                    )
11036                }
11037                Self::GranularPermissionRejected(inner) => {
11038                    <GranularPermissionRejected as alloy_sol_types::SolError>::abi_encode_raw(
11039                        inner,
11040                        out,
11041                    )
11042                }
11043                Self::NoMembership(inner) => {
11044                    <NoMembership as alloy_sol_types::SolError>::abi_encode_raw(
11045                        inner,
11046                        out,
11047                    )
11048                }
11049                Self::NodePermissionRejected(inner) => {
11050                    <NodePermissionRejected as alloy_sol_types::SolError>::abi_encode_raw(
11051                        inner,
11052                        out,
11053                    )
11054                }
11055                Self::NonExistentKey(inner) => {
11056                    <NonExistentKey as alloy_sol_types::SolError>::abi_encode_raw(
11057                        inner,
11058                        out,
11059                    )
11060                }
11061                Self::ParameterNotAllowed(inner) => {
11062                    <ParameterNotAllowed as alloy_sol_types::SolError>::abi_encode_raw(
11063                        inner,
11064                        out,
11065                    )
11066                }
11067                Self::PermissionNotConfigured(inner) => {
11068                    <PermissionNotConfigured as alloy_sol_types::SolError>::abi_encode_raw(
11069                        inner,
11070                        out,
11071                    )
11072                }
11073                Self::PermissionNotFound(inner) => {
11074                    <PermissionNotFound as alloy_sol_types::SolError>::abi_encode_raw(
11075                        inner,
11076                        out,
11077                    )
11078                }
11079                Self::SafeMultisendSameAddress(inner) => {
11080                    <SafeMultisendSameAddress as alloy_sol_types::SolError>::abi_encode_raw(
11081                        inner,
11082                        out,
11083                    )
11084                }
11085                Self::SendNotAllowed(inner) => {
11086                    <SendNotAllowed as alloy_sol_types::SolError>::abi_encode_raw(
11087                        inner,
11088                        out,
11089                    )
11090                }
11091                Self::TargetAddressNotAllowed(inner) => {
11092                    <TargetAddressNotAllowed as alloy_sol_types::SolError>::abi_encode_raw(
11093                        inner,
11094                        out,
11095                    )
11096                }
11097                Self::TargetIsNotScoped(inner) => {
11098                    <TargetIsNotScoped as alloy_sol_types::SolError>::abi_encode_raw(
11099                        inner,
11100                        out,
11101                    )
11102                }
11103                Self::TargetIsScoped(inner) => {
11104                    <TargetIsScoped as alloy_sol_types::SolError>::abi_encode_raw(
11105                        inner,
11106                        out,
11107                    )
11108                }
11109                Self::TooManyCapabilities(inner) => {
11110                    <TooManyCapabilities as alloy_sol_types::SolError>::abi_encode_raw(
11111                        inner,
11112                        out,
11113                    )
11114                }
11115                Self::UnacceptableMultiSendOffset(inner) => {
11116                    <UnacceptableMultiSendOffset as alloy_sol_types::SolError>::abi_encode_raw(
11117                        inner,
11118                        out,
11119                    )
11120                }
11121                Self::WithMembership(inner) => {
11122                    <WithMembership as alloy_sol_types::SolError>::abi_encode_raw(
11123                        inner,
11124                        out,
11125                    )
11126                }
11127            }
11128        }
11129    }
11130    ///Container for all the [`HoprNodeManagementModule`](self) events.
11131    #[derive(serde::Serialize, serde::Deserialize)]
11132    #[derive(Debug, PartialEq, Eq, Hash)]
11133    pub enum HoprNodeManagementModuleEvents {
11134        #[allow(missing_docs)]
11135        AdminChanged(AdminChanged),
11136        #[allow(missing_docs)]
11137        BeaconUpgraded(BeaconUpgraded),
11138        #[allow(missing_docs)]
11139        ExecutionFailure(ExecutionFailure),
11140        #[allow(missing_docs)]
11141        ExecutionSuccess(ExecutionSuccess),
11142        #[allow(missing_docs)]
11143        Initialized(Initialized),
11144        #[allow(missing_docs)]
11145        NodeAdded(NodeAdded),
11146        #[allow(missing_docs)]
11147        NodeRemoved(NodeRemoved),
11148        #[allow(missing_docs)]
11149        OwnershipTransferred(OwnershipTransferred),
11150        #[allow(missing_docs)]
11151        SetMultisendAddress(SetMultisendAddress),
11152        #[allow(missing_docs)]
11153        Upgraded(Upgraded),
11154    }
11155    #[automatically_derived]
11156    impl HoprNodeManagementModuleEvents {
11157        /// All the selectors of this enum.
11158        ///
11159        /// Note that the selectors might not be in the same order as the variants.
11160        /// No guarantees are made about the order of the selectors.
11161        ///
11162        /// Prefer using `SolInterface` methods instead.
11163        pub const SELECTORS: &'static [[u8; 32usize]] = &[
11164            [
11165                28u8, 243u8, 176u8, 58u8, 108u8, 241u8, 159u8, 162u8, 186u8, 186u8, 77u8,
11166                241u8, 72u8, 233u8, 220u8, 171u8, 237u8, 234u8, 127u8, 138u8, 92u8, 7u8,
11167                132u8, 14u8, 32u8, 126u8, 92u8, 8u8, 155u8, 233u8, 93u8, 62u8,
11168            ],
11169            [
11170                78u8, 46u8, 134u8, 210u8, 19u8, 117u8, 235u8, 203u8, 246u8, 233u8, 61u8,
11171                245u8, 235u8, 221u8, 90u8, 145u8, 91u8, 248u8, 48u8, 36u8, 89u8, 4u8,
11172                195u8, 181u8, 79u8, 72u8, 173u8, 240u8, 23u8, 10u8, 174u8, 75u8,
11173            ],
11174            [
11175                95u8, 230u8, 170u8, 191u8, 78u8, 121u8, 8u8, 67u8, 223u8, 67u8, 174u8,
11176                14u8, 34u8, 181u8, 134u8, 32u8, 6u8, 111u8, 179u8, 137u8, 41u8, 91u8,
11177                237u8, 192u8, 106u8, 146u8, 223u8, 108u8, 59u8, 40u8, 119u8, 125u8,
11178            ],
11179            [
11180                126u8, 100u8, 77u8, 121u8, 66u8, 47u8, 23u8, 192u8, 30u8, 72u8, 148u8,
11181                181u8, 244u8, 245u8, 136u8, 211u8, 49u8, 235u8, 250u8, 40u8, 101u8, 61u8,
11182                66u8, 174u8, 131u8, 45u8, 197u8, 158u8, 56u8, 201u8, 121u8, 143u8,
11183            ],
11184            [
11185                127u8, 38u8, 184u8, 63u8, 249u8, 110u8, 31u8, 43u8, 106u8, 104u8, 47u8,
11186                19u8, 56u8, 82u8, 246u8, 121u8, 138u8, 9u8, 196u8, 101u8, 218u8, 149u8,
11187                146u8, 20u8, 96u8, 206u8, 251u8, 56u8, 71u8, 64u8, 36u8, 152u8,
11188            ],
11189            [
11190                139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8,
11191                31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8,
11192                218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8,
11193            ],
11194            [
11195                178u8, 93u8, 3u8, 170u8, 243u8, 8u8, 215u8, 41u8, 23u8, 9u8, 190u8, 30u8,
11196                162u8, 139u8, 128u8, 4u8, 99u8, 207u8, 58u8, 154u8, 76u8, 74u8, 85u8,
11197                85u8, 215u8, 51u8, 58u8, 150u8, 76u8, 29u8, 254u8, 189u8,
11198            ],
11199            [
11200                188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8,
11201                179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8,
11202                12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8,
11203            ],
11204            [
11205                194u8, 77u8, 147u8, 96u8, 138u8, 3u8, 210u8, 99u8, 255u8, 25u8, 29u8,
11206                118u8, 119u8, 20u8, 31u8, 94u8, 148u8, 196u8, 150u8, 229u8, 147u8, 16u8,
11207                143u8, 58u8, 174u8, 12u8, 181u8, 183u8, 4u8, 148u8, 196u8, 211u8,
11208            ],
11209            [
11210                207u8, 194u8, 65u8, 102u8, 219u8, 75u8, 182u8, 119u8, 232u8, 87u8, 202u8,
11211                202u8, 189u8, 21u8, 65u8, 251u8, 43u8, 48u8, 100u8, 80u8, 33u8, 178u8,
11212                124u8, 81u8, 48u8, 65u8, 149u8, 137u8, 184u8, 77u8, 181u8, 43u8,
11213            ],
11214        ];
11215    }
11216    #[automatically_derived]
11217    impl alloy_sol_types::SolEventInterface for HoprNodeManagementModuleEvents {
11218        const NAME: &'static str = "HoprNodeManagementModuleEvents";
11219        const COUNT: usize = 10usize;
11220        fn decode_raw_log(
11221            topics: &[alloy_sol_types::Word],
11222            data: &[u8],
11223        ) -> alloy_sol_types::Result<Self> {
11224            match topics.first().copied() {
11225                Some(<AdminChanged as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11226                    <AdminChanged as alloy_sol_types::SolEvent>::decode_raw_log(
11227                            topics,
11228                            data,
11229                        )
11230                        .map(Self::AdminChanged)
11231                }
11232                Some(<BeaconUpgraded as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11233                    <BeaconUpgraded as alloy_sol_types::SolEvent>::decode_raw_log(
11234                            topics,
11235                            data,
11236                        )
11237                        .map(Self::BeaconUpgraded)
11238                }
11239                Some(<ExecutionFailure as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11240                    <ExecutionFailure as alloy_sol_types::SolEvent>::decode_raw_log(
11241                            topics,
11242                            data,
11243                        )
11244                        .map(Self::ExecutionFailure)
11245                }
11246                Some(<ExecutionSuccess as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11247                    <ExecutionSuccess as alloy_sol_types::SolEvent>::decode_raw_log(
11248                            topics,
11249                            data,
11250                        )
11251                        .map(Self::ExecutionSuccess)
11252                }
11253                Some(<Initialized as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11254                    <Initialized as alloy_sol_types::SolEvent>::decode_raw_log(
11255                            topics,
11256                            data,
11257                        )
11258                        .map(Self::Initialized)
11259                }
11260                Some(<NodeAdded as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11261                    <NodeAdded as alloy_sol_types::SolEvent>::decode_raw_log(
11262                            topics,
11263                            data,
11264                        )
11265                        .map(Self::NodeAdded)
11266                }
11267                Some(<NodeRemoved as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11268                    <NodeRemoved as alloy_sol_types::SolEvent>::decode_raw_log(
11269                            topics,
11270                            data,
11271                        )
11272                        .map(Self::NodeRemoved)
11273                }
11274                Some(
11275                    <OwnershipTransferred as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
11276                ) => {
11277                    <OwnershipTransferred as alloy_sol_types::SolEvent>::decode_raw_log(
11278                            topics,
11279                            data,
11280                        )
11281                        .map(Self::OwnershipTransferred)
11282                }
11283                Some(
11284                    <SetMultisendAddress as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
11285                ) => {
11286                    <SetMultisendAddress as alloy_sol_types::SolEvent>::decode_raw_log(
11287                            topics,
11288                            data,
11289                        )
11290                        .map(Self::SetMultisendAddress)
11291                }
11292                Some(<Upgraded as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
11293                    <Upgraded as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
11294                        .map(Self::Upgraded)
11295                }
11296                _ => {
11297                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
11298                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
11299                        log: alloy_sol_types::private::Box::new(
11300                            alloy_sol_types::private::LogData::new_unchecked(
11301                                topics.to_vec(),
11302                                data.to_vec().into(),
11303                            ),
11304                        ),
11305                    })
11306                }
11307            }
11308        }
11309    }
11310    #[automatically_derived]
11311    impl alloy_sol_types::private::IntoLogData for HoprNodeManagementModuleEvents {
11312        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
11313            match self {
11314                Self::AdminChanged(inner) => {
11315                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11316                }
11317                Self::BeaconUpgraded(inner) => {
11318                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11319                }
11320                Self::ExecutionFailure(inner) => {
11321                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11322                }
11323                Self::ExecutionSuccess(inner) => {
11324                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11325                }
11326                Self::Initialized(inner) => {
11327                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11328                }
11329                Self::NodeAdded(inner) => {
11330                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11331                }
11332                Self::NodeRemoved(inner) => {
11333                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11334                }
11335                Self::OwnershipTransferred(inner) => {
11336                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11337                }
11338                Self::SetMultisendAddress(inner) => {
11339                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11340                }
11341                Self::Upgraded(inner) => {
11342                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
11343                }
11344            }
11345        }
11346        fn into_log_data(self) -> alloy_sol_types::private::LogData {
11347            match self {
11348                Self::AdminChanged(inner) => {
11349                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11350                }
11351                Self::BeaconUpgraded(inner) => {
11352                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11353                }
11354                Self::ExecutionFailure(inner) => {
11355                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11356                }
11357                Self::ExecutionSuccess(inner) => {
11358                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11359                }
11360                Self::Initialized(inner) => {
11361                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11362                }
11363                Self::NodeAdded(inner) => {
11364                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11365                }
11366                Self::NodeRemoved(inner) => {
11367                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11368                }
11369                Self::OwnershipTransferred(inner) => {
11370                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11371                }
11372                Self::SetMultisendAddress(inner) => {
11373                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11374                }
11375                Self::Upgraded(inner) => {
11376                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
11377                }
11378            }
11379        }
11380    }
11381    use alloy::contract as alloy_contract;
11382    /**Creates a new wrapper around an on-chain [`HoprNodeManagementModule`](self) contract instance.
11383
11384See the [wrapper's documentation](`HoprNodeManagementModuleInstance`) for more details.*/
11385    #[inline]
11386    pub const fn new<
11387        P: alloy_contract::private::Provider<N>,
11388        N: alloy_contract::private::Network,
11389    >(
11390        address: alloy_sol_types::private::Address,
11391        provider: P,
11392    ) -> HoprNodeManagementModuleInstance<P, N> {
11393        HoprNodeManagementModuleInstance::<P, N>::new(address, provider)
11394    }
11395    /**Deploys this contract using the given `provider` and constructor arguments, if any.
11396
11397Returns a new instance of the contract, if the deployment was successful.
11398
11399For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
11400    #[inline]
11401    pub fn deploy<
11402        P: alloy_contract::private::Provider<N>,
11403        N: alloy_contract::private::Network,
11404    >(
11405        provider: P,
11406    ) -> impl ::core::future::Future<
11407        Output = alloy_contract::Result<HoprNodeManagementModuleInstance<P, N>>,
11408    > {
11409        HoprNodeManagementModuleInstance::<P, N>::deploy(provider)
11410    }
11411    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
11412and constructor arguments, if any.
11413
11414This is a simple wrapper around creating a `RawCallBuilder` with the data set to
11415the bytecode concatenated with the constructor's ABI-encoded arguments.*/
11416    #[inline]
11417    pub fn deploy_builder<
11418        P: alloy_contract::private::Provider<N>,
11419        N: alloy_contract::private::Network,
11420    >(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
11421        HoprNodeManagementModuleInstance::<P, N>::deploy_builder(provider)
11422    }
11423    /**A [`HoprNodeManagementModule`](self) instance.
11424
11425Contains type-safe methods for interacting with an on-chain instance of the
11426[`HoprNodeManagementModule`](self) contract located at a given `address`, using a given
11427provider `P`.
11428
11429If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
11430documentation on how to provide it), the `deploy` and `deploy_builder` methods can
11431be used to deploy a new instance of the contract.
11432
11433See the [module-level documentation](self) for all the available methods.*/
11434    #[derive(Clone)]
11435    pub struct HoprNodeManagementModuleInstance<
11436        P,
11437        N = alloy_contract::private::Ethereum,
11438    > {
11439        address: alloy_sol_types::private::Address,
11440        provider: P,
11441        _network: ::core::marker::PhantomData<N>,
11442    }
11443    #[automatically_derived]
11444    impl<P, N> ::core::fmt::Debug for HoprNodeManagementModuleInstance<P, N> {
11445        #[inline]
11446        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
11447            f.debug_tuple("HoprNodeManagementModuleInstance")
11448                .field(&self.address)
11449                .finish()
11450        }
11451    }
11452    /// Instantiation and getters/setters.
11453    #[automatically_derived]
11454    impl<
11455        P: alloy_contract::private::Provider<N>,
11456        N: alloy_contract::private::Network,
11457    > HoprNodeManagementModuleInstance<P, N> {
11458        /**Creates a new wrapper around an on-chain [`HoprNodeManagementModule`](self) contract instance.
11459
11460See the [wrapper's documentation](`HoprNodeManagementModuleInstance`) for more details.*/
11461        #[inline]
11462        pub const fn new(
11463            address: alloy_sol_types::private::Address,
11464            provider: P,
11465        ) -> Self {
11466            Self {
11467                address,
11468                provider,
11469                _network: ::core::marker::PhantomData,
11470            }
11471        }
11472        /**Deploys this contract using the given `provider` and constructor arguments, if any.
11473
11474Returns a new instance of the contract, if the deployment was successful.
11475
11476For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
11477        #[inline]
11478        pub async fn deploy(
11479            provider: P,
11480        ) -> alloy_contract::Result<HoprNodeManagementModuleInstance<P, N>> {
11481            let call_builder = Self::deploy_builder(provider);
11482            let contract_address = call_builder.deploy().await?;
11483            Ok(Self::new(contract_address, call_builder.provider))
11484        }
11485        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
11486and constructor arguments, if any.
11487
11488This is a simple wrapper around creating a `RawCallBuilder` with the data set to
11489the bytecode concatenated with the constructor's ABI-encoded arguments.*/
11490        #[inline]
11491        pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
11492            alloy_contract::RawCallBuilder::new_raw_deploy(
11493                provider,
11494                ::core::clone::Clone::clone(&BYTECODE),
11495            )
11496        }
11497        /// Returns a reference to the address.
11498        #[inline]
11499        pub const fn address(&self) -> &alloy_sol_types::private::Address {
11500            &self.address
11501        }
11502        /// Sets the address.
11503        #[inline]
11504        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
11505            self.address = address;
11506        }
11507        /// Sets the address and returns `self`.
11508        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
11509            self.set_address(address);
11510            self
11511        }
11512        /// Returns a reference to the provider.
11513        #[inline]
11514        pub const fn provider(&self) -> &P {
11515            &self.provider
11516        }
11517    }
11518    impl<P: ::core::clone::Clone, N> HoprNodeManagementModuleInstance<&P, N> {
11519        /// Clones the provider and returns a new instance with the cloned provider.
11520        #[inline]
11521        pub fn with_cloned_provider(self) -> HoprNodeManagementModuleInstance<P, N> {
11522            HoprNodeManagementModuleInstance {
11523                address: self.address,
11524                provider: ::core::clone::Clone::clone(&self.provider),
11525                _network: ::core::marker::PhantomData,
11526            }
11527        }
11528    }
11529    /// Function calls.
11530    #[automatically_derived]
11531    impl<
11532        P: alloy_contract::private::Provider<N>,
11533        N: alloy_contract::private::Network,
11534    > HoprNodeManagementModuleInstance<P, N> {
11535        /// Creates a new call builder using this contract instance's provider and address.
11536        ///
11537        /// Note that the call can be any function call, not just those defined in this
11538        /// contract. Prefer using the other methods for building type-safe contract calls.
11539        pub fn call_builder<C: alloy_sol_types::SolCall>(
11540            &self,
11541            call: &C,
11542        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
11543            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
11544        }
11545        ///Creates a new call builder for the [`addChannelsAndTokenTarget`] function.
11546        pub fn addChannelsAndTokenTarget(
11547            &self,
11548            defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
11549        ) -> alloy_contract::SolCallBuilder<&P, addChannelsAndTokenTargetCall, N> {
11550            self.call_builder(
11551                &addChannelsAndTokenTargetCall {
11552                    defaultTarget,
11553                },
11554            )
11555        }
11556        ///Creates a new call builder for the [`addNode`] function.
11557        pub fn addNode(
11558            &self,
11559            nodeAddress: alloy::sol_types::private::Address,
11560        ) -> alloy_contract::SolCallBuilder<&P, addNodeCall, N> {
11561            self.call_builder(&addNodeCall { nodeAddress })
11562        }
11563        ///Creates a new call builder for the [`decodeFunctionSigsAndPermissions`] function.
11564        pub fn decodeFunctionSigsAndPermissions(
11565            &self,
11566            encoded: alloy::sol_types::private::FixedBytes<32>,
11567            length: alloy::sol_types::private::primitives::aliases::U256,
11568        ) -> alloy_contract::SolCallBuilder<
11569            &P,
11570            decodeFunctionSigsAndPermissionsCall,
11571            N,
11572        > {
11573            self.call_builder(
11574                &decodeFunctionSigsAndPermissionsCall {
11575                    encoded,
11576                    length,
11577                },
11578            )
11579        }
11580        ///Creates a new call builder for the [`encodeFunctionSigsAndPermissions`] function.
11581        pub fn encodeFunctionSigsAndPermissions(
11582            &self,
11583            functionSigs: alloy::sol_types::private::Vec<
11584                alloy::sol_types::private::FixedBytes<4>,
11585            >,
11586            permissions: alloy::sol_types::private::Vec<
11587                <GranularPermission as alloy::sol_types::SolType>::RustType,
11588            >,
11589        ) -> alloy_contract::SolCallBuilder<
11590            &P,
11591            encodeFunctionSigsAndPermissionsCall,
11592            N,
11593        > {
11594            self.call_builder(
11595                &encodeFunctionSigsAndPermissionsCall {
11596                    functionSigs,
11597                    permissions,
11598                },
11599            )
11600        }
11601        ///Creates a new call builder for the [`execTransactionFromModule`] function.
11602        pub fn execTransactionFromModule(
11603            &self,
11604            to: alloy::sol_types::private::Address,
11605            value: alloy::sol_types::private::primitives::aliases::U256,
11606            data: alloy::sol_types::private::Bytes,
11607            operation: <Enum::Operation as alloy::sol_types::SolType>::RustType,
11608        ) -> alloy_contract::SolCallBuilder<&P, execTransactionFromModuleCall, N> {
11609            self.call_builder(
11610                &execTransactionFromModuleCall {
11611                    to,
11612                    value,
11613                    data,
11614                    operation,
11615                },
11616            )
11617        }
11618        ///Creates a new call builder for the [`execTransactionFromModuleReturnData`] function.
11619        pub fn execTransactionFromModuleReturnData(
11620            &self,
11621            to: alloy::sol_types::private::Address,
11622            value: alloy::sol_types::private::primitives::aliases::U256,
11623            data: alloy::sol_types::private::Bytes,
11624            operation: <Enum::Operation as alloy::sol_types::SolType>::RustType,
11625        ) -> alloy_contract::SolCallBuilder<
11626            &P,
11627            execTransactionFromModuleReturnDataCall,
11628            N,
11629        > {
11630            self.call_builder(
11631                &execTransactionFromModuleReturnDataCall {
11632                    to,
11633                    value,
11634                    data,
11635                    operation,
11636                },
11637            )
11638        }
11639        ///Creates a new call builder for the [`getGranularPermissions`] function.
11640        pub fn getGranularPermissions(
11641            &self,
11642            capabilityKey: alloy::sol_types::private::FixedBytes<32>,
11643            pairId: alloy::sol_types::private::FixedBytes<32>,
11644        ) -> alloy_contract::SolCallBuilder<&P, getGranularPermissionsCall, N> {
11645            self.call_builder(
11646                &getGranularPermissionsCall {
11647                    capabilityKey,
11648                    pairId,
11649                },
11650            )
11651        }
11652        ///Creates a new call builder for the [`getTargets`] function.
11653        pub fn getTargets(
11654            &self,
11655        ) -> alloy_contract::SolCallBuilder<&P, getTargetsCall, N> {
11656            self.call_builder(&getTargetsCall)
11657        }
11658        ///Creates a new call builder for the [`includeNode`] function.
11659        pub fn includeNode(
11660            &self,
11661            nodeDefaultTarget: <Target as alloy::sol_types::SolType>::RustType,
11662        ) -> alloy_contract::SolCallBuilder<&P, includeNodeCall, N> {
11663            self.call_builder(
11664                &includeNodeCall {
11665                    nodeDefaultTarget,
11666                },
11667            )
11668        }
11669        ///Creates a new call builder for the [`initialize`] function.
11670        pub fn initialize(
11671            &self,
11672            initParams: alloy::sol_types::private::Bytes,
11673        ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> {
11674            self.call_builder(&initializeCall { initParams })
11675        }
11676        ///Creates a new call builder for the [`isHoprNodeManagementModule`] function.
11677        pub fn isHoprNodeManagementModule(
11678            &self,
11679        ) -> alloy_contract::SolCallBuilder<&P, isHoprNodeManagementModuleCall, N> {
11680            self.call_builder(&isHoprNodeManagementModuleCall)
11681        }
11682        ///Creates a new call builder for the [`isNode`] function.
11683        pub fn isNode(
11684            &self,
11685            nodeAddress: alloy::sol_types::private::Address,
11686        ) -> alloy_contract::SolCallBuilder<&P, isNodeCall, N> {
11687            self.call_builder(&isNodeCall { nodeAddress })
11688        }
11689        ///Creates a new call builder for the [`multisend`] function.
11690        pub fn multisend(&self) -> alloy_contract::SolCallBuilder<&P, multisendCall, N> {
11691            self.call_builder(&multisendCall)
11692        }
11693        ///Creates a new call builder for the [`owner`] function.
11694        pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> {
11695            self.call_builder(&ownerCall)
11696        }
11697        ///Creates a new call builder for the [`proxiableUUID`] function.
11698        pub fn proxiableUUID(
11699            &self,
11700        ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> {
11701            self.call_builder(&proxiableUUIDCall)
11702        }
11703        ///Creates a new call builder for the [`removeNode`] function.
11704        pub fn removeNode(
11705            &self,
11706            nodeAddress: alloy::sol_types::private::Address,
11707        ) -> alloy_contract::SolCallBuilder<&P, removeNodeCall, N> {
11708            self.call_builder(&removeNodeCall { nodeAddress })
11709        }
11710        ///Creates a new call builder for the [`renounceOwnership`] function.
11711        pub fn renounceOwnership(
11712            &self,
11713        ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> {
11714            self.call_builder(&renounceOwnershipCall)
11715        }
11716        ///Creates a new call builder for the [`revokeTarget`] function.
11717        pub fn revokeTarget(
11718            &self,
11719            targetAddress: alloy::sol_types::private::Address,
11720        ) -> alloy_contract::SolCallBuilder<&P, revokeTargetCall, N> {
11721            self.call_builder(&revokeTargetCall { targetAddress })
11722        }
11723        ///Creates a new call builder for the [`scopeChannelsCapabilities`] function.
11724        pub fn scopeChannelsCapabilities(
11725            &self,
11726            targetAddress: alloy::sol_types::private::Address,
11727            channelId: alloy::sol_types::private::FixedBytes<32>,
11728            encodedSigsPermissions: alloy::sol_types::private::FixedBytes<32>,
11729        ) -> alloy_contract::SolCallBuilder<&P, scopeChannelsCapabilitiesCall, N> {
11730            self.call_builder(
11731                &scopeChannelsCapabilitiesCall {
11732                    targetAddress,
11733                    channelId,
11734                    encodedSigsPermissions,
11735                },
11736            )
11737        }
11738        ///Creates a new call builder for the [`scopeSendCapability`] function.
11739        pub fn scopeSendCapability(
11740            &self,
11741            nodeAddress: alloy::sol_types::private::Address,
11742            beneficiary: alloy::sol_types::private::Address,
11743            permission: <GranularPermission as alloy::sol_types::SolType>::RustType,
11744        ) -> alloy_contract::SolCallBuilder<&P, scopeSendCapabilityCall, N> {
11745            self.call_builder(
11746                &scopeSendCapabilityCall {
11747                    nodeAddress,
11748                    beneficiary,
11749                    permission,
11750                },
11751            )
11752        }
11753        ///Creates a new call builder for the [`scopeTargetChannels`] function.
11754        pub fn scopeTargetChannels(
11755            &self,
11756            defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
11757        ) -> alloy_contract::SolCallBuilder<&P, scopeTargetChannelsCall, N> {
11758            self.call_builder(
11759                &scopeTargetChannelsCall {
11760                    defaultTarget,
11761                },
11762            )
11763        }
11764        ///Creates a new call builder for the [`scopeTargetSend`] function.
11765        pub fn scopeTargetSend(
11766            &self,
11767            defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
11768        ) -> alloy_contract::SolCallBuilder<&P, scopeTargetSendCall, N> {
11769            self.call_builder(
11770                &scopeTargetSendCall {
11771                    defaultTarget,
11772                },
11773            )
11774        }
11775        ///Creates a new call builder for the [`scopeTargetToken`] function.
11776        pub fn scopeTargetToken(
11777            &self,
11778            defaultTarget: <Target as alloy::sol_types::SolType>::RustType,
11779        ) -> alloy_contract::SolCallBuilder<&P, scopeTargetTokenCall, N> {
11780            self.call_builder(
11781                &scopeTargetTokenCall {
11782                    defaultTarget,
11783                },
11784            )
11785        }
11786        ///Creates a new call builder for the [`scopeTokenCapabilities`] function.
11787        pub fn scopeTokenCapabilities(
11788            &self,
11789            nodeAddress: alloy::sol_types::private::Address,
11790            targetAddress: alloy::sol_types::private::Address,
11791            beneficiary: alloy::sol_types::private::Address,
11792            encodedSigsPermissions: alloy::sol_types::private::FixedBytes<32>,
11793        ) -> alloy_contract::SolCallBuilder<&P, scopeTokenCapabilitiesCall, N> {
11794            self.call_builder(
11795                &scopeTokenCapabilitiesCall {
11796                    nodeAddress,
11797                    targetAddress,
11798                    beneficiary,
11799                    encodedSigsPermissions,
11800                },
11801            )
11802        }
11803        ///Creates a new call builder for the [`setMultisend`] function.
11804        pub fn setMultisend(
11805            &self,
11806            _multisend: alloy::sol_types::private::Address,
11807        ) -> alloy_contract::SolCallBuilder<&P, setMultisendCall, N> {
11808            self.call_builder(&setMultisendCall { _multisend })
11809        }
11810        ///Creates a new call builder for the [`transferOwnership`] function.
11811        pub fn transferOwnership(
11812            &self,
11813            newOwner: alloy::sol_types::private::Address,
11814        ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> {
11815            self.call_builder(&transferOwnershipCall { newOwner })
11816        }
11817        ///Creates a new call builder for the [`tryGetTarget`] function.
11818        pub fn tryGetTarget(
11819            &self,
11820            targetAddress: alloy::sol_types::private::Address,
11821        ) -> alloy_contract::SolCallBuilder<&P, tryGetTargetCall, N> {
11822            self.call_builder(&tryGetTargetCall { targetAddress })
11823        }
11824        ///Creates a new call builder for the [`upgradeTo`] function.
11825        pub fn upgradeTo(
11826            &self,
11827            newImplementation: alloy::sol_types::private::Address,
11828        ) -> alloy_contract::SolCallBuilder<&P, upgradeToCall, N> {
11829            self.call_builder(&upgradeToCall { newImplementation })
11830        }
11831        ///Creates a new call builder for the [`upgradeToAndCall`] function.
11832        pub fn upgradeToAndCall(
11833            &self,
11834            newImplementation: alloy::sol_types::private::Address,
11835            data: alloy::sol_types::private::Bytes,
11836        ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> {
11837            self.call_builder(
11838                &upgradeToAndCallCall {
11839                    newImplementation,
11840                    data,
11841                },
11842            )
11843        }
11844    }
11845    /// Event filters.
11846    #[automatically_derived]
11847    impl<
11848        P: alloy_contract::private::Provider<N>,
11849        N: alloy_contract::private::Network,
11850    > HoprNodeManagementModuleInstance<P, N> {
11851        /// Creates a new event filter using this contract instance's provider and address.
11852        ///
11853        /// Note that the type can be any event, not just those defined in this contract.
11854        /// Prefer using the other methods for building type-safe event filters.
11855        pub fn event_filter<E: alloy_sol_types::SolEvent>(
11856            &self,
11857        ) -> alloy_contract::Event<&P, E, N> {
11858            alloy_contract::Event::new_sol(&self.provider, &self.address)
11859        }
11860        ///Creates a new event filter for the [`AdminChanged`] event.
11861        pub fn AdminChanged_filter(&self) -> alloy_contract::Event<&P, AdminChanged, N> {
11862            self.event_filter::<AdminChanged>()
11863        }
11864        ///Creates a new event filter for the [`BeaconUpgraded`] event.
11865        pub fn BeaconUpgraded_filter(
11866            &self,
11867        ) -> alloy_contract::Event<&P, BeaconUpgraded, N> {
11868            self.event_filter::<BeaconUpgraded>()
11869        }
11870        ///Creates a new event filter for the [`ExecutionFailure`] event.
11871        pub fn ExecutionFailure_filter(
11872            &self,
11873        ) -> alloy_contract::Event<&P, ExecutionFailure, N> {
11874            self.event_filter::<ExecutionFailure>()
11875        }
11876        ///Creates a new event filter for the [`ExecutionSuccess`] event.
11877        pub fn ExecutionSuccess_filter(
11878            &self,
11879        ) -> alloy_contract::Event<&P, ExecutionSuccess, N> {
11880            self.event_filter::<ExecutionSuccess>()
11881        }
11882        ///Creates a new event filter for the [`Initialized`] event.
11883        pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> {
11884            self.event_filter::<Initialized>()
11885        }
11886        ///Creates a new event filter for the [`NodeAdded`] event.
11887        pub fn NodeAdded_filter(&self) -> alloy_contract::Event<&P, NodeAdded, N> {
11888            self.event_filter::<NodeAdded>()
11889        }
11890        ///Creates a new event filter for the [`NodeRemoved`] event.
11891        pub fn NodeRemoved_filter(&self) -> alloy_contract::Event<&P, NodeRemoved, N> {
11892            self.event_filter::<NodeRemoved>()
11893        }
11894        ///Creates a new event filter for the [`OwnershipTransferred`] event.
11895        pub fn OwnershipTransferred_filter(
11896            &self,
11897        ) -> alloy_contract::Event<&P, OwnershipTransferred, N> {
11898            self.event_filter::<OwnershipTransferred>()
11899        }
11900        ///Creates a new event filter for the [`SetMultisendAddress`] event.
11901        pub fn SetMultisendAddress_filter(
11902            &self,
11903        ) -> alloy_contract::Event<&P, SetMultisendAddress, N> {
11904            self.event_filter::<SetMultisendAddress>()
11905        }
11906        ///Creates a new event filter for the [`Upgraded`] event.
11907        pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> {
11908            self.event_filter::<Upgraded>()
11909        }
11910    }
11911}