rust*#rustc 1.54.0 (a178d0322 2021-07-26)stdh-2420485b9e5ef5e1core-5b228734afae15eecompiler_builtinsݘ)-d6c7a399d95d173frustc_std_workspace_core汷딹h-8063eea38dcc5e62allocųǝó-379cc252b6943a79libc޴-544ecdbd6cda3c58unwind-f78aa99d613a55bccfg_ifҺ-53ee54cd7fed2c57 hashbrownڢɍ-491902d6cb3e76dfrustc_std_workspace_alloc۱3-61834e0981b8c367rustc_demangle׿k-b56b9042c12b6535 std_detect˾畮-fb36534c113d2209 addr2line-d05c5c3c56004b7bgimliꏳȐ-42d74d2097528b38objectڏف-6fb405869b015fde miniz_oxideگΦݪ-087191a88bdaa22dadler噍ΛA-9981842c02975178 panic_unwind͕l-785e3cb61c4b1960 proc_macro-48a8f96062ed4274 proc_macro2Ɠጽ-fe09e677fd6d161d unicode_xid߽-56baa69851702f2bn tm?{:std+{P proc_macroB!1dqextُ LI&'*;!2 %4&q$V5,LVx® Zd[E954қ1dr  2!4 &Uam ħY*O ayTokenStreamExtcWΞappendZMUȎդ append_allm'FKIAf-Jappend_separatedt-I<kZyUb|v append_terminated!;3"ItnWUX JQYXBDzappend$B6xUPk4-R豕dRR{!CR+ vy&'PR%M-d6R^@yRSr**1R RMoiR[M mRvRxtf XRa[{s RŪV\HR9eRѕɉRIxҎ+*RXs}RKN}'RӔ͌R  > T('YR!9P?RToTokensjڲ,u to_tokens%Vhuto_token_stream&Ŝ+Quuinto_token_stream#:x9R,+T0y'aovZ uMyT=^y to_tokens@D$3RGɽ94}'aWkdϩ}TRIʎ} to_tokensKkȅ1R-3@E'aTJ~{W to_tokens⇤\vGRL Bv T6= to_tokensv {RoiqdT=_ك to_tokens\fGR&]GoTy\nF% to_tokens{_NRnY to_tokensmKm RX# to_tokens/l R primitive43KR囬 to_tokensNrI_R V5pc! to_tokenst{'TR x4 ؕR to_tokens·,R  i$ to_tokens /QER !p\ to_tokens{Gm]TR _J7% to_tokens[5Rc to_tokensf͊OR:yAzׯ to_tokens+linto_token_streamcs __private0sB",cjp\=QBzw8&d`_Agk0=eI_4 6T%阃 L (< |s y&Հ ŜNy /FL9XtUQCB/7r HasIterator#H((s.~ThereIsNoIteratorInRepetition{% ̣r2%UlY@OutputqmDTg-bitor OP9;33k#{Output''<bitorMc67p1~fb^OutputRԡ©bitorH$SJi ̚{*OutputbitoruuEdextz9x RL寋C'@f_PQay/*MAnGH$?Fo"Q>(]2hX2;f˯ $p~ l>h q V)_ݮZ PGPGD\UVД }O&q$SB fbJ,d!h$-^לMRepIteratorExt6quote_into_iterDK, QT.g kRepToTokensExtEnextasquote_into_iterhRƢTg#5EAf|RepAsIteratorExt5c;F'qHG)ܪItergʟbquote_into_iteri1h>R*-oh'q-8>'a3'T❕̥Iter{pquote_into_iter(-K.#eo'q"faTq'an>TĉIʻ/Iter*k%aTquote_into_iter>ȧ.HD 'q>52TכeDIterT]equote_into_iter2SQ1 'q$jTɋIter D0;quote_into_iter#hKM5\'qJJ"r<Tv,ZJIter= ^quote_into_iterJB͝array_rep_sliceBح o#[Vb'q|/=T7IterDSɏquote_into_iterlMAlp|TK2next'>x1z}|T| VnItemjYPōk"nextWeHuomT}u to_tokenst noF` push_groupbpush_group_spannedp&0parse?:m. parse_spanned?~ʛON push_ident+~aq~push_ident_spannedY+_ push_punct4)mk_ident/ %2[erT^F I'spanby;΄X6tTa9tfmt&w 0)#T6n -fmt9Xl {cl;wTD,&ړјzfmtYB}_ rmTd}D+s6fmt003 WTZ Q,-fmtmi܂[iSso 7+ǬLcuNBhsScO, 0jg#6p'ƯN   :YjEspannedؕ42il-Tp>>Rw7>vd޲I} iiyeJ#厬aTPj!y ƃ8~ Spannedj:__spanMiE]AN"__span$'=|1]4P=LT/vXr__span29 m join_spansjZ6"E.fo28IX;u`p+z quoteMg-qɉ quote_spannedH\cpounded_var_namesMK*xΒpounded_var_names_with_contextj5y{pounded_var_with_context7SbHquote_bind_into_iterJgoquote_bind_next_or_breakj88!*kquote_each_token|MӾ@quote_each_token_spanned^)T quote_tokens_with_context@H!quote_tokens_with_context_spannedܬ5nckquote_token_with_contextl8 quote_token_with_context_spannedLlߠRͦ quote_token>lquote_token_spanned;{~1)̫2 fmt^1]fmt5Rq~=10; Tfmt3{1DOhffmt&!I1fmtg^ZY1 " fB8fmt)rN 1 6fmto6a3 1  wu*?fmt7އ1 |S'ffmtp^sױ.{1 rGpfmtaw)>AR , to_tokens|?RFi Ĭ5 to_tokensv_`.Rsi+B to_tokensds }R+^Oqo to_tokens0ܽ9R7sK0f to_tokensTRUOTx to_tokens)ؽRlZ2 to_tokensBH}RSx2P to_tokensVEsR+l8 to_tokensItero'*quote_into_iter5{=,nB Lد?'q ރRkTe* u Iterquote_into_iterz_Q'qyҞߵT|kFB +gIter$0ד1quote_into_iterխhEO 'q7 Va܎To"| IterBїquote_into_iterRfYV!'qԴYd ƬTg >I O" r\Iter0%quote_into_iterlq]WřRaWN'q 5T#g? 2QIDQIter5@Pvequote_into_iterxE%9'q܅CrTJRv ,+;Iter%pquote_into_iter|B+?O?2t'qB_GT\jrZ/ sDIterHǣQquote_into_iter+=Ԙg Z'q<{TZi~* j@(Iter)9a)quote_into_iterm B,'q'82TQ h G 10pIter "Jquote_into_iterHX{%`Y'H'q L9T =/  ogy8IterRf#quote_into_itercWg^.>RD7h@'q3ITDS,) j6ҶIter $;]quote_into_iter-*O~?7r'q6"T-CYU DF5 #Iter`xW9Qquote_into_iterGxzBv(p#'q1HħfTExXܠ :=ۓ{8IterE?Bpvquote_into_iter4A#s( 4'q<lTϩh o&A=%Iter1 Wquote_into_iter5\w7'qa8FWT 5(΢  Iteri Equote_into_itere?v *Mb2'qݞv!^3ATQ7: nl]IterhXequote_into_iter#k쉢D!$'qncTo9UE&A Uҗ>xIter~nIquote_into_iterՃ1ͺ9"csS'qW=Oc/?T{ ֤(fhwIter6@Rϓquote_into_iterN.,ay#ǐTt9'q]T]K ::e؇Iter-]}Fquote_into_iter^%L$\m 'q[۫^T.+ ; GIterFIAquote_into_iter'Ĕ/|%'Hq'q×T l4:T} FJI:IterǪ,;quote_into_iter= lq&UYJ۽'q;uT^Ty0 b^MЇIter Ʃquote_into_iterČ' σ_[Ũ'qcT"Kj?E 8k0/}yIter=<quote_into_iterM G#|(.7DV''q6?lTG711M ?XIIter(:quote_into_iterάX˜q RepInterpIKېȾH;pϟ(T~ɲn0jE D]hT2Su !5;#TpD8clone<push_add۔]#oT'push_add_spannedȸT push_add_eq\push_add_eq_spannedva6<push_andf$#push_and_spanned`EK push_and_and0U#Mzpush_and_and_spanned *:eӇ! push_and_eq|Ctppush_and_eq_spannednPRpush_at\^{5;push_at_spannedQ?s*` push_bangFcjpush_bang_spannedf%ЇΨ push_caret4bpush_caret_spanned଩=ʷ push_caret_eq6A}##push_caret_eq_spannedoul; push_colon׋Wpush_colon_spannedn0 push_colon2sy$push_colon2_spanned`rw+A  push_comma[9push_comma_spanned,Q<push_divCL໦push_div_spanned2 push_div_eq9Xpush_div_eq_spanned^Jpush_dot0eEI$push_dot_spanned];i5 push_dot2|Ycpush_dot2_spannedA'N push_dot3Ybz~push_dot3_spanned(3^Vpush_dot_dot_eqDo push_dot_dot_eq_spanned9push_eq\Q push_eq_spanned!Zk~ push_eq_eqe6ppush_eq_eq_spanned^|F9push_geyxWGpush_ge_spanned3ukpush_gtN6spush_gt_spannedcZnpush_leoVpush_le_spanned@Ppush_lt/s^push_lt_spannedגKj9O push_mul_eq, @push_mul_eq_spannedV\뜐Tpush_ne>-&push_ne_spannedil`Npush_orpQ(push_or_spannedc, push_or_eqYդpush_or_eq_spannedM= push_or_or緈®push_or_or_spanned62 push_poundfpush_pound_spanned޳dĘ push_questionj85Opush_question_spanned^ push_rarrowCs1^push_rarrow_spannedw push_larrow>push_larrow_spanned.#1?Cpush_remMpush_rem_spannedtn^ push_rem_eq=C2E,fpush_rem_eq_spannedŸ push_fat_arrow1xpush_fat_arrow_spannedVOc push_semiPF*$push_semi_spannedR  }push_shl~push_shl_spannedhhk"W push_shl_eq[n˚push_shl_eq_spannedB%Spush_shrojpush_shr_spanned?+L push_shr_eq%V)push_shr_eq_spannedIW6 push_starcpush_star_spanned暒push_subSpHpush_sub_spannedx push_sub_eqt.]push_sub_eq_spanned%-V{IdentFragmentAdapterC[l.<#TS>6zz0`y!ҍ>T)bDiP.9VT@?cloneMl$B'_9$mF'_&a#M'_, ڂ-y}"874M8FJB9EEE E E,u'?|3      Tʊ9ʊ9ʊ9ʊ9ʊ9ʊ9 [![github]](https://github.com/dtolnay/quote) [![crates-io]](https://crates.io/crates/quote) [![docs-rs]](https://docs.rs/quote)g [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=githubjk [crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColor=555555&logo=rustn [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K 
  K This crate provides the [`quote!`] macro for turning Rust syntax tree data N' structures into tokens of source code. *  [`quote!`]: macro.quote.html  G Procedural macros in Rust receive a stream of tokens as input, execute JM arbitrary Rust code to determine how to manipulate those tokens, and produce PM a stream of tokens to hand back to the compiler to compile into the caller'sPJ crate. Quasi-quoting is a solution to one piece of that — producingM" tokens to return to the compiler.%K The idea of quasi-quoting is that we write *code* that we treat as *data*.NI Within the `quote!` macro, we can write what looks like code to our textLG editor or IDE. We get all the benefits of the editor's brace matching,JL syntax highlighting, indentation, and maybe autocompletion. But rather thanOM compiling that as code into the current crate, we can treat it as data, passPL it around, mutate it, and eventually hand it back to the compiler as tokensO* to compile into the macro caller's crate.-C This crate is motivated by the procedural macro use case, but is aFM general-purpose Rust quasi-quoting library and is not specific to proceduralP macros.  ```toml  [dependencies] quote = "1.0" ```
 # Example L The following quasi-quoted block of code is something you might find in [a]OL procedural macro having to do with data structure serialization. The `#var`OK syntax performs interpolation of runtime variables into the quoted tokens.NJ Check out the documentation of the [`quote!`] macro for more detail aboutMI the syntax. See also the [`quote_spanned!`] macro which is important forL) implementing hygienic procedural macros., [a]: https://serde.rs/- [`quote_spanned!`]: macro.quote_spanned.html0 ``` # use quote::quote; # # let generics = ""; # let where_clause = ""; # let field_ty = ""; # let item_ty = ""; # let path = ""; # let value = ""; # let tokens = quote! {3 struct SerializeWith #generics #where_clause {6 value: &'a #field_ty,!6 phantom: core::marker::PhantomData<#item_ty>,9 } P impl #generics serde::Serialize for SerializeWith #generics #where_clause {SI fn serialize(&self, serializer: S) -> ResultL where" S: serde::Serializer,% { * #path(self.value, serializer)- }  }  SerializeWith { value: #value,8 phantom: core::marker::PhantomData::<#item_ty>,; }  };  ```  doc  ! html_root_url https://docs.rs/quote/1.0.9  6!allow!!" clippy!! doc_markdown! ! clippy!! missing_errors_doc!! clippy!! missing_panics_doc!! clippy"" module_name_repetitions"!prelude_import macro_use #"cfg" "# all""# not""" all""" target_arch" "wasm32"" target_os" "unknown" " feature"" proc-macro" "f#*  ײ ? TokenStream extension trait with methods for appending tokens.BM This trait is sealed and cannot be implemented outside of the `quote` crate.PSelf,SelfG' For use by `ToTokens` implementations.*4 Appends the token specified to this list of tokens.7UU b' For use by `ToTokens` implementations.Ǵ* ```0 # use quote::{quote, TokenStreamExt, ToTokens};3 # use proc_macro2::TokenStream;µ# # struct X;  impl ToTokens for X {4 fn to_tokens(&self, tokens: &mut TokenStream) {7+ tokens.append_all(&[true, false]);. }  } let tokens = quote!(#X);. assert_eq!(tokens.to_string(), "true false");ܷ1 ```II7ظ u7 ' For use by `ToTokens` implementations.*F Appends all of the items in the iterator `I`, separated by the tokensI `U`.IUU u  ' For use by `ToTokens` implementations.*ԻA Appends all tokens in the iterator `I`, appending `U` after eachܻD; element, including after the last element of the iterator.>IU Խ  GUU׾ bI!!I7 u7 I#U$$# u  I&U'&'   n(Self,,(# , Formatting macro for constructing `Ident`s./
 # Syntax L Syntax is copied from the [`format!`] macro, supporting both positional andO named arguments.K Only a limited set of formatting traits are supported. The current mappingN of format types to traits is:! * `{}` ⇒ [`IdentFragment`] * * `{:o}` ⇒ [`Octal`](`std::fmt::Octal`)-0 * `{:x}` ⇒ [`LowerHex`](`std::fmt::LowerHex`)30 * `{:X}` ⇒ [`UpperHex`](`std::fmt::UpperHex`)3, * `{:b}` ⇒ [`Binary`](`std::fmt::Binary`)/' See [`std::fmt`] for more information.*
 # IdentFragmentL Unlike `format!`, this macro uses the [`IdentFragment`] formatting trait byO? default. This trait is like `Display`, with a few differences:BJ * `IdentFragment` is only implemented for a limited set of types, such asM" unsigned integers and strings.%J * [`Ident`] arguments will have their `r#` prefixes stripped, if present.M [`Ident`]: `proc_macro2::Ident`#
 # Hygiene L The [`Span`] of the first `Ident` argument is used as the span of the finalOH identifier, falling back to [`Span::call_site`] when no identifiers areK provided.  ``` # use quote::format_ident;& # let ident = format_ident!("Ident");)M // If `ident` is an Ident, the span of `my_ident` will be inherited from it.P9 let my_ident = format_ident!("My{}{}", ident, "IsCool");<' assert_eq!(my_ident, "MyIdentIsCool");* ```F Alternatively, the span can be overridden by passing the `span` namedI argument.  ``` # use quote::format_ident;3 # const IGNORE_TOKENS: &'static str = stringify! {6 let my_span = /* ... */; # };0 # let my_span = proc_macro2::Span::call_site();3* format_ident!("MyIdent", span = my_span);- ``` [`Span`]: `proc_macro2::Span`!4 [`Span::call_site`]: `proc_macro2::Span::call_site`7


 # Panics H This method will panic if the resulting formatted string is not a validK identifier.
 # Examples' Composing raw and non-raw identifiers:* ``` # use quote::format_ident;/ let my_ident = format_ident!("My{}", "Ident");2! assert_eq!(my_ident, "MyIdent");$" let raw = format_ident!("r#Raw");% assert_eq!(raw, "r#Raw");; let my_ident_raw = format_ident!("{}Is{}", my_ident, raw);>* assert_eq!(my_ident_raw, "MyIdentIsRaw");- ``` Integer formatting options: ``` # use quote::format_ident; let num: u32 = 10;+ let decimal = format_ident!("Id_{}", num);. assert_eq!(decimal, "Id_10");!+ let octal = format_ident!("Id_{:o}", num);. assert_eq!(octal, "Id_12");, let binary = format_ident!("Id_{:b}", num);/ assert_eq!(binary, "Id_1010");"/ let lower_hex = format_ident!("Id_{:x}", num);2 assert_eq!(lower_hex, "Id_a");"/ let upper_hex = format_ident!("Id_{:X}", num);2 assert_eq!(upper_hex, "Id_A");" ```  macro_export    macro_export doc hidden#1111 16 Specialized formatting trait used by `format_ident!`.9K [`Ident`] arguments formatted using this trait will have their `r#` prefixN stripped, if present., See [`format_ident!`] for more information./Self??5- Format this value as an identifier fragment.0??+ Span associated with this `IdentFragment`..: If non-`None`, may be inherited by formatted identifiers.=??1'_TCC?T BB4BB1'_TGG“ FF4FF1JJ4JJ1'_TNN“ Ǔ MM4MM#RRRRNRRRRRR R R= Types that can be interpolated inside a `quote!` invocation.@ [`quote!`]: macro.quote.html Selfuu.) Write `self` to the given `TokenStream`.,F The token append methods provided by the [`TokenStreamExt`] extensionI1 trait may be useful for implementing `ToTokens`.4. [`TokenStreamExt`]: trait.TokenStreamExt.html1 # Example A Example implementation for a struct representing Rust paths likeD `std::cmp::PartialEq`:Ӂ ```A use proc_macro2::{TokenTree, Spacing, Span, Punct, TokenStream};D' use quote::{TokenStreamExt, ToTokens};ς* pub struct Path { pub global: bool,$ pub segments: Vec,' } impl ToTokens for Path {4 fn to_tokens(&self, tokens: &mut TokenStream) {7? for (i, segment) in self.segments.iter().enumerate() {لB& if i > 0 || self.global {)% // Double colon `::`΅(@ tokens.append(Punct::new(':', Spacing::Joint));C@ tokens.append(Punct::new(':', Spacing::Alone));ÆC }' segment.to_tokens(tokens);* }Ї  }  } # # pub struct PathSegment; #" # impl ToTokens for PathSegment {%6 # fn to_tokens(&self, tokens: &mut TokenStream) {ڈ9 # unimplemented!() # }  # }ˉ ```׉uu(5 Convert `self` directly into a `TokenStream` object.8ԊG This method is implicitly implemented using `to_tokens`, and acts as a܊J: convenience method for consumers of the `ToTokens` trait.=uuڎH5 Convert `self` directly into a `TokenStream` object.8G This method is implicitly implemented using `to_tokens`, and acts as aɍJ: convenience method for consumers of the `ToTokens` trait.=uuяR'azT{z{uǓ֏ ڏ-yyR'a~T~© -}}R'aT© ƒ-ӒRTu ؓ-RTƔ -ƕRT˕Ε ˕-R-R-R-R-zRӠ-zRϡ-ܡzRˢ-آ|Rɣ-֣xRɤ*֤Rť*ҥ)$#doc# ## hidden##$path$ $ runtime.rs$ $5  ǧ)) ,T B ݬ0 ۭ0K Extension traits used by the implementation of `quote!`. These are definedʮNK in separate traits, rather than as a single trait due to ambiguity issues.NJ These traits expose a `quote_into_iter` method which should allow callingMK whichever impl happens to be applicable. Calling that method repeatedly onN) the returned value should be idempotent.,ȱ̱V 0ֲ2E Extension trait providing the `quote_into_iter` method on iterators.HSelf9+)T9 ; Extension trait providing the `quote_into_iter` method for>C non-iterable types. These types interpolate the same value in eachF iteration of the repetition. SelfθA Pretend to be an iterator for the purposes of `quote_into_iter`.D< This allows repeated calls to `quote_into_iter` to continueշ?% correctly returning DoesNotHaveIter.(ָ52T F Extension trait providing the `quote_into_iter` method for types thatúI" can be referenced as an iterator.%Self'qֻ 6ļ'q'aTT'qԼɼͼ Ѽ 5þ'q'aT'qӾȾ̾ о 5'qTǓǓ'q  5'qTǓ'q  5'qTǓ'q  #5'qTǓ'q  5T T  (T - U | / C3 4 H 6ˀwT? "ƋT Č4ˌT EÍ 4T E 4T E 4ܑT E 4$#$-$#%%doc%%% hidden%%% Г3SelfLӔ~T ؔ ӕ*ۚw The whole point.%%E Performs variable interpolation against the input and produces it as%H [`proc_macro2::TokenStream`].&!&F Note: for returning tokens to the compiler in a procedural macro, use&IC `.into()` on the result to convert to [`proc_macro::TokenStream`].'F'U [`TokenStream`]: https://docs.rs/proc-macro2/1.0/proc_macro2/struct.TokenStream.html'X(
