hotshot_contract_adapter/bindings/
plonkverifier.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library BN254 {
6    type BaseField is uint256;
7    type ScalarField is uint256;
8    struct G1Point { BaseField x; BaseField y; }
9}
10```*/
11#[allow(
12    non_camel_case_types,
13    non_snake_case,
14    clippy::pub_underscore_fields,
15    clippy::style,
16    clippy::empty_structs_with_brackets
17)]
18pub mod BN254 {
19    use super::*;
20    use alloy::sol_types as alloy_sol_types;
21    #[derive(Default, Debug, PartialEq, Eq, Hash)]
22    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
23    #[derive(Clone)]
24    pub struct BaseField(alloy::sol_types::private::primitives::aliases::U256);
25    const _: () = {
26        use alloy::sol_types as alloy_sol_types;
27        #[automatically_derived]
28        impl alloy_sol_types::private::SolTypeValue<BaseField>
29            for alloy::sol_types::private::primitives::aliases::U256
30        {
31            #[inline]
32            fn stv_to_tokens(
33                &self,
34            ) -> <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'_>
35            {
36                alloy_sol_types::private::SolTypeValue::<
37                    alloy::sol_types::sol_data::Uint<256>,
38                >::stv_to_tokens(self)
39            }
40            #[inline]
41            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
42                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(self)
43                    .0
44            }
45            #[inline]
46            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
47                <alloy::sol_types::sol_data::Uint<
48                    256,
49                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
50            }
51            #[inline]
52            fn stv_abi_packed_encoded_size(&self) -> usize {
53                <alloy::sol_types::sol_data::Uint<
54                    256,
55                > as alloy_sol_types::SolType>::abi_encoded_size(self)
56            }
57        }
58        #[automatically_derived]
59        impl BaseField {
60            /// The Solidity type name.
61            pub const NAME: &'static str = stringify!(@ name);
62            /// Convert from the underlying value type.
63            #[inline]
64            pub const fn from(value: alloy::sol_types::private::primitives::aliases::U256) -> Self {
65                Self(value)
66            }
67            /// Return the underlying value.
68            #[inline]
69            pub const fn into(self) -> alloy::sol_types::private::primitives::aliases::U256 {
70                self.0
71            }
72            /// Return the single encoding of this value, delegating to the
73            /// underlying type.
74            #[inline]
75            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
76                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
77            }
78            /// Return the packed encoding of this value, delegating to the
79            /// underlying type.
80            #[inline]
81            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
82                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
83            }
84        }
85        #[automatically_derived]
86        impl alloy_sol_types::SolType for BaseField {
87            type RustType = alloy::sol_types::private::primitives::aliases::U256;
88            type Token<'a> =
89                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'a>;
90            const SOL_NAME: &'static str = Self::NAME;
91            const ENCODED_SIZE: Option<usize> =
92                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::ENCODED_SIZE;
93            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
94                256,
95            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
96            #[inline]
97            fn valid_token(token: &Self::Token<'_>) -> bool {
98                Self::type_check(token).is_ok()
99            }
100            #[inline]
101            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
102                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::type_check(
103                    token,
104                )
105            }
106            #[inline]
107            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
108                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::detokenize(
109                    token,
110                )
111            }
112        }
113        #[automatically_derived]
114        impl alloy_sol_types::EventTopic for BaseField {
115            #[inline]
116            fn topic_preimage_length(rust: &Self::RustType) -> usize {
117                <alloy::sol_types::sol_data::Uint<
118                    256,
119                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
120            }
121            #[inline]
122            fn encode_topic_preimage(
123                rust: &Self::RustType,
124                out: &mut alloy_sol_types::private::Vec<u8>,
125            ) {
126                <alloy::sol_types::sol_data::Uint<
127                    256,
128                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
129            }
130            #[inline]
131            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
132                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic(
133                    rust,
134                )
135            }
136        }
137    };
138    #[derive(Default, Debug, PartialEq, Eq, Hash)]
139    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
140    #[derive(Clone)]
141    pub struct ScalarField(alloy::sol_types::private::primitives::aliases::U256);
142    const _: () = {
143        use alloy::sol_types as alloy_sol_types;
144        #[automatically_derived]
145        impl alloy_sol_types::private::SolTypeValue<ScalarField>
146            for alloy::sol_types::private::primitives::aliases::U256
147        {
148            #[inline]
149            fn stv_to_tokens(
150                &self,
151            ) -> <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'_>
152            {
153                alloy_sol_types::private::SolTypeValue::<
154                    alloy::sol_types::sol_data::Uint<256>,
155                >::stv_to_tokens(self)
156            }
157            #[inline]
158            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
159                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(self)
160                    .0
161            }
162            #[inline]
163            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
164                <alloy::sol_types::sol_data::Uint<
165                    256,
166                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
167            }
168            #[inline]
169            fn stv_abi_packed_encoded_size(&self) -> usize {
170                <alloy::sol_types::sol_data::Uint<
171                    256,
172                > as alloy_sol_types::SolType>::abi_encoded_size(self)
173            }
174        }
175        #[automatically_derived]
176        impl ScalarField {
177            /// The Solidity type name.
178            pub const NAME: &'static str = stringify!(@ name);
179            /// Convert from the underlying value type.
180            #[inline]
181            pub const fn from(value: alloy::sol_types::private::primitives::aliases::U256) -> Self {
182                Self(value)
183            }
184            /// Return the underlying value.
185            #[inline]
186            pub const fn into(self) -> alloy::sol_types::private::primitives::aliases::U256 {
187                self.0
188            }
189            /// Return the single encoding of this value, delegating to the
190            /// underlying type.
191            #[inline]
192            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
193                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
194            }
195            /// Return the packed encoding of this value, delegating to the
196            /// underlying type.
197            #[inline]
198            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
199                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
200            }
201        }
202        #[automatically_derived]
203        impl alloy_sol_types::SolType for ScalarField {
204            type RustType = alloy::sol_types::private::primitives::aliases::U256;
205            type Token<'a> =
206                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'a>;
207            const SOL_NAME: &'static str = Self::NAME;
208            const ENCODED_SIZE: Option<usize> =
209                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::ENCODED_SIZE;
210            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
211                256,
212            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
213            #[inline]
214            fn valid_token(token: &Self::Token<'_>) -> bool {
215                Self::type_check(token).is_ok()
216            }
217            #[inline]
218            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
219                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::type_check(
220                    token,
221                )
222            }
223            #[inline]
224            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
225                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::detokenize(
226                    token,
227                )
228            }
229        }
230        #[automatically_derived]
231        impl alloy_sol_types::EventTopic for ScalarField {
232            #[inline]
233            fn topic_preimage_length(rust: &Self::RustType) -> usize {
234                <alloy::sol_types::sol_data::Uint<
235                    256,
236                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
237            }
238            #[inline]
239            fn encode_topic_preimage(
240                rust: &Self::RustType,
241                out: &mut alloy_sol_types::private::Vec<u8>,
242            ) {
243                <alloy::sol_types::sol_data::Uint<
244                    256,
245                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
246            }
247            #[inline]
248            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
249                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic(
250                    rust,
251                )
252            }
253        }
254    };
255    #[derive(Default, Debug, PartialEq, Eq, Hash)]
256    /**```solidity
257    struct G1Point { BaseField x; BaseField y; }
258    ```*/
259    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
260    #[derive(Clone)]
261    pub struct G1Point {
262        #[allow(missing_docs)]
263        pub x: <BaseField as alloy::sol_types::SolType>::RustType,
264        #[allow(missing_docs)]
265        pub y: <BaseField as alloy::sol_types::SolType>::RustType,
266    }
267    #[allow(
268        non_camel_case_types,
269        non_snake_case,
270        clippy::pub_underscore_fields,
271        clippy::style
272    )]
273    const _: () = {
274        use alloy::sol_types as alloy_sol_types;
275        #[doc(hidden)]
276        type UnderlyingSolTuple<'a> = (BaseField, BaseField);
277        #[doc(hidden)]
278        type UnderlyingRustTuple<'a> = (
279            <BaseField as alloy::sol_types::SolType>::RustType,
280            <BaseField as alloy::sol_types::SolType>::RustType,
281        );
282        #[cfg(test)]
283        #[allow(dead_code, unreachable_patterns)]
284        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
285            match _t {
286                alloy_sol_types::private::AssertTypeEq::<
287                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
288                >(_) => {},
289            }
290        }
291        #[automatically_derived]
292        #[doc(hidden)]
293        impl ::core::convert::From<G1Point> for UnderlyingRustTuple<'_> {
294            fn from(value: G1Point) -> Self {
295                (value.x, value.y)
296            }
297        }
298        #[automatically_derived]
299        #[doc(hidden)]
300        impl ::core::convert::From<UnderlyingRustTuple<'_>> for G1Point {
301            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
302                Self {
303                    x: tuple.0,
304                    y: tuple.1,
305                }
306            }
307        }
308        #[automatically_derived]
309        impl alloy_sol_types::SolValue for G1Point {
310            type SolType = Self;
311        }
312        #[automatically_derived]
313        impl alloy_sol_types::private::SolTypeValue<Self> for G1Point {
314            #[inline]
315            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
316                (
317                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.x),
318                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.y),
319                )
320            }
321            #[inline]
322            fn stv_abi_encoded_size(&self) -> usize {
323                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
324                    return size;
325                }
326                let tuple =
327                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
328                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
329            }
330            #[inline]
331            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
332                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
333            }
334            #[inline]
335            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
336                let tuple =
337                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
338                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encode_packed_to(
339                    &tuple, out,
340                )
341            }
342            #[inline]
343            fn stv_abi_packed_encoded_size(&self) -> usize {
344                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
345                    return size;
346                }
347                let tuple =
348                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
349                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_packed_encoded_size(
350                    &tuple,
351                )
352            }
353        }
354        #[automatically_derived]
355        impl alloy_sol_types::SolType for G1Point {
356            type RustType = Self;
357            type Token<'a> = <UnderlyingSolTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
358            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
359            const ENCODED_SIZE: Option<usize> =
360                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::ENCODED_SIZE;
361            const PACKED_ENCODED_SIZE: Option<usize> =
362                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
363            #[inline]
364            fn valid_token(token: &Self::Token<'_>) -> bool {
365                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
366            }
367            #[inline]
368            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
369                let tuple = <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::detokenize(token);
370                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
371            }
372        }
373        #[automatically_derived]
374        impl alloy_sol_types::SolStruct for G1Point {
375            const NAME: &'static str = "G1Point";
376            #[inline]
377            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
378                alloy_sol_types::private::Cow::Borrowed("G1Point(uint256 x,uint256 y)")
379            }
380            #[inline]
381            fn eip712_components(
382            ) -> alloy_sol_types::private::Vec<alloy_sol_types::private::Cow<'static, str>>
383            {
384                alloy_sol_types::private::Vec::new()
385            }
386            #[inline]
387            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
388                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
389            }
390            #[inline]
391            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
392                [
393                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.x).0,
394                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.y).0,
395                ]
396                .concat()
397            }
398        }
399        #[automatically_derived]
400        impl alloy_sol_types::EventTopic for G1Point {
401            #[inline]
402            fn topic_preimage_length(rust: &Self::RustType) -> usize {
403                0usize
404                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.x)
405                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.y)
406            }
407            #[inline]
408            fn encode_topic_preimage(
409                rust: &Self::RustType,
410                out: &mut alloy_sol_types::private::Vec<u8>,
411            ) {
412                out.reserve(<Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust));
413                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.x, out);
414                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.y, out);
415            }
416            #[inline]
417            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
418                let mut out = alloy_sol_types::private::Vec::new();
419                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, &mut out);
420                alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
421            }
422        }
423    };
424    use alloy::contract as alloy_contract;
425    /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
426
427    See the [wrapper's documentation](`BN254Instance`) for more details.*/
428    #[inline]
429    pub const fn new<
430        T: alloy_contract::private::Transport + ::core::clone::Clone,
431        P: alloy_contract::private::Provider<T, N>,
432        N: alloy_contract::private::Network,
433    >(
434        address: alloy_sol_types::private::Address,
435        provider: P,
436    ) -> BN254Instance<T, P, N> {
437        BN254Instance::<T, P, N>::new(address, provider)
438    }
439    /**A [`BN254`](self) instance.
440
441    Contains type-safe methods for interacting with an on-chain instance of the
442    [`BN254`](self) contract located at a given `address`, using a given
443    provider `P`.
444
445    If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
446    documentation on how to provide it), the `deploy` and `deploy_builder` methods can
447    be used to deploy a new instance of the contract.
448
449    See the [module-level documentation](self) for all the available methods.*/
450    #[derive(Clone)]
451    pub struct BN254Instance<T, P, N = alloy_contract::private::Ethereum> {
452        address: alloy_sol_types::private::Address,
453        provider: P,
454        _network_transport: ::core::marker::PhantomData<(N, T)>,
455    }
456    #[automatically_derived]
457    impl<T, P, N> ::core::fmt::Debug for BN254Instance<T, P, N> {
458        #[inline]
459        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
460            f.debug_tuple("BN254Instance").field(&self.address).finish()
461        }
462    }
463    /// Instantiation and getters/setters.
464    #[automatically_derived]
465    impl<
466            T: alloy_contract::private::Transport + ::core::clone::Clone,
467            P: alloy_contract::private::Provider<T, N>,
468            N: alloy_contract::private::Network,
469        > BN254Instance<T, P, N>
470    {
471        /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
472
473        See the [wrapper's documentation](`BN254Instance`) for more details.*/
474        #[inline]
475        pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self {
476            Self {
477                address,
478                provider,
479                _network_transport: ::core::marker::PhantomData,
480            }
481        }
482        /// Returns a reference to the address.
483        #[inline]
484        pub const fn address(&self) -> &alloy_sol_types::private::Address {
485            &self.address
486        }
487        /// Sets the address.
488        #[inline]
489        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
490            self.address = address;
491        }
492        /// Sets the address and returns `self`.
493        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
494            self.set_address(address);
495            self
496        }
497        /// Returns a reference to the provider.
498        #[inline]
499        pub const fn provider(&self) -> &P {
500            &self.provider
501        }
502    }
503    impl<T, P: ::core::clone::Clone, N> BN254Instance<T, &P, N> {
504        /// Clones the provider and returns a new instance with the cloned provider.
505        #[inline]
506        pub fn with_cloned_provider(self) -> BN254Instance<T, P, N> {
507            BN254Instance {
508                address: self.address,
509                provider: ::core::clone::Clone::clone(&self.provider),
510                _network_transport: ::core::marker::PhantomData,
511            }
512        }
513    }
514    /// Function calls.
515    #[automatically_derived]
516    impl<
517            T: alloy_contract::private::Transport + ::core::clone::Clone,
518            P: alloy_contract::private::Provider<T, N>,
519            N: alloy_contract::private::Network,
520        > BN254Instance<T, P, N>
521    {
522        /// Creates a new call builder using this contract instance's provider and address.
523        ///
524        /// Note that the call can be any function call, not just those defined in this
525        /// contract. Prefer using the other methods for building type-safe contract calls.
526        pub fn call_builder<C: alloy_sol_types::SolCall>(
527            &self,
528            call: &C,
529        ) -> alloy_contract::SolCallBuilder<T, &P, C, N> {
530            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
531        }
532    }
533    /// Event filters.
534    #[automatically_derived]
535    impl<
536            T: alloy_contract::private::Transport + ::core::clone::Clone,
537            P: alloy_contract::private::Provider<T, N>,
538            N: alloy_contract::private::Network,
539        > BN254Instance<T, P, N>
540    {
541        /// Creates a new event filter using this contract instance's provider and address.
542        ///
543        /// Note that the type can be any event, not just those defined in this contract.
544        /// Prefer using the other methods for building type-safe event filters.
545        pub fn event_filter<E: alloy_sol_types::SolEvent>(
546            &self,
547        ) -> alloy_contract::Event<T, &P, E, N> {
548            alloy_contract::Event::new_sol(&self.provider, &self.address)
549        }
550    }
551}
552///Module containing a contract's types and functions.
553/**
554
555```solidity
556library IPlonkVerifier {
557    struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
558    struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
559}
560```*/
561#[allow(
562    non_camel_case_types,
563    non_snake_case,
564    clippy::pub_underscore_fields,
565    clippy::style,
566    clippy::empty_structs_with_brackets
567)]
568pub mod IPlonkVerifier {
569    use super::*;
570    use alloy::sol_types as alloy_sol_types;
571    #[derive()]
572    /**```solidity
573    struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
574    ```*/
575    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
576    #[derive(Clone)]
577    pub struct PlonkProof {
578        #[allow(missing_docs)]
579        pub wire0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
580        #[allow(missing_docs)]
581        pub wire1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
582        #[allow(missing_docs)]
583        pub wire2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
584        #[allow(missing_docs)]
585        pub wire3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
586        #[allow(missing_docs)]
587        pub wire4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
588        #[allow(missing_docs)]
589        pub prodPerm: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
590        #[allow(missing_docs)]
591        pub split0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
592        #[allow(missing_docs)]
593        pub split1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
594        #[allow(missing_docs)]
595        pub split2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
596        #[allow(missing_docs)]
597        pub split3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
598        #[allow(missing_docs)]
599        pub split4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
600        #[allow(missing_docs)]
601        pub zeta: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
602        #[allow(missing_docs)]
603        pub zetaOmega: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
604        #[allow(missing_docs)]
605        pub wireEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
606        #[allow(missing_docs)]
607        pub wireEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
608        #[allow(missing_docs)]
609        pub wireEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
610        #[allow(missing_docs)]
611        pub wireEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
612        #[allow(missing_docs)]
613        pub wireEval4: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
614        #[allow(missing_docs)]
615        pub sigmaEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
616        #[allow(missing_docs)]
617        pub sigmaEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
618        #[allow(missing_docs)]
619        pub sigmaEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
620        #[allow(missing_docs)]
621        pub sigmaEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
622        #[allow(missing_docs)]
623        pub prodPermZetaOmegaEval: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
624    }
625    #[allow(
626        non_camel_case_types,
627        non_snake_case,
628        clippy::pub_underscore_fields,
629        clippy::style
630    )]
631    const _: () = {
632        use alloy::sol_types as alloy_sol_types;
633        #[doc(hidden)]
634        type UnderlyingSolTuple<'a> = (
635            BN254::G1Point,
636            BN254::G1Point,
637            BN254::G1Point,
638            BN254::G1Point,
639            BN254::G1Point,
640            BN254::G1Point,
641            BN254::G1Point,
642            BN254::G1Point,
643            BN254::G1Point,
644            BN254::G1Point,
645            BN254::G1Point,
646            BN254::G1Point,
647            BN254::G1Point,
648            BN254::ScalarField,
649            BN254::ScalarField,
650            BN254::ScalarField,
651            BN254::ScalarField,
652            BN254::ScalarField,
653            BN254::ScalarField,
654            BN254::ScalarField,
655            BN254::ScalarField,
656            BN254::ScalarField,
657            BN254::ScalarField,
658        );
659        #[doc(hidden)]
660        type UnderlyingRustTuple<'a> = (
661            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
662            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
663            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
664            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
665            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
666            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
667            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
668            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
669            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
670            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
671            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
672            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
673            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
674            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
675            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
676            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
677            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
678            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
679            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
680            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
681            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
682            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
683            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
684        );
685        #[cfg(test)]
686        #[allow(dead_code, unreachable_patterns)]
687        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
688            match _t {
689                alloy_sol_types::private::AssertTypeEq::<
690                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
691                >(_) => {},
692            }
693        }
694        #[automatically_derived]
695        #[doc(hidden)]
696        impl ::core::convert::From<PlonkProof> for UnderlyingRustTuple<'_> {
697            fn from(value: PlonkProof) -> Self {
698                (
699                    value.wire0,
700                    value.wire1,
701                    value.wire2,
702                    value.wire3,
703                    value.wire4,
704                    value.prodPerm,
705                    value.split0,
706                    value.split1,
707                    value.split2,
708                    value.split3,
709                    value.split4,
710                    value.zeta,
711                    value.zetaOmega,
712                    value.wireEval0,
713                    value.wireEval1,
714                    value.wireEval2,
715                    value.wireEval3,
716                    value.wireEval4,
717                    value.sigmaEval0,
718                    value.sigmaEval1,
719                    value.sigmaEval2,
720                    value.sigmaEval3,
721                    value.prodPermZetaOmegaEval,
722                )
723            }
724        }
725        #[automatically_derived]
726        #[doc(hidden)]
727        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PlonkProof {
728            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
729                Self {
730                    wire0: tuple.0,
731                    wire1: tuple.1,
732                    wire2: tuple.2,
733                    wire3: tuple.3,
734                    wire4: tuple.4,
735                    prodPerm: tuple.5,
736                    split0: tuple.6,
737                    split1: tuple.7,
738                    split2: tuple.8,
739                    split3: tuple.9,
740                    split4: tuple.10,
741                    zeta: tuple.11,
742                    zetaOmega: tuple.12,
743                    wireEval0: tuple.13,
744                    wireEval1: tuple.14,
745                    wireEval2: tuple.15,
746                    wireEval3: tuple.16,
747                    wireEval4: tuple.17,
748                    sigmaEval0: tuple.18,
749                    sigmaEval1: tuple.19,
750                    sigmaEval2: tuple.20,
751                    sigmaEval3: tuple.21,
752                    prodPermZetaOmegaEval: tuple.22,
753                }
754            }
755        }
756        #[automatically_derived]
757        impl alloy_sol_types::SolValue for PlonkProof {
758            type SolType = Self;
759        }
760        #[automatically_derived]
761        impl alloy_sol_types::private::SolTypeValue<Self> for PlonkProof {
762            #[inline]
763            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
764                (
765                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire0),
766                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire1),
767                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire2),
768                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire3),
769                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire4),
770                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.prodPerm),
771                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split0),
772                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split1),
773                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split2),
774                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split3),
775                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split4),
776                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.zeta),
777                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.zetaOmega),
778                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval0),
779                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval1),
780                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval2),
781                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval3),
782                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval4),
783                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval0),
784                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval1),
785                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval2),
786                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval3),
787                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
788                        &self.prodPermZetaOmegaEval,
789                    ),
790                )
791            }
792            #[inline]
793            fn stv_abi_encoded_size(&self) -> usize {
794                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
795                    return size;
796                }
797                let tuple =
798                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
799                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
800            }
801            #[inline]
802            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
803                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
804            }
805            #[inline]
806            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
807                let tuple =
808                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
809                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encode_packed_to(
810                    &tuple, out,
811                )
812            }
813            #[inline]
814            fn stv_abi_packed_encoded_size(&self) -> usize {
815                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
816                    return size;
817                }
818                let tuple =
819                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
820                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_packed_encoded_size(
821                    &tuple,
822                )
823            }
824        }
825        #[automatically_derived]
826        impl alloy_sol_types::SolType for PlonkProof {
827            type RustType = Self;
828            type Token<'a> = <UnderlyingSolTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
829            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
830            const ENCODED_SIZE: Option<usize> =
831                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::ENCODED_SIZE;
832            const PACKED_ENCODED_SIZE: Option<usize> =
833                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
834            #[inline]
835            fn valid_token(token: &Self::Token<'_>) -> bool {
836                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
837            }
838            #[inline]
839            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
840                let tuple = <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::detokenize(token);
841                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
842            }
843        }
844        #[automatically_derived]
845        impl alloy_sol_types::SolStruct for PlonkProof {
846            const NAME: &'static str = "PlonkProof";
847            #[inline]
848            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
849                alloy_sol_types::private::Cow::Borrowed(
850                    "PlonkProof(BN254.G1Point wire0,BN254.G1Point wire1,BN254.G1Point wire2,BN254.G1Point wire3,BN254.G1Point wire4,BN254.G1Point prodPerm,BN254.G1Point split0,BN254.G1Point split1,BN254.G1Point split2,BN254.G1Point split3,BN254.G1Point split4,BN254.G1Point zeta,BN254.G1Point zetaOmega,uint256 wireEval0,uint256 wireEval1,uint256 wireEval2,uint256 wireEval3,uint256 wireEval4,uint256 sigmaEval0,uint256 sigmaEval1,uint256 sigmaEval2,uint256 sigmaEval3,uint256 prodPermZetaOmegaEval)",
851                )
852            }
853            #[inline]
854            fn eip712_components(
855            ) -> alloy_sol_types::private::Vec<alloy_sol_types::private::Cow<'static, str>>
856            {
857                let mut components = alloy_sol_types::private::Vec::with_capacity(13);
858                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
859                components
860                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
861                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
862                components
863                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
864                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
865                components
866                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
867                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
868                components
869                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
870                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
871                components
872                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
873                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
874                components
875                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
876                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
877                components
878                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
879                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
880                components
881                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
882                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
883                components
884                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
885                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
886                components
887                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
888                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
889                components
890                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
891                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
892                components
893                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
894                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
895                components
896                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
897                components
898            }
899            #[inline]
900            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
901                [
902                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire0).0,
903                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire1).0,
904                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire2).0,
905                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire3).0,
906                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire4).0,
907                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.prodPerm)
908                        .0,
909                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split0).0,
910                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split1).0,
911                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split2).0,
912                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split3).0,
913                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split4).0,
914                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.zeta).0,
915                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.zetaOmega)
916                        .0,
917                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
918                        &self.wireEval0,
919                    )
920                    .0,
921                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
922                        &self.wireEval1,
923                    )
924                    .0,
925                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
926                        &self.wireEval2,
927                    )
928                    .0,
929                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
930                        &self.wireEval3,
931                    )
932                    .0,
933                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
934                        &self.wireEval4,
935                    )
936                    .0,
937                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
938                        &self.sigmaEval0,
939                    )
940                    .0,
941                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
942                        &self.sigmaEval1,
943                    )
944                    .0,
945                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
946                        &self.sigmaEval2,
947                    )
948                    .0,
949                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
950                        &self.sigmaEval3,
951                    )
952                    .0,
953                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
954                        &self.prodPermZetaOmegaEval,
955                    )
956                    .0,
957                ]
958                .concat()
959            }
960        }
961        #[automatically_derived]
962        impl alloy_sol_types::EventTopic for PlonkProof {
963            #[inline]
964            fn topic_preimage_length(rust: &Self::RustType) -> usize {
965                0usize
966                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
967                        &rust.wire0,
968                    )
969                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
970                        &rust.wire1,
971                    )
972                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
973                        &rust.wire2,
974                    )
975                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
976                        &rust.wire3,
977                    )
978                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
979                        &rust.wire4,
980                    )
981                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
982                        &rust.prodPerm,
983                    )
984                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
985                        &rust.split0,
986                    )
987                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
988                        &rust.split1,
989                    )
990                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
991                        &rust.split2,
992                    )
993                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
994                        &rust.split3,
995                    )
996                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
997                        &rust.split4,
998                    )
999                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1000                        &rust.zeta,
1001                    )
1002                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1003                        &rust.zetaOmega,
1004                    )
1005                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1006                        &rust.wireEval0,
1007                    )
1008                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1009                        &rust.wireEval1,
1010                    )
1011                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1012                        &rust.wireEval2,
1013                    )
1014                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1015                        &rust.wireEval3,
1016                    )
1017                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1018                        &rust.wireEval4,
1019                    )
1020                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1021                        &rust.sigmaEval0,
1022                    )
1023                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1024                        &rust.sigmaEval1,
1025                    )
1026                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1027                        &rust.sigmaEval2,
1028                    )
1029                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1030                        &rust.sigmaEval3,
1031                    )
1032                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1033                        &rust.prodPermZetaOmegaEval,
1034                    )
1035            }
1036            #[inline]
1037            fn encode_topic_preimage(
1038                rust: &Self::RustType,
1039                out: &mut alloy_sol_types::private::Vec<u8>,
1040            ) {
1041                out.reserve(<Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust));
1042                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1043                    &rust.wire0,
1044                    out,
1045                );
1046                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1047                    &rust.wire1,
1048                    out,
1049                );
1050                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1051                    &rust.wire2,
1052                    out,
1053                );
1054                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1055                    &rust.wire3,
1056                    out,
1057                );
1058                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1059                    &rust.wire4,
1060                    out,
1061                );
1062                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1063                    &rust.prodPerm,
1064                    out,
1065                );
1066                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1067                    &rust.split0,
1068                    out,
1069                );
1070                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1071                    &rust.split1,
1072                    out,
1073                );
1074                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1075                    &rust.split2,
1076                    out,
1077                );
1078                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1079                    &rust.split3,
1080                    out,
1081                );
1082                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1083                    &rust.split4,
1084                    out,
1085                );
1086                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1087                    &rust.zeta, out,
1088                );
1089                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1090                    &rust.zetaOmega,
1091                    out,
1092                );
1093                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1094                    &rust.wireEval0,
1095                    out,
1096                );
1097                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1098                    &rust.wireEval1,
1099                    out,
1100                );
1101                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1102                    &rust.wireEval2,
1103                    out,
1104                );
1105                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1106                    &rust.wireEval3,
1107                    out,
1108                );
1109                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1110                    &rust.wireEval4,
1111                    out,
1112                );
1113                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1114                    &rust.sigmaEval0,
1115                    out,
1116                );
1117                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1118                    &rust.sigmaEval1,
1119                    out,
1120                );
1121                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1122                    &rust.sigmaEval2,
1123                    out,
1124                );
1125                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1126                    &rust.sigmaEval3,
1127                    out,
1128                );
1129                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1130                    &rust.prodPermZetaOmegaEval,
1131                    out,
1132                );
1133            }
1134            #[inline]
1135            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
1136                let mut out = alloy_sol_types::private::Vec::new();
1137                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, &mut out);
1138                alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
1139            }
1140        }
1141    };
1142    #[derive()]
1143    /**```solidity
1144    struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
1145    ```*/
1146    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1147    #[derive(Clone)]
1148    pub struct VerifyingKey {
1149        #[allow(missing_docs)]
1150        pub domainSize: alloy::sol_types::private::primitives::aliases::U256,
1151        #[allow(missing_docs)]
1152        pub numInputs: alloy::sol_types::private::primitives::aliases::U256,
1153        #[allow(missing_docs)]
1154        pub sigma0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1155        #[allow(missing_docs)]
1156        pub sigma1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1157        #[allow(missing_docs)]
1158        pub sigma2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1159        #[allow(missing_docs)]
1160        pub sigma3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1161        #[allow(missing_docs)]
1162        pub sigma4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1163        #[allow(missing_docs)]
1164        pub q1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1165        #[allow(missing_docs)]
1166        pub q2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1167        #[allow(missing_docs)]
1168        pub q3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1169        #[allow(missing_docs)]
1170        pub q4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1171        #[allow(missing_docs)]
1172        pub qM12: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1173        #[allow(missing_docs)]
1174        pub qM34: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1175        #[allow(missing_docs)]
1176        pub qO: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1177        #[allow(missing_docs)]
1178        pub qC: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1179        #[allow(missing_docs)]
1180        pub qH1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1181        #[allow(missing_docs)]
1182        pub qH2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1183        #[allow(missing_docs)]
1184        pub qH3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1185        #[allow(missing_docs)]
1186        pub qH4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1187        #[allow(missing_docs)]
1188        pub qEcc: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1189        #[allow(missing_docs)]
1190        pub g2LSB: alloy::sol_types::private::FixedBytes<32>,
1191        #[allow(missing_docs)]
1192        pub g2MSB: alloy::sol_types::private::FixedBytes<32>,
1193    }
1194    #[allow(
1195        non_camel_case_types,
1196        non_snake_case,
1197        clippy::pub_underscore_fields,
1198        clippy::style
1199    )]
1200    const _: () = {
1201        use alloy::sol_types as alloy_sol_types;
1202        #[doc(hidden)]
1203        type UnderlyingSolTuple<'a> = (
1204            alloy::sol_types::sol_data::Uint<256>,
1205            alloy::sol_types::sol_data::Uint<256>,
1206            BN254::G1Point,
1207            BN254::G1Point,
1208            BN254::G1Point,
1209            BN254::G1Point,
1210            BN254::G1Point,
1211            BN254::G1Point,
1212            BN254::G1Point,
1213            BN254::G1Point,
1214            BN254::G1Point,
1215            BN254::G1Point,
1216            BN254::G1Point,
1217            BN254::G1Point,
1218            BN254::G1Point,
1219            BN254::G1Point,
1220            BN254::G1Point,
1221            BN254::G1Point,
1222            BN254::G1Point,
1223            BN254::G1Point,
1224            alloy::sol_types::sol_data::FixedBytes<32>,
1225            alloy::sol_types::sol_data::FixedBytes<32>,
1226        );
1227        #[doc(hidden)]
1228        type UnderlyingRustTuple<'a> = (
1229            alloy::sol_types::private::primitives::aliases::U256,
1230            alloy::sol_types::private::primitives::aliases::U256,
1231            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1232            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1233            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1234            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1235            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1236            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1237            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1238            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1239            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1240            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1241            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1242            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1243            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1244            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1245            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1246            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1247            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1248            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1249            alloy::sol_types::private::FixedBytes<32>,
1250            alloy::sol_types::private::FixedBytes<32>,
1251        );
1252        #[cfg(test)]
1253        #[allow(dead_code, unreachable_patterns)]
1254        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
1255            match _t {
1256                alloy_sol_types::private::AssertTypeEq::<
1257                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1258                >(_) => {},
1259            }
1260        }
1261        #[automatically_derived]
1262        #[doc(hidden)]
1263        impl ::core::convert::From<VerifyingKey> for UnderlyingRustTuple<'_> {
1264            fn from(value: VerifyingKey) -> Self {
1265                (
1266                    value.domainSize,
1267                    value.numInputs,
1268                    value.sigma0,
1269                    value.sigma1,
1270                    value.sigma2,
1271                    value.sigma3,
1272                    value.sigma4,
1273                    value.q1,
1274                    value.q2,
1275                    value.q3,
1276                    value.q4,
1277                    value.qM12,
1278                    value.qM34,
1279                    value.qO,
1280                    value.qC,
1281                    value.qH1,
1282                    value.qH2,
1283                    value.qH3,
1284                    value.qH4,
1285                    value.qEcc,
1286                    value.g2LSB,
1287                    value.g2MSB,
1288                )
1289            }
1290        }
1291        #[automatically_derived]
1292        #[doc(hidden)]
1293        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VerifyingKey {
1294            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1295                Self {
1296                    domainSize: tuple.0,
1297                    numInputs: tuple.1,
1298                    sigma0: tuple.2,
1299                    sigma1: tuple.3,
1300                    sigma2: tuple.4,
1301                    sigma3: tuple.5,
1302                    sigma4: tuple.6,
1303                    q1: tuple.7,
1304                    q2: tuple.8,
1305                    q3: tuple.9,
1306                    q4: tuple.10,
1307                    qM12: tuple.11,
1308                    qM34: tuple.12,
1309                    qO: tuple.13,
1310                    qC: tuple.14,
1311                    qH1: tuple.15,
1312                    qH2: tuple.16,
1313                    qH3: tuple.17,
1314                    qH4: tuple.18,
1315                    qEcc: tuple.19,
1316                    g2LSB: tuple.20,
1317                    g2MSB: tuple.21,
1318                }
1319            }
1320        }
1321        #[automatically_derived]
1322        impl alloy_sol_types::SolValue for VerifyingKey {
1323            type SolType = Self;
1324        }
1325        #[automatically_derived]
1326        impl alloy_sol_types::private::SolTypeValue<Self> for VerifyingKey {
1327            #[inline]
1328            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
1329                (
1330                    <alloy::sol_types::sol_data::Uint<
1331                        256,
1332                    > as alloy_sol_types::SolType>::tokenize(&self.domainSize),
1333                    <alloy::sol_types::sol_data::Uint<
1334                        256,
1335                    > as alloy_sol_types::SolType>::tokenize(&self.numInputs),
1336                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma0),
1337                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma1),
1338                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma2),
1339                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma3),
1340                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma4),
1341                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q1),
1342                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q2),
1343                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q3),
1344                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q4),
1345                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM12),
1346                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM34),
1347                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qO),
1348                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qC),
1349                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH1),
1350                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH2),
1351                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH3),
1352                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH4),
1353                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qEcc),
1354                    <alloy::sol_types::sol_data::FixedBytes<
1355                        32,
1356                    > as alloy_sol_types::SolType>::tokenize(&self.g2LSB),
1357                    <alloy::sol_types::sol_data::FixedBytes<
1358                        32,
1359                    > as alloy_sol_types::SolType>::tokenize(&self.g2MSB),
1360                )
1361            }
1362            #[inline]
1363            fn stv_abi_encoded_size(&self) -> usize {
1364                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
1365                    return size;
1366                }
1367                let tuple =
1368                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
1369                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
1370            }
1371            #[inline]
1372            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
1373                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
1374            }
1375            #[inline]
1376            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
1377                let tuple =
1378                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
1379                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encode_packed_to(
1380                    &tuple, out,
1381                )
1382            }
1383            #[inline]
1384            fn stv_abi_packed_encoded_size(&self) -> usize {
1385                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
1386                    return size;
1387                }
1388                let tuple =
1389                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
1390                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_packed_encoded_size(
1391                    &tuple,
1392                )
1393            }
1394        }
1395        #[automatically_derived]
1396        impl alloy_sol_types::SolType for VerifyingKey {
1397            type RustType = Self;
1398            type Token<'a> = <UnderlyingSolTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
1399            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
1400            const ENCODED_SIZE: Option<usize> =
1401                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::ENCODED_SIZE;
1402            const PACKED_ENCODED_SIZE: Option<usize> =
1403                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
1404            #[inline]
1405            fn valid_token(token: &Self::Token<'_>) -> bool {
1406                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
1407            }
1408            #[inline]
1409            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
1410                let tuple = <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::detokenize(token);
1411                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
1412            }
1413        }
1414        #[automatically_derived]
1415        impl alloy_sol_types::SolStruct for VerifyingKey {
1416            const NAME: &'static str = "VerifyingKey";
1417            #[inline]
1418            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
1419                alloy_sol_types::private::Cow::Borrowed(
1420                    "VerifyingKey(uint256 domainSize,uint256 numInputs,BN254.G1Point sigma0,BN254.G1Point sigma1,BN254.G1Point sigma2,BN254.G1Point sigma3,BN254.G1Point sigma4,BN254.G1Point q1,BN254.G1Point q2,BN254.G1Point q3,BN254.G1Point q4,BN254.G1Point qM12,BN254.G1Point qM34,BN254.G1Point qO,BN254.G1Point qC,BN254.G1Point qH1,BN254.G1Point qH2,BN254.G1Point qH3,BN254.G1Point qH4,BN254.G1Point qEcc,bytes32 g2LSB,bytes32 g2MSB)",
1421                )
1422            }
1423            #[inline]
1424            fn eip712_components(
1425            ) -> alloy_sol_types::private::Vec<alloy_sol_types::private::Cow<'static, str>>
1426            {
1427                let mut components = alloy_sol_types::private::Vec::with_capacity(18);
1428                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1429                components
1430                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1431                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1432                components
1433                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1434                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1435                components
1436                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1437                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1438                components
1439                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1440                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1441                components
1442                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1443                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1444                components
1445                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1446                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1447                components
1448                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1449                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1450                components
1451                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1452                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1453                components
1454                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1455                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1456                components
1457                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1458                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1459                components
1460                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1461                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1462                components
1463                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1464                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1465                components
1466                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1467                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1468                components
1469                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1470                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1471                components
1472                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1473                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1474                components
1475                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1476                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1477                components
1478                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1479                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1480                components
1481                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1482                components
1483            }
1484            #[inline]
1485            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1486                [
1487                    <alloy::sol_types::sol_data::Uint<
1488                        256,
1489                    > as alloy_sol_types::SolType>::eip712_data_word(&self.domainSize)
1490                        .0,
1491                    <alloy::sol_types::sol_data::Uint<
1492                        256,
1493                    > as alloy_sol_types::SolType>::eip712_data_word(&self.numInputs)
1494                        .0,
1495                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1496                            &self.sigma0,
1497                        )
1498                        .0,
1499                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1500                            &self.sigma1,
1501                        )
1502                        .0,
1503                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1504                            &self.sigma2,
1505                        )
1506                        .0,
1507                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1508                            &self.sigma3,
1509                        )
1510                        .0,
1511                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1512                            &self.sigma4,
1513                        )
1514                        .0,
1515                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1516                            &self.q1,
1517                        )
1518                        .0,
1519                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1520                            &self.q2,
1521                        )
1522                        .0,
1523                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1524                            &self.q3,
1525                        )
1526                        .0,
1527                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1528                            &self.q4,
1529                        )
1530                        .0,
1531                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1532                            &self.qM12,
1533                        )
1534                        .0,
1535                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1536                            &self.qM34,
1537                        )
1538                        .0,
1539                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1540                            &self.qO,
1541                        )
1542                        .0,
1543                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1544                            &self.qC,
1545                        )
1546                        .0,
1547                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1548                            &self.qH1,
1549                        )
1550                        .0,
1551                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1552                            &self.qH2,
1553                        )
1554                        .0,
1555                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1556                            &self.qH3,
1557                        )
1558                        .0,
1559                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1560                            &self.qH4,
1561                        )
1562                        .0,
1563                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1564                            &self.qEcc,
1565                        )
1566                        .0,
1567                    <alloy::sol_types::sol_data::FixedBytes<
1568                        32,
1569                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2LSB)
1570                        .0,
1571                    <alloy::sol_types::sol_data::FixedBytes<
1572                        32,
1573                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2MSB)
1574                        .0,
1575                ]
1576                    .concat()
1577            }
1578        }
1579        #[automatically_derived]
1580        impl alloy_sol_types::EventTopic for VerifyingKey {
1581            #[inline]
1582            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1583                0usize
1584                    + <alloy::sol_types::sol_data::Uint<
1585                        256,
1586                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1587                        &rust.domainSize,
1588                    )
1589                    + <alloy::sol_types::sol_data::Uint<
1590                        256,
1591                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1592                        &rust.numInputs,
1593                    )
1594                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1595                        &rust.sigma0,
1596                    )
1597                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1598                        &rust.sigma1,
1599                    )
1600                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1601                        &rust.sigma2,
1602                    )
1603                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1604                        &rust.sigma3,
1605                    )
1606                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1607                        &rust.sigma4,
1608                    )
1609                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1610                        &rust.q1,
1611                    )
1612                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1613                        &rust.q2,
1614                    )
1615                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1616                        &rust.q3,
1617                    )
1618                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1619                        &rust.q4,
1620                    )
1621                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1622                        &rust.qM12,
1623                    )
1624                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1625                        &rust.qM34,
1626                    )
1627                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1628                        &rust.qO,
1629                    )
1630                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1631                        &rust.qC,
1632                    )
1633                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1634                        &rust.qH1,
1635                    )
1636                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1637                        &rust.qH2,
1638                    )
1639                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1640                        &rust.qH3,
1641                    )
1642                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1643                        &rust.qH4,
1644                    )
1645                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1646                        &rust.qEcc,
1647                    )
1648                    + <alloy::sol_types::sol_data::FixedBytes<
1649                        32,
1650                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2LSB)
1651                    + <alloy::sol_types::sol_data::FixedBytes<
1652                        32,
1653                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2MSB)
1654            }
1655            #[inline]
1656            fn encode_topic_preimage(
1657                rust: &Self::RustType,
1658                out: &mut alloy_sol_types::private::Vec<u8>,
1659            ) {
1660                out.reserve(<Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust));
1661                <alloy::sol_types::sol_data::Uint<
1662                    256,
1663                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1664                    &rust.domainSize,
1665                    out,
1666                );
1667                <alloy::sol_types::sol_data::Uint<
1668                    256,
1669                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1670                    &rust.numInputs,
1671                    out,
1672                );
1673                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1674                    &rust.sigma0,
1675                    out,
1676                );
1677                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1678                    &rust.sigma1,
1679                    out,
1680                );
1681                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1682                    &rust.sigma2,
1683                    out,
1684                );
1685                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1686                    &rust.sigma3,
1687                    out,
1688                );
1689                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1690                    &rust.sigma4,
1691                    out,
1692                );
1693                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1694                    &rust.q1, out,
1695                );
1696                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1697                    &rust.q2, out,
1698                );
1699                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1700                    &rust.q3, out,
1701                );
1702                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1703                    &rust.q4, out,
1704                );
1705                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1706                    &rust.qM12, out,
1707                );
1708                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1709                    &rust.qM34, out,
1710                );
1711                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1712                    &rust.qO, out,
1713                );
1714                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1715                    &rust.qC, out,
1716                );
1717                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1718                    &rust.qH1, out,
1719                );
1720                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1721                    &rust.qH2, out,
1722                );
1723                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1724                    &rust.qH3, out,
1725                );
1726                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1727                    &rust.qH4, out,
1728                );
1729                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1730                    &rust.qEcc, out,
1731                );
1732                <alloy::sol_types::sol_data::FixedBytes<
1733                    32,
1734                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1735                    &rust.g2LSB,
1736                    out,
1737                );
1738                <alloy::sol_types::sol_data::FixedBytes<
1739                    32,
1740                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1741                    &rust.g2MSB,
1742                    out,
1743                );
1744            }
1745            #[inline]
1746            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
1747                let mut out = alloy_sol_types::private::Vec::new();
1748                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, &mut out);
1749                alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
1750            }
1751        }
1752    };
1753    use alloy::contract as alloy_contract;
1754    /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
1755
1756    See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
1757    #[inline]
1758    pub const fn new<
1759        T: alloy_contract::private::Transport + ::core::clone::Clone,
1760        P: alloy_contract::private::Provider<T, N>,
1761        N: alloy_contract::private::Network,
1762    >(
1763        address: alloy_sol_types::private::Address,
1764        provider: P,
1765    ) -> IPlonkVerifierInstance<T, P, N> {
1766        IPlonkVerifierInstance::<T, P, N>::new(address, provider)
1767    }
1768    /**A [`IPlonkVerifier`](self) instance.
1769
1770    Contains type-safe methods for interacting with an on-chain instance of the
1771    [`IPlonkVerifier`](self) contract located at a given `address`, using a given
1772    provider `P`.
1773
1774    If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
1775    documentation on how to provide it), the `deploy` and `deploy_builder` methods can
1776    be used to deploy a new instance of the contract.
1777
1778    See the [module-level documentation](self) for all the available methods.*/
1779    #[derive(Clone)]
1780    pub struct IPlonkVerifierInstance<T, P, N = alloy_contract::private::Ethereum> {
1781        address: alloy_sol_types::private::Address,
1782        provider: P,
1783        _network_transport: ::core::marker::PhantomData<(N, T)>,
1784    }
1785    #[automatically_derived]
1786    impl<T, P, N> ::core::fmt::Debug for IPlonkVerifierInstance<T, P, N> {
1787        #[inline]
1788        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1789            f.debug_tuple("IPlonkVerifierInstance")
1790                .field(&self.address)
1791                .finish()
1792        }
1793    }
1794    /// Instantiation and getters/setters.
1795    #[automatically_derived]
1796    impl<
1797            T: alloy_contract::private::Transport + ::core::clone::Clone,
1798            P: alloy_contract::private::Provider<T, N>,
1799            N: alloy_contract::private::Network,
1800        > IPlonkVerifierInstance<T, P, N>
1801    {
1802        /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
1803
1804        See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
1805        #[inline]
1806        pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self {
1807            Self {
1808                address,
1809                provider,
1810                _network_transport: ::core::marker::PhantomData,
1811            }
1812        }
1813        /// Returns a reference to the address.
1814        #[inline]
1815        pub const fn address(&self) -> &alloy_sol_types::private::Address {
1816            &self.address
1817        }
1818        /// Sets the address.
1819        #[inline]
1820        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
1821            self.address = address;
1822        }
1823        /// Sets the address and returns `self`.
1824        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
1825            self.set_address(address);
1826            self
1827        }
1828        /// Returns a reference to the provider.
1829        #[inline]
1830        pub const fn provider(&self) -> &P {
1831            &self.provider
1832        }
1833    }
1834    impl<T, P: ::core::clone::Clone, N> IPlonkVerifierInstance<T, &P, N> {
1835        /// Clones the provider and returns a new instance with the cloned provider.
1836        #[inline]
1837        pub fn with_cloned_provider(self) -> IPlonkVerifierInstance<T, P, N> {
1838            IPlonkVerifierInstance {
1839                address: self.address,
1840                provider: ::core::clone::Clone::clone(&self.provider),
1841                _network_transport: ::core::marker::PhantomData,
1842            }
1843        }
1844    }
1845    /// Function calls.
1846    #[automatically_derived]
1847    impl<
1848            T: alloy_contract::private::Transport + ::core::clone::Clone,
1849            P: alloy_contract::private::Provider<T, N>,
1850            N: alloy_contract::private::Network,
1851        > IPlonkVerifierInstance<T, P, N>
1852    {
1853        /// Creates a new call builder using this contract instance's provider and address.
1854        ///
1855        /// Note that the call can be any function call, not just those defined in this
1856        /// contract. Prefer using the other methods for building type-safe contract calls.
1857        pub fn call_builder<C: alloy_sol_types::SolCall>(
1858            &self,
1859            call: &C,
1860        ) -> alloy_contract::SolCallBuilder<T, &P, C, N> {
1861            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
1862        }
1863    }
1864    /// Event filters.
1865    #[automatically_derived]
1866    impl<
1867            T: alloy_contract::private::Transport + ::core::clone::Clone,
1868            P: alloy_contract::private::Provider<T, N>,
1869            N: alloy_contract::private::Network,
1870        > IPlonkVerifierInstance<T, P, N>
1871    {
1872        /// Creates a new event filter using this contract instance's provider and address.
1873        ///
1874        /// Note that the type can be any event, not just those defined in this contract.
1875        /// Prefer using the other methods for building type-safe event filters.
1876        pub fn event_filter<E: alloy_sol_types::SolEvent>(
1877            &self,
1878        ) -> alloy_contract::Event<T, &P, E, N> {
1879            alloy_contract::Event::new_sol(&self.provider, &self.address)
1880        }
1881    }
1882}
1883/**
1884
1885Generated by the following Solidity interface...
1886```solidity
1887library BN254 {
1888    type BaseField is uint256;
1889    type ScalarField is uint256;
1890    struct G1Point {
1891        BaseField x;
1892        BaseField y;
1893    }
1894}
1895
1896library IPlonkVerifier {
1897    struct PlonkProof {
1898        BN254.G1Point wire0;
1899        BN254.G1Point wire1;
1900        BN254.G1Point wire2;
1901        BN254.G1Point wire3;
1902        BN254.G1Point wire4;
1903        BN254.G1Point prodPerm;
1904        BN254.G1Point split0;
1905        BN254.G1Point split1;
1906        BN254.G1Point split2;
1907        BN254.G1Point split3;
1908        BN254.G1Point split4;
1909        BN254.G1Point zeta;
1910        BN254.G1Point zetaOmega;
1911        BN254.ScalarField wireEval0;
1912        BN254.ScalarField wireEval1;
1913        BN254.ScalarField wireEval2;
1914        BN254.ScalarField wireEval3;
1915        BN254.ScalarField wireEval4;
1916        BN254.ScalarField sigmaEval0;
1917        BN254.ScalarField sigmaEval1;
1918        BN254.ScalarField sigmaEval2;
1919        BN254.ScalarField sigmaEval3;
1920        BN254.ScalarField prodPermZetaOmegaEval;
1921    }
1922    struct VerifyingKey {
1923        uint256 domainSize;
1924        uint256 numInputs;
1925        BN254.G1Point sigma0;
1926        BN254.G1Point sigma1;
1927        BN254.G1Point sigma2;
1928        BN254.G1Point sigma3;
1929        BN254.G1Point sigma4;
1930        BN254.G1Point q1;
1931        BN254.G1Point q2;
1932        BN254.G1Point q3;
1933        BN254.G1Point q4;
1934        BN254.G1Point qM12;
1935        BN254.G1Point qM34;
1936        BN254.G1Point qO;
1937        BN254.G1Point qC;
1938        BN254.G1Point qH1;
1939        BN254.G1Point qH2;
1940        BN254.G1Point qH3;
1941        BN254.G1Point qH4;
1942        BN254.G1Point qEcc;
1943        bytes32 g2LSB;
1944        bytes32 g2MSB;
1945    }
1946}
1947
1948interface PlonkVerifier {
1949    error InvalidPlonkArgs();
1950    error UnsupportedDegree();
1951    error WrongPlonkVK();
1952
1953    function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
1954}
1955```
1956
1957...which was generated by the following JSON ABI:
1958```json
1959[
1960  {
1961    "type": "function",
1962    "name": "verify",
1963    "inputs": [
1964      {
1965        "name": "verifyingKey",
1966        "type": "tuple",
1967        "internalType": "struct IPlonkVerifier.VerifyingKey",
1968        "components": [
1969          {
1970            "name": "domainSize",
1971            "type": "uint256",
1972            "internalType": "uint256"
1973          },
1974          {
1975            "name": "numInputs",
1976            "type": "uint256",
1977            "internalType": "uint256"
1978          },
1979          {
1980            "name": "sigma0",
1981            "type": "tuple",
1982            "internalType": "struct BN254.G1Point",
1983            "components": [
1984              {
1985                "name": "x",
1986                "type": "uint256",
1987                "internalType": "BN254.BaseField"
1988              },
1989              {
1990                "name": "y",
1991                "type": "uint256",
1992                "internalType": "BN254.BaseField"
1993              }
1994            ]
1995          },
1996          {
1997            "name": "sigma1",
1998            "type": "tuple",
1999            "internalType": "struct BN254.G1Point",
2000            "components": [
2001              {
2002                "name": "x",
2003                "type": "uint256",
2004                "internalType": "BN254.BaseField"
2005              },
2006              {
2007                "name": "y",
2008                "type": "uint256",
2009                "internalType": "BN254.BaseField"
2010              }
2011            ]
2012          },
2013          {
2014            "name": "sigma2",
2015            "type": "tuple",
2016            "internalType": "struct BN254.G1Point",
2017            "components": [
2018              {
2019                "name": "x",
2020                "type": "uint256",
2021                "internalType": "BN254.BaseField"
2022              },
2023              {
2024                "name": "y",
2025                "type": "uint256",
2026                "internalType": "BN254.BaseField"
2027              }
2028            ]
2029          },
2030          {
2031            "name": "sigma3",
2032            "type": "tuple",
2033            "internalType": "struct BN254.G1Point",
2034            "components": [
2035              {
2036                "name": "x",
2037                "type": "uint256",
2038                "internalType": "BN254.BaseField"
2039              },
2040              {
2041                "name": "y",
2042                "type": "uint256",
2043                "internalType": "BN254.BaseField"
2044              }
2045            ]
2046          },
2047          {
2048            "name": "sigma4",
2049            "type": "tuple",
2050            "internalType": "struct BN254.G1Point",
2051            "components": [
2052              {
2053                "name": "x",
2054                "type": "uint256",
2055                "internalType": "BN254.BaseField"
2056              },
2057              {
2058                "name": "y",
2059                "type": "uint256",
2060                "internalType": "BN254.BaseField"
2061              }
2062            ]
2063          },
2064          {
2065            "name": "q1",
2066            "type": "tuple",
2067            "internalType": "struct BN254.G1Point",
2068            "components": [
2069              {
2070                "name": "x",
2071                "type": "uint256",
2072                "internalType": "BN254.BaseField"
2073              },
2074              {
2075                "name": "y",
2076                "type": "uint256",
2077                "internalType": "BN254.BaseField"
2078              }
2079            ]
2080          },
2081          {
2082            "name": "q2",
2083            "type": "tuple",
2084            "internalType": "struct BN254.G1Point",
2085            "components": [
2086              {
2087                "name": "x",
2088                "type": "uint256",
2089                "internalType": "BN254.BaseField"
2090              },
2091              {
2092                "name": "y",
2093                "type": "uint256",
2094                "internalType": "BN254.BaseField"
2095              }
2096            ]
2097          },
2098          {
2099            "name": "q3",
2100            "type": "tuple",
2101            "internalType": "struct BN254.G1Point",
2102            "components": [
2103              {
2104                "name": "x",
2105                "type": "uint256",
2106                "internalType": "BN254.BaseField"
2107              },
2108              {
2109                "name": "y",
2110                "type": "uint256",
2111                "internalType": "BN254.BaseField"
2112              }
2113            ]
2114          },
2115          {
2116            "name": "q4",
2117            "type": "tuple",
2118            "internalType": "struct BN254.G1Point",
2119            "components": [
2120              {
2121                "name": "x",
2122                "type": "uint256",
2123                "internalType": "BN254.BaseField"
2124              },
2125              {
2126                "name": "y",
2127                "type": "uint256",
2128                "internalType": "BN254.BaseField"
2129              }
2130            ]
2131          },
2132          {
2133            "name": "qM12",
2134            "type": "tuple",
2135            "internalType": "struct BN254.G1Point",
2136            "components": [
2137              {
2138                "name": "x",
2139                "type": "uint256",
2140                "internalType": "BN254.BaseField"
2141              },
2142              {
2143                "name": "y",
2144                "type": "uint256",
2145                "internalType": "BN254.BaseField"
2146              }
2147            ]
2148          },
2149          {
2150            "name": "qM34",
2151            "type": "tuple",
2152            "internalType": "struct BN254.G1Point",
2153            "components": [
2154              {
2155                "name": "x",
2156                "type": "uint256",
2157                "internalType": "BN254.BaseField"
2158              },
2159              {
2160                "name": "y",
2161                "type": "uint256",
2162                "internalType": "BN254.BaseField"
2163              }
2164            ]
2165          },
2166          {
2167            "name": "qO",
2168            "type": "tuple",
2169            "internalType": "struct BN254.G1Point",
2170            "components": [
2171              {
2172                "name": "x",
2173                "type": "uint256",
2174                "internalType": "BN254.BaseField"
2175              },
2176              {
2177                "name": "y",
2178                "type": "uint256",
2179                "internalType": "BN254.BaseField"
2180              }
2181            ]
2182          },
2183          {
2184            "name": "qC",
2185            "type": "tuple",
2186            "internalType": "struct BN254.G1Point",
2187            "components": [
2188              {
2189                "name": "x",
2190                "type": "uint256",
2191                "internalType": "BN254.BaseField"
2192              },
2193              {
2194                "name": "y",
2195                "type": "uint256",
2196                "internalType": "BN254.BaseField"
2197              }
2198            ]
2199          },
2200          {
2201            "name": "qH1",
2202            "type": "tuple",
2203            "internalType": "struct BN254.G1Point",
2204            "components": [
2205              {
2206                "name": "x",
2207                "type": "uint256",
2208                "internalType": "BN254.BaseField"
2209              },
2210              {
2211                "name": "y",
2212                "type": "uint256",
2213                "internalType": "BN254.BaseField"
2214              }
2215            ]
2216          },
2217          {
2218            "name": "qH2",
2219            "type": "tuple",
2220            "internalType": "struct BN254.G1Point",
2221            "components": [
2222              {
2223                "name": "x",
2224                "type": "uint256",
2225                "internalType": "BN254.BaseField"
2226              },
2227              {
2228                "name": "y",
2229                "type": "uint256",
2230                "internalType": "BN254.BaseField"
2231              }
2232            ]
2233          },
2234          {
2235            "name": "qH3",
2236            "type": "tuple",
2237            "internalType": "struct BN254.G1Point",
2238            "components": [
2239              {
2240                "name": "x",
2241                "type": "uint256",
2242                "internalType": "BN254.BaseField"
2243              },
2244              {
2245                "name": "y",
2246                "type": "uint256",
2247                "internalType": "BN254.BaseField"
2248              }
2249            ]
2250          },
2251          {
2252            "name": "qH4",
2253            "type": "tuple",
2254            "internalType": "struct BN254.G1Point",
2255            "components": [
2256              {
2257                "name": "x",
2258                "type": "uint256",
2259                "internalType": "BN254.BaseField"
2260              },
2261              {
2262                "name": "y",
2263                "type": "uint256",
2264                "internalType": "BN254.BaseField"
2265              }
2266            ]
2267          },
2268          {
2269            "name": "qEcc",
2270            "type": "tuple",
2271            "internalType": "struct BN254.G1Point",
2272            "components": [
2273              {
2274                "name": "x",
2275                "type": "uint256",
2276                "internalType": "BN254.BaseField"
2277              },
2278              {
2279                "name": "y",
2280                "type": "uint256",
2281                "internalType": "BN254.BaseField"
2282              }
2283            ]
2284          },
2285          {
2286            "name": "g2LSB",
2287            "type": "bytes32",
2288            "internalType": "bytes32"
2289          },
2290          {
2291            "name": "g2MSB",
2292            "type": "bytes32",
2293            "internalType": "bytes32"
2294          }
2295        ]
2296      },
2297      {
2298        "name": "publicInput",
2299        "type": "uint256[7]",
2300        "internalType": "uint256[7]"
2301      },
2302      {
2303        "name": "proof",
2304        "type": "tuple",
2305        "internalType": "struct IPlonkVerifier.PlonkProof",
2306        "components": [
2307          {
2308            "name": "wire0",
2309            "type": "tuple",
2310            "internalType": "struct BN254.G1Point",
2311            "components": [
2312              {
2313                "name": "x",
2314                "type": "uint256",
2315                "internalType": "BN254.BaseField"
2316              },
2317              {
2318                "name": "y",
2319                "type": "uint256",
2320                "internalType": "BN254.BaseField"
2321              }
2322            ]
2323          },
2324          {
2325            "name": "wire1",
2326            "type": "tuple",
2327            "internalType": "struct BN254.G1Point",
2328            "components": [
2329              {
2330                "name": "x",
2331                "type": "uint256",
2332                "internalType": "BN254.BaseField"
2333              },
2334              {
2335                "name": "y",
2336                "type": "uint256",
2337                "internalType": "BN254.BaseField"
2338              }
2339            ]
2340          },
2341          {
2342            "name": "wire2",
2343            "type": "tuple",
2344            "internalType": "struct BN254.G1Point",
2345            "components": [
2346              {
2347                "name": "x",
2348                "type": "uint256",
2349                "internalType": "BN254.BaseField"
2350              },
2351              {
2352                "name": "y",
2353                "type": "uint256",
2354                "internalType": "BN254.BaseField"
2355              }
2356            ]
2357          },
2358          {
2359            "name": "wire3",
2360            "type": "tuple",
2361            "internalType": "struct BN254.G1Point",
2362            "components": [
2363              {
2364                "name": "x",
2365                "type": "uint256",
2366                "internalType": "BN254.BaseField"
2367              },
2368              {
2369                "name": "y",
2370                "type": "uint256",
2371                "internalType": "BN254.BaseField"
2372              }
2373            ]
2374          },
2375          {
2376            "name": "wire4",
2377            "type": "tuple",
2378            "internalType": "struct BN254.G1Point",
2379            "components": [
2380              {
2381                "name": "x",
2382                "type": "uint256",
2383                "internalType": "BN254.BaseField"
2384              },
2385              {
2386                "name": "y",
2387                "type": "uint256",
2388                "internalType": "BN254.BaseField"
2389              }
2390            ]
2391          },
2392          {
2393            "name": "prodPerm",
2394            "type": "tuple",
2395            "internalType": "struct BN254.G1Point",
2396            "components": [
2397              {
2398                "name": "x",
2399                "type": "uint256",
2400                "internalType": "BN254.BaseField"
2401              },
2402              {
2403                "name": "y",
2404                "type": "uint256",
2405                "internalType": "BN254.BaseField"
2406              }
2407            ]
2408          },
2409          {
2410            "name": "split0",
2411            "type": "tuple",
2412            "internalType": "struct BN254.G1Point",
2413            "components": [
2414              {
2415                "name": "x",
2416                "type": "uint256",
2417                "internalType": "BN254.BaseField"
2418              },
2419              {
2420                "name": "y",
2421                "type": "uint256",
2422                "internalType": "BN254.BaseField"
2423              }
2424            ]
2425          },
2426          {
2427            "name": "split1",
2428            "type": "tuple",
2429            "internalType": "struct BN254.G1Point",
2430            "components": [
2431              {
2432                "name": "x",
2433                "type": "uint256",
2434                "internalType": "BN254.BaseField"
2435              },
2436              {
2437                "name": "y",
2438                "type": "uint256",
2439                "internalType": "BN254.BaseField"
2440              }
2441            ]
2442          },
2443          {
2444            "name": "split2",
2445            "type": "tuple",
2446            "internalType": "struct BN254.G1Point",
2447            "components": [
2448              {
2449                "name": "x",
2450                "type": "uint256",
2451                "internalType": "BN254.BaseField"
2452              },
2453              {
2454                "name": "y",
2455                "type": "uint256",
2456                "internalType": "BN254.BaseField"
2457              }
2458            ]
2459          },
2460          {
2461            "name": "split3",
2462            "type": "tuple",
2463            "internalType": "struct BN254.G1Point",
2464            "components": [
2465              {
2466                "name": "x",
2467                "type": "uint256",
2468                "internalType": "BN254.BaseField"
2469              },
2470              {
2471                "name": "y",
2472                "type": "uint256",
2473                "internalType": "BN254.BaseField"
2474              }
2475            ]
2476          },
2477          {
2478            "name": "split4",
2479            "type": "tuple",
2480            "internalType": "struct BN254.G1Point",
2481            "components": [
2482              {
2483                "name": "x",
2484                "type": "uint256",
2485                "internalType": "BN254.BaseField"
2486              },
2487              {
2488                "name": "y",
2489                "type": "uint256",
2490                "internalType": "BN254.BaseField"
2491              }
2492            ]
2493          },
2494          {
2495            "name": "zeta",
2496            "type": "tuple",
2497            "internalType": "struct BN254.G1Point",
2498            "components": [
2499              {
2500                "name": "x",
2501                "type": "uint256",
2502                "internalType": "BN254.BaseField"
2503              },
2504              {
2505                "name": "y",
2506                "type": "uint256",
2507                "internalType": "BN254.BaseField"
2508              }
2509            ]
2510          },
2511          {
2512            "name": "zetaOmega",
2513            "type": "tuple",
2514            "internalType": "struct BN254.G1Point",
2515            "components": [
2516              {
2517                "name": "x",
2518                "type": "uint256",
2519                "internalType": "BN254.BaseField"
2520              },
2521              {
2522                "name": "y",
2523                "type": "uint256",
2524                "internalType": "BN254.BaseField"
2525              }
2526            ]
2527          },
2528          {
2529            "name": "wireEval0",
2530            "type": "uint256",
2531            "internalType": "BN254.ScalarField"
2532          },
2533          {
2534            "name": "wireEval1",
2535            "type": "uint256",
2536            "internalType": "BN254.ScalarField"
2537          },
2538          {
2539            "name": "wireEval2",
2540            "type": "uint256",
2541            "internalType": "BN254.ScalarField"
2542          },
2543          {
2544            "name": "wireEval3",
2545            "type": "uint256",
2546            "internalType": "BN254.ScalarField"
2547          },
2548          {
2549            "name": "wireEval4",
2550            "type": "uint256",
2551            "internalType": "BN254.ScalarField"
2552          },
2553          {
2554            "name": "sigmaEval0",
2555            "type": "uint256",
2556            "internalType": "BN254.ScalarField"
2557          },
2558          {
2559            "name": "sigmaEval1",
2560            "type": "uint256",
2561            "internalType": "BN254.ScalarField"
2562          },
2563          {
2564            "name": "sigmaEval2",
2565            "type": "uint256",
2566            "internalType": "BN254.ScalarField"
2567          },
2568          {
2569            "name": "sigmaEval3",
2570            "type": "uint256",
2571            "internalType": "BN254.ScalarField"
2572          },
2573          {
2574            "name": "prodPermZetaOmegaEval",
2575            "type": "uint256",
2576            "internalType": "BN254.ScalarField"
2577          }
2578        ]
2579      }
2580    ],
2581    "outputs": [
2582      {
2583        "name": "",
2584        "type": "bool",
2585        "internalType": "bool"
2586      }
2587    ],
2588    "stateMutability": "view"
2589  },
2590  {
2591    "type": "error",
2592    "name": "InvalidPlonkArgs",
2593    "inputs": []
2594  },
2595  {
2596    "type": "error",
2597    "name": "UnsupportedDegree",
2598    "inputs": []
2599  },
2600  {
2601    "type": "error",
2602    "name": "WrongPlonkVK",
2603    "inputs": []
2604  }
2605]
2606```*/
2607#[allow(
2608    non_camel_case_types,
2609    non_snake_case,
2610    clippy::pub_underscore_fields,
2611    clippy::style,
2612    clippy::empty_structs_with_brackets
2613)]
2614pub mod PlonkVerifier {
2615    use super::*;
2616    use alloy::sol_types as alloy_sol_types;
2617    /// The creation / init bytecode of the contract.
2618    ///
2619    /// ```text
2620    ///0x61229d610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004612031565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c6848484610271565b90505b9392505050565b80516100db90610465565b6100e88160200151610465565b6100f58160400151610465565b6101028160600151610465565b61010f8160800151610465565b61011c8160a00151610465565b6101298160c00151610465565b6101368160e00151610465565b610144816101000151610465565b610152816101200151610465565b610160816101400151610465565b61016e816101600151610465565b61017c816101800151610465565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206122715f395f51905f5281108061026d5760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c64000000000060448201526064015b60405180910390fd5b5050565b5f8360200151600714610297576040516320fa9d8960e11b815260040160405180910390fd5b5f6102a3858585610513565b90505f6102b2865f0151610a73565b90505f6102c4828460a0015188610e51565b90506102e160405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526103158761016001516103108961018001518860e00151610eae565b610f4f565b91505f5f6103258b88878c610ff3565b91509150610336816103108461122b565b925061034f836103108b61016001518a60a00151610eae565b60a08801516040880151602001519194505f5160206122715f395f51905f52918290820990508160e08a015182099050610392856103108d610180015184610eae565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061045387826104468961122b565b61044e6112c8565b611395565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561049e57505050565b82516020840151826003848585860985090883828309148382108484101616935050508161050e5760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e740000000000000000006044820152606401610264565b505050565b6105536040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206122715f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a7b611d0e565b816201000003610bba576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610cfa576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610e38576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e7260405180606001604052805f81526020015f81526020015f81525090565b610e7c8484611475565b808252610e8c90859085906114c6565b60208201528051610ea290859084908690611535565b60408201529392505050565b604080518082019091525f8082526020820152610ec9611d32565b8351815260208085015190820152604081018390525f60608360808460076107d05a03fa90508080610ef9575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601960248201527f426e3235343a207363616c6172206d756c206661696c656421000000000000006044820152606401610264565b505092915050565b604080518082019091525f8082526020820152610f6a611d50565b8351815260208085015181830152835160408301528301516060808301919091525f908360c08460066107d05a03fa90508080610fa5575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c6564210000006044820152606401610264565b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f61102687878787611683565b90505f5160206122715f395f51905f525f611042888789611b4d565b905061104e818361221e565b60c08901516101a08801519192509081908490819083098408925061107a856103108a5f015184610eae565b955083828209905083846101c08a01518309840892506110a2866103108a6020015184610eae565b955083828209905083846101e08a01518309840892506110ca866103108a6040015184610eae565b955083828209905083846102008a01518309840892506110f2866103108a6060015184610eae565b955083828209905083846102208a015183098408925061111a866103108a6080015184610eae565b955083828209905083846102408a0151830984089250611142866103108d6040015184610eae565b955083828209905083846102608a015183098408925061116a866103108d6060015184610eae565b955083828209905083846102808a0151830984089250611192866103108d6080015184610eae565b955083828209905083846102a08a01518309840892506111ba866103108d60a0015184610eae565b95505f8a60e00151905084856102c08b01518309850893506111e4876103108b60a0015184610eae565b965061121a6112146040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610eae565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611252575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516112969190612251565b6112c0907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761221e565b905292915050565b6112ef60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806114675760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c656421000000006044820152606401610264565b50151590505b949350505050565b81515f905f5160206122715f395f51905f52908380156114b6578493505f5b828110156114aa57838586099450600101611494565b506001840393506114bd565b6001830393505b50505092915050565b5f826001036114d7575060016100c9565b815f036114e557505f6100c9565b60208401515f5160206122715f395f51905f52905f908281860990508580156115135760018703925061151a565b6001840392505b5061152482611c38565b915082828209979650505050505050565b5f5f5160206122715f395f51905f528282036115ae5760015f5b60078110156115a357818603611580578681600781106115715761157161220a565b6020020151935050505061146d565b828061158e5761158e61223d565b6040890151602001518309915060010161154f565b505f9250505061146d565b6115b6611d6e565b6040870151600160c0838101828152920190805b60078110156115f75760208403935085868a85518903088309808552601f199093019291506001016115ca565b505050505f5f5f90506001838960408c01515f5b600781101561164b578882518a85518c88518a0909098981880896505088898d84518c03088609945060209384019392830192919091019060010161160b565b50505050809250505f61165d83611c38565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206122715f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506117f08760a0015186610eae565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506118b7866103108c60c0015188856118b2919061221e565b610eae565b95506118d0866103108c60e001518a6101a00151610eae565b95506118ea866103108c61010001518a6101c00151610eae565b9550611904866103108c61012001518a6101e00151610eae565b955061191e866103108c61014001518a6102000151610eae565b9550806101c08801516101a0890151099250611943866103108c610160015186610eae565b9550806102008801516101e0890151099250611968866103108c610180015186610eae565b95506101a08701519250808384099150808283099150808284099250611997866103108c6101e0015186610eae565b95506101c087015192508083840991508082830991508082840992506119c6866103108c610200015186610eae565b95506101e087015192508083840991508082830991508082840992506119f5866103108c610220015186610eae565b95506102008701519250808384099150808283099150808284099250611a24866103108c610240015186610eae565b9550611a41866103108c6101a001516118b28b6102200151611cd9565b9550611a52868b6101c00151610f4f565b9550806101c08801516101a0890151099250806101e08801518409925080610200880151840992508061022088015184099250611a98866103108c610260015186610eae565b9550611aa6885f0151611cd9565b9450611aba866103108960c0015188610eae565b955080600189510860a08a0151909350819080099150808284099250808386099450611aee866103108960e0015188610eae565b9550808386099450611b098661031089610100015188610eae565b9550808386099450611b248661031089610120015188610eae565b9550808386099450611b3f8661031089610140015188610eae565b9a9950505050505050505050565b5f5f5f5160206122715f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f5f5f5f5160206122715f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611cd25760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c6564210000006044820152606401610264565b5050919050565b5f611cf15f5160206122715f395f51905f5283612251565b611d08905f5160206122715f395f51905f5261221e565b92915050565b60405180606001604052805f81526020015f8152602001611d2d611d6e565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b5f60408284031215611dfe575f5ffd5b6040805190810167ffffffffffffffff81118282101715611e2157611e21611d8c565b604052823581526020928301359281019290925250919050565b5f82601f830112611e4a575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611e6d57611e6d611d8c565b6040528060e0840185811115611e81575f5ffd5b845b81811015611e9b578035835260209283019201611e83565b509195945050505050565b5f6104808284031215611eb7575f5ffd5b611ebf611da0565b9050611ecb8383611dee565b8152611eda8360408401611dee565b6020820152611eec8360808401611dee565b6040820152611efe8360c08401611dee565b6060820152611f11836101008401611dee565b6080820152611f24836101408401611dee565b60a0820152611f37836101808401611dee565b60c0820152611f4a836101c08401611dee565b60e0820152611f5d836102008401611dee565b610100820152611f71836102408401611dee565b610120820152611f85836102808401611dee565b610140820152611f99836102c08401611dee565b610160820152611fad836103008401611dee565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215612045575f5ffd5b610500811215612053575f5ffd5b5061205c611dca565b84358152602080860135908201526120778660408701611dee565b60408201526120898660808701611dee565b606082015261209b8660c08701611dee565b60808201526120ae866101008701611dee565b60a08201526120c1866101408701611dee565b60c08201526120d4866101808701611dee565b60e08201526120e7866101c08701611dee565b6101008201526120fb866102008701611dee565b61012082015261210f866102408701611dee565b610140820152612123866102808701611dee565b610160820152612137866102c08701611dee565b61018082015261214b866103008701611dee565b6101a082015261215f866103408701611dee565b6101c0820152612173866103808701611dee565b6101e0820152612187866103c08701611dee565b61020082015261219b866104008701611dee565b6102208201526121af866104408701611dee565b6102408201526121c3866104808701611dee565b6102608201526104c08501356102808201526104e08501356102a082015292506121f1856105008601611e3b565b9150612201856105e08601611ea6565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b81810381811115611d0857634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261226b57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
2621    /// ```
2622    #[rustfmt::skip]
2623    #[allow(clippy::all)]
2624    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
2625        b"a\"\x9Da\x004`\x0B\x82\x82\x829\x80Q_\x1A`s\x14`(WcNH{q`\xE0\x1B_R_`\x04R`$_\xFD[0_R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a 1V[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02qV[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x04eV[a\0\xE8\x81` \x01Qa\x04eV[a\0\xF5\x81`@\x01Qa\x04eV[a\x01\x02\x81``\x01Qa\x04eV[a\x01\x0F\x81`\x80\x01Qa\x04eV[a\x01\x1C\x81`\xA0\x01Qa\x04eV[a\x01)\x81`\xC0\x01Qa\x04eV[a\x016\x81`\xE0\x01Qa\x04eV[a\x01D\x81a\x01\0\x01Qa\x04eV[a\x01R\x81a\x01 \x01Qa\x04eV[a\x01`\x81a\x01@\x01Qa\x04eV[a\x01n\x81a\x01`\x01Qa\x04eV[a\x01|\x81a\x01\x80\x01Qa\x04eV[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a\"q_9_Q\x90_R\x81\x10\x80a\x02mW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7FBn254: invalid scalar field\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02\x97W`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02\xA3\x85\x85\x85a\x05\x13V[\x90P_a\x02\xB2\x86_\x01Qa\nsV[\x90P_a\x02\xC4\x82\x84`\xA0\x01Q\x88a\x0EQV[\x90Pa\x02\xE1`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x03\x15\x87a\x01`\x01Qa\x03\x10\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0E\xAEV[a\x0FOV[\x91P__a\x03%\x8B\x88\x87\x8Ca\x0F\xF3V[\x91P\x91Pa\x036\x81a\x03\x10\x84a\x12+V[\x92Pa\x03O\x83a\x03\x10\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0E\xAEV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a\"q_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03\x92\x85a\x03\x10\x8Da\x01\x80\x01Q\x84a\x0E\xAEV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04S\x87\x82a\x04F\x89a\x12+V[a\x04Na\x12\xC8V[a\x13\x95V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04\x9EWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x05\x0EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PPPV[a\x05S`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a\"q_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n{a\x1D\x0EV[\x81b\x01\0\0\x03a\x0B\xBAW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\xFAW`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\x0E8W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0Er`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E|\x84\x84a\x14uV[\x80\x82Ra\x0E\x8C\x90\x85\x90\x85\x90a\x14\xC6V[` \x82\x01R\x80Qa\x0E\xA2\x90\x85\x90\x84\x90\x86\x90a\x155V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1D2V[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x81\x01\x83\x90R_``\x83`\x80\x84`\x07a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0E\xF9W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FBn254: scalar mul failed!\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Fja\x1DPV[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x83\x01R\x83\x01Q``\x80\x83\x01\x91\x90\x91R_\x90\x83`\xC0\x84`\x06a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0F\xA5W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: group addition failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10&\x87\x87\x87\x87a\x16\x83V[\x90P_Q` a\"q_9_Q\x90_R_a\x10B\x88\x87\x89a\x1BMV[\x90Pa\x10N\x81\x83a\"\x1EV[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x10z\x85a\x03\x10\x8A_\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xA2\x86a\x03\x10\x8A` \x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xCA\x86a\x03\x10\x8A`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xF2\x86a\x03\x10\x8A``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x1A\x86a\x03\x10\x8A`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x11B\x86a\x03\x10\x8D`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x11j\x86a\x03\x10\x8D``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x92\x86a\x03\x10\x8D`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\xBA\x86a\x03\x10\x8D`\xA0\x01Q\x84a\x0E\xAEV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\xE4\x87a\x03\x10\x8B`\xA0\x01Q\x84a\x0E\xAEV[\x96Pa\x12\x1Aa\x12\x14`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0E\xAEV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x12RWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x12\x96\x91\x90a\"QV[a\x12\xC0\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa\"\x1EV[\x90R\x92\x91PPV[a\x12\xEF`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x14gW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x02dV[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a\"q_9_Q\x90_R\x90\x83\x80\x15a\x14\xB6W\x84\x93P_[\x82\x81\x10\x15a\x14\xAAW\x83\x85\x86\t\x94P`\x01\x01a\x14\x94V[P`\x01\x84\x03\x93Pa\x14\xBDV[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x14\xD7WP`\x01a\0\xC9V[\x81_\x03a\x14\xE5WP_a\0\xC9V[` \x84\x01Q_Q` a\"q_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x15\x13W`\x01\x87\x03\x92Pa\x15\x1AV[`\x01\x84\x03\x92P[Pa\x15$\x82a\x1C8V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a\"q_9_Q\x90_R\x82\x82\x03a\x15\xAEW`\x01_[`\x07\x81\x10\x15a\x15\xA3W\x81\x86\x03a\x15\x80W\x86\x81`\x07\x81\x10a\x15qWa\x15qa\"\nV[` \x02\x01Q\x93PPPPa\x14mV[\x82\x80a\x15\x8EWa\x15\x8Ea\"=V[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x15OV[P_\x92PPPa\x14mV[a\x15\xB6a\x1DnV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x15\xF7W` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x15\xCAV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x16KW\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x16\x0BV[PPPP\x80\x92PP_a\x16]\x83a\x1C8V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a\"q_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x17\xF0\x87`\xA0\x01Q\x86a\x0E\xAEV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x18\xB7\x86a\x03\x10\x8C`\xC0\x01Q\x88\x85a\x18\xB2\x91\x90a\"\x1EV[a\x0E\xAEV[\x95Pa\x18\xD0\x86a\x03\x10\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0E\xAEV[\x95Pa\x18\xEA\x86a\x03\x10\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0E\xAEV[\x95Pa\x19\x04\x86a\x03\x10\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0E\xAEV[\x95Pa\x19\x1E\x86a\x03\x10\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x19C\x86a\x03\x10\x8Ca\x01`\x01Q\x86a\x0E\xAEV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x19h\x86a\x03\x10\x8Ca\x01\x80\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x97\x86a\x03\x10\x8Ca\x01\xE0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xC6\x86a\x03\x10\x8Ca\x02\0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xF5\x86a\x03\x10\x8Ca\x02 \x01Q\x86a\x0E\xAEV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x1A$\x86a\x03\x10\x8Ca\x02@\x01Q\x86a\x0E\xAEV[\x95Pa\x1AA\x86a\x03\x10\x8Ca\x01\xA0\x01Qa\x18\xB2\x8Ba\x02 \x01Qa\x1C\xD9V[\x95Pa\x1AR\x86\x8Ba\x01\xC0\x01Qa\x0FOV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x1A\x98\x86a\x03\x10\x8Ca\x02`\x01Q\x86a\x0E\xAEV[\x95Pa\x1A\xA6\x88_\x01Qa\x1C\xD9V[\x94Pa\x1A\xBA\x86a\x03\x10\x89`\xC0\x01Q\x88a\x0E\xAEV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x1A\xEE\x86a\x03\x10\x89`\xE0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B\t\x86a\x03\x10\x89a\x01\0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B$\x86a\x03\x10\x89a\x01 \x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B?\x86a\x03\x10\x89a\x01@\x01Q\x88a\x0E\xAEV[\x9A\x99PPPPPPPPPPV[___Q` a\"q_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[____Q` a\"q_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1C\xD2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: pow precompile failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x91\x90PV[_a\x1C\xF1_Q` a\"q_9_Q\x90_R\x83a\"QV[a\x1D\x08\x90_Q` a\"q_9_Q\x90_Ra\"\x1EV[\x92\x91PPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1D-a\x1DnV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[_`@\x82\x84\x03\x12\x15a\x1D\xFEW__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1E!Wa\x1E!a\x1D\x8CV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1EJW__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1EmWa\x1Ema\x1D\x8CV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1E\x81W__\xFD[\x84[\x81\x81\x10\x15a\x1E\x9BW\x805\x83R` \x92\x83\x01\x92\x01a\x1E\x83V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1E\xB7W__\xFD[a\x1E\xBFa\x1D\xA0V[\x90Pa\x1E\xCB\x83\x83a\x1D\xEEV[\x81Ra\x1E\xDA\x83`@\x84\x01a\x1D\xEEV[` \x82\x01Ra\x1E\xEC\x83`\x80\x84\x01a\x1D\xEEV[`@\x82\x01Ra\x1E\xFE\x83`\xC0\x84\x01a\x1D\xEEV[``\x82\x01Ra\x1F\x11\x83a\x01\0\x84\x01a\x1D\xEEV[`\x80\x82\x01Ra\x1F$\x83a\x01@\x84\x01a\x1D\xEEV[`\xA0\x82\x01Ra\x1F7\x83a\x01\x80\x84\x01a\x1D\xEEV[`\xC0\x82\x01Ra\x1FJ\x83a\x01\xC0\x84\x01a\x1D\xEEV[`\xE0\x82\x01Ra\x1F]\x83a\x02\0\x84\x01a\x1D\xEEV[a\x01\0\x82\x01Ra\x1Fq\x83a\x02@\x84\x01a\x1D\xEEV[a\x01 \x82\x01Ra\x1F\x85\x83a\x02\x80\x84\x01a\x1D\xEEV[a\x01@\x82\x01Ra\x1F\x99\x83a\x02\xC0\x84\x01a\x1D\xEEV[a\x01`\x82\x01Ra\x1F\xAD\x83a\x03\0\x84\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a EW__\xFD[a\x05\0\x81\x12\x15a SW__\xFD[Pa \\a\x1D\xCAV[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra w\x86`@\x87\x01a\x1D\xEEV[`@\x82\x01Ra \x89\x86`\x80\x87\x01a\x1D\xEEV[``\x82\x01Ra \x9B\x86`\xC0\x87\x01a\x1D\xEEV[`\x80\x82\x01Ra \xAE\x86a\x01\0\x87\x01a\x1D\xEEV[`\xA0\x82\x01Ra \xC1\x86a\x01@\x87\x01a\x1D\xEEV[`\xC0\x82\x01Ra \xD4\x86a\x01\x80\x87\x01a\x1D\xEEV[`\xE0\x82\x01Ra \xE7\x86a\x01\xC0\x87\x01a\x1D\xEEV[a\x01\0\x82\x01Ra \xFB\x86a\x02\0\x87\x01a\x1D\xEEV[a\x01 \x82\x01Ra!\x0F\x86a\x02@\x87\x01a\x1D\xEEV[a\x01@\x82\x01Ra!#\x86a\x02\x80\x87\x01a\x1D\xEEV[a\x01`\x82\x01Ra!7\x86a\x02\xC0\x87\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra!K\x86a\x03\0\x87\x01a\x1D\xEEV[a\x01\xA0\x82\x01Ra!_\x86a\x03@\x87\x01a\x1D\xEEV[a\x01\xC0\x82\x01Ra!s\x86a\x03\x80\x87\x01a\x1D\xEEV[a\x01\xE0\x82\x01Ra!\x87\x86a\x03\xC0\x87\x01a\x1D\xEEV[a\x02\0\x82\x01Ra!\x9B\x86a\x04\0\x87\x01a\x1D\xEEV[a\x02 \x82\x01Ra!\xAF\x86a\x04@\x87\x01a\x1D\xEEV[a\x02@\x82\x01Ra!\xC3\x86a\x04\x80\x87\x01a\x1D\xEEV[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa!\xF1\x85a\x05\0\x86\x01a\x1E;V[\x91Pa\"\x01\x85a\x05\xE0\x86\x01a\x1E\xA6V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a\x1D\x08WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\"kWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
2626    );
2627    /// The runtime bytecode of the contract, as deployed on the network.
2628    ///
2629    /// ```text
2630    ///0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004612031565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c6848484610271565b90505b9392505050565b80516100db90610465565b6100e88160200151610465565b6100f58160400151610465565b6101028160600151610465565b61010f8160800151610465565b61011c8160a00151610465565b6101298160c00151610465565b6101368160e00151610465565b610144816101000151610465565b610152816101200151610465565b610160816101400151610465565b61016e816101600151610465565b61017c816101800151610465565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206122715f395f51905f5281108061026d5760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c64000000000060448201526064015b60405180910390fd5b5050565b5f8360200151600714610297576040516320fa9d8960e11b815260040160405180910390fd5b5f6102a3858585610513565b90505f6102b2865f0151610a73565b90505f6102c4828460a0015188610e51565b90506102e160405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526103158761016001516103108961018001518860e00151610eae565b610f4f565b91505f5f6103258b88878c610ff3565b91509150610336816103108461122b565b925061034f836103108b61016001518a60a00151610eae565b60a08801516040880151602001519194505f5160206122715f395f51905f52918290820990508160e08a015182099050610392856103108d610180015184610eae565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061045387826104468961122b565b61044e6112c8565b611395565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561049e57505050565b82516020840151826003848585860985090883828309148382108484101616935050508161050e5760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e740000000000000000006044820152606401610264565b505050565b6105536040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206122715f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a7b611d0e565b816201000003610bba576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610cfa576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610e38576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e7260405180606001604052805f81526020015f81526020015f81525090565b610e7c8484611475565b808252610e8c90859085906114c6565b60208201528051610ea290859084908690611535565b60408201529392505050565b604080518082019091525f8082526020820152610ec9611d32565b8351815260208085015190820152604081018390525f60608360808460076107d05a03fa90508080610ef9575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601960248201527f426e3235343a207363616c6172206d756c206661696c656421000000000000006044820152606401610264565b505092915050565b604080518082019091525f8082526020820152610f6a611d50565b8351815260208085015181830152835160408301528301516060808301919091525f908360c08460066107d05a03fa90508080610fa5575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c6564210000006044820152606401610264565b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f61102687878787611683565b90505f5160206122715f395f51905f525f611042888789611b4d565b905061104e818361221e565b60c08901516101a08801519192509081908490819083098408925061107a856103108a5f015184610eae565b955083828209905083846101c08a01518309840892506110a2866103108a6020015184610eae565b955083828209905083846101e08a01518309840892506110ca866103108a6040015184610eae565b955083828209905083846102008a01518309840892506110f2866103108a6060015184610eae565b955083828209905083846102208a015183098408925061111a866103108a6080015184610eae565b955083828209905083846102408a0151830984089250611142866103108d6040015184610eae565b955083828209905083846102608a015183098408925061116a866103108d6060015184610eae565b955083828209905083846102808a0151830984089250611192866103108d6080015184610eae565b955083828209905083846102a08a01518309840892506111ba866103108d60a0015184610eae565b95505f8a60e00151905084856102c08b01518309850893506111e4876103108b60a0015184610eae565b965061121a6112146040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610eae565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611252575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516112969190612251565b6112c0907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761221e565b905292915050565b6112ef60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806114675760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c656421000000006044820152606401610264565b50151590505b949350505050565b81515f905f5160206122715f395f51905f52908380156114b6578493505f5b828110156114aa57838586099450600101611494565b506001840393506114bd565b6001830393505b50505092915050565b5f826001036114d7575060016100c9565b815f036114e557505f6100c9565b60208401515f5160206122715f395f51905f52905f908281860990508580156115135760018703925061151a565b6001840392505b5061152482611c38565b915082828209979650505050505050565b5f5f5160206122715f395f51905f528282036115ae5760015f5b60078110156115a357818603611580578681600781106115715761157161220a565b6020020151935050505061146d565b828061158e5761158e61223d565b6040890151602001518309915060010161154f565b505f9250505061146d565b6115b6611d6e565b6040870151600160c0838101828152920190805b60078110156115f75760208403935085868a85518903088309808552601f199093019291506001016115ca565b505050505f5f5f90506001838960408c01515f5b600781101561164b578882518a85518c88518a0909098981880896505088898d84518c03088609945060209384019392830192919091019060010161160b565b50505050809250505f61165d83611c38565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206122715f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506117f08760a0015186610eae565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506118b7866103108c60c0015188856118b2919061221e565b610eae565b95506118d0866103108c60e001518a6101a00151610eae565b95506118ea866103108c61010001518a6101c00151610eae565b9550611904866103108c61012001518a6101e00151610eae565b955061191e866103108c61014001518a6102000151610eae565b9550806101c08801516101a0890151099250611943866103108c610160015186610eae565b9550806102008801516101e0890151099250611968866103108c610180015186610eae565b95506101a08701519250808384099150808283099150808284099250611997866103108c6101e0015186610eae565b95506101c087015192508083840991508082830991508082840992506119c6866103108c610200015186610eae565b95506101e087015192508083840991508082830991508082840992506119f5866103108c610220015186610eae565b95506102008701519250808384099150808283099150808284099250611a24866103108c610240015186610eae565b9550611a41866103108c6101a001516118b28b6102200151611cd9565b9550611a52868b6101c00151610f4f565b9550806101c08801516101a0890151099250806101e08801518409925080610200880151840992508061022088015184099250611a98866103108c610260015186610eae565b9550611aa6885f0151611cd9565b9450611aba866103108960c0015188610eae565b955080600189510860a08a0151909350819080099150808284099250808386099450611aee866103108960e0015188610eae565b9550808386099450611b098661031089610100015188610eae565b9550808386099450611b248661031089610120015188610eae565b9550808386099450611b3f8661031089610140015188610eae565b9a9950505050505050505050565b5f5f5f5160206122715f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f5f5f5f5160206122715f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611cd25760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c6564210000006044820152606401610264565b5050919050565b5f611cf15f5160206122715f395f51905f5283612251565b611d08905f5160206122715f395f51905f5261221e565b92915050565b60405180606001604052805f81526020015f8152602001611d2d611d6e565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b5f60408284031215611dfe575f5ffd5b6040805190810167ffffffffffffffff81118282101715611e2157611e21611d8c565b604052823581526020928301359281019290925250919050565b5f82601f830112611e4a575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611e6d57611e6d611d8c565b6040528060e0840185811115611e81575f5ffd5b845b81811015611e9b578035835260209283019201611e83565b509195945050505050565b5f6104808284031215611eb7575f5ffd5b611ebf611da0565b9050611ecb8383611dee565b8152611eda8360408401611dee565b6020820152611eec8360808401611dee565b6040820152611efe8360c08401611dee565b6060820152611f11836101008401611dee565b6080820152611f24836101408401611dee565b60a0820152611f37836101808401611dee565b60c0820152611f4a836101c08401611dee565b60e0820152611f5d836102008401611dee565b610100820152611f71836102408401611dee565b610120820152611f85836102808401611dee565b610140820152611f99836102c08401611dee565b610160820152611fad836103008401611dee565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215612045575f5ffd5b610500811215612053575f5ffd5b5061205c611dca565b84358152602080860135908201526120778660408701611dee565b60408201526120898660808701611dee565b606082015261209b8660c08701611dee565b60808201526120ae866101008701611dee565b60a08201526120c1866101408701611dee565b60c08201526120d4866101808701611dee565b60e08201526120e7866101c08701611dee565b6101008201526120fb866102008701611dee565b61012082015261210f866102408701611dee565b610140820152612123866102808701611dee565b610160820152612137866102c08701611dee565b61018082015261214b866103008701611dee565b6101a082015261215f866103408701611dee565b6101c0820152612173866103808701611dee565b6101e0820152612187866103c08701611dee565b61020082015261219b866104008701611dee565b6102208201526121af866104408701611dee565b6102408201526121c3866104808701611dee565b6102608201526104c08501356102808201526104e08501356102a082015292506121f1856105008601611e3b565b9150612201856105e08601611ea6565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b81810381811115611d0857634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261226b57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
2631    /// ```
2632    #[rustfmt::skip]
2633    #[allow(clippy::all)]
2634    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
2635        b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a 1V[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02qV[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x04eV[a\0\xE8\x81` \x01Qa\x04eV[a\0\xF5\x81`@\x01Qa\x04eV[a\x01\x02\x81``\x01Qa\x04eV[a\x01\x0F\x81`\x80\x01Qa\x04eV[a\x01\x1C\x81`\xA0\x01Qa\x04eV[a\x01)\x81`\xC0\x01Qa\x04eV[a\x016\x81`\xE0\x01Qa\x04eV[a\x01D\x81a\x01\0\x01Qa\x04eV[a\x01R\x81a\x01 \x01Qa\x04eV[a\x01`\x81a\x01@\x01Qa\x04eV[a\x01n\x81a\x01`\x01Qa\x04eV[a\x01|\x81a\x01\x80\x01Qa\x04eV[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a\"q_9_Q\x90_R\x81\x10\x80a\x02mW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7FBn254: invalid scalar field\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02\x97W`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02\xA3\x85\x85\x85a\x05\x13V[\x90P_a\x02\xB2\x86_\x01Qa\nsV[\x90P_a\x02\xC4\x82\x84`\xA0\x01Q\x88a\x0EQV[\x90Pa\x02\xE1`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x03\x15\x87a\x01`\x01Qa\x03\x10\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0E\xAEV[a\x0FOV[\x91P__a\x03%\x8B\x88\x87\x8Ca\x0F\xF3V[\x91P\x91Pa\x036\x81a\x03\x10\x84a\x12+V[\x92Pa\x03O\x83a\x03\x10\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0E\xAEV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a\"q_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03\x92\x85a\x03\x10\x8Da\x01\x80\x01Q\x84a\x0E\xAEV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04S\x87\x82a\x04F\x89a\x12+V[a\x04Na\x12\xC8V[a\x13\x95V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04\x9EWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x05\x0EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PPPV[a\x05S`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a\"q_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n{a\x1D\x0EV[\x81b\x01\0\0\x03a\x0B\xBAW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\xFAW`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\x0E8W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0Er`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E|\x84\x84a\x14uV[\x80\x82Ra\x0E\x8C\x90\x85\x90\x85\x90a\x14\xC6V[` \x82\x01R\x80Qa\x0E\xA2\x90\x85\x90\x84\x90\x86\x90a\x155V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1D2V[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x81\x01\x83\x90R_``\x83`\x80\x84`\x07a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0E\xF9W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FBn254: scalar mul failed!\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Fja\x1DPV[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x83\x01R\x83\x01Q``\x80\x83\x01\x91\x90\x91R_\x90\x83`\xC0\x84`\x06a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0F\xA5W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: group addition failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10&\x87\x87\x87\x87a\x16\x83V[\x90P_Q` a\"q_9_Q\x90_R_a\x10B\x88\x87\x89a\x1BMV[\x90Pa\x10N\x81\x83a\"\x1EV[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x10z\x85a\x03\x10\x8A_\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xA2\x86a\x03\x10\x8A` \x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xCA\x86a\x03\x10\x8A`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xF2\x86a\x03\x10\x8A``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x1A\x86a\x03\x10\x8A`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x11B\x86a\x03\x10\x8D`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x11j\x86a\x03\x10\x8D``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x92\x86a\x03\x10\x8D`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\xBA\x86a\x03\x10\x8D`\xA0\x01Q\x84a\x0E\xAEV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\xE4\x87a\x03\x10\x8B`\xA0\x01Q\x84a\x0E\xAEV[\x96Pa\x12\x1Aa\x12\x14`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0E\xAEV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x12RWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x12\x96\x91\x90a\"QV[a\x12\xC0\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa\"\x1EV[\x90R\x92\x91PPV[a\x12\xEF`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x14gW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x02dV[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a\"q_9_Q\x90_R\x90\x83\x80\x15a\x14\xB6W\x84\x93P_[\x82\x81\x10\x15a\x14\xAAW\x83\x85\x86\t\x94P`\x01\x01a\x14\x94V[P`\x01\x84\x03\x93Pa\x14\xBDV[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x14\xD7WP`\x01a\0\xC9V[\x81_\x03a\x14\xE5WP_a\0\xC9V[` \x84\x01Q_Q` a\"q_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x15\x13W`\x01\x87\x03\x92Pa\x15\x1AV[`\x01\x84\x03\x92P[Pa\x15$\x82a\x1C8V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a\"q_9_Q\x90_R\x82\x82\x03a\x15\xAEW`\x01_[`\x07\x81\x10\x15a\x15\xA3W\x81\x86\x03a\x15\x80W\x86\x81`\x07\x81\x10a\x15qWa\x15qa\"\nV[` \x02\x01Q\x93PPPPa\x14mV[\x82\x80a\x15\x8EWa\x15\x8Ea\"=V[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x15OV[P_\x92PPPa\x14mV[a\x15\xB6a\x1DnV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x15\xF7W` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x15\xCAV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x16KW\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x16\x0BV[PPPP\x80\x92PP_a\x16]\x83a\x1C8V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a\"q_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x17\xF0\x87`\xA0\x01Q\x86a\x0E\xAEV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x18\xB7\x86a\x03\x10\x8C`\xC0\x01Q\x88\x85a\x18\xB2\x91\x90a\"\x1EV[a\x0E\xAEV[\x95Pa\x18\xD0\x86a\x03\x10\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0E\xAEV[\x95Pa\x18\xEA\x86a\x03\x10\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0E\xAEV[\x95Pa\x19\x04\x86a\x03\x10\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0E\xAEV[\x95Pa\x19\x1E\x86a\x03\x10\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x19C\x86a\x03\x10\x8Ca\x01`\x01Q\x86a\x0E\xAEV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x19h\x86a\x03\x10\x8Ca\x01\x80\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x97\x86a\x03\x10\x8Ca\x01\xE0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xC6\x86a\x03\x10\x8Ca\x02\0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xF5\x86a\x03\x10\x8Ca\x02 \x01Q\x86a\x0E\xAEV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x1A$\x86a\x03\x10\x8Ca\x02@\x01Q\x86a\x0E\xAEV[\x95Pa\x1AA\x86a\x03\x10\x8Ca\x01\xA0\x01Qa\x18\xB2\x8Ba\x02 \x01Qa\x1C\xD9V[\x95Pa\x1AR\x86\x8Ba\x01\xC0\x01Qa\x0FOV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x1A\x98\x86a\x03\x10\x8Ca\x02`\x01Q\x86a\x0E\xAEV[\x95Pa\x1A\xA6\x88_\x01Qa\x1C\xD9V[\x94Pa\x1A\xBA\x86a\x03\x10\x89`\xC0\x01Q\x88a\x0E\xAEV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x1A\xEE\x86a\x03\x10\x89`\xE0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B\t\x86a\x03\x10\x89a\x01\0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B$\x86a\x03\x10\x89a\x01 \x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B?\x86a\x03\x10\x89a\x01@\x01Q\x88a\x0E\xAEV[\x9A\x99PPPPPPPPPPV[___Q` a\"q_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[____Q` a\"q_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1C\xD2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: pow precompile failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x91\x90PV[_a\x1C\xF1_Q` a\"q_9_Q\x90_R\x83a\"QV[a\x1D\x08\x90_Q` a\"q_9_Q\x90_Ra\"\x1EV[\x92\x91PPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1D-a\x1DnV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[_`@\x82\x84\x03\x12\x15a\x1D\xFEW__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1E!Wa\x1E!a\x1D\x8CV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1EJW__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1EmWa\x1Ema\x1D\x8CV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1E\x81W__\xFD[\x84[\x81\x81\x10\x15a\x1E\x9BW\x805\x83R` \x92\x83\x01\x92\x01a\x1E\x83V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1E\xB7W__\xFD[a\x1E\xBFa\x1D\xA0V[\x90Pa\x1E\xCB\x83\x83a\x1D\xEEV[\x81Ra\x1E\xDA\x83`@\x84\x01a\x1D\xEEV[` \x82\x01Ra\x1E\xEC\x83`\x80\x84\x01a\x1D\xEEV[`@\x82\x01Ra\x1E\xFE\x83`\xC0\x84\x01a\x1D\xEEV[``\x82\x01Ra\x1F\x11\x83a\x01\0\x84\x01a\x1D\xEEV[`\x80\x82\x01Ra\x1F$\x83a\x01@\x84\x01a\x1D\xEEV[`\xA0\x82\x01Ra\x1F7\x83a\x01\x80\x84\x01a\x1D\xEEV[`\xC0\x82\x01Ra\x1FJ\x83a\x01\xC0\x84\x01a\x1D\xEEV[`\xE0\x82\x01Ra\x1F]\x83a\x02\0\x84\x01a\x1D\xEEV[a\x01\0\x82\x01Ra\x1Fq\x83a\x02@\x84\x01a\x1D\xEEV[a\x01 \x82\x01Ra\x1F\x85\x83a\x02\x80\x84\x01a\x1D\xEEV[a\x01@\x82\x01Ra\x1F\x99\x83a\x02\xC0\x84\x01a\x1D\xEEV[a\x01`\x82\x01Ra\x1F\xAD\x83a\x03\0\x84\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a EW__\xFD[a\x05\0\x81\x12\x15a SW__\xFD[Pa \\a\x1D\xCAV[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra w\x86`@\x87\x01a\x1D\xEEV[`@\x82\x01Ra \x89\x86`\x80\x87\x01a\x1D\xEEV[``\x82\x01Ra \x9B\x86`\xC0\x87\x01a\x1D\xEEV[`\x80\x82\x01Ra \xAE\x86a\x01\0\x87\x01a\x1D\xEEV[`\xA0\x82\x01Ra \xC1\x86a\x01@\x87\x01a\x1D\xEEV[`\xC0\x82\x01Ra \xD4\x86a\x01\x80\x87\x01a\x1D\xEEV[`\xE0\x82\x01Ra \xE7\x86a\x01\xC0\x87\x01a\x1D\xEEV[a\x01\0\x82\x01Ra \xFB\x86a\x02\0\x87\x01a\x1D\xEEV[a\x01 \x82\x01Ra!\x0F\x86a\x02@\x87\x01a\x1D\xEEV[a\x01@\x82\x01Ra!#\x86a\x02\x80\x87\x01a\x1D\xEEV[a\x01`\x82\x01Ra!7\x86a\x02\xC0\x87\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra!K\x86a\x03\0\x87\x01a\x1D\xEEV[a\x01\xA0\x82\x01Ra!_\x86a\x03@\x87\x01a\x1D\xEEV[a\x01\xC0\x82\x01Ra!s\x86a\x03\x80\x87\x01a\x1D\xEEV[a\x01\xE0\x82\x01Ra!\x87\x86a\x03\xC0\x87\x01a\x1D\xEEV[a\x02\0\x82\x01Ra!\x9B\x86a\x04\0\x87\x01a\x1D\xEEV[a\x02 \x82\x01Ra!\xAF\x86a\x04@\x87\x01a\x1D\xEEV[a\x02@\x82\x01Ra!\xC3\x86a\x04\x80\x87\x01a\x1D\xEEV[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa!\xF1\x85a\x05\0\x86\x01a\x1E;V[\x91Pa\"\x01\x85a\x05\xE0\x86\x01a\x1E\xA6V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a\x1D\x08WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\"kWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
2636    );
2637    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2638    /**Custom error with signature `InvalidPlonkArgs()` and selector `0xfd9a2d1b`.
2639    ```solidity
2640    error InvalidPlonkArgs();
2641    ```*/
2642    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2643    #[derive(Clone)]
2644    pub struct InvalidPlonkArgs {}
2645    #[allow(
2646        non_camel_case_types,
2647        non_snake_case,
2648        clippy::pub_underscore_fields,
2649        clippy::style
2650    )]
2651    const _: () = {
2652        use alloy::sol_types as alloy_sol_types;
2653        #[doc(hidden)]
2654        type UnderlyingSolTuple<'a> = ();
2655        #[doc(hidden)]
2656        type UnderlyingRustTuple<'a> = ();
2657        #[cfg(test)]
2658        #[allow(dead_code, unreachable_patterns)]
2659        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2660            match _t {
2661                alloy_sol_types::private::AssertTypeEq::<
2662                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2663                >(_) => {},
2664            }
2665        }
2666        #[automatically_derived]
2667        #[doc(hidden)]
2668        impl ::core::convert::From<InvalidPlonkArgs> for UnderlyingRustTuple<'_> {
2669            fn from(value: InvalidPlonkArgs) -> Self {
2670                ()
2671            }
2672        }
2673        #[automatically_derived]
2674        #[doc(hidden)]
2675        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidPlonkArgs {
2676            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2677                Self {}
2678            }
2679        }
2680        #[automatically_derived]
2681        impl alloy_sol_types::SolError for InvalidPlonkArgs {
2682            type Parameters<'a> = UnderlyingSolTuple<'a>;
2683            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2684            const SIGNATURE: &'static str = "InvalidPlonkArgs()";
2685            const SELECTOR: [u8; 4] = [253u8, 154u8, 45u8, 27u8];
2686            #[inline]
2687            fn new<'a>(
2688                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2689            ) -> Self {
2690                tuple.into()
2691            }
2692            #[inline]
2693            fn tokenize(&self) -> Self::Token<'_> {
2694                ()
2695            }
2696        }
2697    };
2698    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2699    /**Custom error with signature `UnsupportedDegree()` and selector `0xe2ef09e5`.
2700    ```solidity
2701    error UnsupportedDegree();
2702    ```*/
2703    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2704    #[derive(Clone)]
2705    pub struct UnsupportedDegree {}
2706    #[allow(
2707        non_camel_case_types,
2708        non_snake_case,
2709        clippy::pub_underscore_fields,
2710        clippy::style
2711    )]
2712    const _: () = {
2713        use alloy::sol_types as alloy_sol_types;
2714        #[doc(hidden)]
2715        type UnderlyingSolTuple<'a> = ();
2716        #[doc(hidden)]
2717        type UnderlyingRustTuple<'a> = ();
2718        #[cfg(test)]
2719        #[allow(dead_code, unreachable_patterns)]
2720        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2721            match _t {
2722                alloy_sol_types::private::AssertTypeEq::<
2723                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2724                >(_) => {},
2725            }
2726        }
2727        #[automatically_derived]
2728        #[doc(hidden)]
2729        impl ::core::convert::From<UnsupportedDegree> for UnderlyingRustTuple<'_> {
2730            fn from(value: UnsupportedDegree) -> Self {
2731                ()
2732            }
2733        }
2734        #[automatically_derived]
2735        #[doc(hidden)]
2736        impl ::core::convert::From<UnderlyingRustTuple<'_>> for UnsupportedDegree {
2737            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2738                Self {}
2739            }
2740        }
2741        #[automatically_derived]
2742        impl alloy_sol_types::SolError for UnsupportedDegree {
2743            type Parameters<'a> = UnderlyingSolTuple<'a>;
2744            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2745            const SIGNATURE: &'static str = "UnsupportedDegree()";
2746            const SELECTOR: [u8; 4] = [226u8, 239u8, 9u8, 229u8];
2747            #[inline]
2748            fn new<'a>(
2749                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2750            ) -> Self {
2751                tuple.into()
2752            }
2753            #[inline]
2754            fn tokenize(&self) -> Self::Token<'_> {
2755                ()
2756            }
2757        }
2758    };
2759    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2760    /**Custom error with signature `WrongPlonkVK()` and selector `0x41f53b12`.
2761    ```solidity
2762    error WrongPlonkVK();
2763    ```*/
2764    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2765    #[derive(Clone)]
2766    pub struct WrongPlonkVK {}
2767    #[allow(
2768        non_camel_case_types,
2769        non_snake_case,
2770        clippy::pub_underscore_fields,
2771        clippy::style
2772    )]
2773    const _: () = {
2774        use alloy::sol_types as alloy_sol_types;
2775        #[doc(hidden)]
2776        type UnderlyingSolTuple<'a> = ();
2777        #[doc(hidden)]
2778        type UnderlyingRustTuple<'a> = ();
2779        #[cfg(test)]
2780        #[allow(dead_code, unreachable_patterns)]
2781        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2782            match _t {
2783                alloy_sol_types::private::AssertTypeEq::<
2784                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2785                >(_) => {},
2786            }
2787        }
2788        #[automatically_derived]
2789        #[doc(hidden)]
2790        impl ::core::convert::From<WrongPlonkVK> for UnderlyingRustTuple<'_> {
2791            fn from(value: WrongPlonkVK) -> Self {
2792                ()
2793            }
2794        }
2795        #[automatically_derived]
2796        #[doc(hidden)]
2797        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WrongPlonkVK {
2798            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2799                Self {}
2800            }
2801        }
2802        #[automatically_derived]
2803        impl alloy_sol_types::SolError for WrongPlonkVK {
2804            type Parameters<'a> = UnderlyingSolTuple<'a>;
2805            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2806            const SIGNATURE: &'static str = "WrongPlonkVK()";
2807            const SELECTOR: [u8; 4] = [65u8, 245u8, 59u8, 18u8];
2808            #[inline]
2809            fn new<'a>(
2810                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2811            ) -> Self {
2812                tuple.into()
2813            }
2814            #[inline]
2815            fn tokenize(&self) -> Self::Token<'_> {
2816                ()
2817            }
2818        }
2819    };
2820    #[derive()]
2821    /**Function with signature `verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x77ae3f07`.
2822    ```solidity
2823    function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
2824    ```*/
2825    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2826    #[derive(Clone)]
2827    pub struct verifyCall {
2828        #[allow(missing_docs)]
2829        pub verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
2830        #[allow(missing_docs)]
2831        pub publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
2832        #[allow(missing_docs)]
2833        pub proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
2834    }
2835    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2836    ///Container type for the return parameters of the [`verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](verifyCall) function.
2837    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2838    #[derive(Clone)]
2839    pub struct verifyReturn {
2840        #[allow(missing_docs)]
2841        pub _0: bool,
2842    }
2843    #[allow(
2844        non_camel_case_types,
2845        non_snake_case,
2846        clippy::pub_underscore_fields,
2847        clippy::style
2848    )]
2849    const _: () = {
2850        use alloy::sol_types as alloy_sol_types;
2851        {
2852            #[doc(hidden)]
2853            type UnderlyingSolTuple<'a> = (
2854                IPlonkVerifier::VerifyingKey,
2855                alloy::sol_types::sol_data::FixedArray<
2856                    alloy::sol_types::sol_data::Uint<256>,
2857                    7usize,
2858                >,
2859                IPlonkVerifier::PlonkProof,
2860            );
2861            #[doc(hidden)]
2862            type UnderlyingRustTuple<'a> = (
2863                <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
2864                [alloy::sol_types::private::primitives::aliases::U256; 7usize],
2865                <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
2866            );
2867            #[cfg(test)]
2868            #[allow(dead_code, unreachable_patterns)]
2869            fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2870                match _t {
2871                    alloy_sol_types::private::AssertTypeEq::<
2872                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2873                    >(_) => {},
2874                }
2875            }
2876            #[automatically_derived]
2877            #[doc(hidden)]
2878            impl ::core::convert::From<verifyCall> for UnderlyingRustTuple<'_> {
2879                fn from(value: verifyCall) -> Self {
2880                    (value.verifyingKey, value.publicInput, value.proof)
2881                }
2882            }
2883            #[automatically_derived]
2884            #[doc(hidden)]
2885            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyCall {
2886                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2887                    Self {
2888                        verifyingKey: tuple.0,
2889                        publicInput: tuple.1,
2890                        proof: tuple.2,
2891                    }
2892                }
2893            }
2894        }
2895        {
2896            #[doc(hidden)]
2897            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
2898            #[doc(hidden)]
2899            type UnderlyingRustTuple<'a> = (bool,);
2900            #[cfg(test)]
2901            #[allow(dead_code, unreachable_patterns)]
2902            fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2903                match _t {
2904                    alloy_sol_types::private::AssertTypeEq::<
2905                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2906                    >(_) => {},
2907                }
2908            }
2909            #[automatically_derived]
2910            #[doc(hidden)]
2911            impl ::core::convert::From<verifyReturn> for UnderlyingRustTuple<'_> {
2912                fn from(value: verifyReturn) -> Self {
2913                    (value._0,)
2914                }
2915            }
2916            #[automatically_derived]
2917            #[doc(hidden)]
2918            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyReturn {
2919                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2920                    Self { _0: tuple.0 }
2921                }
2922            }
2923        }
2924        #[automatically_derived]
2925        impl alloy_sol_types::SolCall for verifyCall {
2926            type Parameters<'a> = (
2927                IPlonkVerifier::VerifyingKey,
2928                alloy::sol_types::sol_data::FixedArray<
2929                    alloy::sol_types::sol_data::Uint<256>,
2930                    7usize,
2931                >,
2932                IPlonkVerifier::PlonkProof,
2933            );
2934            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2935            type Return = verifyReturn;
2936            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
2937            type ReturnToken<'a> = <Self::ReturnTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
2938            const SIGNATURE: &'static str = "verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
2939            const SELECTOR: [u8; 4] = [119u8, 174u8, 63u8, 7u8];
2940            #[inline]
2941            fn new<'a>(
2942                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2943            ) -> Self {
2944                tuple.into()
2945            }
2946            #[inline]
2947            fn tokenize(&self) -> Self::Token<'_> {
2948                (
2949                    <IPlonkVerifier::VerifyingKey as alloy_sol_types::SolType>::tokenize(
2950                        &self.verifyingKey,
2951                    ),
2952                    <alloy::sol_types::sol_data::FixedArray<
2953                        alloy::sol_types::sol_data::Uint<256>,
2954                        7usize,
2955                    > as alloy_sol_types::SolType>::tokenize(&self.publicInput),
2956                    <IPlonkVerifier::PlonkProof as alloy_sol_types::SolType>::tokenize(&self.proof),
2957                )
2958            }
2959            #[inline]
2960            fn abi_decode_returns(
2961                data: &[u8],
2962                validate: bool,
2963            ) -> alloy_sol_types::Result<Self::Return> {
2964                <Self::ReturnTuple<'_> as alloy_sol_types::SolType>::abi_decode_sequence(
2965                    data, validate,
2966                )
2967                .map(Into::into)
2968            }
2969        }
2970    };
2971    ///Container for all the [`PlonkVerifier`](self) function calls.
2972    #[derive()]
2973    pub enum PlonkVerifierCalls {
2974        #[allow(missing_docs)]
2975        verify(verifyCall),
2976    }
2977    #[automatically_derived]
2978    impl PlonkVerifierCalls {
2979        /// All the selectors of this enum.
2980        ///
2981        /// Note that the selectors might not be in the same order as the variants.
2982        /// No guarantees are made about the order of the selectors.
2983        ///
2984        /// Prefer using `SolInterface` methods instead.
2985        pub const SELECTORS: &'static [[u8; 4usize]] = &[[119u8, 174u8, 63u8, 7u8]];
2986    }
2987    #[automatically_derived]
2988    impl alloy_sol_types::SolInterface for PlonkVerifierCalls {
2989        const NAME: &'static str = "PlonkVerifierCalls";
2990        const MIN_DATA_LENGTH: usize = 672usize;
2991        const COUNT: usize = 1usize;
2992        #[inline]
2993        fn selector(&self) -> [u8; 4] {
2994            match self {
2995                Self::verify(_) => <verifyCall as alloy_sol_types::SolCall>::SELECTOR,
2996            }
2997        }
2998        #[inline]
2999        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
3000            Self::SELECTORS.get(i).copied()
3001        }
3002        #[inline]
3003        fn valid_selector(selector: [u8; 4]) -> bool {
3004            Self::SELECTORS.binary_search(&selector).is_ok()
3005        }
3006        #[inline]
3007        #[allow(non_snake_case)]
3008        fn abi_decode_raw(
3009            selector: [u8; 4],
3010            data: &[u8],
3011            validate: bool,
3012        ) -> alloy_sol_types::Result<Self> {
3013            static DECODE_SHIMS: &[fn(
3014                &[u8],
3015                bool,
3016            )
3017                -> alloy_sol_types::Result<PlonkVerifierCalls>] = &[{
3018                fn verify(
3019                    data: &[u8],
3020                    validate: bool,
3021                ) -> alloy_sol_types::Result<PlonkVerifierCalls> {
3022                    <verifyCall as alloy_sol_types::SolCall>::abi_decode_raw(data, validate)
3023                        .map(PlonkVerifierCalls::verify)
3024                }
3025                verify
3026            }];
3027            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
3028                return Err(alloy_sol_types::Error::unknown_selector(
3029                    <Self as alloy_sol_types::SolInterface>::NAME,
3030                    selector,
3031                ));
3032            };
3033            DECODE_SHIMS[idx](data, validate)
3034        }
3035        #[inline]
3036        fn abi_encoded_size(&self) -> usize {
3037            match self {
3038                Self::verify(inner) => {
3039                    <verifyCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
3040                },
3041            }
3042        }
3043        #[inline]
3044        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
3045            match self {
3046                Self::verify(inner) => {
3047                    <verifyCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
3048                },
3049            }
3050        }
3051    }
3052    ///Container for all the [`PlonkVerifier`](self) custom errors.
3053    #[derive(Debug, PartialEq, Eq, Hash)]
3054    pub enum PlonkVerifierErrors {
3055        #[allow(missing_docs)]
3056        InvalidPlonkArgs(InvalidPlonkArgs),
3057        #[allow(missing_docs)]
3058        UnsupportedDegree(UnsupportedDegree),
3059        #[allow(missing_docs)]
3060        WrongPlonkVK(WrongPlonkVK),
3061    }
3062    #[automatically_derived]
3063    impl PlonkVerifierErrors {
3064        /// All the selectors of this enum.
3065        ///
3066        /// Note that the selectors might not be in the same order as the variants.
3067        /// No guarantees are made about the order of the selectors.
3068        ///
3069        /// Prefer using `SolInterface` methods instead.
3070        pub const SELECTORS: &'static [[u8; 4usize]] = &[
3071            [65u8, 245u8, 59u8, 18u8],
3072            [226u8, 239u8, 9u8, 229u8],
3073            [253u8, 154u8, 45u8, 27u8],
3074        ];
3075    }
3076    #[automatically_derived]
3077    impl alloy_sol_types::SolInterface for PlonkVerifierErrors {
3078        const NAME: &'static str = "PlonkVerifierErrors";
3079        const MIN_DATA_LENGTH: usize = 0usize;
3080        const COUNT: usize = 3usize;
3081        #[inline]
3082        fn selector(&self) -> [u8; 4] {
3083            match self {
3084                Self::InvalidPlonkArgs(_) => {
3085                    <InvalidPlonkArgs as alloy_sol_types::SolError>::SELECTOR
3086                },
3087                Self::UnsupportedDegree(_) => {
3088                    <UnsupportedDegree as alloy_sol_types::SolError>::SELECTOR
3089                },
3090                Self::WrongPlonkVK(_) => <WrongPlonkVK as alloy_sol_types::SolError>::SELECTOR,
3091            }
3092        }
3093        #[inline]
3094        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
3095            Self::SELECTORS.get(i).copied()
3096        }
3097        #[inline]
3098        fn valid_selector(selector: [u8; 4]) -> bool {
3099            Self::SELECTORS.binary_search(&selector).is_ok()
3100        }
3101        #[inline]
3102        #[allow(non_snake_case)]
3103        fn abi_decode_raw(
3104            selector: [u8; 4],
3105            data: &[u8],
3106            validate: bool,
3107        ) -> alloy_sol_types::Result<Self> {
3108            static DECODE_SHIMS: &[fn(
3109                &[u8],
3110                bool,
3111            )
3112                -> alloy_sol_types::Result<PlonkVerifierErrors>] = &[
3113                {
3114                    fn WrongPlonkVK(
3115                        data: &[u8],
3116                        validate: bool,
3117                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
3118                        <WrongPlonkVK as alloy_sol_types::SolError>::abi_decode_raw(data, validate)
3119                            .map(PlonkVerifierErrors::WrongPlonkVK)
3120                    }
3121                    WrongPlonkVK
3122                },
3123                {
3124                    fn UnsupportedDegree(
3125                        data: &[u8],
3126                        validate: bool,
3127                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
3128                        <UnsupportedDegree as alloy_sol_types::SolError>::abi_decode_raw(
3129                            data, validate,
3130                        )
3131                        .map(PlonkVerifierErrors::UnsupportedDegree)
3132                    }
3133                    UnsupportedDegree
3134                },
3135                {
3136                    fn InvalidPlonkArgs(
3137                        data: &[u8],
3138                        validate: bool,
3139                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
3140                        <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_decode_raw(
3141                            data, validate,
3142                        )
3143                        .map(PlonkVerifierErrors::InvalidPlonkArgs)
3144                    }
3145                    InvalidPlonkArgs
3146                },
3147            ];
3148            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
3149                return Err(alloy_sol_types::Error::unknown_selector(
3150                    <Self as alloy_sol_types::SolInterface>::NAME,
3151                    selector,
3152                ));
3153            };
3154            DECODE_SHIMS[idx](data, validate)
3155        }
3156        #[inline]
3157        fn abi_encoded_size(&self) -> usize {
3158            match self {
3159                Self::InvalidPlonkArgs(inner) => {
3160                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encoded_size(inner)
3161                },
3162                Self::UnsupportedDegree(inner) => {
3163                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encoded_size(inner)
3164                },
3165                Self::WrongPlonkVK(inner) => {
3166                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encoded_size(inner)
3167                },
3168            }
3169        }
3170        #[inline]
3171        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
3172            match self {
3173                Self::InvalidPlonkArgs(inner) => {
3174                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
3175                },
3176                Self::UnsupportedDegree(inner) => {
3177                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
3178                },
3179                Self::WrongPlonkVK(inner) => {
3180                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
3181                },
3182            }
3183        }
3184    }
3185    use alloy::contract as alloy_contract;
3186    /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
3187
3188    See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
3189    #[inline]
3190    pub const fn new<
3191        T: alloy_contract::private::Transport + ::core::clone::Clone,
3192        P: alloy_contract::private::Provider<T, N>,
3193        N: alloy_contract::private::Network,
3194    >(
3195        address: alloy_sol_types::private::Address,
3196        provider: P,
3197    ) -> PlonkVerifierInstance<T, P, N> {
3198        PlonkVerifierInstance::<T, P, N>::new(address, provider)
3199    }
3200    /**Deploys this contract using the given `provider` and constructor arguments, if any.
3201
3202    Returns a new instance of the contract, if the deployment was successful.
3203
3204    For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
3205    #[inline]
3206    pub fn deploy<
3207        T: alloy_contract::private::Transport + ::core::clone::Clone,
3208        P: alloy_contract::private::Provider<T, N>,
3209        N: alloy_contract::private::Network,
3210    >(
3211        provider: P,
3212    ) -> impl ::core::future::Future<Output = alloy_contract::Result<PlonkVerifierInstance<T, P, N>>>
3213    {
3214        PlonkVerifierInstance::<T, P, N>::deploy(provider)
3215    }
3216    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
3217    and constructor arguments, if any.
3218
3219    This is a simple wrapper around creating a `RawCallBuilder` with the data set to
3220    the bytecode concatenated with the constructor's ABI-encoded arguments.*/
3221    #[inline]
3222    pub fn deploy_builder<
3223        T: alloy_contract::private::Transport + ::core::clone::Clone,
3224        P: alloy_contract::private::Provider<T, N>,
3225        N: alloy_contract::private::Network,
3226    >(
3227        provider: P,
3228    ) -> alloy_contract::RawCallBuilder<T, P, N> {
3229        PlonkVerifierInstance::<T, P, N>::deploy_builder(provider)
3230    }
3231    /**A [`PlonkVerifier`](self) instance.
3232
3233    Contains type-safe methods for interacting with an on-chain instance of the
3234    [`PlonkVerifier`](self) contract located at a given `address`, using a given
3235    provider `P`.
3236
3237    If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
3238    documentation on how to provide it), the `deploy` and `deploy_builder` methods can
3239    be used to deploy a new instance of the contract.
3240
3241    See the [module-level documentation](self) for all the available methods.*/
3242    #[derive(Clone)]
3243    pub struct PlonkVerifierInstance<T, P, N = alloy_contract::private::Ethereum> {
3244        address: alloy_sol_types::private::Address,
3245        provider: P,
3246        _network_transport: ::core::marker::PhantomData<(N, T)>,
3247    }
3248    #[automatically_derived]
3249    impl<T, P, N> ::core::fmt::Debug for PlonkVerifierInstance<T, P, N> {
3250        #[inline]
3251        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
3252            f.debug_tuple("PlonkVerifierInstance")
3253                .field(&self.address)
3254                .finish()
3255        }
3256    }
3257    /// Instantiation and getters/setters.
3258    #[automatically_derived]
3259    impl<
3260            T: alloy_contract::private::Transport + ::core::clone::Clone,
3261            P: alloy_contract::private::Provider<T, N>,
3262            N: alloy_contract::private::Network,
3263        > PlonkVerifierInstance<T, P, N>
3264    {
3265        /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
3266
3267        See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
3268        #[inline]
3269        pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self {
3270            Self {
3271                address,
3272                provider,
3273                _network_transport: ::core::marker::PhantomData,
3274            }
3275        }
3276        /**Deploys this contract using the given `provider` and constructor arguments, if any.
3277
3278        Returns a new instance of the contract, if the deployment was successful.
3279
3280        For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
3281        #[inline]
3282        pub async fn deploy(provider: P) -> alloy_contract::Result<PlonkVerifierInstance<T, P, N>> {
3283            let call_builder = Self::deploy_builder(provider);
3284            let contract_address = call_builder.deploy().await?;
3285            Ok(Self::new(contract_address, call_builder.provider))
3286        }
3287        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
3288        and constructor arguments, if any.
3289
3290        This is a simple wrapper around creating a `RawCallBuilder` with the data set to
3291        the bytecode concatenated with the constructor's ABI-encoded arguments.*/
3292        #[inline]
3293        pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder<T, P, N> {
3294            alloy_contract::RawCallBuilder::new_raw_deploy(
3295                provider,
3296                ::core::clone::Clone::clone(&BYTECODE),
3297            )
3298        }
3299        /// Returns a reference to the address.
3300        #[inline]
3301        pub const fn address(&self) -> &alloy_sol_types::private::Address {
3302            &self.address
3303        }
3304        /// Sets the address.
3305        #[inline]
3306        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
3307            self.address = address;
3308        }
3309        /// Sets the address and returns `self`.
3310        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
3311            self.set_address(address);
3312            self
3313        }
3314        /// Returns a reference to the provider.
3315        #[inline]
3316        pub const fn provider(&self) -> &P {
3317            &self.provider
3318        }
3319    }
3320    impl<T, P: ::core::clone::Clone, N> PlonkVerifierInstance<T, &P, N> {
3321        /// Clones the provider and returns a new instance with the cloned provider.
3322        #[inline]
3323        pub fn with_cloned_provider(self) -> PlonkVerifierInstance<T, P, N> {
3324            PlonkVerifierInstance {
3325                address: self.address,
3326                provider: ::core::clone::Clone::clone(&self.provider),
3327                _network_transport: ::core::marker::PhantomData,
3328            }
3329        }
3330    }
3331    /// Function calls.
3332    #[automatically_derived]
3333    impl<
3334            T: alloy_contract::private::Transport + ::core::clone::Clone,
3335            P: alloy_contract::private::Provider<T, N>,
3336            N: alloy_contract::private::Network,
3337        > PlonkVerifierInstance<T, P, N>
3338    {
3339        /// Creates a new call builder using this contract instance's provider and address.
3340        ///
3341        /// Note that the call can be any function call, not just those defined in this
3342        /// contract. Prefer using the other methods for building type-safe contract calls.
3343        pub fn call_builder<C: alloy_sol_types::SolCall>(
3344            &self,
3345            call: &C,
3346        ) -> alloy_contract::SolCallBuilder<T, &P, C, N> {
3347            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
3348        }
3349        ///Creates a new call builder for the [`verify`] function.
3350        pub fn verify(
3351            &self,
3352            verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3353            publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3354            proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3355        ) -> alloy_contract::SolCallBuilder<T, &P, verifyCall, N> {
3356            self.call_builder(&verifyCall {
3357                verifyingKey,
3358                publicInput,
3359                proof,
3360            })
3361        }
3362    }
3363    /// Event filters.
3364    #[automatically_derived]
3365    impl<
3366            T: alloy_contract::private::Transport + ::core::clone::Clone,
3367            P: alloy_contract::private::Provider<T, N>,
3368            N: alloy_contract::private::Network,
3369        > PlonkVerifierInstance<T, P, N>
3370    {
3371        /// Creates a new event filter using this contract instance's provider and address.
3372        ///
3373        /// Note that the type can be any event, not just those defined in this contract.
3374        /// Prefer using the other methods for building type-safe event filters.
3375        pub fn event_filter<E: alloy_sol_types::SolEvent>(
3376            &self,
3377        ) -> alloy_contract::Event<T, &P, E, N> {
3378            alloy_contract::Event::new_sol(&self.provider, &self.address)
3379        }
3380    }
3381}