pod_examples_solidity/
voting.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library Time {
6    type Timestamp is uint64;
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 Time {
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 Timestamp(u64);
24    const _: () = {
25        use alloy::sol_types as alloy_sol_types;
26        #[automatically_derived]
27        impl alloy_sol_types::private::SolTypeValue<Timestamp> for u64 {
28            #[inline]
29            fn stv_to_tokens(
30                &self,
31            ) -> <alloy::sol_types::sol_data::Uint<
32                64,
33            > as alloy_sol_types::SolType>::Token<'_> {
34                alloy_sol_types::private::SolTypeValue::<
35                    alloy::sol_types::sol_data::Uint<64>,
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                    64,
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                    64,
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                    64,
58                > as alloy_sol_types::SolType>::abi_encoded_size(self)
59            }
60        }
61        impl Timestamp {
62            /// The Solidity type name.
63            pub const NAME: &'static str = stringify!(@ name);
64            /// Convert from the underlying value type.
65            #[inline]
66            pub const fn from_underlying(value: u64) -> Self {
67                Self(value)
68            }
69            /// Return the underlying value.
70            #[inline]
71            pub const fn into_underlying(self) -> u64 {
72                self.0
73            }
74            /// Return the single encoding of this value, delegating to the
75            /// underlying type.
76            #[inline]
77            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
78                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
79            }
80            /// Return the packed encoding of this value, delegating to the
81            /// underlying type.
82            #[inline]
83            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
84                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
85            }
86        }
87        #[automatically_derived]
88        impl From<u64> for Timestamp {
89            fn from(value: u64) -> Self {
90                Self::from_underlying(value)
91            }
92        }
93        #[automatically_derived]
94        impl From<Timestamp> for u64 {
95            fn from(value: Timestamp) -> Self {
96                value.into_underlying()
97            }
98        }
99        #[automatically_derived]
100        impl alloy_sol_types::SolType for Timestamp {
101            type RustType = u64;
102            type Token<'a> = <alloy::sol_types::sol_data::Uint<
103                64,
104            > as alloy_sol_types::SolType>::Token<'a>;
105            const SOL_NAME: &'static str = Self::NAME;
106            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
107                64,
108            > as alloy_sol_types::SolType>::ENCODED_SIZE;
109            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
110                64,
111            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
112            #[inline]
113            fn valid_token(token: &Self::Token<'_>) -> bool {
114                Self::type_check(token).is_ok()
115            }
116            #[inline]
117            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
118                <alloy::sol_types::sol_data::Uint<
119                    64,
120                > as alloy_sol_types::SolType>::type_check(token)
121            }
122            #[inline]
123            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
124                <alloy::sol_types::sol_data::Uint<
125                    64,
126                > as alloy_sol_types::SolType>::detokenize(token)
127            }
128        }
129        #[automatically_derived]
130        impl alloy_sol_types::EventTopic for Timestamp {
131            #[inline]
132            fn topic_preimage_length(rust: &Self::RustType) -> usize {
133                <alloy::sol_types::sol_data::Uint<
134                    64,
135                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
136            }
137            #[inline]
138            fn encode_topic_preimage(
139                rust: &Self::RustType,
140                out: &mut alloy_sol_types::private::Vec<u8>,
141            ) {
142                <alloy::sol_types::sol_data::Uint<
143                    64,
144                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
145            }
146            #[inline]
147            fn encode_topic(
148                rust: &Self::RustType,
149            ) -> alloy_sol_types::abi::token::WordToken {
150                <alloy::sol_types::sol_data::Uint<
151                    64,
152                > as alloy_sol_types::EventTopic>::encode_topic(rust)
153            }
154        }
155    };
156    use alloy::contract as alloy_contract;
157    /**Creates a new wrapper around an on-chain [`Time`](self) contract instance.
158
159See the [wrapper's documentation](`TimeInstance`) for more details.*/
160    #[inline]
161    pub const fn new<
162        P: alloy_contract::private::Provider<N>,
163        N: alloy_contract::private::Network,
164    >(address: alloy_sol_types::private::Address, __provider: P) -> TimeInstance<P, N> {
165        TimeInstance::<P, N>::new(address, __provider)
166    }
167    /**A [`Time`](self) instance.
168
169Contains type-safe methods for interacting with an on-chain instance of the
170[`Time`](self) contract located at a given `address`, using a given
171provider `P`.
172
173If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
174documentation on how to provide it), the `deploy` and `deploy_builder` methods can
175be used to deploy a new instance of the contract.
176
177See the [module-level documentation](self) for all the available methods.*/
178    #[derive(Clone)]
179    pub struct TimeInstance<P, N = alloy_contract::private::Ethereum> {
180        address: alloy_sol_types::private::Address,
181        provider: P,
182        _network: ::core::marker::PhantomData<N>,
183    }
184    #[automatically_derived]
185    impl<P, N> ::core::fmt::Debug for TimeInstance<P, N> {
186        #[inline]
187        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
188            f.debug_tuple("TimeInstance").field(&self.address).finish()
189        }
190    }
191    /// Instantiation and getters/setters.
192    impl<
193        P: alloy_contract::private::Provider<N>,
194        N: alloy_contract::private::Network,
195    > TimeInstance<P, N> {
196        /**Creates a new wrapper around an on-chain [`Time`](self) contract instance.
197
198See the [wrapper's documentation](`TimeInstance`) for more details.*/
199        #[inline]
200        pub const fn new(
201            address: alloy_sol_types::private::Address,
202            __provider: P,
203        ) -> Self {
204            Self {
205                address,
206                provider: __provider,
207                _network: ::core::marker::PhantomData,
208            }
209        }
210        /// Returns a reference to the address.
211        #[inline]
212        pub const fn address(&self) -> &alloy_sol_types::private::Address {
213            &self.address
214        }
215        /// Sets the address.
216        #[inline]
217        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
218            self.address = address;
219        }
220        /// Sets the address and returns `self`.
221        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
222            self.set_address(address);
223            self
224        }
225        /// Returns a reference to the provider.
226        #[inline]
227        pub const fn provider(&self) -> &P {
228            &self.provider
229        }
230    }
231    impl<P: ::core::clone::Clone, N> TimeInstance<&P, N> {
232        /// Clones the provider and returns a new instance with the cloned provider.
233        #[inline]
234        pub fn with_cloned_provider(self) -> TimeInstance<P, N> {
235            TimeInstance {
236                address: self.address,
237                provider: ::core::clone::Clone::clone(&self.provider),
238                _network: ::core::marker::PhantomData,
239            }
240        }
241    }
242    /// Function calls.
243    impl<
244        P: alloy_contract::private::Provider<N>,
245        N: alloy_contract::private::Network,
246    > TimeInstance<P, N> {
247        /// Creates a new call builder using this contract instance's provider and address.
248        ///
249        /// Note that the call can be any function call, not just those defined in this
250        /// contract. Prefer using the other methods for building type-safe contract calls.
251        pub fn call_builder<C: alloy_sol_types::SolCall>(
252            &self,
253            call: &C,
254        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
255            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
256        }
257    }
258    /// Event filters.
259    impl<
260        P: alloy_contract::private::Provider<N>,
261        N: alloy_contract::private::Network,
262    > TimeInstance<P, N> {
263        /// Creates a new event filter using this contract instance's provider and address.
264        ///
265        /// Note that the type can be any event, not just those defined in this contract.
266        /// Prefer using the other methods for building type-safe event filters.
267        pub fn event_filter<E: alloy_sol_types::SolEvent>(
268            &self,
269        ) -> alloy_contract::Event<&P, E, N> {
270            alloy_contract::Event::new_sol(&self.provider, &self.address)
271        }
272    }
273}
274/**
275
276Generated by the following Solidity interface...
277```solidity
278library Time {
279    type Timestamp is uint64;
280}
281
282interface Voting {
283    struct VotingInfo {
284        uint256 threshold;
285        Time.Timestamp deadline;
286        uint256 nonce;
287        address owner;
288    }
289
290    event Voted(bytes32 indexed votingId, address indexed voter, uint256 indexed choice);
291    event Winner(bytes32 indexed votingId, uint256 indexed choice);
292
293    function register(VotingInfo memory v) external;
294    function setWinner(VotingInfo memory v, uint256 choice) external;
295    function vote(VotingInfo memory v, uint256 choice) external;
296    function votingId(VotingInfo memory v) external pure returns (bytes32);
297}
298```
299
300...which was generated by the following JSON ABI:
301```json
302[
303  {
304    "type": "function",
305    "name": "register",
306    "inputs": [
307      {
308        "name": "v",
309        "type": "tuple",
310        "internalType": "struct Voting.VotingInfo",
311        "components": [
312          {
313            "name": "threshold",
314            "type": "uint256",
315            "internalType": "uint256"
316          },
317          {
318            "name": "deadline",
319            "type": "uint64",
320            "internalType": "Time.Timestamp"
321          },
322          {
323            "name": "nonce",
324            "type": "uint256",
325            "internalType": "uint256"
326          },
327          {
328            "name": "owner",
329            "type": "address",
330            "internalType": "address"
331          }
332        ]
333      }
334    ],
335    "outputs": [],
336    "stateMutability": "nonpayable"
337  },
338  {
339    "type": "function",
340    "name": "setWinner",
341    "inputs": [
342      {
343        "name": "v",
344        "type": "tuple",
345        "internalType": "struct Voting.VotingInfo",
346        "components": [
347          {
348            "name": "threshold",
349            "type": "uint256",
350            "internalType": "uint256"
351          },
352          {
353            "name": "deadline",
354            "type": "uint64",
355            "internalType": "Time.Timestamp"
356          },
357          {
358            "name": "nonce",
359            "type": "uint256",
360            "internalType": "uint256"
361          },
362          {
363            "name": "owner",
364            "type": "address",
365            "internalType": "address"
366          }
367        ]
368      },
369      {
370        "name": "choice",
371        "type": "uint256",
372        "internalType": "uint256"
373      }
374    ],
375    "outputs": [],
376    "stateMutability": "nonpayable"
377  },
378  {
379    "type": "function",
380    "name": "vote",
381    "inputs": [
382      {
383        "name": "v",
384        "type": "tuple",
385        "internalType": "struct Voting.VotingInfo",
386        "components": [
387          {
388            "name": "threshold",
389            "type": "uint256",
390            "internalType": "uint256"
391          },
392          {
393            "name": "deadline",
394            "type": "uint64",
395            "internalType": "Time.Timestamp"
396          },
397          {
398            "name": "nonce",
399            "type": "uint256",
400            "internalType": "uint256"
401          },
402          {
403            "name": "owner",
404            "type": "address",
405            "internalType": "address"
406          }
407        ]
408      },
409      {
410        "name": "choice",
411        "type": "uint256",
412        "internalType": "uint256"
413      }
414    ],
415    "outputs": [],
416    "stateMutability": "nonpayable"
417  },
418  {
419    "type": "function",
420    "name": "votingId",
421    "inputs": [
422      {
423        "name": "v",
424        "type": "tuple",
425        "internalType": "struct Voting.VotingInfo",
426        "components": [
427          {
428            "name": "threshold",
429            "type": "uint256",
430            "internalType": "uint256"
431          },
432          {
433            "name": "deadline",
434            "type": "uint64",
435            "internalType": "Time.Timestamp"
436          },
437          {
438            "name": "nonce",
439            "type": "uint256",
440            "internalType": "uint256"
441          },
442          {
443            "name": "owner",
444            "type": "address",
445            "internalType": "address"
446          }
447        ]
448      }
449    ],
450    "outputs": [
451      {
452        "name": "",
453        "type": "bytes32",
454        "internalType": "bytes32"
455      }
456    ],
457    "stateMutability": "pure"
458  },
459  {
460    "type": "event",
461    "name": "Voted",
462    "inputs": [
463      {
464        "name": "votingId",
465        "type": "bytes32",
466        "indexed": true,
467        "internalType": "bytes32"
468      },
469      {
470        "name": "voter",
471        "type": "address",
472        "indexed": true,
473        "internalType": "address"
474      },
475      {
476        "name": "choice",
477        "type": "uint256",
478        "indexed": true,
479        "internalType": "uint256"
480      }
481    ],
482    "anonymous": false
483  },
484  {
485    "type": "event",
486    "name": "Winner",
487    "inputs": [
488      {
489        "name": "votingId",
490        "type": "bytes32",
491        "indexed": true,
492        "internalType": "bytes32"
493      },
494      {
495        "name": "choice",
496        "type": "uint256",
497        "indexed": true,
498        "internalType": "uint256"
499      }
500    ],
501    "anonymous": false
502  }
503]
504```*/
505#[allow(
506    non_camel_case_types,
507    non_snake_case,
508    clippy::pub_underscore_fields,
509    clippy::style,
510    clippy::empty_structs_with_brackets
511)]
512pub mod Voting {
513    use super::*;
514    use alloy::sol_types as alloy_sol_types;
515    /// The creation / init bytecode of the contract.
516    ///
517    /// ```text
518    ///0x6080604052348015600e575f5ffd5b506110518061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806324c6e3c41461004e578063995d5d911461007e578063a7d4c4731461009a578063e8021822146100b6575b5f5ffd5b61006860048036038101906100639190610939565b6100d2565b604051610075919061097c565b60405180910390f35b61009860048036038101906100939190610939565b610101565b005b6100b460048036038101906100af91906109c8565b610160565b005b6100d060048036038101906100cb91906109c8565b6102ce565b005b5f816040516020016100e49190610ba9565b604051602081830303815290604052805190602001209050919050565b8060600160208101906101149190610bc2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461014a575f5ffd5b61015d335f6103a190919063ffffffff16565b50565b6101b18260200160208101906101769190610bed565b6040518060400160405280601a81526020017f43616e6e6f7420766f746520616674657220646561646c696e650000000000008152506103c9565b5f6101bb836100d2565b9050610207336040518060400160405280601d81526020017f43616e6e6f7420766f7465206966206e6f7420726567697374657265640000008152505f6103fa9092919063ffffffff16565b5f61021e823360026104249092919063ffffffff16565b14610227575f5ffd5b6102408133600160026104ea909392919063ffffffff16565b5f8183604051602001610254929190610c27565b60405160208183030381529060405280519060200120905061028381600160036105b09092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff16837fe4abc5380fa6939d1dc23b5e90b3a8a0e328f0f1a82a5f42bfb795bf9c71750560405160405180910390a450505050565b6103028260200160208101906102e49190610bed565b604051806060016040528060248152602001610ffd602491396105dd565b5f61030c836100d2565b90505f8183604051602001610322929190610c27565b60405160208183030381529060405280519060200120905061036d81855f013560405180606001604052806030815260200161102160309139600361060e909392919063ffffffff16565b82827f269d3a24712436f77df15d63de7d2337a060c9102dee6f46c909fb0fa2d52f0c60405160405180910390a350505050565b6103c5825f018273ffffffffffffffffffffffffffffffffffffffff165f1b610633565b5050565b6103f66103f0836103d8610691565b67ffffffffffffffff166107bf90919063ffffffff16565b826107df565b5050565b61041f835f018373ffffffffffffffffffffffffffffffffffffffff165f1b836108d0565b505050565b5f3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048a90610cce565b60405180910390fd5b835f015f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490509392505050565b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054f90610cce565b60405180910390fd5b80845f015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b80835f015f8481526020019081526020015f205f8282546105d19190610d19565b92505081905550505050565b61060a610604836105ec610691565b67ffffffffffffffff166108f390919063ffffffff16565b826107df565b5050565b61062d82855f015f8681526020019081526020015f20541015826107df565b50505050565b5f825f015f8381526020019081526020015f20540361068d576001826001015461065d9190610d19565b825f015f8381526020019081526020015f2081905550816001015f81548092919061068790610d4c565b91905055505b5050565b5f5f5f7fba286e4d89dabf4b2878e896423bb123d9d5143e662606fd343b6766d7bcf7215f1c73ffffffffffffffffffffffffffffffffffffffff166040516106d990610dc0565b5f60405180830381855afa9150503d805f8114610711576040519150601f19603f3d011682016040523d82523d5f602084013e610716565b606091505b50915091508161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290610e1e565b60405180910390fd5b602081511461079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690610e86565b60405180910390fd5b5f818060200190518101906107b49190610ece565b905080935050505090565b5f8167ffffffffffffffff168367ffffffffffffffff1610905092915050565b5f7f3dcdf63b41c103567d7225976ad9145e866c7a7dccc6c277ea86abbd268fbac95f1c73ffffffffffffffffffffffffffffffffffffffff168360405160200161082a9190610f13565b6040516020818303038152906040526040516108469190610f74565b5f60405180830381855afa9150503d805f811461087e576040519150601f19603f3d011682016040523d82523d5f602084013e610883565b606091505b505090508082906108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190610fdc565b60405180910390fd5b50505050565b6108ee5f845f015f8581526020019081526020015f205411826107df565b505050565b5f8167ffffffffffffffff168367ffffffffffffffff1611905092915050565b5f5ffd5b5f5ffd5b5f608082840312156109305761092f610917565b5b81905092915050565b5f6080828403121561094e5761094d610913565b5b5f61095b8482850161091b565b91505092915050565b5f819050919050565b61097681610964565b82525050565b5f60208201905061098f5f83018461096d565b92915050565b5f819050919050565b6109a781610995565b81146109b1575f5ffd5b50565b5f813590506109c28161099e565b92915050565b5f5f60a083850312156109de576109dd610913565b5b5f6109eb8582860161091b565b92505060806109fc858286016109b4565b9150509250929050565b5f610a1460208401846109b4565b905092915050565b610a2581610995565b82525050565b5f67ffffffffffffffff82169050919050565b610a4781610a2b565b8114610a51575f5ffd5b50565b5f81359050610a6281610a3e565b92915050565b5f610a766020840184610a54565b905092915050565b5f819050919050565b5f610aa1610a9c610a9784610a2b565b610a7e565b610a2b565b9050919050565b610ab181610a87565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ae082610ab7565b9050919050565b610af081610ad6565b8114610afa575f5ffd5b50565b5f81359050610b0b81610ae7565b92915050565b5f610b1f6020840184610afd565b905092915050565b610b3081610ad6565b82525050565b60808201610b465f830183610a06565b610b525f850182610a1c565b50610b606020830183610a68565b610b6d6020850182610aa8565b50610b7b6040830183610a06565b610b886040850182610a1c565b50610b966060830183610b11565b610ba36060850182610b27565b50505050565b5f608082019050610bbc5f830184610b36565b92915050565b5f60208284031215610bd757610bd6610913565b5b5f610be484828501610afd565b91505092915050565b5f60208284031215610c0257610c01610913565b5b5f610c0f84828501610a54565b91505092915050565b610c2181610995565b82525050565b5f604082019050610c3a5f83018561096d565b610c476020830184610c18565b9392505050565b5f82825260208201905092915050565b7f43616e6e6f7420616363657373204f776e6564436f756e746572206f776e65645f8201527f20627920616e6f74686572206164647265737300000000000000000000000000602082015250565b5f610cb8603383610c4e565b9150610cc382610c5e565b604082019050919050565b5f6020820190508181035f830152610ce581610cac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d2382610995565b9150610d2e83610995565b9250828201905080821115610d4657610d45610cec565b5b92915050565b5f610d5682610995565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d8857610d87610cec565b5b600182019050919050565b5f81905092915050565b50565b5f610dab5f83610d93565b9150610db682610d9d565b5f82019050919050565b5f610dca82610da0565b9150819050919050565b7f507265636f6d70696c652063616c6c206661696c6564000000000000000000005f82015250565b5f610e08601683610c4e565b9150610e1382610dd4565b602082019050919050565b5f6020820190508181035f830152610e3581610dfc565b9050919050565b7f496e76616c6964206f7574707574206c656e67746800000000000000000000005f82015250565b5f610e70601583610c4e565b9150610e7b82610e3c565b602082019050919050565b5f6020820190508181035f830152610e9d81610e64565b9050919050565b610ead81610a2b565b8114610eb7575f5ffd5b50565b5f81519050610ec881610ea4565b92915050565b5f60208284031215610ee357610ee2610913565b5b5f610ef084828501610eba565b91505092915050565b5f8115159050919050565b610f0d81610ef9565b82525050565b5f602082019050610f265f830184610f04565b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f610f4e82610f2c565b610f588185610d93565b9350610f68818560208601610f36565b80840191505092915050565b5f610f7f8284610f44565b915081905092915050565b5f81519050919050565b5f601f19601f8301169050919050565b5f610fae82610f8a565b610fb88185610c4e565b9350610fc8818560208601610f36565b610fd181610f94565b840191505092915050565b5f6020820190508181035f830152610ff48184610fa4565b90509291505056fe43616e6e6f74206465636964652077696e6e6572206265666f726520646561646c696e6543616e6e6f74207365742077696e6e65722077697468206c65737320766f746573207468616e207468726573686f6c64
519    /// ```
520    #[rustfmt::skip]
521    #[allow(clippy::all)]
522    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
523        b"`\x80`@R4\x80\x15`\x0EW__\xFD[Pa\x10Q\x80a\0\x1C_9_\xF3\xFE`\x80`@R4\x80\x15a\0\x0FW__\xFD[P`\x046\x10a\0JW_5`\xE0\x1C\x80c$\xC6\xE3\xC4\x14a\0NW\x80c\x99]]\x91\x14a\0~W\x80c\xA7\xD4\xC4s\x14a\0\x9AW\x80c\xE8\x02\x18\"\x14a\0\xB6W[__\xFD[a\0h`\x04\x806\x03\x81\x01\x90a\0c\x91\x90a\t9V[a\0\xD2V[`@Qa\0u\x91\x90a\t|V[`@Q\x80\x91\x03\x90\xF3[a\0\x98`\x04\x806\x03\x81\x01\x90a\0\x93\x91\x90a\t9V[a\x01\x01V[\0[a\0\xB4`\x04\x806\x03\x81\x01\x90a\0\xAF\x91\x90a\t\xC8V[a\x01`V[\0[a\0\xD0`\x04\x806\x03\x81\x01\x90a\0\xCB\x91\x90a\t\xC8V[a\x02\xCEV[\0[_\x81`@Q` \x01a\0\xE4\x91\x90a\x0B\xA9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[\x80``\x01` \x81\x01\x90a\x01\x14\x91\x90a\x0B\xC2V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x01JW__\xFD[a\x01]3_a\x03\xA1\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[PV[a\x01\xB1\x82` \x01` \x81\x01\x90a\x01v\x91\x90a\x0B\xEDV[`@Q\x80`@\x01`@R\x80`\x1A\x81R` \x01\x7FCannot vote after deadline\0\0\0\0\0\0\x81RPa\x03\xC9V[_a\x01\xBB\x83a\0\xD2V[\x90Pa\x02\x073`@Q\x80`@\x01`@R\x80`\x1D\x81R` \x01\x7FCannot vote if not registered\0\0\0\x81RP_a\x03\xFA\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_a\x02\x1E\x823`\x02a\x04$\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x14a\x02'W__\xFD[a\x02@\x813`\x01`\x02a\x04\xEA\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_\x81\x83`@Q` \x01a\x02T\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x02\x83\x81`\x01`\x03a\x05\xB0\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x823s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83\x7F\xE4\xAB\xC58\x0F\xA6\x93\x9D\x1D\xC2;^\x90\xB3\xA8\xA0\xE3(\xF0\xF1\xA8*_B\xBF\xB7\x95\xBF\x9Cqu\x05`@Q`@Q\x80\x91\x03\x90\xA4PPPPV[a\x03\x02\x82` \x01` \x81\x01\x90a\x02\xE4\x91\x90a\x0B\xEDV[`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x0F\xFD`$\x919a\x05\xDDV[_a\x03\x0C\x83a\0\xD2V[\x90P_\x81\x83`@Q` \x01a\x03\"\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x03m\x81\x85_\x015`@Q\x80``\x01`@R\x80`0\x81R` \x01a\x10!`0\x919`\x03a\x06\x0E\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82\x82\x7F&\x9D:$q$6\xF7}\xF1]c\xDE}#7\xA0`\xC9\x10-\xEEoF\xC9\t\xFB\x0F\xA2\xD5/\x0C`@Q`@Q\x80\x91\x03\x90\xA3PPPPV[a\x03\xC5\x82_\x01\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1Ba\x063V[PPV[a\x03\xF6a\x03\xF0\x83a\x03\xD8a\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x07\xBF\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x04\x1F\x83_\x01\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1B\x83a\x08\xD0V[PPPV[_2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x04\x93W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x04\x8A\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ T\x90P\x93\x92PPPV[2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x05XW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x05O\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x80\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ \x81\x90UPPPPPV[\x80\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x82\x82Ta\x05\xD1\x91\x90a\r\x19V[\x92PP\x81\x90UPPPPV[a\x06\na\x06\x04\x83a\x05\xECa\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x08\xF3\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x06-\x82\x85_\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x10\x15\x82a\x07\xDFV[PPPPV[_\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\x06\x8DW`\x01\x82`\x01\x01Ta\x06]\x91\x90a\r\x19V[\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81`\x01\x01_\x81T\x80\x92\x91\x90a\x06\x87\x90a\rLV[\x91\x90PUP[PPV[___\x7F\xBA(nM\x89\xDA\xBFK(x\xE8\x96B;\xB1#\xD9\xD5\x14>f&\x06\xFD4;gf\xD7\xBC\xF7!_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x06\xD9\x90a\r\xC0V[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x07\x11W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x07\x16V[``\x91P[P\x91P\x91P\x81a\x07[W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07R\x90a\x0E\x1EV[`@Q\x80\x91\x03\x90\xFD[` \x81Q\x14a\x07\x9FW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07\x96\x90a\x0E\x86V[`@Q\x80\x91\x03\x90\xFD[_\x81\x80` \x01\x90Q\x81\x01\x90a\x07\xB4\x91\x90a\x0E\xCEV[\x90P\x80\x93PPPP\x90V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x90P\x92\x91PPV[_\x7F=\xCD\xF6;A\xC1\x03V}r%\x97j\xD9\x14^\x86lz}\xCC\xC6\xC2w\xEA\x86\xAB\xBD&\x8F\xBA\xC9_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83`@Q` \x01a\x08*\x91\x90a\x0F\x13V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Qa\x08F\x91\x90a\x0FtV[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x08~W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x08\x83V[``\x91P[PP\x90P\x80\x82\x90a\x08\xCAW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x08\xC1\x91\x90a\x0F\xDCV[`@Q\x80\x91\x03\x90\xFD[PPPPV[a\x08\xEE_\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x11\x82a\x07\xDFV[PPPV[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x11\x90P\x92\x91PPV[__\xFD[__\xFD[_`\x80\x82\x84\x03\x12\x15a\t0Wa\t/a\t\x17V[[\x81\x90P\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\tNWa\tMa\t\x13V[[_a\t[\x84\x82\x85\x01a\t\x1BV[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[a\tv\x81a\tdV[\x82RPPV[_` \x82\x01\x90Pa\t\x8F_\x83\x01\x84a\tmV[\x92\x91PPV[_\x81\x90P\x91\x90PV[a\t\xA7\x81a\t\x95V[\x81\x14a\t\xB1W__\xFD[PV[_\x815\x90Pa\t\xC2\x81a\t\x9EV[\x92\x91PPV[__`\xA0\x83\x85\x03\x12\x15a\t\xDEWa\t\xDDa\t\x13V[[_a\t\xEB\x85\x82\x86\x01a\t\x1BV[\x92PP`\x80a\t\xFC\x85\x82\x86\x01a\t\xB4V[\x91PP\x92P\x92\x90PV[_a\n\x14` \x84\x01\x84a\t\xB4V[\x90P\x92\x91PPV[a\n%\x81a\t\x95V[\x82RPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a\nG\x81a\n+V[\x81\x14a\nQW__\xFD[PV[_\x815\x90Pa\nb\x81a\n>V[\x92\x91PPV[_a\nv` \x84\x01\x84a\nTV[\x90P\x92\x91PPV[_\x81\x90P\x91\x90PV[_a\n\xA1a\n\x9Ca\n\x97\x84a\n+V[a\n~V[a\n+V[\x90P\x91\x90PV[a\n\xB1\x81a\n\x87V[\x82RPPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\n\xE0\x82a\n\xB7V[\x90P\x91\x90PV[a\n\xF0\x81a\n\xD6V[\x81\x14a\n\xFAW__\xFD[PV[_\x815\x90Pa\x0B\x0B\x81a\n\xE7V[\x92\x91PPV[_a\x0B\x1F` \x84\x01\x84a\n\xFDV[\x90P\x92\x91PPV[a\x0B0\x81a\n\xD6V[\x82RPPV[`\x80\x82\x01a\x0BF_\x83\x01\x83a\n\x06V[a\x0BR_\x85\x01\x82a\n\x1CV[Pa\x0B`` \x83\x01\x83a\nhV[a\x0Bm` \x85\x01\x82a\n\xA8V[Pa\x0B{`@\x83\x01\x83a\n\x06V[a\x0B\x88`@\x85\x01\x82a\n\x1CV[Pa\x0B\x96``\x83\x01\x83a\x0B\x11V[a\x0B\xA3``\x85\x01\x82a\x0B'V[PPPPV[_`\x80\x82\x01\x90Pa\x0B\xBC_\x83\x01\x84a\x0B6V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0B\xD7Wa\x0B\xD6a\t\x13V[[_a\x0B\xE4\x84\x82\x85\x01a\n\xFDV[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0C\x02Wa\x0C\x01a\t\x13V[[_a\x0C\x0F\x84\x82\x85\x01a\nTV[\x91PP\x92\x91PPV[a\x0C!\x81a\t\x95V[\x82RPPV[_`@\x82\x01\x90Pa\x0C:_\x83\x01\x85a\tmV[a\x0CG` \x83\x01\x84a\x0C\x18V[\x93\x92PPPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[\x7FCannot access OwnedCounter owned_\x82\x01R\x7F by another address\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01RPV[_a\x0C\xB8`3\x83a\x0CNV[\x91Pa\x0C\xC3\x82a\x0C^V[`@\x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0C\xE5\x81a\x0C\xACV[\x90P\x91\x90PV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_a\r#\x82a\t\x95V[\x91Pa\r.\x83a\t\x95V[\x92P\x82\x82\x01\x90P\x80\x82\x11\x15a\rFWa\rEa\x0C\xECV[[\x92\x91PPV[_a\rV\x82a\t\x95V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\r\x88Wa\r\x87a\x0C\xECV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[PV[_a\r\xAB_\x83a\r\x93V[\x91Pa\r\xB6\x82a\r\x9DV[_\x82\x01\x90P\x91\x90PV[_a\r\xCA\x82a\r\xA0V[\x91P\x81\x90P\x91\x90PV[\x7FPrecompile call failed\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0E\x08`\x16\x83a\x0CNV[\x91Pa\x0E\x13\x82a\r\xD4V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E5\x81a\r\xFCV[\x90P\x91\x90PV[\x7FInvalid output length\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0Ep`\x15\x83a\x0CNV[\x91Pa\x0E{\x82a\x0E<V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E\x9D\x81a\x0EdV[\x90P\x91\x90PV[a\x0E\xAD\x81a\n+V[\x81\x14a\x0E\xB7W__\xFD[PV[_\x81Q\x90Pa\x0E\xC8\x81a\x0E\xA4V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0E\xE3Wa\x0E\xE2a\t\x13V[[_a\x0E\xF0\x84\x82\x85\x01a\x0E\xBAV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x0F\r\x81a\x0E\xF9V[\x82RPPV[_` \x82\x01\x90Pa\x0F&_\x83\x01\x84a\x0F\x04V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[\x82\x81\x83^_\x83\x83\x01RPPPV[_a\x0FN\x82a\x0F,V[a\x0FX\x81\x85a\r\x93V[\x93Pa\x0Fh\x81\x85` \x86\x01a\x0F6V[\x80\x84\x01\x91PP\x92\x91PPV[_a\x0F\x7F\x82\x84a\x0FDV[\x91P\x81\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x0F\xAE\x82a\x0F\x8AV[a\x0F\xB8\x81\x85a\x0CNV[\x93Pa\x0F\xC8\x81\x85` \x86\x01a\x0F6V[a\x0F\xD1\x81a\x0F\x94V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0F\xF4\x81\x84a\x0F\xA4V[\x90P\x92\x91PPV\xFECannot decide winner before deadlineCannot set winner with less votes than threshold",
524    );
525    /// The runtime bytecode of the contract, as deployed on the network.
526    ///
527    /// ```text
528    ///0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806324c6e3c41461004e578063995d5d911461007e578063a7d4c4731461009a578063e8021822146100b6575b5f5ffd5b61006860048036038101906100639190610939565b6100d2565b604051610075919061097c565b60405180910390f35b61009860048036038101906100939190610939565b610101565b005b6100b460048036038101906100af91906109c8565b610160565b005b6100d060048036038101906100cb91906109c8565b6102ce565b005b5f816040516020016100e49190610ba9565b604051602081830303815290604052805190602001209050919050565b8060600160208101906101149190610bc2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461014a575f5ffd5b61015d335f6103a190919063ffffffff16565b50565b6101b18260200160208101906101769190610bed565b6040518060400160405280601a81526020017f43616e6e6f7420766f746520616674657220646561646c696e650000000000008152506103c9565b5f6101bb836100d2565b9050610207336040518060400160405280601d81526020017f43616e6e6f7420766f7465206966206e6f7420726567697374657265640000008152505f6103fa9092919063ffffffff16565b5f61021e823360026104249092919063ffffffff16565b14610227575f5ffd5b6102408133600160026104ea909392919063ffffffff16565b5f8183604051602001610254929190610c27565b60405160208183030381529060405280519060200120905061028381600160036105b09092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff16837fe4abc5380fa6939d1dc23b5e90b3a8a0e328f0f1a82a5f42bfb795bf9c71750560405160405180910390a450505050565b6103028260200160208101906102e49190610bed565b604051806060016040528060248152602001610ffd602491396105dd565b5f61030c836100d2565b90505f8183604051602001610322929190610c27565b60405160208183030381529060405280519060200120905061036d81855f013560405180606001604052806030815260200161102160309139600361060e909392919063ffffffff16565b82827f269d3a24712436f77df15d63de7d2337a060c9102dee6f46c909fb0fa2d52f0c60405160405180910390a350505050565b6103c5825f018273ffffffffffffffffffffffffffffffffffffffff165f1b610633565b5050565b6103f66103f0836103d8610691565b67ffffffffffffffff166107bf90919063ffffffff16565b826107df565b5050565b61041f835f018373ffffffffffffffffffffffffffffffffffffffff165f1b836108d0565b505050565b5f3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048a90610cce565b60405180910390fd5b835f015f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490509392505050565b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054f90610cce565b60405180910390fd5b80845f015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b80835f015f8481526020019081526020015f205f8282546105d19190610d19565b92505081905550505050565b61060a610604836105ec610691565b67ffffffffffffffff166108f390919063ffffffff16565b826107df565b5050565b61062d82855f015f8681526020019081526020015f20541015826107df565b50505050565b5f825f015f8381526020019081526020015f20540361068d576001826001015461065d9190610d19565b825f015f8381526020019081526020015f2081905550816001015f81548092919061068790610d4c565b91905055505b5050565b5f5f5f7fba286e4d89dabf4b2878e896423bb123d9d5143e662606fd343b6766d7bcf7215f1c73ffffffffffffffffffffffffffffffffffffffff166040516106d990610dc0565b5f60405180830381855afa9150503d805f8114610711576040519150601f19603f3d011682016040523d82523d5f602084013e610716565b606091505b50915091508161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290610e1e565b60405180910390fd5b602081511461079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690610e86565b60405180910390fd5b5f818060200190518101906107b49190610ece565b905080935050505090565b5f8167ffffffffffffffff168367ffffffffffffffff1610905092915050565b5f7f3dcdf63b41c103567d7225976ad9145e866c7a7dccc6c277ea86abbd268fbac95f1c73ffffffffffffffffffffffffffffffffffffffff168360405160200161082a9190610f13565b6040516020818303038152906040526040516108469190610f74565b5f60405180830381855afa9150503d805f811461087e576040519150601f19603f3d011682016040523d82523d5f602084013e610883565b606091505b505090508082906108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190610fdc565b60405180910390fd5b50505050565b6108ee5f845f015f8581526020019081526020015f205411826107df565b505050565b5f8167ffffffffffffffff168367ffffffffffffffff1611905092915050565b5f5ffd5b5f5ffd5b5f608082840312156109305761092f610917565b5b81905092915050565b5f6080828403121561094e5761094d610913565b5b5f61095b8482850161091b565b91505092915050565b5f819050919050565b61097681610964565b82525050565b5f60208201905061098f5f83018461096d565b92915050565b5f819050919050565b6109a781610995565b81146109b1575f5ffd5b50565b5f813590506109c28161099e565b92915050565b5f5f60a083850312156109de576109dd610913565b5b5f6109eb8582860161091b565b92505060806109fc858286016109b4565b9150509250929050565b5f610a1460208401846109b4565b905092915050565b610a2581610995565b82525050565b5f67ffffffffffffffff82169050919050565b610a4781610a2b565b8114610a51575f5ffd5b50565b5f81359050610a6281610a3e565b92915050565b5f610a766020840184610a54565b905092915050565b5f819050919050565b5f610aa1610a9c610a9784610a2b565b610a7e565b610a2b565b9050919050565b610ab181610a87565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ae082610ab7565b9050919050565b610af081610ad6565b8114610afa575f5ffd5b50565b5f81359050610b0b81610ae7565b92915050565b5f610b1f6020840184610afd565b905092915050565b610b3081610ad6565b82525050565b60808201610b465f830183610a06565b610b525f850182610a1c565b50610b606020830183610a68565b610b6d6020850182610aa8565b50610b7b6040830183610a06565b610b886040850182610a1c565b50610b966060830183610b11565b610ba36060850182610b27565b50505050565b5f608082019050610bbc5f830184610b36565b92915050565b5f60208284031215610bd757610bd6610913565b5b5f610be484828501610afd565b91505092915050565b5f60208284031215610c0257610c01610913565b5b5f610c0f84828501610a54565b91505092915050565b610c2181610995565b82525050565b5f604082019050610c3a5f83018561096d565b610c476020830184610c18565b9392505050565b5f82825260208201905092915050565b7f43616e6e6f7420616363657373204f776e6564436f756e746572206f776e65645f8201527f20627920616e6f74686572206164647265737300000000000000000000000000602082015250565b5f610cb8603383610c4e565b9150610cc382610c5e565b604082019050919050565b5f6020820190508181035f830152610ce581610cac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d2382610995565b9150610d2e83610995565b9250828201905080821115610d4657610d45610cec565b5b92915050565b5f610d5682610995565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d8857610d87610cec565b5b600182019050919050565b5f81905092915050565b50565b5f610dab5f83610d93565b9150610db682610d9d565b5f82019050919050565b5f610dca82610da0565b9150819050919050565b7f507265636f6d70696c652063616c6c206661696c6564000000000000000000005f82015250565b5f610e08601683610c4e565b9150610e1382610dd4565b602082019050919050565b5f6020820190508181035f830152610e3581610dfc565b9050919050565b7f496e76616c6964206f7574707574206c656e67746800000000000000000000005f82015250565b5f610e70601583610c4e565b9150610e7b82610e3c565b602082019050919050565b5f6020820190508181035f830152610e9d81610e64565b9050919050565b610ead81610a2b565b8114610eb7575f5ffd5b50565b5f81519050610ec881610ea4565b92915050565b5f60208284031215610ee357610ee2610913565b5b5f610ef084828501610eba565b91505092915050565b5f8115159050919050565b610f0d81610ef9565b82525050565b5f602082019050610f265f830184610f04565b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f610f4e82610f2c565b610f588185610d93565b9350610f68818560208601610f36565b80840191505092915050565b5f610f7f8284610f44565b915081905092915050565b5f81519050919050565b5f601f19601f8301169050919050565b5f610fae82610f8a565b610fb88185610c4e565b9350610fc8818560208601610f36565b610fd181610f94565b840191505092915050565b5f6020820190508181035f830152610ff48184610fa4565b90509291505056fe43616e6e6f74206465636964652077696e6e6572206265666f726520646561646c696e6543616e6e6f74207365742077696e6e65722077697468206c65737320766f746573207468616e207468726573686f6c64
529    /// ```
530    #[rustfmt::skip]
531    #[allow(clippy::all)]
532    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
533        b"`\x80`@R4\x80\x15a\0\x0FW__\xFD[P`\x046\x10a\0JW_5`\xE0\x1C\x80c$\xC6\xE3\xC4\x14a\0NW\x80c\x99]]\x91\x14a\0~W\x80c\xA7\xD4\xC4s\x14a\0\x9AW\x80c\xE8\x02\x18\"\x14a\0\xB6W[__\xFD[a\0h`\x04\x806\x03\x81\x01\x90a\0c\x91\x90a\t9V[a\0\xD2V[`@Qa\0u\x91\x90a\t|V[`@Q\x80\x91\x03\x90\xF3[a\0\x98`\x04\x806\x03\x81\x01\x90a\0\x93\x91\x90a\t9V[a\x01\x01V[\0[a\0\xB4`\x04\x806\x03\x81\x01\x90a\0\xAF\x91\x90a\t\xC8V[a\x01`V[\0[a\0\xD0`\x04\x806\x03\x81\x01\x90a\0\xCB\x91\x90a\t\xC8V[a\x02\xCEV[\0[_\x81`@Q` \x01a\0\xE4\x91\x90a\x0B\xA9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[\x80``\x01` \x81\x01\x90a\x01\x14\x91\x90a\x0B\xC2V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x01JW__\xFD[a\x01]3_a\x03\xA1\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[PV[a\x01\xB1\x82` \x01` \x81\x01\x90a\x01v\x91\x90a\x0B\xEDV[`@Q\x80`@\x01`@R\x80`\x1A\x81R` \x01\x7FCannot vote after deadline\0\0\0\0\0\0\x81RPa\x03\xC9V[_a\x01\xBB\x83a\0\xD2V[\x90Pa\x02\x073`@Q\x80`@\x01`@R\x80`\x1D\x81R` \x01\x7FCannot vote if not registered\0\0\0\x81RP_a\x03\xFA\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_a\x02\x1E\x823`\x02a\x04$\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x14a\x02'W__\xFD[a\x02@\x813`\x01`\x02a\x04\xEA\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_\x81\x83`@Q` \x01a\x02T\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x02\x83\x81`\x01`\x03a\x05\xB0\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x823s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83\x7F\xE4\xAB\xC58\x0F\xA6\x93\x9D\x1D\xC2;^\x90\xB3\xA8\xA0\xE3(\xF0\xF1\xA8*_B\xBF\xB7\x95\xBF\x9Cqu\x05`@Q`@Q\x80\x91\x03\x90\xA4PPPPV[a\x03\x02\x82` \x01` \x81\x01\x90a\x02\xE4\x91\x90a\x0B\xEDV[`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x0F\xFD`$\x919a\x05\xDDV[_a\x03\x0C\x83a\0\xD2V[\x90P_\x81\x83`@Q` \x01a\x03\"\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x03m\x81\x85_\x015`@Q\x80``\x01`@R\x80`0\x81R` \x01a\x10!`0\x919`\x03a\x06\x0E\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82\x82\x7F&\x9D:$q$6\xF7}\xF1]c\xDE}#7\xA0`\xC9\x10-\xEEoF\xC9\t\xFB\x0F\xA2\xD5/\x0C`@Q`@Q\x80\x91\x03\x90\xA3PPPPV[a\x03\xC5\x82_\x01\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1Ba\x063V[PPV[a\x03\xF6a\x03\xF0\x83a\x03\xD8a\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x07\xBF\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x04\x1F\x83_\x01\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1B\x83a\x08\xD0V[PPPV[_2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x04\x93W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x04\x8A\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ T\x90P\x93\x92PPPV[2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x05XW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x05O\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x80\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ \x81\x90UPPPPPV[\x80\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x82\x82Ta\x05\xD1\x91\x90a\r\x19V[\x92PP\x81\x90UPPPPV[a\x06\na\x06\x04\x83a\x05\xECa\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x08\xF3\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x06-\x82\x85_\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x10\x15\x82a\x07\xDFV[PPPPV[_\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\x06\x8DW`\x01\x82`\x01\x01Ta\x06]\x91\x90a\r\x19V[\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81`\x01\x01_\x81T\x80\x92\x91\x90a\x06\x87\x90a\rLV[\x91\x90PUP[PPV[___\x7F\xBA(nM\x89\xDA\xBFK(x\xE8\x96B;\xB1#\xD9\xD5\x14>f&\x06\xFD4;gf\xD7\xBC\xF7!_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x06\xD9\x90a\r\xC0V[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x07\x11W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x07\x16V[``\x91P[P\x91P\x91P\x81a\x07[W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07R\x90a\x0E\x1EV[`@Q\x80\x91\x03\x90\xFD[` \x81Q\x14a\x07\x9FW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07\x96\x90a\x0E\x86V[`@Q\x80\x91\x03\x90\xFD[_\x81\x80` \x01\x90Q\x81\x01\x90a\x07\xB4\x91\x90a\x0E\xCEV[\x90P\x80\x93PPPP\x90V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x90P\x92\x91PPV[_\x7F=\xCD\xF6;A\xC1\x03V}r%\x97j\xD9\x14^\x86lz}\xCC\xC6\xC2w\xEA\x86\xAB\xBD&\x8F\xBA\xC9_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83`@Q` \x01a\x08*\x91\x90a\x0F\x13V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Qa\x08F\x91\x90a\x0FtV[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x08~W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x08\x83V[``\x91P[PP\x90P\x80\x82\x90a\x08\xCAW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x08\xC1\x91\x90a\x0F\xDCV[`@Q\x80\x91\x03\x90\xFD[PPPPV[a\x08\xEE_\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x11\x82a\x07\xDFV[PPPV[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x11\x90P\x92\x91PPV[__\xFD[__\xFD[_`\x80\x82\x84\x03\x12\x15a\t0Wa\t/a\t\x17V[[\x81\x90P\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\tNWa\tMa\t\x13V[[_a\t[\x84\x82\x85\x01a\t\x1BV[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[a\tv\x81a\tdV[\x82RPPV[_` \x82\x01\x90Pa\t\x8F_\x83\x01\x84a\tmV[\x92\x91PPV[_\x81\x90P\x91\x90PV[a\t\xA7\x81a\t\x95V[\x81\x14a\t\xB1W__\xFD[PV[_\x815\x90Pa\t\xC2\x81a\t\x9EV[\x92\x91PPV[__`\xA0\x83\x85\x03\x12\x15a\t\xDEWa\t\xDDa\t\x13V[[_a\t\xEB\x85\x82\x86\x01a\t\x1BV[\x92PP`\x80a\t\xFC\x85\x82\x86\x01a\t\xB4V[\x91PP\x92P\x92\x90PV[_a\n\x14` \x84\x01\x84a\t\xB4V[\x90P\x92\x91PPV[a\n%\x81a\t\x95V[\x82RPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a\nG\x81a\n+V[\x81\x14a\nQW__\xFD[PV[_\x815\x90Pa\nb\x81a\n>V[\x92\x91PPV[_a\nv` \x84\x01\x84a\nTV[\x90P\x92\x91PPV[_\x81\x90P\x91\x90PV[_a\n\xA1a\n\x9Ca\n\x97\x84a\n+V[a\n~V[a\n+V[\x90P\x91\x90PV[a\n\xB1\x81a\n\x87V[\x82RPPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\n\xE0\x82a\n\xB7V[\x90P\x91\x90PV[a\n\xF0\x81a\n\xD6V[\x81\x14a\n\xFAW__\xFD[PV[_\x815\x90Pa\x0B\x0B\x81a\n\xE7V[\x92\x91PPV[_a\x0B\x1F` \x84\x01\x84a\n\xFDV[\x90P\x92\x91PPV[a\x0B0\x81a\n\xD6V[\x82RPPV[`\x80\x82\x01a\x0BF_\x83\x01\x83a\n\x06V[a\x0BR_\x85\x01\x82a\n\x1CV[Pa\x0B`` \x83\x01\x83a\nhV[a\x0Bm` \x85\x01\x82a\n\xA8V[Pa\x0B{`@\x83\x01\x83a\n\x06V[a\x0B\x88`@\x85\x01\x82a\n\x1CV[Pa\x0B\x96``\x83\x01\x83a\x0B\x11V[a\x0B\xA3``\x85\x01\x82a\x0B'V[PPPPV[_`\x80\x82\x01\x90Pa\x0B\xBC_\x83\x01\x84a\x0B6V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0B\xD7Wa\x0B\xD6a\t\x13V[[_a\x0B\xE4\x84\x82\x85\x01a\n\xFDV[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0C\x02Wa\x0C\x01a\t\x13V[[_a\x0C\x0F\x84\x82\x85\x01a\nTV[\x91PP\x92\x91PPV[a\x0C!\x81a\t\x95V[\x82RPPV[_`@\x82\x01\x90Pa\x0C:_\x83\x01\x85a\tmV[a\x0CG` \x83\x01\x84a\x0C\x18V[\x93\x92PPPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[\x7FCannot access OwnedCounter owned_\x82\x01R\x7F by another address\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01RPV[_a\x0C\xB8`3\x83a\x0CNV[\x91Pa\x0C\xC3\x82a\x0C^V[`@\x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0C\xE5\x81a\x0C\xACV[\x90P\x91\x90PV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_a\r#\x82a\t\x95V[\x91Pa\r.\x83a\t\x95V[\x92P\x82\x82\x01\x90P\x80\x82\x11\x15a\rFWa\rEa\x0C\xECV[[\x92\x91PPV[_a\rV\x82a\t\x95V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\r\x88Wa\r\x87a\x0C\xECV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[PV[_a\r\xAB_\x83a\r\x93V[\x91Pa\r\xB6\x82a\r\x9DV[_\x82\x01\x90P\x91\x90PV[_a\r\xCA\x82a\r\xA0V[\x91P\x81\x90P\x91\x90PV[\x7FPrecompile call failed\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0E\x08`\x16\x83a\x0CNV[\x91Pa\x0E\x13\x82a\r\xD4V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E5\x81a\r\xFCV[\x90P\x91\x90PV[\x7FInvalid output length\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0Ep`\x15\x83a\x0CNV[\x91Pa\x0E{\x82a\x0E<V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E\x9D\x81a\x0EdV[\x90P\x91\x90PV[a\x0E\xAD\x81a\n+V[\x81\x14a\x0E\xB7W__\xFD[PV[_\x81Q\x90Pa\x0E\xC8\x81a\x0E\xA4V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0E\xE3Wa\x0E\xE2a\t\x13V[[_a\x0E\xF0\x84\x82\x85\x01a\x0E\xBAV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x0F\r\x81a\x0E\xF9V[\x82RPPV[_` \x82\x01\x90Pa\x0F&_\x83\x01\x84a\x0F\x04V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[\x82\x81\x83^_\x83\x83\x01RPPPV[_a\x0FN\x82a\x0F,V[a\x0FX\x81\x85a\r\x93V[\x93Pa\x0Fh\x81\x85` \x86\x01a\x0F6V[\x80\x84\x01\x91PP\x92\x91PPV[_a\x0F\x7F\x82\x84a\x0FDV[\x91P\x81\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x0F\xAE\x82a\x0F\x8AV[a\x0F\xB8\x81\x85a\x0CNV[\x93Pa\x0F\xC8\x81\x85` \x86\x01a\x0F6V[a\x0F\xD1\x81a\x0F\x94V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0F\xF4\x81\x84a\x0F\xA4V[\x90P\x92\x91PPV\xFECannot decide winner before deadlineCannot set winner with less votes than threshold",
534    );
535    #[derive(serde::Serialize, serde::Deserialize)]
536    #[derive(Default, Debug, PartialEq, Eq, Hash)]
537    /**```solidity
538struct VotingInfo { uint256 threshold; Time.Timestamp deadline; uint256 nonce; address owner; }
539```*/
540    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
541    #[derive(Clone)]
542    pub struct VotingInfo {
543        #[allow(missing_docs)]
544        pub threshold: alloy::sol_types::private::primitives::aliases::U256,
545        #[allow(missing_docs)]
546        pub deadline: <Time::Timestamp as alloy::sol_types::SolType>::RustType,
547        #[allow(missing_docs)]
548        pub nonce: alloy::sol_types::private::primitives::aliases::U256,
549        #[allow(missing_docs)]
550        pub owner: alloy::sol_types::private::Address,
551    }
552    #[allow(
553        non_camel_case_types,
554        non_snake_case,
555        clippy::pub_underscore_fields,
556        clippy::style
557    )]
558    const _: () = {
559        use alloy::sol_types as alloy_sol_types;
560        #[doc(hidden)]
561        #[allow(dead_code)]
562        type UnderlyingSolTuple<'a> = (
563            alloy::sol_types::sol_data::Uint<256>,
564            Time::Timestamp,
565            alloy::sol_types::sol_data::Uint<256>,
566            alloy::sol_types::sol_data::Address,
567        );
568        #[doc(hidden)]
569        type UnderlyingRustTuple<'a> = (
570            alloy::sol_types::private::primitives::aliases::U256,
571            <Time::Timestamp as alloy::sol_types::SolType>::RustType,
572            alloy::sol_types::private::primitives::aliases::U256,
573            alloy::sol_types::private::Address,
574        );
575        #[cfg(test)]
576        #[allow(dead_code, unreachable_patterns)]
577        fn _type_assertion(
578            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
579        ) {
580            match _t {
581                alloy_sol_types::private::AssertTypeEq::<
582                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
583                >(_) => {}
584            }
585        }
586        #[automatically_derived]
587        #[doc(hidden)]
588        impl ::core::convert::From<VotingInfo> for UnderlyingRustTuple<'_> {
589            fn from(value: VotingInfo) -> Self {
590                (value.threshold, value.deadline, value.nonce, value.owner)
591            }
592        }
593        #[automatically_derived]
594        #[doc(hidden)]
595        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VotingInfo {
596            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
597                Self {
598                    threshold: tuple.0,
599                    deadline: tuple.1,
600                    nonce: tuple.2,
601                    owner: tuple.3,
602                }
603            }
604        }
605        #[automatically_derived]
606        impl alloy_sol_types::SolValue for VotingInfo {
607            type SolType = Self;
608        }
609        #[automatically_derived]
610        impl alloy_sol_types::private::SolTypeValue<Self> for VotingInfo {
611            #[inline]
612            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
613                (
614                    <alloy::sol_types::sol_data::Uint<
615                        256,
616                    > as alloy_sol_types::SolType>::tokenize(&self.threshold),
617                    <Time::Timestamp as alloy_sol_types::SolType>::tokenize(
618                        &self.deadline,
619                    ),
620                    <alloy::sol_types::sol_data::Uint<
621                        256,
622                    > as alloy_sol_types::SolType>::tokenize(&self.nonce),
623                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
624                        &self.owner,
625                    ),
626                )
627            }
628            #[inline]
629            fn stv_abi_encoded_size(&self) -> usize {
630                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
631                    return size;
632                }
633                let tuple = <UnderlyingRustTuple<
634                    '_,
635                > as ::core::convert::From<Self>>::from(self.clone());
636                <UnderlyingSolTuple<
637                    '_,
638                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
639            }
640            #[inline]
641            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
642                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
643            }
644            #[inline]
645            fn stv_abi_encode_packed_to(
646                &self,
647                out: &mut alloy_sol_types::private::Vec<u8>,
648            ) {
649                let tuple = <UnderlyingRustTuple<
650                    '_,
651                > as ::core::convert::From<Self>>::from(self.clone());
652                <UnderlyingSolTuple<
653                    '_,
654                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
655            }
656            #[inline]
657            fn stv_abi_packed_encoded_size(&self) -> usize {
658                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
659                    return size;
660                }
661                let tuple = <UnderlyingRustTuple<
662                    '_,
663                > as ::core::convert::From<Self>>::from(self.clone());
664                <UnderlyingSolTuple<
665                    '_,
666                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
667            }
668        }
669        #[automatically_derived]
670        impl alloy_sol_types::SolType for VotingInfo {
671            type RustType = Self;
672            type Token<'a> = <UnderlyingSolTuple<
673                'a,
674            > as alloy_sol_types::SolType>::Token<'a>;
675            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
676            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
677                '_,
678            > as alloy_sol_types::SolType>::ENCODED_SIZE;
679            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
680                '_,
681            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
682            #[inline]
683            fn valid_token(token: &Self::Token<'_>) -> bool {
684                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
685            }
686            #[inline]
687            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
688                let tuple = <UnderlyingSolTuple<
689                    '_,
690                > as alloy_sol_types::SolType>::detokenize(token);
691                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
692            }
693        }
694        #[automatically_derived]
695        impl alloy_sol_types::SolStruct for VotingInfo {
696            const NAME: &'static str = "VotingInfo";
697            #[inline]
698            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
699                alloy_sol_types::private::Cow::Borrowed(
700                    "VotingInfo(uint256 threshold,uint64 deadline,uint256 nonce,address owner)",
701                )
702            }
703            #[inline]
704            fn eip712_components() -> alloy_sol_types::private::Vec<
705                alloy_sol_types::private::Cow<'static, str>,
706            > {
707                alloy_sol_types::private::Vec::new()
708            }
709            #[inline]
710            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
711                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
712            }
713            #[inline]
714            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
715                [
716                    <alloy::sol_types::sol_data::Uint<
717                        256,
718                    > as alloy_sol_types::SolType>::eip712_data_word(&self.threshold)
719                        .0,
720                    <Time::Timestamp as alloy_sol_types::SolType>::eip712_data_word(
721                            &self.deadline,
722                        )
723                        .0,
724                    <alloy::sol_types::sol_data::Uint<
725                        256,
726                    > as alloy_sol_types::SolType>::eip712_data_word(&self.nonce)
727                        .0,
728                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::eip712_data_word(
729                            &self.owner,
730                        )
731                        .0,
732                ]
733                    .concat()
734            }
735        }
736        #[automatically_derived]
737        impl alloy_sol_types::EventTopic for VotingInfo {
738            #[inline]
739            fn topic_preimage_length(rust: &Self::RustType) -> usize {
740                0usize
741                    + <alloy::sol_types::sol_data::Uint<
742                        256,
743                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
744                        &rust.threshold,
745                    )
746                    + <Time::Timestamp as alloy_sol_types::EventTopic>::topic_preimage_length(
747                        &rust.deadline,
748                    )
749                    + <alloy::sol_types::sol_data::Uint<
750                        256,
751                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nonce)
752                    + <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::topic_preimage_length(
753                        &rust.owner,
754                    )
755            }
756            #[inline]
757            fn encode_topic_preimage(
758                rust: &Self::RustType,
759                out: &mut alloy_sol_types::private::Vec<u8>,
760            ) {
761                out.reserve(
762                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
763                );
764                <alloy::sol_types::sol_data::Uint<
765                    256,
766                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
767                    &rust.threshold,
768                    out,
769                );
770                <Time::Timestamp as alloy_sol_types::EventTopic>::encode_topic_preimage(
771                    &rust.deadline,
772                    out,
773                );
774                <alloy::sol_types::sol_data::Uint<
775                    256,
776                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
777                    &rust.nonce,
778                    out,
779                );
780                <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic_preimage(
781                    &rust.owner,
782                    out,
783                );
784            }
785            #[inline]
786            fn encode_topic(
787                rust: &Self::RustType,
788            ) -> alloy_sol_types::abi::token::WordToken {
789                let mut out = alloy_sol_types::private::Vec::new();
790                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
791                    rust,
792                    &mut out,
793                );
794                alloy_sol_types::abi::token::WordToken(
795                    alloy_sol_types::private::keccak256(out),
796                )
797            }
798        }
799    };
800    #[derive(serde::Serialize, serde::Deserialize)]
801    #[derive(Default, Debug, PartialEq, Eq, Hash)]
802    /**Event with signature `Voted(bytes32,address,uint256)` and selector `0xe4abc5380fa6939d1dc23b5e90b3a8a0e328f0f1a82a5f42bfb795bf9c717505`.
803```solidity
804event Voted(bytes32 indexed votingId, address indexed voter, uint256 indexed choice);
805```*/
806    #[allow(
807        non_camel_case_types,
808        non_snake_case,
809        clippy::pub_underscore_fields,
810        clippy::style
811    )]
812    #[derive(Clone)]
813    pub struct Voted {
814        #[allow(missing_docs)]
815        pub votingId: alloy::sol_types::private::FixedBytes<32>,
816        #[allow(missing_docs)]
817        pub voter: alloy::sol_types::private::Address,
818        #[allow(missing_docs)]
819        pub choice: alloy::sol_types::private::primitives::aliases::U256,
820    }
821    #[allow(
822        non_camel_case_types,
823        non_snake_case,
824        clippy::pub_underscore_fields,
825        clippy::style
826    )]
827    const _: () = {
828        use alloy::sol_types as alloy_sol_types;
829        #[automatically_derived]
830        impl alloy_sol_types::SolEvent for Voted {
831            type DataTuple<'a> = ();
832            type DataToken<'a> = <Self::DataTuple<
833                'a,
834            > as alloy_sol_types::SolType>::Token<'a>;
835            type TopicList = (
836                alloy_sol_types::sol_data::FixedBytes<32>,
837                alloy::sol_types::sol_data::FixedBytes<32>,
838                alloy::sol_types::sol_data::Address,
839                alloy::sol_types::sol_data::Uint<256>,
840            );
841            const SIGNATURE: &'static str = "Voted(bytes32,address,uint256)";
842            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
843                228u8, 171u8, 197u8, 56u8, 15u8, 166u8, 147u8, 157u8, 29u8, 194u8, 59u8,
844                94u8, 144u8, 179u8, 168u8, 160u8, 227u8, 40u8, 240u8, 241u8, 168u8, 42u8,
845                95u8, 66u8, 191u8, 183u8, 149u8, 191u8, 156u8, 113u8, 117u8, 5u8,
846            ]);
847            const ANONYMOUS: bool = false;
848            #[allow(unused_variables)]
849            #[inline]
850            fn new(
851                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
852                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
853            ) -> Self {
854                Self {
855                    votingId: topics.1,
856                    voter: topics.2,
857                    choice: topics.3,
858                }
859            }
860            #[inline]
861            fn check_signature(
862                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
863            ) -> alloy_sol_types::Result<()> {
864                if topics.0 != Self::SIGNATURE_HASH {
865                    return Err(
866                        alloy_sol_types::Error::invalid_event_signature_hash(
867                            Self::SIGNATURE,
868                            topics.0,
869                            Self::SIGNATURE_HASH,
870                        ),
871                    );
872                }
873                Ok(())
874            }
875            #[inline]
876            fn tokenize_body(&self) -> Self::DataToken<'_> {
877                ()
878            }
879            #[inline]
880            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
881                (
882                    Self::SIGNATURE_HASH.into(),
883                    self.votingId.clone(),
884                    self.voter.clone(),
885                    self.choice.clone(),
886                )
887            }
888            #[inline]
889            fn encode_topics_raw(
890                &self,
891                out: &mut [alloy_sol_types::abi::token::WordToken],
892            ) -> alloy_sol_types::Result<()> {
893                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
894                    return Err(alloy_sol_types::Error::Overrun);
895                }
896                out[0usize] = alloy_sol_types::abi::token::WordToken(
897                    Self::SIGNATURE_HASH,
898                );
899                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
900                    32,
901                > as alloy_sol_types::EventTopic>::encode_topic(&self.votingId);
902                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
903                    &self.voter,
904                );
905                out[3usize] = <alloy::sol_types::sol_data::Uint<
906                    256,
907                > as alloy_sol_types::EventTopic>::encode_topic(&self.choice);
908                Ok(())
909            }
910        }
911        #[automatically_derived]
912        impl alloy_sol_types::private::IntoLogData for Voted {
913            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
914                From::from(self)
915            }
916            fn into_log_data(self) -> alloy_sol_types::private::LogData {
917                From::from(&self)
918            }
919        }
920        #[automatically_derived]
921        impl From<&Voted> for alloy_sol_types::private::LogData {
922            #[inline]
923            fn from(this: &Voted) -> alloy_sol_types::private::LogData {
924                alloy_sol_types::SolEvent::encode_log_data(this)
925            }
926        }
927    };
928    #[derive(serde::Serialize, serde::Deserialize)]
929    #[derive(Default, Debug, PartialEq, Eq, Hash)]
930    /**Event with signature `Winner(bytes32,uint256)` and selector `0x269d3a24712436f77df15d63de7d2337a060c9102dee6f46c909fb0fa2d52f0c`.
931```solidity
932event Winner(bytes32 indexed votingId, uint256 indexed choice);
933```*/
934    #[allow(
935        non_camel_case_types,
936        non_snake_case,
937        clippy::pub_underscore_fields,
938        clippy::style
939    )]
940    #[derive(Clone)]
941    pub struct Winner {
942        #[allow(missing_docs)]
943        pub votingId: alloy::sol_types::private::FixedBytes<32>,
944        #[allow(missing_docs)]
945        pub choice: alloy::sol_types::private::primitives::aliases::U256,
946    }
947    #[allow(
948        non_camel_case_types,
949        non_snake_case,
950        clippy::pub_underscore_fields,
951        clippy::style
952    )]
953    const _: () = {
954        use alloy::sol_types as alloy_sol_types;
955        #[automatically_derived]
956        impl alloy_sol_types::SolEvent for Winner {
957            type DataTuple<'a> = ();
958            type DataToken<'a> = <Self::DataTuple<
959                'a,
960            > as alloy_sol_types::SolType>::Token<'a>;
961            type TopicList = (
962                alloy_sol_types::sol_data::FixedBytes<32>,
963                alloy::sol_types::sol_data::FixedBytes<32>,
964                alloy::sol_types::sol_data::Uint<256>,
965            );
966            const SIGNATURE: &'static str = "Winner(bytes32,uint256)";
967            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
968                38u8, 157u8, 58u8, 36u8, 113u8, 36u8, 54u8, 247u8, 125u8, 241u8, 93u8,
969                99u8, 222u8, 125u8, 35u8, 55u8, 160u8, 96u8, 201u8, 16u8, 45u8, 238u8,
970                111u8, 70u8, 201u8, 9u8, 251u8, 15u8, 162u8, 213u8, 47u8, 12u8,
971            ]);
972            const ANONYMOUS: bool = false;
973            #[allow(unused_variables)]
974            #[inline]
975            fn new(
976                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
977                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
978            ) -> Self {
979                Self {
980                    votingId: topics.1,
981                    choice: topics.2,
982                }
983            }
984            #[inline]
985            fn check_signature(
986                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
987            ) -> alloy_sol_types::Result<()> {
988                if topics.0 != Self::SIGNATURE_HASH {
989                    return Err(
990                        alloy_sol_types::Error::invalid_event_signature_hash(
991                            Self::SIGNATURE,
992                            topics.0,
993                            Self::SIGNATURE_HASH,
994                        ),
995                    );
996                }
997                Ok(())
998            }
999            #[inline]
1000            fn tokenize_body(&self) -> Self::DataToken<'_> {
1001                ()
1002            }
1003            #[inline]
1004            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1005                (Self::SIGNATURE_HASH.into(), self.votingId.clone(), self.choice.clone())
1006            }
1007            #[inline]
1008            fn encode_topics_raw(
1009                &self,
1010                out: &mut [alloy_sol_types::abi::token::WordToken],
1011            ) -> alloy_sol_types::Result<()> {
1012                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1013                    return Err(alloy_sol_types::Error::Overrun);
1014                }
1015                out[0usize] = alloy_sol_types::abi::token::WordToken(
1016                    Self::SIGNATURE_HASH,
1017                );
1018                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
1019                    32,
1020                > as alloy_sol_types::EventTopic>::encode_topic(&self.votingId);
1021                out[2usize] = <alloy::sol_types::sol_data::Uint<
1022                    256,
1023                > as alloy_sol_types::EventTopic>::encode_topic(&self.choice);
1024                Ok(())
1025            }
1026        }
1027        #[automatically_derived]
1028        impl alloy_sol_types::private::IntoLogData for Winner {
1029            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1030                From::from(self)
1031            }
1032            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1033                From::from(&self)
1034            }
1035        }
1036        #[automatically_derived]
1037        impl From<&Winner> for alloy_sol_types::private::LogData {
1038            #[inline]
1039            fn from(this: &Winner) -> alloy_sol_types::private::LogData {
1040                alloy_sol_types::SolEvent::encode_log_data(this)
1041            }
1042        }
1043    };
1044    #[derive(serde::Serialize, serde::Deserialize)]
1045    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1046    /**Function with signature `register((uint256,uint64,uint256,address))` and selector `0x995d5d91`.
1047```solidity
1048function register(VotingInfo memory v) external;
1049```*/
1050    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1051    #[derive(Clone)]
1052    pub struct registerCall {
1053        #[allow(missing_docs)]
1054        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1055    }
1056    ///Container type for the return parameters of the [`register((uint256,uint64,uint256,address))`](registerCall) function.
1057    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1058    #[derive(Clone)]
1059    pub struct registerReturn {}
1060    #[allow(
1061        non_camel_case_types,
1062        non_snake_case,
1063        clippy::pub_underscore_fields,
1064        clippy::style
1065    )]
1066    const _: () = {
1067        use alloy::sol_types as alloy_sol_types;
1068        {
1069            #[doc(hidden)]
1070            #[allow(dead_code)]
1071            type UnderlyingSolTuple<'a> = (VotingInfo,);
1072            #[doc(hidden)]
1073            type UnderlyingRustTuple<'a> = (
1074                <VotingInfo as alloy::sol_types::SolType>::RustType,
1075            );
1076            #[cfg(test)]
1077            #[allow(dead_code, unreachable_patterns)]
1078            fn _type_assertion(
1079                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1080            ) {
1081                match _t {
1082                    alloy_sol_types::private::AssertTypeEq::<
1083                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1084                    >(_) => {}
1085                }
1086            }
1087            #[automatically_derived]
1088            #[doc(hidden)]
1089            impl ::core::convert::From<registerCall> for UnderlyingRustTuple<'_> {
1090                fn from(value: registerCall) -> Self {
1091                    (value.v,)
1092                }
1093            }
1094            #[automatically_derived]
1095            #[doc(hidden)]
1096            impl ::core::convert::From<UnderlyingRustTuple<'_>> for registerCall {
1097                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1098                    Self { v: tuple.0 }
1099                }
1100            }
1101        }
1102        {
1103            #[doc(hidden)]
1104            #[allow(dead_code)]
1105            type UnderlyingSolTuple<'a> = ();
1106            #[doc(hidden)]
1107            type UnderlyingRustTuple<'a> = ();
1108            #[cfg(test)]
1109            #[allow(dead_code, unreachable_patterns)]
1110            fn _type_assertion(
1111                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1112            ) {
1113                match _t {
1114                    alloy_sol_types::private::AssertTypeEq::<
1115                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1116                    >(_) => {}
1117                }
1118            }
1119            #[automatically_derived]
1120            #[doc(hidden)]
1121            impl ::core::convert::From<registerReturn> for UnderlyingRustTuple<'_> {
1122                fn from(value: registerReturn) -> Self {
1123                    ()
1124                }
1125            }
1126            #[automatically_derived]
1127            #[doc(hidden)]
1128            impl ::core::convert::From<UnderlyingRustTuple<'_>> for registerReturn {
1129                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1130                    Self {}
1131                }
1132            }
1133        }
1134        impl registerReturn {
1135            fn _tokenize(
1136                &self,
1137            ) -> <registerCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
1138                ()
1139            }
1140        }
1141        #[automatically_derived]
1142        impl alloy_sol_types::SolCall for registerCall {
1143            type Parameters<'a> = (VotingInfo,);
1144            type Token<'a> = <Self::Parameters<
1145                'a,
1146            > as alloy_sol_types::SolType>::Token<'a>;
1147            type Return = registerReturn;
1148            type ReturnTuple<'a> = ();
1149            type ReturnToken<'a> = <Self::ReturnTuple<
1150                'a,
1151            > as alloy_sol_types::SolType>::Token<'a>;
1152            const SIGNATURE: &'static str = "register((uint256,uint64,uint256,address))";
1153            const SELECTOR: [u8; 4] = [153u8, 93u8, 93u8, 145u8];
1154            #[inline]
1155            fn new<'a>(
1156                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1157            ) -> Self {
1158                tuple.into()
1159            }
1160            #[inline]
1161            fn tokenize(&self) -> Self::Token<'_> {
1162                (<VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),)
1163            }
1164            #[inline]
1165            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1166                registerReturn::_tokenize(ret)
1167            }
1168            #[inline]
1169            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1170                <Self::ReturnTuple<
1171                    '_,
1172                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1173                    .map(Into::into)
1174            }
1175            #[inline]
1176            fn abi_decode_returns_validate(
1177                data: &[u8],
1178            ) -> alloy_sol_types::Result<Self::Return> {
1179                <Self::ReturnTuple<
1180                    '_,
1181                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1182                    .map(Into::into)
1183            }
1184        }
1185    };
1186    #[derive(serde::Serialize, serde::Deserialize)]
1187    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1188    /**Function with signature `setWinner((uint256,uint64,uint256,address),uint256)` and selector `0xe8021822`.
1189```solidity
1190function setWinner(VotingInfo memory v, uint256 choice) external;
1191```*/
1192    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1193    #[derive(Clone)]
1194    pub struct setWinnerCall {
1195        #[allow(missing_docs)]
1196        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1197        #[allow(missing_docs)]
1198        pub choice: alloy::sol_types::private::primitives::aliases::U256,
1199    }
1200    ///Container type for the return parameters of the [`setWinner((uint256,uint64,uint256,address),uint256)`](setWinnerCall) function.
1201    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1202    #[derive(Clone)]
1203    pub struct setWinnerReturn {}
1204    #[allow(
1205        non_camel_case_types,
1206        non_snake_case,
1207        clippy::pub_underscore_fields,
1208        clippy::style
1209    )]
1210    const _: () = {
1211        use alloy::sol_types as alloy_sol_types;
1212        {
1213            #[doc(hidden)]
1214            #[allow(dead_code)]
1215            type UnderlyingSolTuple<'a> = (
1216                VotingInfo,
1217                alloy::sol_types::sol_data::Uint<256>,
1218            );
1219            #[doc(hidden)]
1220            type UnderlyingRustTuple<'a> = (
1221                <VotingInfo as alloy::sol_types::SolType>::RustType,
1222                alloy::sol_types::private::primitives::aliases::U256,
1223            );
1224            #[cfg(test)]
1225            #[allow(dead_code, unreachable_patterns)]
1226            fn _type_assertion(
1227                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1228            ) {
1229                match _t {
1230                    alloy_sol_types::private::AssertTypeEq::<
1231                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1232                    >(_) => {}
1233                }
1234            }
1235            #[automatically_derived]
1236            #[doc(hidden)]
1237            impl ::core::convert::From<setWinnerCall> for UnderlyingRustTuple<'_> {
1238                fn from(value: setWinnerCall) -> Self {
1239                    (value.v, value.choice)
1240                }
1241            }
1242            #[automatically_derived]
1243            #[doc(hidden)]
1244            impl ::core::convert::From<UnderlyingRustTuple<'_>> for setWinnerCall {
1245                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1246                    Self {
1247                        v: tuple.0,
1248                        choice: tuple.1,
1249                    }
1250                }
1251            }
1252        }
1253        {
1254            #[doc(hidden)]
1255            #[allow(dead_code)]
1256            type UnderlyingSolTuple<'a> = ();
1257            #[doc(hidden)]
1258            type UnderlyingRustTuple<'a> = ();
1259            #[cfg(test)]
1260            #[allow(dead_code, unreachable_patterns)]
1261            fn _type_assertion(
1262                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1263            ) {
1264                match _t {
1265                    alloy_sol_types::private::AssertTypeEq::<
1266                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1267                    >(_) => {}
1268                }
1269            }
1270            #[automatically_derived]
1271            #[doc(hidden)]
1272            impl ::core::convert::From<setWinnerReturn> for UnderlyingRustTuple<'_> {
1273                fn from(value: setWinnerReturn) -> Self {
1274                    ()
1275                }
1276            }
1277            #[automatically_derived]
1278            #[doc(hidden)]
1279            impl ::core::convert::From<UnderlyingRustTuple<'_>> for setWinnerReturn {
1280                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1281                    Self {}
1282                }
1283            }
1284        }
1285        impl setWinnerReturn {
1286            fn _tokenize(
1287                &self,
1288            ) -> <setWinnerCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
1289                ()
1290            }
1291        }
1292        #[automatically_derived]
1293        impl alloy_sol_types::SolCall for setWinnerCall {
1294            type Parameters<'a> = (VotingInfo, alloy::sol_types::sol_data::Uint<256>);
1295            type Token<'a> = <Self::Parameters<
1296                'a,
1297            > as alloy_sol_types::SolType>::Token<'a>;
1298            type Return = setWinnerReturn;
1299            type ReturnTuple<'a> = ();
1300            type ReturnToken<'a> = <Self::ReturnTuple<
1301                'a,
1302            > as alloy_sol_types::SolType>::Token<'a>;
1303            const SIGNATURE: &'static str = "setWinner((uint256,uint64,uint256,address),uint256)";
1304            const SELECTOR: [u8; 4] = [232u8, 2u8, 24u8, 34u8];
1305            #[inline]
1306            fn new<'a>(
1307                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1308            ) -> Self {
1309                tuple.into()
1310            }
1311            #[inline]
1312            fn tokenize(&self) -> Self::Token<'_> {
1313                (
1314                    <VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),
1315                    <alloy::sol_types::sol_data::Uint<
1316                        256,
1317                    > as alloy_sol_types::SolType>::tokenize(&self.choice),
1318                )
1319            }
1320            #[inline]
1321            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1322                setWinnerReturn::_tokenize(ret)
1323            }
1324            #[inline]
1325            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1326                <Self::ReturnTuple<
1327                    '_,
1328                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1329                    .map(Into::into)
1330            }
1331            #[inline]
1332            fn abi_decode_returns_validate(
1333                data: &[u8],
1334            ) -> alloy_sol_types::Result<Self::Return> {
1335                <Self::ReturnTuple<
1336                    '_,
1337                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1338                    .map(Into::into)
1339            }
1340        }
1341    };
1342    #[derive(serde::Serialize, serde::Deserialize)]
1343    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1344    /**Function with signature `vote((uint256,uint64,uint256,address),uint256)` and selector `0xa7d4c473`.
1345```solidity
1346function vote(VotingInfo memory v, uint256 choice) external;
1347```*/
1348    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1349    #[derive(Clone)]
1350    pub struct voteCall {
1351        #[allow(missing_docs)]
1352        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1353        #[allow(missing_docs)]
1354        pub choice: alloy::sol_types::private::primitives::aliases::U256,
1355    }
1356    ///Container type for the return parameters of the [`vote((uint256,uint64,uint256,address),uint256)`](voteCall) function.
1357    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1358    #[derive(Clone)]
1359    pub struct voteReturn {}
1360    #[allow(
1361        non_camel_case_types,
1362        non_snake_case,
1363        clippy::pub_underscore_fields,
1364        clippy::style
1365    )]
1366    const _: () = {
1367        use alloy::sol_types as alloy_sol_types;
1368        {
1369            #[doc(hidden)]
1370            #[allow(dead_code)]
1371            type UnderlyingSolTuple<'a> = (
1372                VotingInfo,
1373                alloy::sol_types::sol_data::Uint<256>,
1374            );
1375            #[doc(hidden)]
1376            type UnderlyingRustTuple<'a> = (
1377                <VotingInfo as alloy::sol_types::SolType>::RustType,
1378                alloy::sol_types::private::primitives::aliases::U256,
1379            );
1380            #[cfg(test)]
1381            #[allow(dead_code, unreachable_patterns)]
1382            fn _type_assertion(
1383                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1384            ) {
1385                match _t {
1386                    alloy_sol_types::private::AssertTypeEq::<
1387                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1388                    >(_) => {}
1389                }
1390            }
1391            #[automatically_derived]
1392            #[doc(hidden)]
1393            impl ::core::convert::From<voteCall> for UnderlyingRustTuple<'_> {
1394                fn from(value: voteCall) -> Self {
1395                    (value.v, value.choice)
1396                }
1397            }
1398            #[automatically_derived]
1399            #[doc(hidden)]
1400            impl ::core::convert::From<UnderlyingRustTuple<'_>> for voteCall {
1401                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1402                    Self {
1403                        v: tuple.0,
1404                        choice: tuple.1,
1405                    }
1406                }
1407            }
1408        }
1409        {
1410            #[doc(hidden)]
1411            #[allow(dead_code)]
1412            type UnderlyingSolTuple<'a> = ();
1413            #[doc(hidden)]
1414            type UnderlyingRustTuple<'a> = ();
1415            #[cfg(test)]
1416            #[allow(dead_code, unreachable_patterns)]
1417            fn _type_assertion(
1418                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1419            ) {
1420                match _t {
1421                    alloy_sol_types::private::AssertTypeEq::<
1422                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1423                    >(_) => {}
1424                }
1425            }
1426            #[automatically_derived]
1427            #[doc(hidden)]
1428            impl ::core::convert::From<voteReturn> for UnderlyingRustTuple<'_> {
1429                fn from(value: voteReturn) -> Self {
1430                    ()
1431                }
1432            }
1433            #[automatically_derived]
1434            #[doc(hidden)]
1435            impl ::core::convert::From<UnderlyingRustTuple<'_>> for voteReturn {
1436                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1437                    Self {}
1438                }
1439            }
1440        }
1441        impl voteReturn {
1442            fn _tokenize(
1443                &self,
1444            ) -> <voteCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
1445                ()
1446            }
1447        }
1448        #[automatically_derived]
1449        impl alloy_sol_types::SolCall for voteCall {
1450            type Parameters<'a> = (VotingInfo, alloy::sol_types::sol_data::Uint<256>);
1451            type Token<'a> = <Self::Parameters<
1452                'a,
1453            > as alloy_sol_types::SolType>::Token<'a>;
1454            type Return = voteReturn;
1455            type ReturnTuple<'a> = ();
1456            type ReturnToken<'a> = <Self::ReturnTuple<
1457                'a,
1458            > as alloy_sol_types::SolType>::Token<'a>;
1459            const SIGNATURE: &'static str = "vote((uint256,uint64,uint256,address),uint256)";
1460            const SELECTOR: [u8; 4] = [167u8, 212u8, 196u8, 115u8];
1461            #[inline]
1462            fn new<'a>(
1463                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1464            ) -> Self {
1465                tuple.into()
1466            }
1467            #[inline]
1468            fn tokenize(&self) -> Self::Token<'_> {
1469                (
1470                    <VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),
1471                    <alloy::sol_types::sol_data::Uint<
1472                        256,
1473                    > as alloy_sol_types::SolType>::tokenize(&self.choice),
1474                )
1475            }
1476            #[inline]
1477            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1478                voteReturn::_tokenize(ret)
1479            }
1480            #[inline]
1481            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1482                <Self::ReturnTuple<
1483                    '_,
1484                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1485                    .map(Into::into)
1486            }
1487            #[inline]
1488            fn abi_decode_returns_validate(
1489                data: &[u8],
1490            ) -> alloy_sol_types::Result<Self::Return> {
1491                <Self::ReturnTuple<
1492                    '_,
1493                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1494                    .map(Into::into)
1495            }
1496        }
1497    };
1498    #[derive(serde::Serialize, serde::Deserialize)]
1499    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1500    /**Function with signature `votingId((uint256,uint64,uint256,address))` and selector `0x24c6e3c4`.
1501```solidity
1502function votingId(VotingInfo memory v) external pure returns (bytes32);
1503```*/
1504    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1505    #[derive(Clone)]
1506    pub struct votingIdCall {
1507        #[allow(missing_docs)]
1508        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1509    }
1510    #[derive(serde::Serialize, serde::Deserialize)]
1511    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1512    ///Container type for the return parameters of the [`votingId((uint256,uint64,uint256,address))`](votingIdCall) function.
1513    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1514    #[derive(Clone)]
1515    pub struct votingIdReturn {
1516        #[allow(missing_docs)]
1517        pub _0: alloy::sol_types::private::FixedBytes<32>,
1518    }
1519    #[allow(
1520        non_camel_case_types,
1521        non_snake_case,
1522        clippy::pub_underscore_fields,
1523        clippy::style
1524    )]
1525    const _: () = {
1526        use alloy::sol_types as alloy_sol_types;
1527        {
1528            #[doc(hidden)]
1529            #[allow(dead_code)]
1530            type UnderlyingSolTuple<'a> = (VotingInfo,);
1531            #[doc(hidden)]
1532            type UnderlyingRustTuple<'a> = (
1533                <VotingInfo as alloy::sol_types::SolType>::RustType,
1534            );
1535            #[cfg(test)]
1536            #[allow(dead_code, unreachable_patterns)]
1537            fn _type_assertion(
1538                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1539            ) {
1540                match _t {
1541                    alloy_sol_types::private::AssertTypeEq::<
1542                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1543                    >(_) => {}
1544                }
1545            }
1546            #[automatically_derived]
1547            #[doc(hidden)]
1548            impl ::core::convert::From<votingIdCall> for UnderlyingRustTuple<'_> {
1549                fn from(value: votingIdCall) -> Self {
1550                    (value.v,)
1551                }
1552            }
1553            #[automatically_derived]
1554            #[doc(hidden)]
1555            impl ::core::convert::From<UnderlyingRustTuple<'_>> for votingIdCall {
1556                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1557                    Self { v: tuple.0 }
1558                }
1559            }
1560        }
1561        {
1562            #[doc(hidden)]
1563            #[allow(dead_code)]
1564            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
1565            #[doc(hidden)]
1566            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
1567            #[cfg(test)]
1568            #[allow(dead_code, unreachable_patterns)]
1569            fn _type_assertion(
1570                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1571            ) {
1572                match _t {
1573                    alloy_sol_types::private::AssertTypeEq::<
1574                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1575                    >(_) => {}
1576                }
1577            }
1578            #[automatically_derived]
1579            #[doc(hidden)]
1580            impl ::core::convert::From<votingIdReturn> for UnderlyingRustTuple<'_> {
1581                fn from(value: votingIdReturn) -> Self {
1582                    (value._0,)
1583                }
1584            }
1585            #[automatically_derived]
1586            #[doc(hidden)]
1587            impl ::core::convert::From<UnderlyingRustTuple<'_>> for votingIdReturn {
1588                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1589                    Self { _0: tuple.0 }
1590                }
1591            }
1592        }
1593        #[automatically_derived]
1594        impl alloy_sol_types::SolCall for votingIdCall {
1595            type Parameters<'a> = (VotingInfo,);
1596            type Token<'a> = <Self::Parameters<
1597                'a,
1598            > as alloy_sol_types::SolType>::Token<'a>;
1599            type Return = alloy::sol_types::private::FixedBytes<32>;
1600            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
1601            type ReturnToken<'a> = <Self::ReturnTuple<
1602                'a,
1603            > as alloy_sol_types::SolType>::Token<'a>;
1604            const SIGNATURE: &'static str = "votingId((uint256,uint64,uint256,address))";
1605            const SELECTOR: [u8; 4] = [36u8, 198u8, 227u8, 196u8];
1606            #[inline]
1607            fn new<'a>(
1608                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1609            ) -> Self {
1610                tuple.into()
1611            }
1612            #[inline]
1613            fn tokenize(&self) -> Self::Token<'_> {
1614                (<VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),)
1615            }
1616            #[inline]
1617            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1618                (
1619                    <alloy::sol_types::sol_data::FixedBytes<
1620                        32,
1621                    > as alloy_sol_types::SolType>::tokenize(ret),
1622                )
1623            }
1624            #[inline]
1625            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1626                <Self::ReturnTuple<
1627                    '_,
1628                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1629                    .map(|r| {
1630                        let r: votingIdReturn = r.into();
1631                        r._0
1632                    })
1633            }
1634            #[inline]
1635            fn abi_decode_returns_validate(
1636                data: &[u8],
1637            ) -> alloy_sol_types::Result<Self::Return> {
1638                <Self::ReturnTuple<
1639                    '_,
1640                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1641                    .map(|r| {
1642                        let r: votingIdReturn = r.into();
1643                        r._0
1644                    })
1645            }
1646        }
1647    };
1648    ///Container for all the [`Voting`](self) function calls.
1649    #[derive(Clone)]
1650    #[derive(serde::Serialize, serde::Deserialize)]
1651    #[derive()]
1652    pub enum VotingCalls {
1653        #[allow(missing_docs)]
1654        register(registerCall),
1655        #[allow(missing_docs)]
1656        setWinner(setWinnerCall),
1657        #[allow(missing_docs)]
1658        vote(voteCall),
1659        #[allow(missing_docs)]
1660        votingId(votingIdCall),
1661    }
1662    impl VotingCalls {
1663        /// All the selectors of this enum.
1664        ///
1665        /// Note that the selectors might not be in the same order as the variants.
1666        /// No guarantees are made about the order of the selectors.
1667        ///
1668        /// Prefer using `SolInterface` methods instead.
1669        pub const SELECTORS: &'static [[u8; 4usize]] = &[
1670            [36u8, 198u8, 227u8, 196u8],
1671            [153u8, 93u8, 93u8, 145u8],
1672            [167u8, 212u8, 196u8, 115u8],
1673            [232u8, 2u8, 24u8, 34u8],
1674        ];
1675        /// The names of the variants in the same order as `SELECTORS`.
1676        pub const VARIANT_NAMES: &'static [&'static str] = &[
1677            ::core::stringify!(votingId),
1678            ::core::stringify!(register),
1679            ::core::stringify!(vote),
1680            ::core::stringify!(setWinner),
1681        ];
1682        /// The signatures in the same order as `SELECTORS`.
1683        pub const SIGNATURES: &'static [&'static str] = &[
1684            <votingIdCall as alloy_sol_types::SolCall>::SIGNATURE,
1685            <registerCall as alloy_sol_types::SolCall>::SIGNATURE,
1686            <voteCall as alloy_sol_types::SolCall>::SIGNATURE,
1687            <setWinnerCall as alloy_sol_types::SolCall>::SIGNATURE,
1688        ];
1689        /// Returns the signature for the given selector, if known.
1690        #[inline]
1691        pub fn signature_by_selector(
1692            selector: [u8; 4usize],
1693        ) -> ::core::option::Option<&'static str> {
1694            match Self::SELECTORS.binary_search(&selector) {
1695                ::core::result::Result::Ok(idx) => {
1696                    ::core::option::Option::Some(Self::SIGNATURES[idx])
1697                }
1698                ::core::result::Result::Err(_) => ::core::option::Option::None,
1699            }
1700        }
1701        /// Returns the enum variant name for the given selector, if known.
1702        #[inline]
1703        pub fn name_by_selector(
1704            selector: [u8; 4usize],
1705        ) -> ::core::option::Option<&'static str> {
1706            let sig = Self::signature_by_selector(selector)?;
1707            sig.split_once('(').map(|(name, _)| name)
1708        }
1709    }
1710    #[automatically_derived]
1711    impl alloy_sol_types::SolInterface for VotingCalls {
1712        const NAME: &'static str = "VotingCalls";
1713        const MIN_DATA_LENGTH: usize = 128usize;
1714        const COUNT: usize = 4usize;
1715        #[inline]
1716        fn selector(&self) -> [u8; 4] {
1717            match self {
1718                Self::register(_) => <registerCall as alloy_sol_types::SolCall>::SELECTOR,
1719                Self::setWinner(_) => {
1720                    <setWinnerCall as alloy_sol_types::SolCall>::SELECTOR
1721                }
1722                Self::vote(_) => <voteCall as alloy_sol_types::SolCall>::SELECTOR,
1723                Self::votingId(_) => <votingIdCall as alloy_sol_types::SolCall>::SELECTOR,
1724            }
1725        }
1726        #[inline]
1727        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
1728            Self::SELECTORS.get(i).copied()
1729        }
1730        #[inline]
1731        fn valid_selector(selector: [u8; 4]) -> bool {
1732            Self::SELECTORS.binary_search(&selector).is_ok()
1733        }
1734        #[inline]
1735        #[allow(non_snake_case)]
1736        fn abi_decode_raw(
1737            selector: [u8; 4],
1738            data: &[u8],
1739        ) -> alloy_sol_types::Result<Self> {
1740            static DECODE_SHIMS: &[fn(&[u8]) -> alloy_sol_types::Result<VotingCalls>] = &[
1741                {
1742                    fn votingId(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1743                        <votingIdCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1744                            .map(VotingCalls::votingId)
1745                    }
1746                    votingId
1747                },
1748                {
1749                    fn register(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1750                        <registerCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1751                            .map(VotingCalls::register)
1752                    }
1753                    register
1754                },
1755                {
1756                    fn vote(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1757                        <voteCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1758                            .map(VotingCalls::vote)
1759                    }
1760                    vote
1761                },
1762                {
1763                    fn setWinner(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1764                        <setWinnerCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1765                            .map(VotingCalls::setWinner)
1766                    }
1767                    setWinner
1768                },
1769            ];
1770            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
1771                return Err(
1772                    alloy_sol_types::Error::unknown_selector(
1773                        <Self as alloy_sol_types::SolInterface>::NAME,
1774                        selector,
1775                    ),
1776                );
1777            };
1778            DECODE_SHIMS[idx](data)
1779        }
1780        #[inline]
1781        #[allow(non_snake_case)]
1782        fn abi_decode_raw_validate(
1783            selector: [u8; 4],
1784            data: &[u8],
1785        ) -> alloy_sol_types::Result<Self> {
1786            static DECODE_VALIDATE_SHIMS: &[fn(
1787                &[u8],
1788            ) -> alloy_sol_types::Result<VotingCalls>] = &[
1789                {
1790                    fn votingId(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1791                        <votingIdCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1792                                data,
1793                            )
1794                            .map(VotingCalls::votingId)
1795                    }
1796                    votingId
1797                },
1798                {
1799                    fn register(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1800                        <registerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1801                                data,
1802                            )
1803                            .map(VotingCalls::register)
1804                    }
1805                    register
1806                },
1807                {
1808                    fn vote(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1809                        <voteCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1810                                data,
1811                            )
1812                            .map(VotingCalls::vote)
1813                    }
1814                    vote
1815                },
1816                {
1817                    fn setWinner(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1818                        <setWinnerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1819                                data,
1820                            )
1821                            .map(VotingCalls::setWinner)
1822                    }
1823                    setWinner
1824                },
1825            ];
1826            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
1827                return Err(
1828                    alloy_sol_types::Error::unknown_selector(
1829                        <Self as alloy_sol_types::SolInterface>::NAME,
1830                        selector,
1831                    ),
1832                );
1833            };
1834            DECODE_VALIDATE_SHIMS[idx](data)
1835        }
1836        #[inline]
1837        fn abi_encoded_size(&self) -> usize {
1838            match self {
1839                Self::register(inner) => {
1840                    <registerCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1841                }
1842                Self::setWinner(inner) => {
1843                    <setWinnerCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1844                }
1845                Self::vote(inner) => {
1846                    <voteCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1847                }
1848                Self::votingId(inner) => {
1849                    <votingIdCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1850                }
1851            }
1852        }
1853        #[inline]
1854        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
1855            match self {
1856                Self::register(inner) => {
1857                    <registerCall as alloy_sol_types::SolCall>::abi_encode_raw(
1858                        inner,
1859                        out,
1860                    )
1861                }
1862                Self::setWinner(inner) => {
1863                    <setWinnerCall as alloy_sol_types::SolCall>::abi_encode_raw(
1864                        inner,
1865                        out,
1866                    )
1867                }
1868                Self::vote(inner) => {
1869                    <voteCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
1870                }
1871                Self::votingId(inner) => {
1872                    <votingIdCall as alloy_sol_types::SolCall>::abi_encode_raw(
1873                        inner,
1874                        out,
1875                    )
1876                }
1877            }
1878        }
1879    }
1880    ///Container for all the [`Voting`](self) events.
1881    #[derive(Clone)]
1882    #[derive(serde::Serialize, serde::Deserialize)]
1883    #[derive(Debug, PartialEq, Eq, Hash)]
1884    pub enum VotingEvents {
1885        #[allow(missing_docs)]
1886        Voted(Voted),
1887        #[allow(missing_docs)]
1888        Winner(Winner),
1889    }
1890    impl VotingEvents {
1891        /// All the selectors of this enum.
1892        ///
1893        /// Note that the selectors might not be in the same order as the variants.
1894        /// No guarantees are made about the order of the selectors.
1895        ///
1896        /// Prefer using `SolInterface` methods instead.
1897        pub const SELECTORS: &'static [[u8; 32usize]] = &[
1898            [
1899                38u8, 157u8, 58u8, 36u8, 113u8, 36u8, 54u8, 247u8, 125u8, 241u8, 93u8,
1900                99u8, 222u8, 125u8, 35u8, 55u8, 160u8, 96u8, 201u8, 16u8, 45u8, 238u8,
1901                111u8, 70u8, 201u8, 9u8, 251u8, 15u8, 162u8, 213u8, 47u8, 12u8,
1902            ],
1903            [
1904                228u8, 171u8, 197u8, 56u8, 15u8, 166u8, 147u8, 157u8, 29u8, 194u8, 59u8,
1905                94u8, 144u8, 179u8, 168u8, 160u8, 227u8, 40u8, 240u8, 241u8, 168u8, 42u8,
1906                95u8, 66u8, 191u8, 183u8, 149u8, 191u8, 156u8, 113u8, 117u8, 5u8,
1907            ],
1908        ];
1909        /// The names of the variants in the same order as `SELECTORS`.
1910        pub const VARIANT_NAMES: &'static [&'static str] = &[
1911            ::core::stringify!(Winner),
1912            ::core::stringify!(Voted),
1913        ];
1914        /// The signatures in the same order as `SELECTORS`.
1915        pub const SIGNATURES: &'static [&'static str] = &[
1916            <Winner as alloy_sol_types::SolEvent>::SIGNATURE,
1917            <Voted as alloy_sol_types::SolEvent>::SIGNATURE,
1918        ];
1919        /// Returns the signature for the given selector, if known.
1920        #[inline]
1921        pub fn signature_by_selector(
1922            selector: [u8; 32usize],
1923        ) -> ::core::option::Option<&'static str> {
1924            match Self::SELECTORS.binary_search(&selector) {
1925                ::core::result::Result::Ok(idx) => {
1926                    ::core::option::Option::Some(Self::SIGNATURES[idx])
1927                }
1928                ::core::result::Result::Err(_) => ::core::option::Option::None,
1929            }
1930        }
1931        /// Returns the enum variant name for the given selector, if known.
1932        #[inline]
1933        pub fn name_by_selector(
1934            selector: [u8; 32usize],
1935        ) -> ::core::option::Option<&'static str> {
1936            let sig = Self::signature_by_selector(selector)?;
1937            sig.split_once('(').map(|(name, _)| name)
1938        }
1939    }
1940    #[automatically_derived]
1941    impl alloy_sol_types::SolEventInterface for VotingEvents {
1942        const NAME: &'static str = "VotingEvents";
1943        const COUNT: usize = 2usize;
1944        fn decode_raw_log(
1945            topics: &[alloy_sol_types::Word],
1946            data: &[u8],
1947        ) -> alloy_sol_types::Result<Self> {
1948            match topics.first().copied() {
1949                Some(<Voted as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
1950                    <Voted as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
1951                        .map(Self::Voted)
1952                }
1953                Some(<Winner as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
1954                    <Winner as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
1955                        .map(Self::Winner)
1956                }
1957                _ => {
1958                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
1959                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
1960                        log: alloy_sol_types::private::Box::new(
1961                            alloy_sol_types::private::LogData::new_unchecked(
1962                                topics.to_vec(),
1963                                data.to_vec().into(),
1964                            ),
1965                        ),
1966                    })
1967                }
1968            }
1969        }
1970    }
1971    #[automatically_derived]
1972    impl alloy_sol_types::private::IntoLogData for VotingEvents {
1973        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1974            match self {
1975                Self::Voted(inner) => {
1976                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
1977                }
1978                Self::Winner(inner) => {
1979                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
1980                }
1981            }
1982        }
1983        fn into_log_data(self) -> alloy_sol_types::private::LogData {
1984            match self {
1985                Self::Voted(inner) => {
1986                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
1987                }
1988                Self::Winner(inner) => {
1989                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
1990                }
1991            }
1992        }
1993    }
1994    use alloy::contract as alloy_contract;
1995    /**Creates a new wrapper around an on-chain [`Voting`](self) contract instance.
1996
1997See the [wrapper's documentation](`VotingInstance`) for more details.*/
1998    #[inline]
1999    pub const fn new<
2000        P: alloy_contract::private::Provider<N>,
2001        N: alloy_contract::private::Network,
2002    >(
2003        address: alloy_sol_types::private::Address,
2004        __provider: P,
2005    ) -> VotingInstance<P, N> {
2006        VotingInstance::<P, N>::new(address, __provider)
2007    }
2008    /**Deploys this contract using the given `provider` and constructor arguments, if any.
2009
2010Returns a new instance of the contract, if the deployment was successful.
2011
2012For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
2013    #[inline]
2014    pub fn deploy<
2015        P: alloy_contract::private::Provider<N>,
2016        N: alloy_contract::private::Network,
2017    >(
2018        __provider: P,
2019    ) -> impl ::core::future::Future<
2020        Output = alloy_contract::Result<VotingInstance<P, N>>,
2021    > {
2022        VotingInstance::<P, N>::deploy(__provider)
2023    }
2024    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
2025and constructor arguments, if any.
2026
2027This is a simple wrapper around creating a `RawCallBuilder` with the data set to
2028the bytecode concatenated with the constructor's ABI-encoded arguments.*/
2029    #[inline]
2030    pub fn deploy_builder<
2031        P: alloy_contract::private::Provider<N>,
2032        N: alloy_contract::private::Network,
2033    >(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
2034        VotingInstance::<P, N>::deploy_builder(__provider)
2035    }
2036    /**A [`Voting`](self) instance.
2037
2038Contains type-safe methods for interacting with an on-chain instance of the
2039[`Voting`](self) contract located at a given `address`, using a given
2040provider `P`.
2041
2042If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
2043documentation on how to provide it), the `deploy` and `deploy_builder` methods can
2044be used to deploy a new instance of the contract.
2045
2046See the [module-level documentation](self) for all the available methods.*/
2047    #[derive(Clone)]
2048    pub struct VotingInstance<P, N = alloy_contract::private::Ethereum> {
2049        address: alloy_sol_types::private::Address,
2050        provider: P,
2051        _network: ::core::marker::PhantomData<N>,
2052    }
2053    #[automatically_derived]
2054    impl<P, N> ::core::fmt::Debug for VotingInstance<P, N> {
2055        #[inline]
2056        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
2057            f.debug_tuple("VotingInstance").field(&self.address).finish()
2058        }
2059    }
2060    /// Instantiation and getters/setters.
2061    impl<
2062        P: alloy_contract::private::Provider<N>,
2063        N: alloy_contract::private::Network,
2064    > VotingInstance<P, N> {
2065        /**Creates a new wrapper around an on-chain [`Voting`](self) contract instance.
2066
2067See the [wrapper's documentation](`VotingInstance`) for more details.*/
2068        #[inline]
2069        pub const fn new(
2070            address: alloy_sol_types::private::Address,
2071            __provider: P,
2072        ) -> Self {
2073            Self {
2074                address,
2075                provider: __provider,
2076                _network: ::core::marker::PhantomData,
2077            }
2078        }
2079        /**Deploys this contract using the given `provider` and constructor arguments, if any.
2080
2081Returns a new instance of the contract, if the deployment was successful.
2082
2083For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
2084        #[inline]
2085        pub async fn deploy(
2086            __provider: P,
2087        ) -> alloy_contract::Result<VotingInstance<P, N>> {
2088            let call_builder = Self::deploy_builder(__provider);
2089            let contract_address = call_builder.deploy().await?;
2090            Ok(Self::new(contract_address, call_builder.provider))
2091        }
2092        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
2093and constructor arguments, if any.
2094
2095This is a simple wrapper around creating a `RawCallBuilder` with the data set to
2096the bytecode concatenated with the constructor's ABI-encoded arguments.*/
2097        #[inline]
2098        pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
2099            alloy_contract::RawCallBuilder::new_raw_deploy(
2100                __provider,
2101                ::core::clone::Clone::clone(&BYTECODE),
2102            )
2103        }
2104        /// Returns a reference to the address.
2105        #[inline]
2106        pub const fn address(&self) -> &alloy_sol_types::private::Address {
2107            &self.address
2108        }
2109        /// Sets the address.
2110        #[inline]
2111        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
2112            self.address = address;
2113        }
2114        /// Sets the address and returns `self`.
2115        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
2116            self.set_address(address);
2117            self
2118        }
2119        /// Returns a reference to the provider.
2120        #[inline]
2121        pub const fn provider(&self) -> &P {
2122            &self.provider
2123        }
2124    }
2125    impl<P: ::core::clone::Clone, N> VotingInstance<&P, N> {
2126        /// Clones the provider and returns a new instance with the cloned provider.
2127        #[inline]
2128        pub fn with_cloned_provider(self) -> VotingInstance<P, N> {
2129            VotingInstance {
2130                address: self.address,
2131                provider: ::core::clone::Clone::clone(&self.provider),
2132                _network: ::core::marker::PhantomData,
2133            }
2134        }
2135    }
2136    /// Function calls.
2137    impl<
2138        P: alloy_contract::private::Provider<N>,
2139        N: alloy_contract::private::Network,
2140    > VotingInstance<P, N> {
2141        /// Creates a new call builder using this contract instance's provider and address.
2142        ///
2143        /// Note that the call can be any function call, not just those defined in this
2144        /// contract. Prefer using the other methods for building type-safe contract calls.
2145        pub fn call_builder<C: alloy_sol_types::SolCall>(
2146            &self,
2147            call: &C,
2148        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
2149            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
2150        }
2151        ///Creates a new call builder for the [`register`] function.
2152        pub fn register(
2153            &self,
2154            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2155        ) -> alloy_contract::SolCallBuilder<&P, registerCall, N> {
2156            self.call_builder(&registerCall { v })
2157        }
2158        ///Creates a new call builder for the [`setWinner`] function.
2159        pub fn setWinner(
2160            &self,
2161            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2162            choice: alloy::sol_types::private::primitives::aliases::U256,
2163        ) -> alloy_contract::SolCallBuilder<&P, setWinnerCall, N> {
2164            self.call_builder(&setWinnerCall { v, choice })
2165        }
2166        ///Creates a new call builder for the [`vote`] function.
2167        pub fn vote(
2168            &self,
2169            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2170            choice: alloy::sol_types::private::primitives::aliases::U256,
2171        ) -> alloy_contract::SolCallBuilder<&P, voteCall, N> {
2172            self.call_builder(&voteCall { v, choice })
2173        }
2174        ///Creates a new call builder for the [`votingId`] function.
2175        pub fn votingId(
2176            &self,
2177            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2178        ) -> alloy_contract::SolCallBuilder<&P, votingIdCall, N> {
2179            self.call_builder(&votingIdCall { v })
2180        }
2181    }
2182    /// Event filters.
2183    impl<
2184        P: alloy_contract::private::Provider<N>,
2185        N: alloy_contract::private::Network,
2186    > VotingInstance<P, N> {
2187        /// Creates a new event filter using this contract instance's provider and address.
2188        ///
2189        /// Note that the type can be any event, not just those defined in this contract.
2190        /// Prefer using the other methods for building type-safe event filters.
2191        pub fn event_filter<E: alloy_sol_types::SolEvent>(
2192            &self,
2193        ) -> alloy_contract::Event<&P, E, N> {
2194            alloy_contract::Event::new_sol(&self.provider, &self.address)
2195        }
2196        ///Creates a new event filter for the [`Voted`] event.
2197        pub fn Voted_filter(&self) -> alloy_contract::Event<&P, Voted, N> {
2198            self.event_filter::<Voted>()
2199        }
2200        ///Creates a new event filter for the [`Winner`] event.
2201        pub fn Winner_filter(&self) -> alloy_contract::Event<&P, Winner, N> {
2202            self.event_filter::<Winner>()
2203        }
2204    }
2205}