rust; rustc 1.48.0std؝-6bf3f16f340782cacoreƞ-3375e4f89d420e7acompiler_builtins-f74b197469e67088rustc_std_workspace_core扪ڹ8-5e0675f526ef5c6ballocץޯČ-1ebf406bd4ea5769libcɄ-dfbef8c525de0186unwindܽ݇!-bd645b20c6c7b56dcfg_ifшC-b9e1e523c0c29a77 hashbrownǰ-c6632ca171f954ddrustc_std_workspace_allocW-b5bfd0198c7b740drustc_demangleة-3ac2d0878c297d42 addr2lineƄ-12740563628e601fgimlin-0ac82a1e1820dd21object»-af517d7f13e7c960 miniz_oxide֕㵤 -a2ba33c985785afeadler˯-3f6e9f8f4afbea6d panic_unwindի-13f3099d50c21bc6 proc_macroתӺ-98fe22f4772d9a7f proc_macro2ѐB-4a51a5cb4a3b3b3e unicode_xidܙv-2f683cc8ef7518b9proc_macro_error_attrȶf-74bbc0c09c6c1be6quote髙-055b4b091be8b4ccsyn䐁j-b1b9178876a15848RqxcoP %#O/m std3k F/>hs]hLXa proc_macro "2)h`OdT$3J]NoIQ8^oD'C(p{,;̼wM&u0ɭHݤkv_(,'?D>գK&6v}O>s^X6~;E^w IF=¯< #MHdm w6UhύE&_ a$aP`|Rtd8 ,yE$:z7\M:iIqL #egZ+7&ycGN-8żh}{.T@l؆!c8s!@ҲqDwdummy2*m?+䚌k '(4/^}<~El2T{gt{O$-l diagnostic%ի{"nn~~R][ h~ c ~a؋J+̜ Vly[8Vؿ- :0܊?z 20 DD) AO7$&x epxyk{QѶ  C? ,Yvp1 ]9W#Hv 2CP%r*_  vG6Qnƒ  DiagnosticExt:2 7+ spanned_rangeu& u@b0$]+span_range_error ő=`-+span_range_helpɓ›}xm+span_range_noteEnΥ<6mx S(#8`mX 8Jֶ0 spanned_rangeT|(.(3\C]0span_range_errorҸUTa&Jߔ0span_range_helpeҪ l"0span_range_note71Jŏ@S`+< ~s>U5new'>Mz-JhV5spanned Yg:4%b5 span_error cNl"@ VD5 span_helpq?&޴ˡ5help.^!Tj;GL+`u} "=DQ 3GGl single_spann}~U (XpF^l call_site@k|\mzl from_tokensy"gnhoV١dn8oh&"EU3'pmyl join_range"dmc"pBlcollapseKϐZdl#>O ResultExt; oh5 >tOkF[lctunwrap_or_abortpV-1Mtexpect_or_abort[&?|xH, OptionExt8ZD5يGxSomeR3n/P|Ok-gW|unwrap_or_abortڦCD|expect_or_abort- ͆6qV,I[\XUynTDvl7SomeCI w-expect_or_abort> ⦜d"Bv entry_pointea5Eר3F3RmL<QEnElaf'y@4|H&?K)%#2RSpanAsSpanRangeOjY,WCFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRangeH]0 ڙBSpan2AsSpanRange8Agֈ{Ҳg CFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRange(4@tYToTokensAsSpanRangeH:x_b8CFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRange;`,DK]0SpanRangeAsSpanRange/"bCFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRange;BtBVܖ6۶ A T^J&PwИWwCFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRangeQ_Ea&8H]pv_6)*q46^lLV("Ьʭ0HCFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRange=X'r%R˴? -6sv )CFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRangezw%ar^( (gcv߁ѾطoACuV[cYCu-)d-Ƒ¶."_3zd l,3 XT_e1Gd[yOhe˰o,C|;vGtAB[ ~3mX"E2X2@K>Hp  "_Š0|-ZvRA v\)0ty!Wa`pj%Eڳ-b  xXf;*09ԍ! 7Xb<6QG1^Vnz'Ը, (b5hzTj?wndd}k<[w1$'DA3JͬW<=SC'.=\QP-5M'_ 6iEY/\<*]|KC0v\tx  3M+ proc_macroV V DiagnosticV V DiagnosticExtV +V LevelWW append_dummyW W set_dummyW W proc_macro_errorWJW'SpanWWquoteXXToTokensXMXCellXX catch_unwindX X  resume_unwindX X  UnwindSafeX X  diagnostic SabortTabort_call_siteU emit_errorȫ Vemit_call_site_errorW emit_warning Xemit_call_site_warningȴY__pme__suggestionsZ # proc-macro-errorO This crate aims to make error reporting in proc-macros simple and easy to use.RE Migrate from `panic!`-based errors for as little effort as possible!nH[ (Also, you can explicitly [append a dummy token stream](dummy/index.html) to your errors).^U To achieve his, this crate serves as a tiny shim around `proc_macro::Diagnostic` andX] `compile_error!`. It detects the best way of emitting available based on compiler's version.`U When the underlying diagnostic type is finally stabilized, this crate will simply beX4 delegating to it requiring no changes in your code!7^ So you can just use this crate and have *both* some of `proc_macro::Diagnostic` functionalityaP available on stable ahead of time *and* your error-reporting code future-proof.S ## Cargo featuresH This crate provides *enabled by default* `syn-error` feature that gatesKS `impl From for Diagnostic` conversion. If you don't use `syn` and wantV< to cut off some of compilation time, you can disable it via? ```toml  [dependencies]? proc-macro-error = { version = "1", default-features = false }B ```  Y ***Please note that disabling this feature makes sense only if you don't depend on `syn` \2 directly or indirectly, and you very likely do.** 5  ## Real world examples  Z * [`structopt-derive`](https://github.com/TeXitoi/structopt/tree/master/structopt-derive) ] (abort-like usage) N * [`auto-impl`](https://github.com/auto-impl-rs/auto_impl/) (emit-like usage) Q  ## Limitations  D - Warnings are emitted only on nightly, they are ignored on stable. G? - "help" suggestions can't have their own span info on stable, B, (essentially inheriting the parent span). /W - If a panic occurs somewhere in your macro no errors will be displayed. This is not a ZZ technical limitation but rather intentional design. `panic` is not for error reporting.]$ ### `#[proc_macro_error]` attribute'P **This attribute MUST be present on the top level of your macro** (the functionS[ annotated with any of `#[proc_macro]`, `#[proc_macro_derive]`, `#[proc_macro_attribute]`).^M This attribute performs the setup and cleanup necessary to make things work.PL In most cases you'll need the simple `#[proc_macro_error]` form without anyOH additional settings. Feel free to [skip the "Syntax" section](#macros).K #### SyntaxQ `#[proc_macro_error]` or `#[proc_macro_error(settings...)]`, where `settings...`T is a comma-separated list of:! - `proc_macro_hack`:U In order to correctly cooperate with `#[proc_macro_hack]`, `#[proc_macro_error]`X= attribute must be placed *before* (above) it, like this:@ ```no_run$ # use proc_macro2::TokenStream;' # const IGNORE: &str = "  #[proc_macro_error] #[proc_macro_hack] #[proc_macro] # "; 5 fn my_macro(input: TokenStream) -> TokenStream {8 unimplemented!() }  ``` B If, for some reason, you can't place it like that you can useE4 `#[proc_macro_error(proc_macro_hack)]` instead.7 # NoteG If `proc-macro-hack` was detected (by any means) `allow_not_macro`J< and `assert_unwind_safe` will be applied automatically.? - `allow_not_macro`:H By default, the attribute checks that it's applied to a proc-macro.KY If none of `#[proc_macro]`, `#[proc_macro_derive]` nor `#[proc_macro_attribute]` are\\ present it will panic. It's the intention - this crate is supposed to be used only with_ proc-macros.O This setting is made to bypass the check, useful in certain circumstances.RI Pay attention: the function this attribute is applied to must returnL `proc_macro::TokenStream`."? This setting is implied if `proc-macro-hack` was detected.B - `assert_unwind_safe`:R By default, your code must be [unwind safe]. If your code is not unwind safe,UP but you believe it's correct, you can use this setting to bypass the check.SP You would need this for code that uses `lazy_static` or `thread_local` with S* `Cell/RefCell` inside (and the like).!-!N This setting is implied if `#[proc_macro_error]` is applied to a function!QT marked as `#[proc_macro]`, `#[proc_macro_derive]` or `#[proc_macro_attribute]`."W"D This setting is also implied if `proc-macro-hack` was detected."G# ## Macros# #\ Most of the time you want to use the macros. Syntax is described in the next section below.#_$3 You'll need to decide how you want to emit errors:$6$Q * Emit the error and abort. Very much panic-like usage. Served by [`abort!`] and$T [`abort_call_site!`].%R * Emit the error but do not abort right away, looking for other errors to report.%U; Served by [`emit_error!`] and [`emit_call_site_error!`].&>& You **can** mix these usages.&!'Q `abort` and `emit_error` take a "source span" as the first argument. This source'TR will be used to highlight the place the error originates from. It must be one of:'U(W * *Something* that implements [`ToTokens`] (most types in `syn` and `proc-macro2` do).(ZZ This source is the preferable one since it doesn't lose span information on multi-token)]Y spans, see [this issue](https://gitlab.com/CreepySkeleton/proc-macro-error/-/issues/6))\ for details.* * [`proc_macro::Span`]* * [`proc-macro2::Span`]++/ The rest is your message in format-like style.+2+7 See [the next section](#syntax-1) for detailed syntax.+:, - [`abort!`]:,,F Very much panic-like usage - abort right away and show the error.,I# Expands to [`!`] (never type).,&- - [`abort_call_site!`]:--R Shortcut for `abort!(Span::call_site(), ...)`. Expands to [`!`] (never type).-U. - [`emit_error!`]:..K [`proc_macro::Diagnostic`]-like usage - emit the error but keep going,.N( looking for other errors to report./+J The compilation will fail nonetheless. Expands to [`()`] (unit type)./M0 - [`emit_call_site_error!`]:0 0W Shortcut for `emit_error!(Span::call_site(), ...)`. Expands to [`()`] (unit type).0Z1 - [`emit_warning!`]:11W Like `emit_error!` but emit a warning instead of error. The compilation won't fail1Z because of warnings.2# Expands to [`()`] (unit type).2&2R **Beware**: warnings are nightly only, they are completely ignored on stable.2U3 - [`emit_call_site_warning!`]:3"3Y Shortcut for `emit_warning!(Span::call_site(), ...)`. Expands to [`()`] (unit type).3\4 - [`diagnostic`]:44< Build an instance of `Diagnostic` in format-like style.4?5 #### Syntax551 All the macros have pretty much the same syntax:545 1. ```ignore5 abort!(single_expr)5 ```6 3 Shortcut for `Diagnostic::from(expr).abort()`.666 2. ```ignore6 abort!(span, message)6 ```6 L The first argument is an expression the span info should be taken from.7O7N The second argument is the error message, it must implement [`ToString`].7Q8 3. ```ignore81 abort!(span, format_literal, format_args...)84 ```8 9] This form is pretty much the same as 2, except `format!(format_literal, format_args...)`9`= will be used to for the message instead of [`ToString`].9@:K That's it. `abort!`, `emit_warning`, `emit_error` share this exact syntax.:N:Q `abort_call_site!`, `emit_call_site_warning`, `emit_call_site_error` lack 1 form;TQ and do not take span in 2'th and 3'th forms. Those are essentially shortcuts for;T& `macro!(Span::call_site(), args...)`.<)<O `diagnostic!` requires a [`Level`] instance between `span` and second argument **Important!**= >=V > If you have some type from `proc_macro` or `syn` to point to, do not call `.span()`=Y$ > on it but rather use it directly:>' > ```no_run>! > # use proc_macro_error::abort;>$1 > # let input = proc_macro2::TokenStream::new();?43 > let ty: syn::Type = syn::parse2(input).unwrap();?6 > abort!(ty, "BOOM");@ > // ^^ <-- avoid .span()@! > ```@  >@S > `.span()` calls work too, but you may experience regressions in message quality.@VA #### Note attachmentsAAA 3. Every macro can have "note" attachments (only 2 and 3 form).AD ```ignoreBS let opt_help = if have_some_info { Some("did you mean `this`?") } else { None };BVB abort!(C D span, message; // <--- attachments start with `;` (semicolon)CGCU help = "format {} {}", "arg1", "arg2"; // <--- every attachment ends with `;`,CXO // maybe except the last oneDREU note = "to_string"; // <--- one arg uses `.to_string()` instead of `format!()`EXEV yay = "I see what {} did here", "you"; // <--- "help =" and "hint =" are mappedEYE // to Diagnostic::help,FHR // anything else is Diagnostic::noteGUGT wow = note_span => "custom span"; // <--- attachments can have their own spanGWW // it takes effect only on nightly thoughHZIS hint =? opt_help; // <-- "optional" attachment, get displayed only if `Some`IVB // must be single `Option` expressionIEJZ note =? note_span => opt_help // <-- optional attachments can have custom spans tooJ] );K ```K K ### Diagnostic typeKKd [`Diagnostic`] type is intentionally designed to be API compatible with [`proc_macro::Diagnostic`].KgX Not all API is implemented, only the part that can be reasonably implemented on stable.L[MM [`abort!`]: macro.abort.htmlM 1 [`abort_call_site!`]: macro.abort_call_site.htmlM4+ [`emit_warning!`]: macro.emit_warning.htmlM.' [`emit_error!`]: macro.emit_error.htmlN*= [`emit_call_site_warning!`]: macro.emit_call_site_error.htmlN@= [`emit_call_site_error!`]: macro.emit_call_site_warning.htmlO@' [`diagnostic!`]: macro.diagnostic.htmlO*' [`Diagnostic`]: struct.Diagnostic.htmlO*PL [`proc_macro::Span`]: https://doc.rust-lang.org/proc_macro/struct.Span.htmlPOX [`proc_macro::Diagnostic`]: https://doc.rust-lang.org/proc_macro/struct.Diagnostic.htmlP[Q_ [unwind safe]: https://doc.rust-lang.org/std/panic/trait.UnwindSafe.html#what-is-unwind-safetyQb: [`!`]: https://doc.rust-lang.org/std/primitive.never.htmlR=: [`()`]: https://doc.rust-lang.org/std/primitive.unit.htmlR=G [`ToString`]: https://doc.rust-lang.org/std/string/trait.ToString.htmlSJTW [`proc-macro2::Span`]: https://docs.rs/proc-macro2/1.0.10/proc_macro2/struct.Span.htmlTZD [`ToTokens`]: https://docs.rs/quote/1.0.3/quote/trait.ToTokens.htmlTGUUforbidUUV unsafe_codeU UVallowVVV clippyVV needless_doctest_mainVV(  R[^ltx{|X TokenStreamخ ˮRefCellcheck_correctness _X= Facility to emit dummy implementations (or whatever) in case@ an error happen.̕E `compile_error!` does not abort a compilation right away. This meansHE `rustc` doesn't just show you the error and abort, it carries on theH8 compilation process looking for other errors to report.; Let's consider an example:֗ ```rust,ignoreڗ use proc_macro::TokenStream;  use proc_macro_error::*; trait MyTrait { fn do_thing();Ø }ژ8 // this proc macro is supposed to generate MyTrait impl; #[proc_macro_derive(MyTrait)]! #[proc_macro_error]™0 fn example(input: TokenStream) -> TokenStream {ڙ3 // somewhere deep inside ' abort!(span, "something's wrong");*ښB // this implementation will be generated if no error happenedޚE quote! {! impl MyTrait for #name {$+ fn do_thing() {/* whatever */}ڛ. }  }  } // ================ // in main.rsÜ՜! // this derive triggers an errorٜ$" #[derive(MyTrait)] // first BOOM!% struct Foo; fn main() {% Foo::do_thing(); // second BOOM!ȝ( } ```J The problem is: the generated token stream contains only `compile_error!`MQ invocation, the impl was not generated. That means user will see two compilationўT errors:  ```text  error: something's wrongŸ --> $DIR/probe.rs:9:10ߟ |! 9 |#[proc_macro_derive(MyTrait)]$ | ^^^^^^^"ˠh error[E0599]: no function or associated item named `do_thing` found for type `Foo` in the current scopeϠk --> src\main.rs:3:10 |ա 1 | struct Foo;ݡJ | ----------- function or associated item `do_thing` not found for thisM 2 | fn main() {) 3 | Foo::do_thing(); // second BOOM!Ӣ,E | ^^^^^^^^ function or associated item not found in `Foo`H ```ɣѣE But the second error is meaningless! We definitely need to fix this.գHB Most used approach in cases like this is "dummy implementation" -EQ omit `impl MyTrait for #name` and fill functions bodies with `unimplemented!()`.T This is how you do it:ܥ ```rust,ignore use proc_macro::TokenStream;  use proc_macro_error::*; trait MyTrait { fn do_thing();ʦ }9 // this proc macro is supposed to generate MyTrait impl< #[proc_macro_derive(MyTrait)]" #[proc_macro_error]ͧ1 fn example(input: TokenStream) -> TokenStream {4E // first of all - we set a dummy impl which will be appended toHC // `compile_error!` invocations in case a trigger does happenF set_dummy(quote! {" impl MyTrait for #name {ǩ%0 fn do_thing() { unimplemented!() }3 } });  // somewhere deep inside!( abort!(span, "something's wrong");+C // this implementation will be generated if no error happenedF quote! {ګ" impl MyTrait for #name {%, fn do_thing() {/* whatever */}/ }¬ }Ѭ  }ܬ // ================ // in main.rs" // this derive triggers an error%# #[derive(MyTrait)] // first BOOM!& struct Foo; fn main() {) Foo::do_thing(); // no more errors!, } ```*     Some  * *     old_dummy dummy* dummy ;L Sets dummy token stream which will be appended to `compile_error!(msg);...`O, invocations in case you'll emit any errors.ʰ/" See [guide](../index.html#guide).% ƴƴƴƴƴƴƴѴ Ѵ Ѵ۴ ۴        ,   ֵ ۵۵۵۵ֵ ֵ ֵ Someֵ εϵϵεε ε  Some        (       )) { ҵεεε   εεε,,{ ´)  ƴѴ { { { { ֵ ۵εϵ old_dummy dummycellƴts ܳ dummy ճ'G Same as [`set_dummy`] but, instead of resetting, appends tokens to theJH existing dummy (if any). Behaves as `set_dummy` if no dummy is present.K #ɶ ɶ ۶۶ɶӶӶ ߶߶#ɶ# ɶ ۶ old_dummy #. Y abort_now   check_correctness  Sealed\ SpanRange   Span TokenStreamӷ Ʒ quote_spanned   ToTokensM X!"#$%&'()*+05@CIKݽ ӽ F A collection of methods that do not exist in `proc_macro::Diagnostic`I! but still useful to have around.ؼ$N This trait is sealed and cannot be implemented outside of `proc_macro_error`.Q,-./Self++\Self span_range levelmessage(޿OA Create a new diagnostic message that points to the `span_range`.D¾M This function is the same as `Diagnostic::spanned` but produces considerablyʾP7 better error messages for multi-token spans on stable.: ,)++self span_range msg#FK Add another error message to self such that it will be emitted right afterN the main message.P This function is the same as `Diagnostic::span_error` but produces considerablyS7 better error messages for multi-token spans on stable.: -++self span_range msg#EX Attach a "help" note to your main message, the note will have it's own span on nightly.[O This function is the same as `Diagnostic::span_help` but produces considerablyR7 better error messages for multi-token spans on stable.: # Span ^ The span is ignored on stable, the note effectively inherits its parent's (main message) spana .++self span_range msg#EQ Attach a note to your main message, the note will have it's own span on nightly.TO This function is the same as `Diagnostic::span_note` but produces considerablyR7 better error messages for multi-token spans on stable.: # Span ^ The span is ignored on stable, the note effectively inherits its parent's (main message) spana /++ 1234+ span_range levelmessage(  100self span_range msg#  200self span_range msg#  300self span_range msg#  400 6789:;<=>?levelmessagexC Create a new diagnostic message that points to `Span::call_site()`F 655spanlevelmessage": Create a new diagnostic message that points to the `span`= 755selfspanmsgK Add another error message to self such that it will be emitted right afterN the main message. 855selfspanmsgX Attach a "help" note to your main message, the note will have it's own span on nightly.[ # Span ^ The span is ignored on stable, the note effectively inherits its parent's (main message) spana 955selfmsg+ Attach a "help" note to your main message.. :55selfspanmsgQ Attach a note to your main message, the note will have it's own span on nightly.T # Span ^ The span is ignored on stable, the note effectively inherits its parent's (main message) spana ;55selfmsg# Attach a note to your main message& <55self 76 The message of main warning/error (no notes attached)9 =  55self H= Abort the proc-macro's execution and display the diagnostic.@ # WarningsR Warnings are not emitted on stable and beta, but this function will abort anyway.U >55self a; Display the diagnostic while not aborting macro execution.> # Warnings$ Warnings are ignored on stable/beta' ?55 + **NOT PUBLIC API! NOTHING TO SEE HERE!!!**.doc hiddenABselfspan suggestion msg- A@@self suggestion msg# B@@ DMselfts  D CC bufs ' F   span_range levelmsg suggestions 5  G    Jself   J  II cfg feature syn-error Lerr   LKK  ts U Pimpl Iterator impl IteratorQQ)):6   )  Some    Ĉ ň          ,          ʚ  6  7 735$$ 1 *#(internal error: entered unreachable code((($ 6 Groupn+  nnnnnn܃'܃܃܃܃܃  5 P5++  +n܃4P4܃'܃'܃'n!  ʚÄĄ Ą!߄*! !"#$$ $#"$ (#"# !"#! )! %$"!*ʚ &$ % %)($""*!(internal error: entered unreachable code((('"ԅ&ԅ&Literal܅ &ޅ&8 867"+9 989Ĉ ()**  ̩*)., * +,,)  ,+/0,+ -..)  .-10 Ĉ),.- /01122'01022133) /0 /330&Some/&/Ĉ)Ĉ'Ĉ 2Ĉ Ĉň646 Group "*6$6 '((   ('-, 8,   :   ݲ ̩ݲ n+ ܃'܃܃܃ݲ *ݲ! ̩ԅ ̩ŷ  & &&&&tsfirstttlit grouplitԅ&last'msg)       YY YY \]Self\\[$\Y abort_now  ^check_correctness ^ Diagnostic  ^Level^RefCell^YYcfgY YY use_fallbackY YYpathY Yimp/fallback.rsYY9 This implementation uses self-written stable facilities.<_`abcdefhj]g #fgggg     ]   #  CCC   ] g ] CCC CC CCstorage] f%ihiiii   #  %i % storage%* h)kjkkkk        # )  ) k)  storagediag)diag / j[ mnorsspan[ [}A Create a range with the `first` and `last` spans being the same.[D[ mll]T- Create a `SpanRange` resolving at call site.\0] nllts``P Construct span range from a `TokenStream`. This method always preserves all the]S range.^ ^ ### Note^ ^N If the stream is empty, the result is `SpanRange::call_site()`. If the stream^QT consists of only one `TokenTree`, the result is `SpanRange::single_span(tt.span())`_W that doesn't lose anything.`` o Ml`lselfcotherccP Join two span ranges. The resulting range will start at `self.first` and end atbS `other.last`.cc rllselfe e^Q Collapse the range into single span, preserving as much information as possible.dTe sllg gM This traits expands `Result>` with some handy shortcuts.fPuvwSelfttugggttselfh h%J Behaves like `Result::unwrap`: if self is `Ok` yield the contained value,gM. otherwise abort macro execution via `abort!`.h1h vttselfjmsgjj0J Behaves like `Result::expect`: if self is `Ok` yield the contained value,hM. otherwise abort macro execution via `abort!`.i1K If it aborts then resulting error message will be preceded with `message`.iNj wtjtk k8 This traits expands `Option` with some handy shortcuts.j;yzSelfxxyk k kxxselfnmsgnn2L Behaves like `Option::expect`: if self is `Some` yield the contained value,kO8 otherwise abort macro execution via `abort_call_site!`.l;V If it aborts the `message` will be used for [`compile_error!`][compl_err] invocation.lYmD [compl_err]: https://doc.rust-lang.org/std/macro.compile_error.htmlmGn zxnxooB Abort macro execution and display all the emitted errors, if any.nEo@ Does nothing if no errors were emitted (warnings do not count).oC { p ppTEtT}E~}~pppp p||selfq pp ||q qqqErrqqqqq qqqOkqqqqqppqqqqqqqZqqZqselfqresqeqpselfrmessagerqq |r|rrrrr rrrErrsssss srrOkt$sssssId+I+I(, s s s ss s s s   s I(, I(,I(,I(,I(,ssssI(, I(, J,J,s,s,s,s,I(,s,s,s,s,s, 3   2I(,I(, 3I(,J,J,I(,s,s,s,s,s, 3  I(,I(, 3I(, J,J,I(, J,J,J,J,I(,I(,I(,   J,I(,I(, 3   I(,J, J, I=+I+  I=+J+ J+J+J+J+ J+J+sssqsss s# s s# s sssssssssssssssssss ssqrrsxIZ+I(, rrrrrssId+I+I(,sssI(, I(,I(,I(,I(,sss,s,I(,s,s,I(,s,s,s ssssselfrmessagerresreresresI+arg0s,arg1s,qs ss: ssqrrsxIZ+I(,sss ttxȀTtttselftmessagettt Ȁt u  u ʜ/Ğ /ў/ў/0-0-.- 0-uuSomeuў/ў/ўN/ڞC/ ڞE/ ///̟ / ̟ / . . / u u / /    // G/!/ ,   G// / / /B...ttu/ uȀttu ucʜ/Ğ / ў/ў/0-G/̟ /G/.G//G/uselftmessagetresu span_rangeĞ /t vxF xxxx xxx x xxxxx xxxxx xxxxxx x xxxx xxflagxxyyyyy yyy yyyyyy yyyyyyyyyyy܌yyyyy yyflagyyy2zz zyxr]y%ry#r ]&y%rx0y%0y#0y%0 4 4 4 4 4#4#4x}5x5 y%5y#5 y%5 ?9 ̃ 9 ̃ 9 ̃ 9  ̃ 9  ڃ: ڃ:ڃ:ڃ: macro_rules  ڃ: ?99    ?9y0 9 9 99 9 *< < < <  <*<<  *<y5  <<<?>̃ >̃ >̃ > ̃ >ڃ?ڃ?ڃ?ڃ?proc_macro_callڃ??>> ?>>>>>>A A A A  A#A#Ax}BxBy%By#B y%BF F F F F)F )F x%G!x%Gx#G!  x%GFF  ! FyB F!F FFF/I" I# I$ I$ I#$/I!I #" /I I#I$I"K% K& K' K' K&')K()K(x}L)xL*y%Ly#L* y%L ?P+̃ P,̃ P-̃ P-*̃ P,-ڃQ.ڃQ/ڃQ/ڃQ unimplemented?  ڃQ./?PP,.+?P P.P,P/P-P+*S0 S1 S2 S2* S12*SS10*SyL*  S1S2S0U3 U4 U5 U5* U45)U6)U6x%V7x%Vx#V7x%VUU4673UU7U6U4U5U3yL)*yL*KK&()% KK)K(K&K'K%yByBAAA AAAAAW8^;^<^<^^ <;^ ^<^9^9;7^:^:;^; ^= ^> ^> ^͡^?͡^?͡^ۨ ^ ^ ۨ>?= ^͡^?͡^>W âe @Т e AТe BТe B9Т e բe )BAբeڢe Be C Ae Ce AW @W=W:W9W80iKiLiMiM iLM iN iO iO  iNO0ii NLNK 0iТ e e De DASome e Ee ED e @ԭEe Ee De A0h Fh Gh Hh H@h GH h I h J h J  h IJ0h h NԭGIF0hh Ih Gh Jh Hh FW @W iNiLiOiMiK?kP̃ kQ̃ kR̃ kR ̃ kQRڃlSڃlTڃlTڃl unimplemented?  ڃlST?kkQSP!?k kSkQkTkRkP*nU nV nW nW  nVW*nnVU"*n nVnWnUpX pY pZ pZ  pYZ)p[)p[x%q\x%qx#q\#x%qppY[\X$pp\p[pYpZpXy5 y5 44%444444y0y0z1u ^|a|b|b||ba'(| |b|_|_a|`|`aۨ|a |c |d |d |͡|e͡|e͡|ۨ | |שdec)( |yr]͡|e͡|du*âfТ gТhТh_Т բhg+(բڢhi gi,.-gufucu `u _u ^0 q r s s rs  t  u  u]  tu0 rtq0(0Т jjgSomeԭkkj fԭkkjg0lmnnfmn o p p] op0mol/(0ompnlufu* t r u s qyr ]yr]z1||yxs0xs5xsBxsLWϱWϱWϱWWW ,e xsru ϱu ϱu ϱuuu,vy  yzzx04 4 4#4x}5x5?9̃ 9̃ 9ڃ:ڃ:*< < <?>̃ >̃ >ڃ?ڃ?A A A#Ax}BxBF F F)Fx%G/I I IK K K)Kx}LxL?P̃ P̃ PڃQڃQ*S S SU U U)Ux%VW^ۨ^ۨ^^ۨ ^ ^ۨ͡^âe ԭТ e Тeeԭe ԭe0h hh h h0iii i i?k̃ k̃ kڃlڃl*n n np p p)px%qxru |ۨ|||ۨ | |ۨ͡|âТ Тԭԭ0  0  proc_macro_hackw err_storagey dummyx_sx0_sx5 _sxB_sxL*has_iterW8 err_storage^9i^:has_iter ^= err_storageâe @_xe D_sxr ]has_iteru ^ err_storage|_i|`has_iter |c err_storageâf_xjyv fwproc_macro_hackwv* This is the entry point for a proc-macro.u-v9 **NOT PUBLIC API, SUBJECT TO CHANGE WITHOUT ANY NOTICE**v<vdocv vv hiddenvv Fvw#ww ) w9&w9w9%w9w9'w9w9$w9w9$w9w9ww#w w#xw9x όx%vxxxxxx$xxxx xx%xx&xxxxx$xy  yy  yy9 y y"yy "y y9y    y%$y y y y  yyyy yyy y y |||| |  ~~&~~ErrU~~~~~ ~|||%||'||Ok}} }  }}  } }}t~'~~} } }  } } }  } }'}}}t}}}}  }}}t~~'%~'~~|~~ ~) )&Err !! !!  ~~ ~ ~  ~ ~ ~ ~ ~~~~~~* *'(   $%&$$%!%Ok&#&Err( ( "~'~~|'vxxyy|~~"+wwww9wόxxxxy y9yyy yyy||}t}}t} }} }} }} ~|U~|~~|~ |~ |~ ||yw~ fwproc_macro_hackwcaughtxdummyx err_storagey  gen_errory  ts|boxed~boxedvwyyyyyvxxyy|~~"yyywwwwvxxyy|~~"www Ҁˀˀ  flag݀ ؃ proc_macro  proc_macro2 Span߄҄ToTokensM SpanRange Ѓ. **ALL THE STUFF INSIDE IS NOT PUBLIC API!!!**1ÃdocÃƃ̓ hiddenǃSelfself [džallowdž̆ۆ non_snake_case͆ņC  ׇ͇Selfselfۈ [allow non_snake_caseC ڈSelfself É[allow non_snake_caseƉC Selfself [ՊallowՊڊ non_snake_caseۊӊC  ۋ '_T'_TMselfڌ C '_ ٌ  O " Φ č?čččč؍ ؍ݍ č? ,    čp ,҂҂ Ǝ ͎ ͎  ͎ ͎͎͎ ͎ Ў )   ЎՎ ێ͎׎ ,؄   ׎ ͎. ,       Žj  ٌЊč?ݲččɄƎ͎ݲ͎ ͎ێselfٌtsfirstlastƎ self C  self C  דselfє xC  Д { #[inline] fn __init() -> RefCell> { RefCell::new(None) } unsafe fn __getit() -> ::std::option::Option<&'static RefCell>> { #[thread_local] #[cfg(all(target_thread_local, not(all(target_arch = "wasm32", not(target_feature = "atomics"))),))] static __KEY: ::std::thread::__FastLocalKeyInner>> = ::std::thread::__FastLocalKeyInner::new(); #[allow(unused_unsafe)] unsafe { __KEY.get(__init) } } unsafe { ::std::thread::LocalKey::new(__getit) } } k      &   & k k M  &  k΍ ˍ  inline      ˍ įˍ   :   w  thread_local  Ő cfgŐ Ȑ ߑ  allɐ ̐ ޑ  target_thread_local   not  ˑ  all  ʑ  target_arch  wasm32   not  ɑ  target_feature  atomics ̑ Ð  * (  * w w ' w P Represents a diagnostic level! # Warnings$ Warnings are ignored on stable/beta'Ź doc hiddenŹ Ź      automatically_derived   allow    unused_qualifications   self other    inline                        ݮ                                                                             self other  __self_vi  __arg_1_vi     automatically_derived   allow    unused_qualifications  3selff     2  ' Represents a single diagnostic message׹*5@̺ ׺ H ܻ-   automatically_derived   allow    unused_qualifications  3selff      6I   automatically_derived   allow    unused_qualifications  3selff      { #[inline] fn __init() -> RefCell> { RefCell::new(Vec::new()) } unsafe fn __getit() -> ::std::option::Option<&'static RefCell>> { #[thread_local] #[cfg(all(target_thread_local, not(all(target_arch = "wasm32", not(target_feature = "atomics"))),))] static __KEY: ::std::thread::__FastLocalKeyInner>> = ::std::thread::__FastLocalKeyInner::new(); #[allow(unused_unsafe)] unsafe { __KEY.get(__init) } } unsafe { ::std::thread::LocalKey::new(__getit) } }^ k& ' ' '   &' '  &' k& k& M' & &' ' k&΍ '^ˍ ' 'inline ' '       'ˍ ' ˍ ' '^ :'  '^ w' ' thread_local ' 'Ő 'cfgŐ 'Ȑ 'ߑ ' allɐ '̐ 'ޑ ' target_thread_local ' ' not ' 'ˑ ' all ' 'ʑ ' target_arch ' 'wasm32 ' ' not ' 'ɑ ' target_feature ' 'atomics '̑ 'Ð ' *' ('  *' w' w' '' w'Z ZAlZZZZZ(Z(automatically_derivedZ(Z(Z(allowZ(Z(Z( unused_qualificationsZ(Z(Z)Z)automatically_derivedZ)Z)Z)allowZ)Z)Z) unused_qualificationsZ)Z) selfZ Z)Z)inlineZ)Z)Z) Z)Z)Z)Z)Z)Z)Z) Z)selfZ)Z)Z*Z*automatically_derivedZ*Z*Z*allowZ*Z*Z* unused_qualificationsZ*Z*3selfZfZ*Z*Z* Z* { #[inline] fn __init() -> Cell { Cell::new(0) } unsafe fn __getit() -> ::std::option::Option<&'static Cell> { #[thread_local] #[cfg(all(target_thread_local, not(all(target_arch = "wasm32", not(target_feature = "atomics"))),))] static __KEY: ::std::thread::__FastLocalKeyInner> = ::std::thread::__FastLocalKeyInner::new(); #[allow(unused_unsafe)] unsafe { __KEY.get(__init) } } unsafe { ::std::thread::LocalKey::new(__getit) } }  k      &   & k k M  &  k΍ ˍ  inline      Ā  ˍ  ˍ   :   w  thread_local  Ő cfgŐ Ȑ ߑ  allɐ ̐ ޑ  target_thread_local   not  ˑ  all  ʑ  target_arch  wasm32   not  ɑ  target_feature  atomics ̑ Ð  * (  * w w ' wIH DHHHH        H                H    5 5    I5 H I       span_range msgI I5   I5   apڄoppppaaa aaaaaaaaa p؄aaattaabqoqqqqbb҂bbbbq bb'_ڄ Ʉttێ'_ڄ ێێێ܎tt܎ێ֤$̍֍͍ err΍э exprҍ؍ۍݍ crateލ Diagnostic  from err span expr level expr fmt exprŽĎŎЎƎ argsǎˎ expr̎ю ҎԎ֎׎؎ restَݎ ttގ + allow unused_imports use crate __export ToTokensAsSpanRangeʏ Span2AsSpanRange؏ SpanAsSpanRange SpanRangeAsSpanRange use crateŐ DiagnosticExtǐ Ԑ letސ span_range   span CFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRangeC letȑ diag̑ёӑ crateԑّ Diagnosticۑ  spanned_range В span_range  level format ƒ fmtÒ argsĒ Œђے crateܒ __pme__suggestions  diag rest  diagԓ span expr level expr msg exprƓȓɓғʓ rest˓ϓ ttГ ӓ֓ٓ՗ړԗ+ allow unused_imports use crate __export ToTokensAsSpanRange Span2AsSpanRangeʔڔ SpanAsSpanRange SpanRangeAsSpanRange use crate DiagnosticExt ƕ letЕ span_rangeԕ ߕ  span CFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRangeC let diagÖŖ crateƖ˖ Diagnostic͖ ז spanned_rangeٖ  span_range  level msg to_string  crate __pme__suggestions  diag rest  diag˗֗ span expr level expr fmt expr args expr ֘ allowƘ՘ unused_importsǘ use crate __export ToTokensAsSpanRange Span2AsSpanRange SpanAsSpanRangeÙҙ SpanRangeAsSpanRange use crate DiagnosticExt  let span_range Ú  spanĚ CFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRangeŚC crate Diagnostic  spanned_range  span_rangeě Λܛ levelݛ format  fmt args Ĝ span expr level expr msg exprƜɜʜԜ՜ allow֜ۜ unused_importsܜ use crate __export ToTokensAsSpanRange Span2AsSpanRangeʝ SpanAsSpanRange؝ SpanRangeAsSpanRange use crate DiagnosticExt  let span_rangeĞ Ϟў؞ ҞӞ spanԞٞ CFIRST_ARG_MUST_EITHER_BE_Span_OR_IMPLEMENT_ToTokens_OR_BE_SpanRangeڞC crate Diagnostic  spanned_range ˟ span_range̟ ֟؟ levelٟޟ msg to_string ܠ span expr level expr fmt exprɠ argsĠ exprŠʠ ˠ̠ΠРѠڠҠ restӠנ ttؠ ۠ޠ crate diagnostic  span level fmt args  rest  span expr¡ġ levelšʡ exprˡϡѡ msgҡա expr֡ڡܡޡߡ rest tt  crate diagnostic   span level msg rest  span exprĢƢ levelǢ̢ expr͢ѢӢ fmtԢע exprآܢޢߢ args expr  crate diagnostic   span level fmt args  spanã exprģȣʣ levelˣУ exprѣգף msgأۣ exprܣ crate diagnostic  span level msg<O Build [`Diagnostic`](struct.Diagnostic.html) instance from provided arguments.Ř # SyntaxЌ ݌# See [the guide](index.html#guide).&  macro_export   err expr  crate diagnostic  err abortŦݦƦ spanǦ˦ expr̦ЦҦӦۦԦ ttsզئ tt٦ ܦߦ  crate diagnostic   span crate Level Error tts  abort< Abort proc-macro execution right now and display the error.٤? # Syntax # See [the guide](index.html#guide).&ץ  macro_exportץ եǩũ tts© tté Ʃɩ̩֩ crateשܩ abortީ  crate __export proc_macro2  Span call_site  tts = Shortcut for `abort!(Span::call_site(), msg...)`. This macro@J is still preferable over plain panic, panics are not for error reporting.MȨ # Syntax̨ ٨# See [the guide](index.html#guide).ݨ&  macro_export ӫ٫ګ err۫ޫ expr߫  crate diagnostic  err emit span expr tts tt  letǬ levelˬѬӬ crateԬ٬ Level۬ Error crate diagnostic  span level tts  emit< Emit an error while not aborting the proc-macro right away.? # Syntax # See [the guide](index.html#guide).&  macro_export ȫ ůï tts tt įǯʯԯ crateկگ emit_errorܯ  crate __export proc_macro2  Span call_site  tts ? Shortcut for `emit_error!(Span::call_site(), ...)`. This macroBK is still preferable over plain panic, panics are not for error reporting..N # SyntaxŮ Ү# See [the guide](index.html#guide).֮&  macro_export  span expr tts tt   crateƲ diagnosticȲ ҲӲ Բ spanղٲ۲ crateܲ Level Warning tts  emitT Emit a warning. Warnings are not errors and compilation won't fail because of them.W **Does nothing on stable** # Syntax # See [the guide](index.html#guide).&  macro_export  ߴ۵ tts tt ص׵ crate emit_warning ѵ crate __export proc_macro2  Span call_site ŵƵǵɵʵϵ˵ tts̵ еٵ6 Shortcut for `emit_warning!(Span::call_site(), ...)`.9ȳ **Does nothing on stable**̳ # Syntax # See [the guide](index.html#guide).&  macro_export ȴT var ident var ident¶ȶ helpɶͶ identζԶն׶ msgض۶ exprܶ let var if let Some msg msgܷ var suggestion ҷ stringify  help msg÷Ʒ to_stringǷ зѷ else޷ var var ident help ident span expr msg exprø let͸Ѹ varҸָ ifظ let۸ Some߸ msg msg͹ var span_suggestionù span into stringify  help msg to_string ¹ elseϹԹ var var ident help ident msg expr rest tt  crateƺ __pme__suggestionsȺ ںۺܺ varݺ help msg crate __pme__suggestions  var rest  var ident help» identûɻʻ̻ spanͻѻ exprһ׻ڻ msgۻ޻ expr߻ rest tt  crate __pme__suggestions   var help span msgü crateļɼ __pme__suggestions˼ ݼ޼߼ var rest   var ident help ident msg expr let var var suggestion ɽ stringifyʽ ӽԽڽս helpֽ۽ݽ msg޽ to_string  var ident help ident fmt expr args expr  let¾ varþǾɾ varʾ; suggestionξ ؾ stringify  help format  fmt args  var ident help¿ƿ identǿͿϿ spanпԿ exprտڿݿ msg޿ expr let var var span_suggestion span into stringify  help msg to_string  var ident help ident span expr fmt expr args expr  let var var span_suggestion  span into stringify  help format  fmt args  var ident help ident msg expr rest tt  crate __pme__suggestions  var help msg crate __pme__suggestions  var rest  var ident help ident fmt expr args expr  rest tt  crate __pme__suggestions   var help fmt args  crate __pme__suggestions  var rest  var ident help ident span expr msg expr rest tt  crate __pme__suggestions   var help span msg crate __pme__suggestions  var rest  var ident help ident span expr fmt expr args expr  rest tt  crate __pme__suggestions  var help span fmt args  crate __pme__suggestions  var rest  var ident help ident msg expr crate __pme__suggestions  var help msg var ident help ident fmt expr args expr  crate __pme__suggestions   var help fmt args  var ident help ident span expr msg expr crate __pme__suggestions   var help span msg var ident help ident span expr fmt expr args expr  crate __pme__suggestions  var help span fmt args  var ident help ident msg expr rest tt  crate __pme__suggestions   var help msg rest  var ident help ident fmt expr args expr  rest tt  crate __pme__suggestions  var help fmt args  rest  var ident help ident span expr msg expr rest tt  crate __pme__suggestions  var help span msg rest  var ident help ident span expr fmt expr args expr  rest tt  crate __pme__suggestions  var help span fmt args  rest hdoc  hidden޵  macro_export %"Whfpi/sqKttu'wxzU||}f}}}<~~|C}8-1"]b68 ߉3`d%gk$nMqAtRE\DTrA8=>ګʭ0b0^X5dq(NJ s?A>q([ndR>e3Ru6P X2XNs =&3'?(n(****+&,,-3455%$Whfpi1sqMttu)wxzW|| }h}}}>~~~E:/3$_d78"5`d(gk'nPqDtUG^FVsC!9=>ܫ̭2d2`Z7es*PLt?A@s*]tfT@g5Tw8R ^3ZSu C&5'A(o(****+(,,-4455%%Whfpi4sqPttu*wxzZ|| }k}}~?~~F;04%bg88%8`d)gk(nQqEtVJ_IYtD":=>ݫͭ3e5c]:fv-QMu? ADw.awiWAh6Wz;U_6]VxF&8'D(r(****++,,-4556Vhp&sMsvtvFx9z%|P||}r}}}~.<oօdž,XЇ+afeQh`lSokrAué=QKܨS\8:ic@iFzC^!9~#gZHzGMpcKM<SH~)'5(g(****{+O,,--455%*Wrhfqi:sqUttu0wxza||}r}}~E~~MB6:dž,in>8ň,=`d0gk/nXq Lt ]OeN _z!I(?=>ҭ8j:icĿ@k{3XS!{?AK~5g~p^G]A[f<c\~M&?'K(y(****+0,,-4 556V*fUthua|~ yiň=Oe !oĿ` XK5&G]\~*h+,j-ifqi:sqvLx?z+|e||}x}}~~4Bu܅{͆2jn>8ƈʼn _z&?=>Xaò?nhȿEk{3d'{?AM7m~^,Mn<]i!B"`M&d'K(****h+,T,l--42557ifqi>sqvTxGz3||}|}}~8FƁy ц6rN8ɉ,0cţO=>\i±{uN1~8m9?-Aran'i'N(Y,-755j|mӲҿP:`k+,o-c*iqEsvdxWzC||.}}}~JVӁ F ӉJj isϱ[>.wIr/94dp'_(*c,->55ifqiEsqluvexXzD|q||.}}}~~JVӁ ~Ft^8Ɉ ӉKeNjϣ )Y=>irt=бڲBٿ \H>/ZxK?7AXBr /Pq?h9$E4dV&p'_( ****s+,c,w--4>557iqKsuvmx`zL|w||6}}}~~R^ہTżψۉ{p/ q|EݱJjD>r5Z^Hx&5Yz'HnH -NCj\&v'e(****y+,q,}--4D557u}.t7Kg(j)r8=>o O_ @A(^&x'*v,4F57hp%sd<Jۨ>r?:&c8AqBYGJ('4(*,4558)=Qey-AUi}&:Vj)=Qs8] * C a z  4 R f  ) = Q o  C d  , @ T h | /CWw7Nr(>Tk=Ti~ ;[|9_:dBWlH])C^s1Ji)Lf{0Ki#8Mbw2FZn"6J^r&:Nbv*>Rfz  . B V j ~ !!2!G!\!q!!!!!!!""."C"X"m""-AUi} 1EYm*FZy-Ac(Mq 3 Q j  $ B V t   - A _ s 3 T    0 D X l 3Gg '>b.D[ -DYn+Kl)O*T2G\q8M3Nc !:Yt<Vk ;Yt(=Rg|"6J^r&:Nbv*>Rfz.BVj~  2 F Z n !"!7!L!a!v!!!!!!! ""3"H"]"r""7  1342L )   &8BA6?:<>=79;{hromsn,1  11144     3 22 7                       ڄ '                                                         ҂ ҂         )))))**     Ć * *  ) )))))))))         Ć  Ć  HHHHHHHHH>>>>>>>==777,,, ,,,,,,3,,,,,,,,///////###%#############%%((((((((%%%$$-,,,,0000000%D%ڃڃۃ11 Ć          cratenquote+allochquoteVquotePquote$cratequote$cratestdq>quote $crateuquoteL,,corefiquoteF&stdC corecWquoteQQcoreKquotestd$crater??core|quoten9quotepquote-crateH'std !core^quoteLquote coreFquotequoteo::coreX4quoteqquoteM.cratekquoteK((coreequoteD"stdSquote coreGquotestdsAquoteY5quoterquoteN/cratellcoreJ))core #core corestdtBquotep<quote0quoteI**coreE$stdUquoteIquotequote$crate $crate::quote_token_with_contextIt$crate::quote_tokenz$E% $crate::quotepx $crate::quotesAxt$crate::quote_token_$8%n$crate::__thread_local_inner Bٌ thread_local_internalscfg_target_thread_local thread_local$crate::quote_token$T%$crate::quote_bind_into_iterŞ {ğClone Z6;core_intrinsicsderive_clone_copy Jpanic 2!ӥlibstd_sys_internals D $crate::quoteFx stringifynڃ9fo $crate::quote_token_with_context[I7c$crate::quote_bind_into_iterŞ ]ğ$crate::__thread_local_inner Bٌ thread_local_internalscfg_target_thread_local thread_local $crate::quoteUxformats!ICopy Z=:core_intrinsicsderive_clone_copyKpanic 2#ӥlibstd_sys_internals E$crate::quote_token{$H%$crate::quote_tokenh$j%$crate::quote_token`$;%p $crate::quote_token_with_contextI$crate::__thread_local_inner -ٌ thread_local_internalscfg_target_thread_local thread_local$crate::quote_tokenT$3%Xabort_call_siteuU$crate::__export::format_argsI(+̌ fmt_internalsL$crate::__thread_local_inner  B%ٌ thread_local_internalscfg_target_thread_local thread_localF$crate::quote_token|$J% $crate::quote_token_with_contextIt stringifyڃkf$crate::quote_tokena$=%q $crate::quote_token_with_contextIg$crate::__thread_local_inner -ٌ thread_local_internalscfg_target_thread_local thread_localDebugxCcore_intrinsics3 $crate::quote_bind_next_or_breakŞ  $crate::quoteX4xY$crate::quote_token$O% $crate::abort֩J-TM unreachable  quotezx $crate::quoteKx$crate::quote_tokeni$m% stringifyqڃ>fr $crate::quote_bind_next_or_breakŞ d $crate::quote_token_with_context[I7fz PartialEq 7?core_intrinsicsstructural_match  stringifyڃPfquote|!x$crate::diagnosticM:.SN$crate::__thread_local_innerF -&ٌ thread_local_internalscfg_target_thread_local thread_localH unreachableˆ  $crate::quote_tokenj$o%$crate::quote_tokenb$@%s}nDebugxCcore_intrinsics3 $crate::quote_token$R%Debug ZxCcore_intrinsics3IDebug xCcore_intrinsics3Cb@quote]quotea=quote[7quotetquoteTquote{HquotezEquotequote %stdquoteT3quoteimquotehjquote|Jquotegquotedquote{quote_8quote`;quoteRquoteOquotejoquotestdstd $crate::quote_token_with_contextvIDz $crate::quote_token_with_context[I7h $crate::quote_token_with_context[I7b $crate::quote_token_with_context[I7_ thread_localMˆ thread_local_internalsderiveZA  $crate::quote_token_with_contextINderive $crate::quote_token_with_contextvID{ $crate::quote_token_with_context[I7i $crate::quote_token_with_context[I7`!$crate::quote_tokens_with_contextϪ $crate::quote_token_with_contextPI2T $crate::pounded_var_with_context;~ޚ $crate::pounded_var_with_context;wޚ $crate::quote_token_with_contextIN thread_local[ˆ thread_local_internals $crate::quote_token_with_contextvID|!$crate::quote_tokens_with_contextsϪ!$crate::quote_tokens_with_contextfϪ $crate::quote_token_with_context[I7j $crate::pounded_var_with_context;`ޚ $crate::quote_token_with_context[I7a!$crate::quote_tokens_with_contextZ6Ϫ[ $crate::pounded_var_with_context;Yޚ $crate::quote_token_with_contextIN thread_local^ˆ thread_local_internals derive6 deriveP`quoteZ6quotewquotevDquotequoteNquote~quoteP2quoteYquotefquotesquote!$crate::quote_tokens_with_contextO1ϪP$crate::quote_each_tokenYy&5Z$crate::quote_each_token.u$crate::quote_each_tokenc.W&$crate::pounded_var_names_with_contextЗq}&$crate::pounded_var_names_with_contextЗq_&$crate::pounded_var_names_with_contextЗqv$crate::quote_each_tokeny&r&$crate::pounded_var_names_with_contextЗqX!$crate::quote_tokens_with_contextMϪ!$crate::quote_tokens_with_contextuCϪvXquote}quoteMquote_quoteO1quotevquoteuCquote$crate::pounded_var_namesɲJu$crate::pounded_var_namescɲJW$crate::quote_each_tokeny&0O$crate::quote_each_tokeny&L$crate::quote_each_tokenty&Bu$crate::pounded_var_namescFW$crate::pounded_var_namesFu E  KS &H2 = v %I)&J| % qvO  jb)%V n >/)%    )$&1<)%1&z  b1V >&i U)% ") &<c%$) ^[ 7   "% %)H%5  `^.G}\4[)K&!&$+!B$t4 #3S*( "*g*(N t"%&7'w)*&G($'$Z|#kR^(8#)n)*&'2"7'!k!: \/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro-error-1.0.4/src/lib.rsҐ9yDFSI_YaY8bTLW@ C]6^RHC0[^(T_QPLU"YA(! 9 F8K@L]`SM#CVTT.RXH`7UV?"UV[^]3;J'VO,N![['V#]@5 7 PR5 aAOUU*SZ(%57" WEWHYSYZIVX[WF^ h\!5/+AA++P\c>>K[H@)4&1;   I- 5!2XV\$4NG2"X8 Y$9Q R6*R6S5<T@^L7FD:$( 3&; "3/ .=N9?""&?//!!. (# ;)0 <:Xc 2#!"o !d!!d$!d%!d3e=%2G& %e 0e,+ .e Ҳ݅^/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro-error-1.0.4/src/dummy.rs\8p4Qڿ5AII<!<"4!+F%/ %&)NU  %#lN-IIFU!=#5IG&4 ",G&0 &'-JP0&>@KL*"/*! 19ǧ躒c/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro-error-1.0.4/src/diagnostic.rs\6au`aF&"( +&N3J%R"IU?TSX?K`W?fJYW?fJ$U! P/ OB OB K8?BH# S? `f> 31B Yf> +1B >$EZC,+/V:, E/! 02#!!  #I*+6#1.$9.3,3$$B+ED " a ! %,, ''1`*!%'%1-KP4L<=DCC1G8-%#+3 9=PA9  ̧֞ɿ_/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro-error-1.0.4/src/macros.rsw<8)X-RW"2S '7O! !! #i6& 5 >! !! #i\5 @! !! #i+& /! !! #iPOI>=@=/16@ '*#KAN 'S@ ')$*;CO '$XX '#L: '&Z"/-@ =-S >95LB5.I?$& <\M)& =85ND5KA5\M5/7@B=@NK>BONLK]W̉_/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro-error-1.0.4/src/sealed.rsQ7ƾ"DZѮoe/home/seth/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro-error-1.0.4/src/imp/fallback.rs u#^= "%!* -<2$EM嬔proc_macro_errorx86_64-unknown-linux-gnu-ca8aa686373e1dfe㜗 91qF_E   d