(( # Interpolation((A Variable interpolation is done with `#var` (similar to `$var` in(DK `macro_rules!` macros). This grabs the `var` variable that is currently in)NE scope and inserts it in that location in the output tokens. Any type*HL implementing the [`ToTokens`] trait can be interpolated. This includes most*OM Rust primitive types as well as most of the syntax tree types from the [Syn]+P crate.+ +" [`ToTokens`]: trait.ToTokens.html,%& [Syn]: https://github.com/dtolnay/syn,),B Repetition is done using `#(...)*` or `#(...),*` again similar to,EC `macro_rules!`. This iterates through the elements of any variable-FM interpolated within the repetition and inserts a copy of the repetition body-PG for each one. The variables in an interpolation may be a `Vec`, slice,.J `BTreeSet`, or any `Iterator`.."/ - `#(#var)*` — no separators/"K - `#(#var),*` — the character before the asterisk is used as a separator/NC - `#( struct #var; )*` — the repetition can contain other tokens0FE - `#( #k => println!("{}", #v), )*` — even multiple interpolations0H1
11 # Hygiene1 1J Any interpolated tokens preserve the `Span` information provided by their1ME `ToTokens` implementation. Tokens that originate within the `quote!`2H3 invocation are spanned with [`Span::call_site()`].263e [`Span::call_site()`]: https://docs.rs/proc-macro2/1.0/proc_macro2/struct.Span.html#method.call_site3h4G A different span can be provided through the [`quote_spanned!`] macro.4J4- [`quote_spanned!`]: macro.quote_spanned.html405
55 # Return type55I The macro evaluates to an expression of type `proc_macro2::TokenStream`.5LA Meanwhile Rust procedural macros are expected to return the type5D `proc_macro::TokenStream`.66M The difference between the two types is that `proc_macro` types are entirely6PI specific to procedural macros and cannot ever exist in code outside of a7LI procedural macro, while `proc_macro2` types may exist anywhere including8LI tests and non-macro code like main.rs and build.rs. This is why even the8LJ procedural macro ecosystem is largely built around `proc_macro2`, because9MI that ensures the libraries are unit testable and accessible in non-macro9L contexts.: :M There is a [`From`]-conversion in both directions so returning the output of:PG `quote!` from a procedural macro usually looks like `tokens.into()` or;J) `proc_macro::TokenStream::from(tokens)`.;,<@ [`From`]: https://doc.rust-lang.org/std/convert/trait.From.html<< # Examples<< ### Procedural macro==L The structure of a basic procedural macro is as follows. Refer to the [Syn]=OL crate for further useful guidance on using `quote!` as part of a procedural=O macro.> >& [Syn]: https://github.com/dtolnay/syn>)> ```> # #[cfg(any())]? extern crate proc_macro;? # extern crate proc_macro2;?? # #[cfg(any())]? use proc_macro::TokenStream;?  # use proc_macro2::TokenStream;@# use quote::quote;@@3 # const IGNORE_TOKENS: &'static str = stringify! {@6 #[proc_macro_derive(HeapSize)]A" # };A= pub fn derive_heap_size(input: TokenStream) -> TokenStream {A@I // Parse the input and figure out what implementation to generate...AL7 # const IGNORE_TOKENS: &'static str = stringify! {B: let name = /* ... */;B let expr = /* ... */;C # };C  #C  # let name = 0;C # let expr = 0;CC let expanded = quote! {C // The generated impl.D", impl heapsize::HeapSize for #name {D/7 fn heap_size_of_children(&self) -> usize {D: #exprE }E }E  };E E4 // Hand the output tokens back to the compiler.E7 TokenStream::from(expanded)F# }F ```FF


FF ### Combining quoted fragmentsF"GK Usually you don't end up constructing an entire final `TokenStream` in oneGNL piece. Different parts may come from different helper functions. The tokensGOC produced by `quote!` themselves implement `ToTokens` and so can beHFI interpolated into later `quote!` invocations to build up a final result.ILI ```I # use quote::quote;I #I$ let type_definition = quote! {...};I' let methods = quote! {...};JJ let tokens = quote! {J #type_definitionJ #methodsJ };K ```KK


KK ### Constructing identifiersK KK Suppose we have an identifier `ident` which came from somewhere in a macroKNG input and we need to modify it in some way for the macro output. Let'sLJ7 consider prepending the identifier with an underscore.L:ML Simply interpolating the identifier next to an underscore will not have theMOG behavior of concatenating them. The underscore and the identifier willMJ@ continue to be two separate tokens as if you had written `_ x`.NCO ```O( # use proc_macro2::{self as syn, Span};O+ # use quote::quote;O #O7 # let ident = syn::Ident::new("i", Span::call_site());O: #P // incorrectP quote! {P  let mut _#ident = 0;P }P # ;P ```PPK The solution is to build a new identifier token with the correct value. AsPNC this is such a common case, the [`format_ident!`] macro provides aQF+ convenient utility for doing so correctly.R.R ```R" # use proc_macro2::{Ident, Span};R%$ # use quote::{format_ident, quote};R' #S2 # let ident = Ident::new("i", Span::call_site());S5 #S+ let varname = format_ident!("_{}", ident);S. quote! {T  let mut #varname = 0;T }T # ;T ```TTG Alternatively, the APIs provided by Syn and proc-macro2 can be used toTJL directly build the identifier. This is roughly equivalent to the above, butUO0 will not handle `ident` being a raw identifier.U3V ```V( # use proc_macro2::{self as syn, Span};V+ # use quote::quote;V #V7 # let ident = syn::Ident::new("i", Span::call_site());V: #W* let concatenated = format!("_{}", ident);W-< let varname = syn::Ident::new(&concatenated, ident.span());W? quote! {X  let mut #varname = 0;X }X # ;X ```XX


XX ### Making method callsXYL Let's say our macro requires some type specified in the macro input to haveYOB a constructor called `new`. We have the type in a variable calledYEE `field_type` of type `syn::Type` and want to invoke the constructor.ZHZ ```Z # use quote::quote;[ #[ # let field_type = quote!(...);[# #[ // incorrect[ quote! {[ $ let value = #field_type::new();[' }\ # ;\ ```\\J This works only sometimes. If `field_type` is `String`, the expanded code\MI contains `String::new()` which is fine. But if `field_type` is something\LM like `Vec` then the expanded code is `Vec::new()` which is invalid]PJ syntax. Ordinarily in handwritten Rust we would write `Vec::::new()`^M7 but for macros often the following is more convenient.^:_ ```_ # use quote::quote;_ #_ # let field_type = quote!(...);_# #_ quote! {_ & let value = <#field_type>::new();`) }` # ;` `````= This expands to `>::new()` which behaves correctly.`@a4 A similar pattern is appropriate for trait methods.a7a ```a # use quote::quote;a #a # let field_type = quote!(...);a# #b quote! {b D let value = <#field_type as core::default::Default>::default();bG }b # ;b ```bc


cc. ### Interpolating text inside of doc commentsc1cG Neither doc comments nor string literals get interpolation behavior incJ quote:d d ```compile_faild quote! {d # /// try to interpolate: #identd& ///d  /// ...e }e ```ee ```compile_faile quote! {e * #[doc = "try to interpolate: #ident"]e- }e ```ef5 Macro calls in a doc attribute are not valid syntax:f8f ```compile_failf quote! {f A #[doc = concat!("try to interpolate: ", stringify!(#ident))]fD }g ```ggH Instead the best way to build doc comments that involve variables is bygK4 formatting the doc string literal outside of quote.h7h ```rusth " # use proc_macro2::{Ident, Span};h% # use quote::quote;h #i$ # const IGNORE: &str = stringify! {i' let msg = format!(...);i # };i #i4 # let ident = Ident::new("var", Span::call_site());i76 # let msg = format!("try to interpolate: {}", ident);j9 quote! {j  #[doc = #msg]j ///j  /// ...k }k # ;k ```kk


kk! ### Indexing into a tuple structk$kK When interpolating indices of a tuple or tuple struct, we need them not tokNM appears suffixed as integer literals by interpolating them as [`syn::Index`]lP instead.m m> [`syn::Index`]: https://docs.rs/syn/1.0/syn/struct.Index.htmlmAm ```compile_failm# let i = 0usize..self.fields.len();m&nJ // expands to 0 + self.0usize.heap_size() + self.1usize.heap_size() + ...nM // which is not valid syntaxn  quote! {o " 0 #( + self.#i.heap_size() )*o% }o ```oo ```o) # use proc_macro2::{Ident, TokenStream};o, # use quote::quote;p #p # mod syn {p/ # use proc_macro2::{Literal, TokenStream};p2- # use quote::{ToTokens, TokenStreamExt};p0 #q # pub struct Index(usize);q" #q# # impl From for Index {q&& # fn from(i: usize) -> Self {q) # Index(i)r # }r # }r  #r # impl ToTokens for Index {r#: # fn to_tokens(&self, tokens: &mut TokenStream) {r=@ # tokens.append(Literal::usize_unsuffixed(self.0));sC # }t # }t  # }t #t # struct Struct {t # fields: Vec,t # }t #t # impl Struct {t) # fn example(&self) -> TokenStream {u,6 let i = (0..self.fields.len()).map(syn::Index::from);u9u@ // expands to 0 + self.0.heap_size() + self.1.heap_size() + ...uC quote! {v " 0 #( + self.#i.heap_size() )*v% }v # }v  # }v ```vw  macro_exportw wL Same as `quote!`, but applies a given span to all tokens originating withinyO the macro invocation.yy
yy # Syntaxy zM A span expression of type [`Span`], followed by `=>`, followed by the tokenszPI to quote. The span expression should be brief — use a variable forzLI anything more than a few characters. There should be no space before the{L `=>` token.{|G [`Span`]: https://docs.rs/proc-macro2/1.0/proc_macro2/struct.Span.html|J| ```| # use proc_macro2::Span;| # use quote::quote_spanned;} #}3 # const IGNORE_TOKENS: &'static str = stringify! {}6 let span = /* ... */;} # };} # let span = Span::call_site();~# # let init = 0;~~! // On one line, use parentheses.~$D let tokens = quote_spanned!(span=> Box::into_raw(Box::new(#init)));~G@ // On multiple lines, place the span at the top and use braces.C$ let tokens = quote_spanned! {span=>'# Box::into_raw(Box::new(#init))& }; ```ȀЀJ The lack of space before the `=>` should look jarring to Rust programmersԀMB and this is intentional. The formatting is designed to be visiblyEJ off-balance and draw the eye a particular way, due to the span expressionMI being evaluated in the context of the procedural macro and the remainingL. tokens being evaluated in the generated code.1
ƒ # Hygieneƃ ԃJ Any interpolated tokens preserve the `Span` information provided by their؃MM `ToTokens` implementation. Tokens that originate within the `quote_spanned!`P5 invocation are spanned with the given span argument.8
 # Example υK The following procedural macro code uses `quote_spanned!` to assert that aӅNM particular Rust type implements the [`Sync`] trait so that references can beP safely shared between threads."? [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.htmlB݇ ```8 # use quote::{quote_spanned, TokenStreamExt, ToTokens};;( # use proc_macro2::{Span, TokenStream};+ #ш # struct Type;׈ # # impl Type { # fn span(&self) -> Span {" # Span::call_site() # }ʼn  # }щ #ى # impl ToTokens for Type {߉8 # fn to_tokens(&self, _tokens: &mut TokenStream) {}; # } #Š # let ty = Type;Ȋ% # let call_site = Span::call_site();݊( # let ty_span = ty.span();, let assert_sync = quote_spanned! {ty_span=>/( struct _AssertSync where #ty: Sync;ً+ }; ```K If the assertion fails, the user will see an error like the following. TheN6 input span of their type is highlighted in the error.9 ```text N error[E0277]: the trait bound `*const (): std::marker::Sync` is not satisfiedQ --> src/main.rs:10:21 |* 10 | static ref PTR: *const () = &();-W | ^^^^^^^^^ `*const ()` cannot be shared between threads safely֎Z ```L In this example it is important for the where-clause to be spanned with theOL line/column information of the user's input type so that error messages areO& placed appropriately by the compiler.ݐ)  macro_export   macro_export doc hiddenޗ  macro_exportޗ ܗdoc hiddenљ  macro_exportљ ϙdoc hiddenߙԞ  macro_export ǞdocǞʞў hidden˞Ş  macro_export doc hiddenڢ  macro_exportڢ آdoc hidden  macro_export doc hiddenߩ©  macro_export© ҩdocҩթܩ hidden֩Щ  macro_export doc hidden  macro_export doc hidden  macro_export doc hidden%  macro_export doc hidden0  macro_export doc hidden14141414141414141414̙R-̙R-̙R-̙R-̙R-̙R-̙R-̙R-̙R-̙R-̙R-̙R-̙R-̙R-'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5'qTǓ'q  5T automatically_derived#allow# unused_qualifications6T 6automatically_derived#allow# unused_qualifications7T 7inline#7 &  5  &  5  &   5   &   5   &   5   &  5  &  5  & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 & 5 &  5  !&! !5! "& " "5 " #&!# #5!# $&"$ $5"$ %&#% %5#% &&$& &5$& '&%' '5%' (&&( (5&( )&') )5') *&(* *5(* +&)+ +5)+ ,&*, ,5*, -&+- -5+- .&,. .5,. /&-/ /5-/ 0&.0 05.0 1&/1 15/1 2&02 2502 3&13 3513 4&24 4524ʊ94T ʊ94 44::automatically_derived:=::allow:=:: unused_qualifications::;T: ;;Š;Šautomatically_derived;Š=;Š;Šallow;Š=;Š;Š unused_qualifications;Š;Š<TŠ;Š Š<;Š;Šinline;Š=;Š<;Š proc_macro# # format_ident /format_ident_impl0 TokenStreamExt$$ IdentFragment$ ?$$ToTokens%u%quoteww quote_spanned pounded_var_namespounded_var_names_with_contextpounded_var_with_contextquote_bind_into_iterԞquote_bind_next_or_breakquote_each_tokenquote_each_token_spannedquote_tokens_with_contextߩ!quote_tokens_with_context_spanned!quote_token_with_context quote_token_with_context_spanned  quote_token %quote_token_spanned0.1R#ToTokensuiter#  TokenStream   TokenTree  o (selftoken  selfiter selfiteropƺ selfiterterm  "%selftoken  selfiterĿ selfiterop "selfiterterm % TokenStream (),-,##Ident1Span1Cow1fmt1_2369 tokensspans  tokenss tokensspans idǀspanр  selfNj    Eself̌fҌnj ֽ Eselff ֽ Eselffŏ ֽ Eselff ֽ Eselff ֽ%ToTokensuSpan TokenStream  Uړself  ̽self    self   ֕ tokens  ?selff ֽ?selff ֽ?selff ֽ?selff ֽ?selff  ֽ?selff  ֽ?selff  ֽ?selff  ֽ?selff  ֽ?selff  ֽuselftokens  uselftokens  uselftokens  uselftokens  uselftokens  uselftokens  uselftokens uselftokens uselftokens uselftokens uselftokens uselftokens uselftokens  uselftokens   0ǓЈ'qK'qǓself  'qǓ 'qЈЈ'q 1Ǔ'qK'qǓself  'qǓ 'q'q 2Ǔ'qK'qǓself  'qǓ 'q'q 3Ǔ'qK'qǓself  'qǓ 'q'q 4Ǔ܍'qK'qǓself  'qǓ 'q܍܍'q 5Ǔ'qK'qǓself  'qǓ 'q'q 6Ǔ'qK'qǓself  'qǓ 'q'q 7Ǔő'qK'qǓself  'qǓ 'qőő'q 8Ǔ'qK'qǓself  'qǓ 'q'q 9Ǔ 'qK'qǓself  'qǓ 'q'q 10Ǔ 'qK'qǓself  'qǓ 'q'q 11Ǔ Ӗ'qK'qǓself  'qǓ 'qӖӖ'q 12Ǔ 'qK'qǓself  'qǓ 'q'q 13Ǔ 'qK'qǓself  'qǓ 'q'q 14Ǔ'qK'qǓself  'qǓ 'q'q 15Ǔ'qK'qǓself  'qǓ 'q'q 16Ǔ'qK'qǓself  'qǓ 'q'q 17Ǔ'qK'qǓself  'qǓ 'q'q 18Ǔϟ'qK'qǓself  'qǓ 'qϟϟ'q 19Ǔ'qK'qǓself  'qǓ 'q'q 20Ǔ'qK'qǓself  'qǓ 'q'q 21Ǔ'qK'qǓself  'qǓ 'q'q 22Ǔߤ'qK'qǓself  'qǓ 'qߤߤ'q 23Ǔ'qK'qǓself  'qǓ 'q'q 24Ǔ'qK'qǓself  'qǓ 'q'q 25Ǔ˨'qK'qǓself  'qǓ 'q˨˨'q 26Ǔ'qK'qǓself  'qǓ 'q'q 27Ǔ'qK'qǓself  'qǓ 'q'q 28Ǔ'qK'qǓself  'qǓ 'q'q 29Ǔۭ'qK'qǓself  'qǓ 'qۭۭ'q 30Ǔ'qK'qǓself  'qǓ 'q'q 31Ǔ'qK'qǓself  'qǓ 'q'q 32Ǔ DZ'qK'qǓself  'qǓ 'qDZDZ'q     self  tokens   tokens span   tokens   tokens span  tokens   tokens span   tokens   tokens span   tokens   tokens span  tokens  tokensspan  tokens  tokensspan  tokens  tokensspan  tokens  tokensspan  tokens  tokensspan  tokens  tokensspan  tokens  tokensspan tokens  tokensspan  tokens  tokensspan tokens  tokensspan  tokens  tokensspan  tokens  tokensspan tokens  tokensspan tokens  tokensspan  tokens  tokensspan tokens  tokensspan tokens  tokensspan tokens  tokensspan tokens   tokens span   tokens!  tokens!span! tokens"  tokens"span" tokens#  tokens#span#  tokens$  tokens$span$  tokens%  tokens%span%  tokens&  tokens&span&  tokens'  tokens'span'  tokens(  tokens(span(  tokens)  tokens)span) tokens*  tokens*span*  tokens+  tokens+span+ tokens,  tokens,span,  tokens-  tokens-span- tokens.  tokens.span.  tokens/  tokens/span/ tokens0  tokens0span0  tokens1  tokens1span1  tokens2  tokens2span2 tokens3  tokens3span3  tokens4  tokens4span4  Պ   selfŠ ;Š   fmt expr crate format_ident_impl   std option Option None fmt fmt expr rest tt  crate format_ident_impl   std option Option None fmt rest   span expr fmt tt  crate __private  mk_ident  format  fmt  span old expr fmt tt  span span expr crate format_ident_impl  old fmt  span span  old expr fmt tt  span span expr rest tt  crate format_ident_impl  std option Option Some crate __private  Span span fmt  rest   span expr fmt tt  name ident arg expr crate format_ident_impl  span fmt  name arg span expr fmt tt  name ident arg expr rest tt  match crate __private  IdentFragmentAdapter  arg arg crate format_ident_impl  span or arg span fmt  name arg rest  span expr fmt tt  arg expr crate format_ident_impl  span fmt  arg  span expr fmt tt  arg expr rest tt  match crate __private  IdentFragmentAdapter  arg arg crate format_ident_impl   span or arg span fmt  arg rest %wxwwwww w crateww __privatew w TokenStreamw w newwwwwwwwwww ttww ttw wwwxwx letx mutx _sxxx cratexx __privatex x TokenStreamx x newxxxxx cratexx quote_each_tokenx xxx _sxxxxx ttx xx _sxxwő span exprÑǑʑˑ letՑ _ّڑܑ crateݑ __private  Span span crate __private  TokenStream  newϒ span expr’Œƒ͒ǒ ttȒʒ tt˒ ΒђԒՒ# letߒ mut _s crate __private  TokenStream  new let _span crate __private  Span spanœϓ crateГՓ quote_each_token_spannedד  _s _span tt  _s  ٗі  call ident  extra– ttÖƖǖϖȖ ttsɖ̖ tt͖ ЖӖ֖֗ crate pounded_var_names_with_context З call  extra  tts Ɨ— tts × ŗח̙  call ident  extra tt˜ŘИƘǘΘȘ b1ɘ˘ tt̘ ϘҘߘӘԘݘ՘ curr֘ژ ttۘ ޘə™ crate pounded_var_with_context   call  extra b1 curr Ùʙʚ call ident  extra tt b1 ttɚƚ innerÚ ttĚ ǚ̚Ϛٚ crateښߚ pounded_var_names  call  extra inner ˛ call ident  extra tt b1 ttʛǛ innerě ttś ț͛Лڛ crateۛ pounded_var_names  call  extra inner ̜ call ident  extra tt b1 tt˜Ȝ innerŜ ttƜ ɜΜќۜ crateܜ pounded_var_names  call  extra inner Ɲ  call ident  extra tt  var identȝ˝՝ crate֝۝ݝ callޝ  extra  var call ident  extra tt b1 tt curr tt has_iter ident var ident allow unused_mut let mut var i var quote_into_iter letŠ has_iterƠϠѠ has_iterҠ ۠ iݠޠբ var ident¡šҢ letϡӡ varԡء matchڡ var nextˢ Some _x crate __private  RepInterp  _x None break̢Ӣ tokens ident tts tt ģ crateţʣ quote_tokens_with_contexṭ   tokens       tts       tts  ֤ ¤ Ĥ Ƥ ȤʤˤФ̤ ttsͤ Ѥ Ӥ դ    tts       tts       tts      ϥ Хѥ֥ҥ ttsӥ ץ ٥ ۥ ݥ ߥ   Ʀ Ǧ tokensȦΦ identϦզ span֦ڦ identۦ tts tt  crate !quote_tokens_with_context_spanned!   tokens spanէ  ç ŧ ǧ ɧ ˧ͧΧӧϧ ttsЧ ԧ      tts       tts       tts    Ψ Ϩ ѨӨԨ٨ը tts֨ ڨ ܨ ި    tts        tts          tokens ident b3 tt  b2 tt Ȫƪ b1ê ttĪ ǪҪߪӪԪݪժ curr֪ڪ tt۪ ު a1 tt  a2 tt  a3 tt  crate quote_token_with_context ҫӫԫ tokensիܫ b3ݫ b2 b1 curr a1 a2 a3 ߬ tokens ident span ident b3 tt  b2 tt  b1 tt ĭ­ curr tt íέ٭ϭЭ׭ѭ a1ҭԭ ttխ حۭܭݭޭ a2߭ tt  a3 tt  crate quote_token_with_context_spanned   tokens®ɮ spanʮϮ b3ЮӮ b2Ԯ׮ b1خۮ currܮ a1 a2 a3  !ɯ0ϯЯ tokensѯׯ identدޯ b3߯ tt b2 tt b1 tt  a1 tt a2 tt a3 ttٰ tokens ident b3 tt b2 tt b1 ttϰ°̰ð innerİɰ ttʰ Ͱ ѰӰ a3԰ְ ttװ۰ް߰* use crate __private  ext  let has_iter crate __private  ThereIsNoIteratorInRepetitionϱٱ crateڱ߱ pounded_var_names  quote_bind_into_iter  has_iter inner  let _ crate __private IJ HasIteratorƲ Ҳ has_iterԲܲ while true crate pounded_var_names öĶ quote_bind_next_or_breakŶ ݶ޶߶ inner  crate quote_each_token  tokens inner ·÷ tokensķʷ ident˷ѷ b3ҷԷ ttշط b2ٷ۷ ttܷ߷ inner tt   a2 tt a3 ttӸ tokens ident b3 tt inner tt   a1¸ ttøƸ a2Ǹɸ ttʸ͸ a3θи ttѸոظٸڸ tokens ident b3 tt b2 tt b1 tt inner tt  sep tt 0 use crate __private ɹ ext˹ι йѹ let۹ mut߹ _i0usize let has_iter crate __private  ThereIsNoIteratorInRepetition crateºǺ pounded_var_namesɺ ںۺ quote_bind_into_iterܺ  has_iter inner  let _ crate __private  HasIterator  has_iterĻ whileλ trueԻٻ crate pounded_var_names  quote_bind_next_or_break  inner  if _i0¼ļּ crate׼ܼ quote_token޼   tokens sep _i 1 crate quote_each_token ½սý tokensĽ˽̽ӽͽ innerν Խֽ tokens ident b3 tt b2 tt inner tt  sep tt  a3 tt tokensƾ identǾ; b3ξо ttѾԾ־ؾپھ inner۾ tt  sep tt  a2 tt a3 tt˿ tokens ident inner tt    a1 tt a2 tt¿ſ a3ƿȿ ttɿͿп crate quote_token   tokens  tokens ident inner tt  sep tt  a1 tt a2 tt a3 tt tokens ident b3 tt b2 tt b1 tt var ident a2 tt a3 tt crate ToTokens to_tokens   var  mut tokens tokens ident b3 tt b2 tt var ident a1 tt a2 tt a3 tt tokens ident b3 tt b2 tt b1 tt curr tt a1 tt a2 tt a3 tt crate quote_token   tokens curr>0! tokens ident span ident b3 tt b2 tt b1 tt  a1 tt a2 tt a3 tt tokens ident span ident b3 tt b2 tt b1 tt inner tt   a3 tt* use crate __private  ext  let has_iter crate __private  ThereIsNoIteratorInRepetition crate pounded_var_names  quote_bind_into_iter  has_iter inner  let _ crate __private  HasIterator  has_iter while true crate pounded_var_names  quote_bind_next_or_break  inner  crate quote_each_token_spanned  tokens span inner  tokens ident span ident b3 tt b2 tt inner tt   a2 tt a3 tt tokens ident span ident b3 tt inner tt   a1 tt a2 tt a3 tt tokens ident span ident b3 tt b2 tt b1 tt inner tt  sep tt 0 use crate __private  ext  let mut _i0usize let has_iter crate __private  ThereIsNoIteratorInRepetition crate pounded_var_names  quote_bind_into_iter  has_iter inner  let _ crate __private  HasIterator  has_iter while true crate pounded_var_names  quote_bind_next_or_break  inner  if _i0 crate quote_token_spanned  tokens span sep _i 1 crate quote_each_token_spanned  tokens span inner  tokens ident span ident b3 tt b2 tt inner tt  sep tt  a3 tt tokens ident span ident b3 tt inner tt  sep tt  a2 tt a3 tt tokens ident span ident inner tt    a1 tt a2 tt a3 tt crate quote_token_spanned  tokens span  tokens ident span ident inner tt  sep tt  a1 tt a2 tt a3 tt! tokens ident span ident b3 tt b2 tt b1 tt var ident a2 tt a3 tt crate ToTokens to_tokens   var  mut tokens tokens ident span ident b3 tt b2 tt var ident a1 tt a2 tt a3 tt! tokens ident span ident b3 tt b2 tt b1 tt curr tt a1 tt a2 tt a3 tt crate quote_token_spanned  tokens span currC  tokens ident inner tt  crate __private  push_group   mut tokens crate __private  Delimiter  Parenthesis  crate quote  inner  tokens ident inner tt  crate __private  push_group   mut tokens crate __private  Delimiter  Bracket crate quote  inner  tokens ident inner tt  crate __private  push_group   mut tokens crate __private  Delimiter  Brace crate quote  inner  tokens ident  crate __private  push_add  mut tokens tokens ident  crate __private  push_add_eq   mut tokens tokens ident  crate __private  push_and  mut tokens tokens ident crate __private  push_and_and   mut tokens tokens ident  crate __private  push_and_eq   mut tokens tokens ident  crate __private  push_at  mut tokens tokens ident  crate __private  push_bang   mut tokens tokens ident  crate __private  push_caret   mut tokens tokens ident  crate __private  push_caret_eq   mut tokens tokens ident crate __private  push_colon   mut tokens tokens ident crate __private  push_colon2   mut tokens tokens ident crate __private  push_comma   mut tokens tokens ident  crate __private  push_div  mut tokens tokens ident  crate __private  push_div_eq   mut tokens tokens ident crate __private  push_dot  mut tokens tokens ident crate __private  push_dot2   mut tokens tokens ident crate __private  push_dot3   mut tokens tokens ident crate __private  push_dot_dot_eq  mut tokens tokens ident crate __private  push_eq  mut tokens tokens ident crate __private  push_eq_eq   mut tokens tokens ident crate __private  push_ge  mut tokens tokens ident crate __private  push_gt  mut tokens tokens ident crate __private  push_le  mut tokens tokens ident crate __private  push_lt  mut tokens tokens ident  crate __private  push_mul_eq   mut tokens tokens ident crate __private  push_ne  mut tokens tokens ident  crate __private  push_or  mut tokens tokens ident  crate __private  push_or_eq   mut tokens tokens ident crate __private  push_or_or   mut tokens tokens ident crate __private  push_pound   mut tokens tokens ident crate __private  push_question   mut tokens tokens ident crate __private  push_rarrow   mut tokens tokens ident crate __private  push_larrow   mut tokens tokens ident  crate __private  push_rem  mut tokens tokens ident  crate __private  push_rem_eq   mut tokens tokens ident crate __private  push_fat_arrow  mut tokens tokens ident crate __private  push_semi   mut tokens tokens ident  crate __private  push_shl  mut tokens tokens ident  crate __private  push_shl_eq   mut tokens tokens ident  crate __private  push_shr  mut tokens tokens ident  crate __private  push_shr_eq   mut tokens tokens ident  crate __private  push_star   mut tokens tokens ident  crate __private  push_sub  mut tokens tokens ident  crate __private  push_sub_eq   mut tokens tokens ident ident ident crate __private  push_ident   mut tokens stringify   ident tokens ident other tt crate __private  parse  mut tokens stringify   otherq Ȁ΀ π tokensЀր ident׀݀ spanހ ident inner tt ۂ crate __private  push_group_spannedԂ  mut tokensȁց spanׁہ crate __private  Delimiter  Parenthesis  crate quote_spanned  ɂ spanǂ inner‚ ȂʂՂ܂  tokens ident span ident inner tt  crate __private  push_group_spannedà у mut҃փ tokens׃݃ span crate __private  Delimiter  Bracket crate quote_spanned  ƄDŽڄȄ spanɄ̈́Єф؄҄ innerӄ لۄ  tokens ident span ident inner tt  crate __private  push_group_spanned…ԅ  mut tokens span crate __private  Delimiter  Brace crateƆ quote_spannedȆ  Նֆ׆ span؆܆߆ inner   tokens ident span ident  crate __private  push_add_spannedч ҇ mutӇׇ tokens؇އ span  tokens ident span ident  crate __private  push_add_eq_spannedƈڈ Lj mutȈ̈ tokens͈ӈՈ spanֈۈ  tokens ident span ident ҉ crate __private  push_and_spannedˉ  mut tokensĉƉ spanlj̉Ӊډ ۉ tokens܉ ident span identȊ crate __private  push_and_and_spanned  mut tokens spanŠɊЊ ъ tokensҊ؊ identيߊ span ident  crate __private  push_and_eq_spanned  mut tokens spanŋ Ƌ tokensNj͋ ident΋ԋ spanՋً identڋ  crate __private  push_at_spanned  mut tokens spanь  tokens identČ spanŌɌ identʌ Ќӌ֌ crate __private  push_bang_spanned  mut tokens spanÍ  tokens ident span ident ōȍҍ crateӍ؍ __privateڍ  push_caret_spanned  mut tokens span  tokens ident span ident Ǝ crateǎ̎ __privateΎ ׎ push_caret_eq_spannedَ  mut tokens span  tokens ident span ident crate __privateď ͏ push_colon_spannedϏ  mut tokens span  tokens ident span ident crate __private  push_colon2_spannedÐ֐ א mutؐܐ tokensݐ span  tokens ident span ident crate __private  push_comma_spannedɑݑ ʑ mutˑϑ tokensБ֑ؑ spanّޑ  tokens ident span ident Ւ crate __private  push_div_spannedΒ  mut tokensǒɒ spanʒϒ֒ݒ ޒ tokensߒ ident span ident ʓ crate __private  push_div_eq_spannedÓ  mut tokens spanē˓ғ ӓ tokensԓړ identۓ span ident crate __private  push_dot_spanned  mut tokens spanÔ Ĕ tokensŔ˔ ident̔Ҕ spanӔה identؔޔ crate __private  push_dot2_spanned  mut tokens spanԕ  tokens identŕ spanƕʕ ident˕ѕٕ֕ crate __private  push_dot3_spanned  mut tokens spanȖ  tokens ident span identŖʖ͖ז crateؖݖ __privateߖ  push_dot_dot_eq_spanned  mut tokens span  tokens ident span ident—ŗϗ crateЗ՗ __privateח  push_eq_spanned  mut tokens span  tokens ident span ident crateƘ __privateȘ ј push_eq_eq_spannedӘ  mut tokens span  tokens ident span ident crate __private ř push_ge_spannedǙ֙ י mutؙܙ tokensݙ span  tokens ident span ident crate __private  push_gt_spannedƚښ ǚ mutȚ̚ tokens͚Ӛ՚ span֚ۚ  tokens ident span identқ crate __private  push_le_spanned˛  mut tokensěƛ spanƯ̈̀ӛڛ ۛ tokensܛ ident span identœ crate __private  push_lt_spanned  mut tokens spanÜʜ ˜ tokens̜Ҝ identӜٜ spanڜޜ identߜ  crate __private  push_mul_eq_spanned  mut tokens spanܝ  tokensǝ identȝΝ spanϝӝ identԝڝޝ crate __private  push_ne_spanned  mut tokens span̞  tokens ident spanĞ identŞ ˞Ξў۞ crateܞ __private  push_or_spanned  mut tokens span  tokens ident span ident Ÿ̟ crate͟ҟ __privateԟ ݟ push_or_eq_spannedߟ  mut tokens span  tokens ident span ident crateƠ __privateȠ Ѡ push_or_or_spannedӠ  mut tokens span  tokens ident span ident crate __private ġ push_pound_spannedơء ١ mutڡޡ tokensߡ span  tokens ident span ident crate __private  push_question_spanned΢ Ϣ mutТԢ tokensբۢݢ spanޢ  tokens ident span identޣ crate __private  push_rarrow_spannedãף ģ mutţɣ tokensʣУң spanӣأߣ  tokens ident span identӤ crate __private  push_larrow_spanned̤  mut tokensŤǤ spanȤͤԤۤ ܤ tokensݤ ident span ident ĥ crate __private  push_rem_spanned  mut tokens spanť̥ ͥ tokensΥԥ identեۥ spanܥ ident  crate __private  push_rem_eq_spanned  mut tokens spanަ ¦ tokensæɦ identʦЦ spanѦզ ident֦ܦ crate __private  push_fat_arrow_spanned  mut tokens spanէ  tokens ident§ȧ spanɧͧ identΧԧקڧ crate __private  push_semi_spanned  mut tokens spanȨ  tokens ident span ident ƨʨͨר crateبݨ __privateߨ  push_shl_spanned  mut tokens span  tokens ident span ident ʩ crate˩Щ __privateҩ ۩ push_shl_eq_spannedݩ  mut tokens span  tokens ident span ident  crateŪ __privateǪ Ъ push_shr_spannedҪ  mut tokens span  tokens ident span ident  crate __private ë push_shr_eq_spannedūث ٫ mutګޫ tokens߫ span  tokens ident span ident  crate __private  push_star_spannedʬެ ˬ mut̬Ь tokensѬ׬٬ spanڬ߬  tokens ident span ident ֭ crate __private  push_sub_spannedϭ  mut tokens­ȭʭ span˭Э׭ޭ ߭ tokens ident span ident ˮ crate __private  push_sub_eq_spannedĮ  mut tokens spanŮ̮Ӯ Ԯ tokensծۮ identܮ span ident ident identݯ crate __private  push_ident_spanned֯  mut tokens span¯ stringifyį  ͯίկϯ identЯׯޯ  tokens ident span ident other tt crate __private  parse_spanned   mut tokensŰǰ spanȰ̰ stringifyΰ  װذٰ߰ otherڰZ_mmmnnnnnnoopp$s-sAtJtStuuuuv vnvwvvvvewnwwwwwwww?ʆֆrR[yЉى*Fbӊ ,8DP\ht)QZcʔ-6?_PYxݖ%CWuٗ =Rp '4ANXj™ڙ 8Nf~Ě_lyǜԜߟ ƠϠ[dmv 5PТ9BKc}̣գޣfox٤4=Utե5Ǧߦ&E~bkԨݨFOnw˩ة%DYwͪE R:" ~fN6Ki~5Jh}4Ig|3Hf{2GezMV_p,F9BK\t2%.7H`zmv#4Lf Ybk| 8RENWh $>1:CTl*y&/@Xrenw ,D^QZct0J=FO`x6) 2 ; L d ~      " N g p z ; D   P h        ( @ X p      0H`x 8Ph(@Xp0H`x 8Ph(@Xp0H`x?k+@ktAkBkCkDk&EkiFkGkHkIkJkM^fzn@1*aZ ( b    !f"""#H#j#c#### $F$?$$$$$&%%X%%%%%&A&o&&&&'B'p''''(J(x((((&)^)\+c,u,,,,,, --E-f-{-----b///0080O0000011Y1R1}1111!2L2222233,3W333334e4^4444457505H5j5555.666V7677808)8H8u8n88888#99K9z9s99999:::::#;;C;;i;;;TÕә=&8q;<F<i<<<<=1=V====>0>U>>>>>/?Y????@1@[@@@@A3A]AAAAA#BMBsBBBBC=CiCCCCCCDmD\D_DDDEDE2E]EEEEEFVFEFHFxFFFFFGFGGGGGG?H.H1HaHHHHHI/IItIwIII)JJJKJvJJJJJKqK_KcKKKLLL7LbLLLLLM]MKMOMMMNMM#NNNNNNNNIO7O;OkOOOOOP:PPPPPP5Q#Q'QWQQQQQQ&R}RkRoRRR!SSSCSnSSSSSTiTWT[TTT UTT/UZUUUUUUUVCVGVwVVVVVWFWWWWWWAX/X3XcXXXXXXYY2Y+YRYYYY"ZPZZZZ[N[|[[[\D\z\\\ ]B]p]]] ^8^n^^^_6_d____,`b````*aXaaaa bVbbbbcLccccdJdxddde@eveeef>flfffg4gjgggg2h`hhhh(i^iiii&jTjjjjjjjjkj k^mmnnnnnoosprs(uuuvvwwwwww>džӆ߆^d3Ol܊)5AMYeq}lӔHiŕbȖ.L`~ė(G[y #0=JWas˙)BWo^huÜМݜTĞɟؠ &>Z٢TlF^~ޥ&Ц/O"tXvʩԩ.Mb֪Q9! }eM5@Ts ?Sr >Rq =Qp <Poy5Pe} !<Qi (=Up)A\q-H]u4Ia| 5Mh }!9Ti %@U m    + W y   : Y q        1 I a y       !9Qi)AYq1Iay !9Qi)AYq1Iay !9Qi}JZ`mmmnnnnnnoopp%s.sBtKtTtuuuuv vovxvvvvfwowxwwwwwwAˆ׆sS\zщډ+GcԊ !-9EQ]iu*R[d”˔.7@`QZyޖ&DXvڗ >Sq(5BOYkÙۙ !9OgŚ`mzȜ՜ǠР\enw 6QѢ:CLd~֣ͣߣgpyڤ5>Vu֥6Ȧ'FclըިGPox̩٩&EZxΪF T<$ hP7Lj6Ki~5Jh}4Ig|3Hf{NW`q-G:CL]u3&/8Ia{nw$5Mg Zcl}!9SFOXi %?2;DUm+z'0AYsfox -E_R[du1K>GPay7* 3 < M e       # O h q { < E   Q i        ) A Y q      1Iay !9Qi)AYq1Iay !9Qi)AYq1Iay/-v(k#R`rnC|3,[ * d   !1!""#J#d###$@$$$$ %Z%%%%&;&q&&&&'<'r''''(D(z((((()`)v)V,~,,,,- -G-`-}----..//0,0Q000011S1111#2N2222-3Y33334_4444515J5l5555J66,7s777*8J8o88889M9t9999!:::::;E;;ÃWƕ֙@&*>W>>>>?)?[????@+@]@@@@ A-A_A}AAAABOBmBBBB C?CcCCCCDgDDD E4E_EEEFPFzFFFGHGGGG9HcHHHI1IIII#JMJxJJJKkKKKL9LdLLLMWMMMM%NPNNNNCOmOOOPRq =Qp <Po;On:NmT]fw 3N@IRc{:,5>Og &t}!*;Sn`ir '?ZLU^o+F8AJ[s2$-6G_zlu~"3Kf Xaj{7RDMVg #>0 9 B S k       ) U n w  B K   W o        / G _ w      7Og'?Wo/G_w7Og'?Wo/G_w7Og O`h|c  h"+"l##H$$(%%%C&&&D'''L(((^+|i,,, -h--d/8/!0:000[112533g4495528w88%9|99:::%;;H<<<3===2>>>1???3@@@5AAA%BuBBCkCCoDEEXFFGAHHI+JJsKLL_MNNKOOP7QQR#SSkTUUWVVWCXX Y4Yjjk3|.qh92e 0 j    !"!#P#m###$J$$$$*%`%%%%&E&w&&&&'F'x''''%(N(((().)f)i,{,,,,,,-&-M-l-----./!0W000$1_1112)2T222293_3333!4k44455=5P5r5550666X7677848P8y8888'9S9~999:::;';K;;j;;;;$<J<q<<<<=5=^====>4>]>>>>?3?a???? @5@c@@@@A7AeAAAAB'BUBwBBBBCECmCCCCCDsDeDDDEE:EeEEEEF\FNFFFFF#GNGGGGGEH7HiHHHH I7II}III/J!JSJ~JJJJ"KwKiKKKL L?LjLLLLMcMUMMMNM+NVNNNNNOOAOsOOOOPBPPPPP;Q-Q_QQQQR.RRuRRR'SSKSvSSSSToTaTTTUU7UbUUUUV[VMVVVVV#WNWWWWWGX9XkXXXYX Y6YZYYYY$ZRZZZZ[P[~[[[\F\|\\\]D]r]]] ^:^p^^^_8_f___`.`d````,aZaaaa"bXbbbb cNccccdLdzdddeBexeee f@fnfffg6glgggg4hbhhhh*i`iiii(jVjjjjjjk(k?6yAC4 n  !")#X##%$$%i%%#&|&&$'}''*(((3)k),R-- .0`00611o233344%5{555666]77778Y889\99 ::;T;;{;;;)<v<<=c== >b>> ?f??@h@@AjAA BZBBBJCC1DDwEFF`GHHIIIJ4KK|L MMhN OOTPPQ@RRS,TTtUVV`WXX YcYYYY)ZWZZZZ[U[[[[\K\\\\]I]w]]]^?^u^^^_=_k___`3`i````1a_aaaa'b]bbbb%cSccccdQddddeGe}eeefEfsfff g;gqgggh9hghhhi/ieiiii-j[jjj1kkr  y##\$$3%%%J&&&K'''S((),-o--$00l122F33t4@55|88*999:*;;K<<<7===6>>>5???7@@@9AAA)ByBBCoCC~D!EEgF GGPHHI:JJK&LLnMNNZOOPFQQR2SSzTUUfV WWRX#Y9Yjktprs)uuvvw_e4P݊mԔIcɖ/aŗ)\zbt*pʟ?ڢm_ߥ'Ѧ0uY/cڪU!T SRQ6~"jVB.vbN:&n  , X ; Z r        2 J b z       ":Rj*BZr2Jbz ":Rj*BZr2Jbz ":Rjovprs,uuuvvwww`g"4Poߊ!o֔Klȕdɖ/Oaŗ)J\zbt̙*FXpUƝŞ˟٠'B^¢ܢUo G`ߥ'>Ѧ1S&v Z 0QcڪNCUv!BTu ASt @Rs ?Qr hz 8TTf $@@Rl,,>Xtt*D``r0LL^x88Jd$$6Pll~"<XXj(DD V p     - Y   < Z r        2 J b z       ":Rj*BZr2Jbz ":Rj*BZr2Jbz ":RjNoprsTuuu1vv/wwwn?uĉ(B^ϊ% ?}Zݕ 3sؖ #>Upԗ8Pkh}ՙ3Laym۝ݞڟ >0Kˢ^x @ͤPoХ3Ŧݦ@hɧ;i!?WrȪ@Id|0Hc{/Gbz.Fay-E`x.n'AvZo-bF[uN2Ga:z3M&f{ 9nRg %Z>SmF*?Y2r+Ez^s1f J _ y     B b   K f ~       & > V n       .F^v6Nf~&>Vn.F^v6Nf~&>Vn.F^vc\mmmnnnnnnnoqppr+ssHtQt&uuuuu vvuvvvvwlwuw~wwwww<ņц݆\Yb׉1Mjڊ'3?KWco{ XajȔє4=FgÕW`Ɩ,J^|—&EYw!.;HU_qə'@Um\fsΜۜRžǟ֠͠ bkt} $<Xע@IRjӣܣmv;D\|ܥ $<Φ$-M irۨMVt}ȩҩߩ,K`~ԪLO7{cK3>Rq =Qp <Po;On:NmT]fw 3N@IRc{:,5>Og &t}!*;Sn`ir '?ZLU^o+F8AJ[s2$-6G_zlu~"3Kf Xaj{7RDMVg #>0 9 B S k       ) U n w  B   8 W o        / G _ w      7Og'?Wo/G_w7Og'?Wo/G_w7Og{How'ߞĠ#0`NN O_OO P^PPQ]QQR\RRS[SSTZTTUYUUVXVVWWWWXVXXYUYYN O^OOP]PPQ\QQR[RRSZSSTYTTUXUUVWVVWVWWXUXXXTYYZ 2FZn8Nm&:Uk-C_s,Ocw  + ? S u   + D \ p ' E Y m ! 5 I ] q  % 9 M a u (Lr0D\s&:Qp';Zn&:Ym%:Ody !6Wl1La}'<Qf{#8Mbw)>Uy "<av)AXr/G^x EZr#:Tn?Tt 5Lez  4 I ` y !!-!I!^!s!!!!!!!""8"T"i""""""##,#F#h####$D$i$$$$'%\%|%%%%%%&+&?&X&l&&&&&&& ' '9'M'f'z''''''(2(F(e(y(((((()1)E)d)x))))))*0*E*]*t****** +!+;+`+u++++++ ,%,<,Q,k,,,,,,-(-=-U-l------..3.X.m......//4/I/c/////// 050M0d0y0000001+1P1e1}1111112,2A2[22222223-3E3\3q333333 4#4H4]4u444444 5$595S5x5555556%6=6T6i66666677@7U7m7777778818K8p8888889959L9a9{999999:8:M:e:|::::::;);C;h;};;;;;<<-<D<Y<s<<<<<< =0=E=]=t======>*>?>V>k>>>>>?+?I?o????@"@G@f@@@@@#ACAkAAAAABABbBBBBBC4C[CCCCCD7DTDyDDDDDE?E`EEEEE F-FUFuFFFFG3GTG}GGGG H,HUHyHHHH I/IPIyIIIIJ&JMJkJJJJKK1KHK]KtKKKKKK"6J^r (>]s*E[z3Ocw?Sg{  / C e }   4 L ` y  5 I ] q  % 9 M a u   ) = Q e y <bv 4Lc*A`t+J^}*I]|*?Ti~&G\!<Qm,AVk(=Rg|.Ei,Qf~1Hb 7Nh5Jby*D^s /Dd%<Uj $ 9 P i } !!9!N!c!x!!!!!!! "("D"Y"u""""""##6#X#~###$4$Y$$$$%L%l%%%%%%&&/&H&\&u&&&&&&&')'='V'j''''''("(6(U(i(((((()!)5)T)h))))))* *5*M*d*y******+++P+e+}++++++,,,A,[,,,,,,,---E-\-q------ .#.H.].u...... /$/9/S/x//////0%0=0T0i00000011@1U1m1111112212K2p2222223353L3a3{333333484M4e4|4444445)5C5h5}5555566-6D6Y6s666666 707E7]7t777777 8!8;8`8u888888 9%9<9Q9k999999:(:=:U:l::::::;;3;X;m;;;;;;<<4<I<c<<<<<<< =5=M=d=y=====>>/>F>[>r>>>>>?9?_?????@7@V@}@@@@A3A[A|AAAA B1BRB{BBBBC$CKCpCCCCC'DDDiDDDDD E/EPEyEEEEEFEFeFFFFF#GDGmGGGGGHEHiHHHHHI@IiIIIIIJ=J[JJJJJ K!K8KMKdKyKKKKKKcrate;::core24crate/1crate,.crate)+crate&(crate#%crate "cratecratecratecratecratecratecrate  crate crate6corecratecrate<;;core02crate-/crate*,crate')crate$&crate!#crate cratecratecratecratecratecrate crate  crate7corecrate13crate.0crate+-crate(*crate%'crate"$crate!cratecratecratecratecratecrate crate  crate cratecratecrateClone;;core_intrinsicsderive_clone_copy7deriveD*4 push_punct+ 1 push_punct/ . push_punct- + push_punct+ ( push_punct5 % push_punct3 " push_punct5  push_punct)  push_punct)  push_punct1  push_punct+  push_punct/  push_punct-   push_punct7   push_punct+  primitiveprelude_importCopy4ϱB:core_intrinsicsderive_clone_copy; push_punct5 2 push_punct9 / push_punct/ , push_punct5 ) push_punct5 & push_punct3 # push_punct-   push_punct-  push_punct3  push_punct5  push_punct5  push_punct5  push_punct/  push_punct5   push_punct5 array_rep_sliceident_fragment_display1QClone4Š;;core_intrinsicsderive_clone_copy<CopyϱB:core_intrinsicsderive_clone_copy6 push_punct- 0 push_punct9 - push_punct; * push_punct5 ' push_punct/ $ push_punct) ! push_punct)  push_punct-  push_punctA  push_punct+  push_punct/  push_punct9  push_punct)   push_punct+  deriveD*ident_fragment_display8Qzz|z{~|z{r|z{f|z{Z|z{N|z{B|zw{6|zk{*|z_{|}zS{|qzG{|ez;{{Yz/{{Mz#{{Az{{5z {{)zz{|ÅzqQHv(M~$~́~҄~{[~R2~)W ~.}׀}܃}e}\<}3a} ||ԂR/home/fraco/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.9/src/lib.rs MH'dF;S ko O+!KQQN&OMKPQP.GQ   PPONM-17": TM&. < >7  $ = $.$I"JGY EOIPQ &*FGQK##OGI NI7iK1 MEQMMMNMQK-D PP * !$7# AM;  #0; 8$#OPGM( !OK;PKD,; OG/&(6/ KP4,;.@ PFI$ (NMQN;$ *A8$ H2K  '  .9 EL8 &( 8:  %OQ B'N! &-31#'* $>D -:D &  . .> H (;>;>;>4)4$&J4'(':  %3###%### (1A###%### )// V 1// d (GN'IS:JLLNM.S; OOO'IS:S4; PPH7)PK:MN-0SZ'IS:JLLNM.SI [[['IS:SBI \\T77\W:YZ;+'7( +'3( +'1( 36376245856536344:25222262255586636943636436&I#D#7/78 7/38 7/18 'B(E'B(F(E'A'C'D(G'D(E'D'B(E'B(C)C)I'A(D(A'A(A'A(E(A'A(D(D'D'G(E(E'B(E(H'C(B)E(B)E'C'B(E2X/S//01䋼،R/home/fraco/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.9/src/ext.rs %mX{$p+CQ,/<& / 8( <3 !6 ) /N 9 /IC< && /) # 9 9$# < #" "#޴*U/home/fraco/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.9/src/format.rs &dwE q6G0  PO"!.440+ PCN&N$ PL*Q=+J7 4."8 L +3%&?. /"/ 0#3#3#%) #%)!%?6CD%K=DK?h /<=?` ෳӠ]/home/fraco/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.9/src/ident_fragment.rs '@3 D;ಒV :O05:3B% 7%*;%;%*;%%;#"+* %)%;QO& (G/ 2ĹÁX/home/fraco/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.9/src/to_tokens.rs BLq/Ʀ#,OA!1N96I I/, !# 3=OB/-%=OB. 44$84$C4$14$04$+4%! 4.4))<6  4249<4%4%4%4%1" 1.0 ݁ތV/home/fraco/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.9/src/runtime.rs ecp6 3N1[&<I<7*7OONO-[7M16 .CK%MH1* @$ 7N*%?T@< X@< 3(@# 6(@# ;,@# #C4L/ 18N@% OH QOI.%./.4"X1.2CFC. 7OJ* 9KOJ*( ,01? @@"" :1?? @@""@"" D1??? @@""@""@"" ,6,86*.0:060,6,26B*4.*.*6.*440666,6<.0:0:.,6NELKF95'FPMPJ*0'U 9P=LO:1)B;'M;$S;'S;'O;%ܾșĵǮم۱V/home/fraco/.cargo/registry/src/github.com-1ecc6299db9ec823/quote-1.0.9/src/spanned.rs >^YN5Q*&+--8KJG+, $*.+܇¦׌quotex86_64-unknown-linux-gnu-f482db82cfc8f6e4Тܲ7x]& m^ ț,+++