rust ݼ#rustc 1.98.1 (48a229cea 2026-09-01)ÁûÊÆÍRLñ.åSÛAúwjL-df1bddb45adbe94bÁ±ò‰<å%Z‰>¸64‡ËV`-2d2ab9fb0fe1def5ÁŠûinputÁñ 'aÁ ” is_emptyÁ ¶ read_allÁ‚Ž� as_slice_less_safeÁ  into_valueÁÁ”Á”no_panicÁÁ˜ getÁsubsliceÁ Ѷ‹readerÁ$$$$ReaderÁ(Á(š(Ÿ$,ñ$.Á.˜ .at_endÁ.peekÁ. read_byteÁ. read_bytesÁ.read_bytes_to_endÁ. read_partialÁ6‚6Ž6�.skipÁ: . skip_to_endÁread_all_optionalÁBÁB‚BŽB�—GÁG�JÁLÁLŽOÁÞQÁQbytesÁTÁVÁVŽYÁ$ EndOfInputÁ[ $$^Ž$$añ$cÝ$$f•N88888 8 8888X888!8"8#8,8-8-8-818283848586868:8<8_8b8b8b8d8g8g8B8ˆGG—I�E ôzÇš'Á…‘ ù ‘ ŸgGG—I�E ôzÇš'8¬‘  Á ¬‘ QQÞS±ŒUÊoÖòÁˆª …ª ù ª Ÿg((Å*š$+Ÿ$«»å²&„8ˆ[[\å Îw ö#•»…¿ ù ¿ Ÿg¿ Ì¿ �Ç¿ ÷±¿ ¿ JGTQ][LGVQ^[OGYQ`[G,(a[GGc[e[f[ˆU…ù Ÿg¬Ì �Ç÷±(•šN#(GG—I�E ôzÇš'] ×gpzÜ€tƒ Qüæ@ G ¥¬ ü« �üÏHj×$Ñ › ,½ QQÞS±ŒUÊoÖò±±<rÓ,•î õ¤€ 3 š Gÿ ý×è¨ã´i¨˜±ü2T¶TÈ´¨Uÿ!i }ÿ!i �"i]Æ ü‚DüŸD!‹ýÐ!Di´wœ TÓ$œ‡,’¨,¯“¦c ³wœ È,µTœ´¨„œ-À ü…;ü÷;"[“,š‡,�¨,‚F¡u L¨X,À´ü²I (œ“ Å4Ôˆ Ý„ÝTâ  #  2ÿ Ž#‚ ((Å*š$+Ÿ$«»å²&„$ÝŽ— ì­%η UÈ·  ™4›  T˜ ÀœŽ� ¡ Ý ã|ĤÀ ÀœËÑ Ór r ä�ü‹Ù« ”¸  €Ñ5­¸   Àœ¸Ä¬©^—¯fÑÕš¸  ÊüÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwßÑË ³¸  ¼ í í   [’êñE¿» u¹»Õ# Ú»  €Ñ•à» ÀœËÑ ñ»{‚½ î t{„ ä·  ¯ËÅê·  Êü’Ë �¸ HŒÝ  mË o ³ ¹tû 4œ  “„¦ ,± † ´¨„ * Ôœ  µ  y ­´½/ü¤ÀüДDKRüƒ~0”´üáPdÒý�·Ä×`ËÑiýá·!  ý�¸$  üõG1D�[ ". ý캗Ü`ËÑÑÂåÖ»ýÑé$”ÉÑmä»ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwËÑdˇ,¤Ñ|«�$¿šÙËxÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^’Ëȳ"ǖϘɒËÞ©ËÑÁåê-á· Ëf ÑG ’/ “ã “Ó ¨ã ê5Ö»Ñ*]´À(incomplete_readÁ<readÁEš#Ç ÆÆ þ ŽÄ ŠàÑÆËÌËÒÑØ�ÞÑä¡ Tý´¨Ûüÿ\üÆG#¤Á¨D£‡,™ ?T¡´±{´œƒ×$ú ¥Üš7 QtÁ G »ÂüïS‹eý¥ç0”Æ´×4¶ü‹JmÂç”×$‹¨,÷´²�u¶ GÕz×$²´,“� ¤(ëðX#(´4 ´>GQ7 Q—‹´$ô¨,à± ‹,Š7 Q �‹´}¨{¨]±Œ‹Tਕ°3j]·3j / Á3jý™4 j ý”4&j Å™ œ  ¹4jý­3»jY%Ú4j řǙș­É™Ê™àË™óG*¤�R{9 ¶.y ç4j÷ü«LýЗ�iÕwœ “4ëýû2ójùnœ MΘiû.\ʦ+,¶“ ½¨Š“‰¶.S2Ÿ6•¡»ŒØTب ç““QÙÞ^     ÿ_jýï`6jýñ`4j-Šaj    }éj  œ Àj ýÏ&j  ýý.j ›  ¬j t ¤aj �ýê`åT­'[@å\@Å4¹'(Aü‚å&ü‚HE untrusted.rs: Safe, fast, zero-panic, zero-crashing, zero-allocationÁüË(% parsing of untrusted inputs in Rust.Áô�üøB? git clone https://github.com/briansmith/untrustedÁ»�ü¿EB untrusted.rs goes beyond Rust's normal safety guarantees by alsoÁü…<9 guaranteeing that parsing will be panic-free, as long asÁüÂKH `untrusted::Input::as_slice_less_safe()` is not used. It avoids copyingÁüŽ KH data and heap allocation and strives to prevent common pitfalls such asÁüÚ KH accidentally parsing input bytes multiple times. In order to meet theseÁü¦ OL goals, untrusted.rs is limited in functionality such that it works best forÁüö NK input languages with a small fixed amount of lookahead such as ASN.1, TLS,ÁüÅ LI TCP/IP, and many other networking, IPC, and related protocols. LanguagesÁü’ LI that require more lookahead and/or backtracking require some significantÁüß OL contortions to parse using this framework. It would not be realistic to useÁü¯ :7 it for parsing programming language code, for example.Áê �üî 2/ The overall pattern for using untrusted.rs is:Á¡�ü¥OL 1. Write a recursive-descent-style parser for the input language, where theÁüõJG input data is given as a `&mut untrusted::Reader` parameter to eachÁüÀNK function. Each function should have a return type of `Result` forÁü�OL some value type `V` and some error type `E`, either or both of which mayÁüßJG be `()`. Functions for parsing the lowest-level language constructsÁüªNK should be defined. Those lowest-level functions will parse their inputsÁüùFC using `::read_byte()`, `Reader::peek()`, and similar functions.ÁüÀFC Higher-level language constructs are then parsed by calling theÁü‡)& lower-level functions in sequence.Á±�üµFC 2. Wrap the top-most functions of your recursive-descent parser inÁüüIF functions that take their input data as an `untrusted::Input`. TheÁüÆKH wrapper functions should call the `Input`'s `read_all` (or a variantÁü’NK thereof) method. The wrapper functions are the only ones that should beÁüá+( exposed outside the parser's module.Á��ü‘PM 3. After receiving the input data to parse, wrap it in an `untrusted::Input`ÁüâFC using `untrusted::Input::from()` as early as possible. Pass theÁü©OL `untrusted::Input` to the wrapper functions when they need to be parsed.Áù�üýPM In general parsers built using `untrusted::Reader` do not need to explicitlyÁüÎOL check for end-of-input unless they are parsing optional constructs, becauseÁüžHE `Reader::read_byte()` will return `Err(EndOfInput)` on end-of-input.ÁüçNK Similarly, parsers using `untrusted::Reader` generally don't need to checkÁü¶OL for extra junk at the end of the input as long as the parser's API uses theÁü†OL pattern described above, as `read_all` and its variants automatically checkÁüÖNK for trailing junk. `Reader::skip_to_end()` must be used when any remainingÁü¥?< unread input should be ignored without triggering an error.Áå�üéIF untrusted.rs works best when all processing of the input data is doneÁü³DA through the `untrusted::Input` and `untrusted::Reader` types. InÁüøJG particular, avoid trying to parse input data using functions that takeÁüÃMJ byte slices. However, when you need to access a part of the input data asÁü‘DA a slice to use a function that isn't written using untrusted.rs,ÁüÖ.+ `Input::as_slice_less_safe()` can be used.Á… �ü‰ HE It is recommend to use `use untrusted;` and then `untrusted::Input`,ÁüÒ NK `untrusted::Reader`, etc., instead of using `use untrusted::*`. QualifyingÁü¡!MJ the names with `untrusted` helps remind the reader of the code that it isÁüï!# dealing with *untrusted* input.Á“"�t—" # ExamplesÁ¦"�üª"KH [*ring*](https://github.com/briansmith/ring)'s parser for the subset ofÁüö"%" ASN.1 DER it needs to understand,Áüœ#NK [`ring::der`](https://github.com/briansmith/ring/blob/main/src/io/der.rs),Áüë#OL is built on top of untrusted.rs. *ring* also uses untrusted.rs to parse ECCÁü»$KH public keys, RSA PKCS#1 1.5 padding, and for all other parsing it does.Á‡%�ü‹%LI All of [webpki](https://github.com/briansmith/webpki)'s parsing of X.509ÁüØ%=: certificates (also ASN.1 DER) is done using untrusted.rs.Áü—&:https://briansmith.org/rustdoc/Álž&$Bû—G>å[@å+\@Å(AhknLÞ&,â&GÙDŽÅ4˜(A,†(*ü² #üÝGD The value is intentionally omitted from the output to avoid leakingÁd¥ secrets.Á8iiÜ  güÜ Dß jkl jÜ k€g€gŠ‚gê ûcƒg²ƒûcØ«q¢1È¡l…ƒBÿ ã  8$ä œ ê ”Õ Á  ‘ Ú ü« *üî 85 Construct a new `Input` for the given input `bytes`.Á$¸ • ‘ Bÿ  Á±®ô‚ü²=: Returns `true` if the input is empty and false otherwise.ÁD‰m m‘ Bÿ  ’ Á$“Ô…üÌ&# Returns the length of the `Input`.ÁŒn n‘ “Bÿ  � Á$‘ü‹ŠüÆIF Calls `read` with the given input as a `Reader`, ensuring that `read`Áü”KH consumed the entire input. If `read` does not consume the entire input,Áüä" `incomplete_read` is returned.ÁD’p p‘ Ñ�³"Bÿ ‚Ž� ¤ þÆ� ›þÆË žþÆÑ ¡o‹#� o((Å*š$+Ÿ$«»å²&„Áüí'o�#�çȳ"dˆ Á�ËÑ$¥Å$â$#¿Á¼¾¹»üÿ,üêHE Access the input as a slice so it can be processed by functions thatÁü·52 are not written using the Input/Reader framework.Á”†q q‘ • Bÿ  ™ Á$šüá5Tï‘ ª Bÿ  Á“üµ%Á‘ ®ºüï $ò• ‘ Bÿ Á�aüÆ0Á‘ ®Ëü‹+$Žª ‘ Bÿ Á�Édé&Dí&Q”¨Áª !"#­üÏ)Ü• ª Bÿ Á±Œü«*²s sª “řǙș­É™Ê™àË™óG*¤�R{9  sœ Bÿ ¶ Á$·Ÿ¾ü‹BD’t tª š7řǙș­É™Ê™àË™óG*¤�R{9 ª Bÿ › Á$œ¨*<î� � �  Ï8ôŸD¦u uª Bÿ ¯ !Á$°Ô÷þv vª “Bÿ ‚ "Á$ƒüÆ,”Íw wª • Bÿ à #Á$áT÷&4û&([\ÙDŽ$&—,˜G$'>,†(*¬Ó ü¡A> A read-only, forward-only cursor into the data in an `Input`.Áã�üçKH Using `Reader` to parse input helps to ensure that no byte of the inputÁü³DA will be accidentally processed more than once. Using `Reader` inÁüøLI conjunction with `read_all` and `read_all_optional` helps ensure that noÁüÅOL byte of the input is accidentally left unprocessed. The methods of `Reader`Áü• IF never panic, so `Reader` also assists the writing of panic-free code.Áß �üã LI Intentionally avoids implementing `PartialEq` and `Eq` to avoid implicitÁü° " non-constant-time comparisons.Á4Þ Á))ñÈ«»å²&„*+å Ôï ,ï $((ª D�  � $((“ü¨ $üœ JG Avoids writing the value or position to avoid creating a side channel,Áüç @= though `Reader` can't avoid leaking the position via timing.Á8xxÿ - g-üÓ DÖ yz{ yÿ z€g€gŠ‚gê ûcƒg²ƒûcØ«q¢1È¡{…ƒBÿ, Ú , -8$Û œ á œÍ Á//ñÈ0123456:<Ò üƒ$üç A> Construct a new Reader for the given input. Use `read_all` orÁü­C@ `read_all_optional` instead of `Reader::new` whenever possible.ÁŠ‘ ñÈBÿ.. 0ÁšŸäõü‡HE Returns `true` if the reader is at the end of the input, and `false`ÁtÔ otherwise.Á4ü| |ñÈBÿ. ƒ. 1Á$„üÓ!üÂKH Returns `true` if there is at least one more byte in the input and thatÁü’.+ byte is equal to `b`, and false otherwise.Á$Ú} }ñÈœ Bÿ. ß. 2Á$à˜™"ü¸5ôü Reads the next input byte.ÁŸ�ü§JG Returns `Ok(b)` where `b` is the next input byte, or `Err(EndOfInput)`Áüö/, if the `Reader` is at the end of the input.ÁL¿~ ~ñÈÇJBÿ. É. 3Á$Îü¾OüÖEB Skips `num_bytes` of the input, returning the skipped input as anÁd  `Input`.Á±�ü¹IF Returns `Ok(i)` if there are at least `num_bytes` of input remaining,Áü‡$! and `Err(EndOfInput)` otherwise.ÁTÅ ñÈ“ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw‘ ¿ Bÿ. Ð. 4Á$Õ¾d}/ü‰0ü–IF Skips the reader to the end of the input, returning the skipped inputÁ”ä as an `Input`.ÁŒ�€ €ñÈ‘ Bÿ. ¢. 5Á$§üë‹ü¢LI Calls `read()` with the given input as a `Reader`. On success, returns aÁüóKH pair `(bytes_read, r)` where `bytes_read` is what `read()` consumed andÁüÃ# `r` is `read()`'s return value.Ádò‚ ‚ñÈ�ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw‘ ËÑBÿ.‚7Ž8�9879 ˆ .©È ÿ¹È ‚ ÉÈ … �‹#� �ñÈüÎ '��#�çí³"dé  6Á�ËÑ$� â$Æ:uwz|�üß#Büª"# Skips `num_bytes` of the input.ÁÒ"�üÚ"Iµåü¨#$ˆæ$æ#ƒ ƒñÈ“š}Bÿ. ë#. :Á$ð#¾d\8Ë$:�;�;�;;:Î~ìž%üÞ$-* Skips the reader to the end of the input.Á\¥%„ „ñÈå8Bÿ. ±%. <Á$¶%Œ'd’'Á,ôŒ'¸,»,ž,¡,üî(¹üÆ'IòÄü�(EB consumed the entire input. When `input` is `None`, `read` will beÁ¼Ö( called with `None`.ÁŒõ(řǙș­É™Ê™àË™óG*¤�R{9 ‘ Ñ�³"BÿÁC‚DŽE�FDFEC©È ‹)¹È Ž)ÉÈ ‘)Œ‹#�řǙș­É™Ê™àË™óG*¤�R{9  ŒñÈü÷)/Œ�#�Øô³"dš* BÁ�ËÑš¦0Å$¤0â$¢0‡)ÇÉÌÎÑÓ¤£ü¢FC A wrapper around `&'a [u8]` that helps in writing panic-free code.Áé�üí*' No methods of `Input` will ever panic.Á˜�üœL�Øüé"æØ,®ÁHH‘ E ôzÇš'I´Ô¾,¾GGª ¦¦¦ÁKK‘ XZ¦ÁMM‘ N†N‚„¦¦h h‘ ‘ BÿL•L NÁ¦ œÁPP‘ ÷ù¤ù,„ÁRRª ŒUÊoÖòSŠ|”,”QQ• îîîÁUUª XZîÁWWª X†X‚„îîr rª ª BÿVëV XÁî òÁZZª ÷ù¬�'üñ%OL The error type used to indicate the end of the input was reached before theÁüÁ&! operation could be completed.ÁT›'¿ Îw ö#•»\¯'[[¿ >">'> ¿ J> ¿ _†_e>h>… …¿ ¿ Bÿ^ì&^ _¯> ó& ¿ Š> ¿ b gb¥>¨>†‡ˆ †¿ ‡€g€gŠ‚gê ûcƒg²ƒûcØ«q¢1È¡ˆ…ƒBÿa ù&a bG?œN?æ= ¿ dÎd>> >!>‰ ‰¿ å8Bÿc €'c dh>3> ¿ E> ¿ gù±ga>d>Š‹ Š¿ ‹¿ Bÿf „'f g»>î Â>Í Ò  ½  í  ‡  z ü ô ± ð Û ²  z , Ý É  C ä  þ  � £ Œ ÷  0  Õ  Š  R  |  » í ó µ@ s î ó …* .:https://github.com/briansmith/ring/blob/main/src/io/der.rsÁwebpkiÁringÁ$https://github.com/briansmith/webpkiÁ"https://github.com/briansmith/ringÁ ring::derÁ‡„Ƅфƒ…Ú„ª…‡„Ñ„ƒ…ª…Ƅڄù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²ƒÿƒÿ EndOfInput Õ†ä†õ†„‡õvøá‚A¯šä�;3�mÞăF,XŽ®óüªnd šq ©Ë>BgOоS^xs„'䣚åí÷‘xÜ(Ú«·�´q¬âÖ”÷cwm“¬qS6y€:ÿƒ �øE~”‚‘‚RD„þ ×uϸch�~R÷£V�Ãô˜j¢1fF7µª“Ã#G-š°ZôŠŒ}#7Ô·uÀØ!Ú:~¾PþžùrÔ‘ZèÄÉuñþex�RBN¬d1ófV'¶XÃzM_®…àD@5HÏI☠»=æÔVr… r+'%¯AŠW.r;4¸;a«úóý`(L£ÅŽ¢ø:üCã„c¼^á>Hã~ô�÷$#Ú�…  -SMØÀÙ¼†îÿ:å+,�6¶×*/Ï7r�#¼àU›ð碴uW,7FÒ`\î´tŠÖÜè ïã4Г�Jì<‡ÒEÉ}?@‡`F¼í;¨•NÚ®ø”çü†ÊÕ}ñªnÏâldO°à?Õø§Ñ^EÙ =ˆAø_2Ê¡Œ[ŽêÄ% Ó_3ô –ÛB|å Wž¾ÜÃÁŒ,=P§�|>÷¨Ð¸Hae¬�gä@�HnÌ=²Jékl¯U(ï°ÇP,)9� ÁZ—Ÿo½'¤'pèêg®ëý¬zËU6W%¸¥¨FLÄ¥6�?Ï�Øìß‚ÀË·�¯NÉ�å¶¿B4ý6*à* ƒ’)k6T±· x¾Þsƒ‰ófž¶Nò�W³Ìb =%Û2¢í UÕØ<­½gBE»±Òœþ‘u!ñ·n¬|€øÑ§ö¯æva Ñ|¹G§8Ã6Ž«oÿYÜñ<¢„Uïh&¢­ðàÉMTä2kf3V>7õ •Œ>ëMîÛ�,“ Rþq(…�8fÃë-•y^ „ŒW³‹¯•8sòÌ IØÚ}ªx#G\Z­#9¯™‚&iŽzm_‡ë°NakÄè][WޝÊf�Æß:˜P+¼\¯VKG6;âE™e«ø…=-2œ†<zn¬|—R4 œï—«- ‡ðY¶{2iPÚþnk$lÚŸ•!T~1:̰�ÀsöÓÏáu|oœï ‰†ÅÇ’{äujÚžceËtO zœŠ(x=løäX˜ð"B“`¦Üó “?‹ÙA@\mÆ0Ô{�,ÛÛ?Wsý/¥ Ý«!­½Ë¯{ƒ·j™�û¹ǹêëê¨f²©ûä½j½ñs¼�B³6¸ÄOœ*àll¦,L'|€ GåÐÍ÷U+èáBjn J0ô«¨ØÀ|³q•Òü±Ë-îºgKß–ïï�ZâÐsþ!vÉDWì†Zöâr"H«¥¨‚Öœû­˜�ß5÷0}€}Aqeú„¶uEx:Ø¥±‡�tÙ võÿŸ™ÊCÍ>ñ X çýÃXnš¹­ˆÀYÖà{¿Ôn†½€… Ý#ùÊŠÃhHþõ–ˆCDÇ‚‚‚º^_ÆiôGK__J_L_P_W_â_‘`À`GaáagbŸd…eÉeõe9fef¨fµfäf*gÖgxh¿higi»iñiói÷iý iÆlÞl÷lºminŸn{o9p$q:rÜs£täv™wàwnxrxyx|x‚x‹x¦z›{²{ð{|n|�|Í|ä|"}L} }Â}—~Æ~á~0B] €$€Ž€ €¼€¶^_°fÃiÓ_¨`àePfÌfºl«m� n�{è{ |‡|Â|};}¹}m~Â~Ô~>P€œ€®€    (µ^_ú_a¦a)bScHe�e f}f®füfBgîg×h*iiÁi�lÊlâlÒmOoüoÞpüqCsbt“uQw/x yd{Ÿ{1|–|Ñ|c}L~…~ø~tX€Ó€îK ___F_J_N_R_Ý_�`µ`»`CaÝaabsd€d�dšd€eÄeêeðe4fZf`f¤f±fÙfßf%gÑgth»hibi·iíiñiõiùi¼lÂlÚlòlµmen”nšnwo4pq5r×s�t¸vÅvÒvßv•wÜwjxnxuxyxx…xuz{zˆz•z¢z‘{—{¯{é{í{||i|ˆ|Œ|Ã|É|á|}}E}I}›}º}¾}m~”~Ã~Þ~+?Z€!€‹€�€¹€�#�*�0�7�>�D�J�Q�W�]�c�i�o�u�{���ˆ�Ž�•�œ�¢�¨�®�´�º�Á�Ç�Í�Ó�Ù�ß�å�ë�ñ�ö�û� __L_P_â_¹`aŽab;cud‚d�d0e…eîeõe^fefªfÝfäf*gÖg¿higi½iói÷i‰lÀlÆlÞlºm˜n7oäoÆpäq+sJt{uºvÇvÔv9wxrx|x‚xyyz}zŠz—z`{•{›{ë{||Š|’|Ç|Í|}G}L}¼}H~o~á~]A€¼€ �'�-�4�;�A�G�N�T�Z�`�f�l�r�x�~�…�‹�’�™�Ÿ�¥�«�±�·�¾�Ä�Ê�Ð�Ö�Ü�â�è�î�ó�ø�ÿ�Ï_q`¤`,aÈaLb¤c}dŠd—dke°eÜefLf�fÈfgµgXhµhùhMi¢i lÔlìl§mIn|nbopq r»sˆt;vÂvÏvÜvywÖwUx®y…z’zŸzw{©{ä{|U|ƒ|©|Û|}7}‡}µ}S~Ž~¾~Ð~:Lñ€}€˜€ª€�¿_e`“`$a¼a@bqcwd„d‘d_e¨eËef;f‡f·fg©gLhŒhíhAi–i�lÌläl—m=nknZop÷pr¯s|tv¼vÉvÖvmw­wIxvyzŒz™zf{¡{Ó{ô{H|r|˜|Ó|}&}z}¤}M~†~¸~Ê~4Fä €p€’€¤€û€Ñ_u`¦`2aÌaPbKdoe´eÞe#fNf“fÊfg¹g\h¹hýhQi¦i¢lØlðl©mMn~nfo#pq$r¿sŒt—v}wÚwYxMzy{­{æ{|Y|…|«|ß|}9}‹}·}U~’~À~Ò~!<Nõ€�€š€¬€ �û_a§a*bTcIeŸef~fýfCgïgØh+i€iŽlÓmPoýoßpýqDsct”uRw0x!ye{2|—|d}M~†~ù~uY€Ô€ü_a¨a+bXcJe effþfDgðgÙh,i�iÔmQoþoàpþqEsdt˜uSw1x%y3|e}ù~uY€Ô€æ_a’ab?c4e‰eùeifèf.gÚgxhÃhiki¾m;oèoÊpèq/sNtu=w™wx y|O}q~ä~`D€¿€× "zŒÃÍ\fpºäîø dŒd™dÄvÑvÞv‡z”z¡z-À² Q áX¶‹L.'“SÌ*ʵ !#ý%æ2†4�=„?É?ÉB¤ìd@±@ BVB¯ÿ° O ßV´‰ê®%‘QÊ(ȳ #û%ä2„4=‚?Ç?b@hK+J¯@ BTBÇB¿± P àWµŠë-&’RË)É´ #ü%å2…4€=ƒ?È?c@iK,K°@ BUBÈB0ag~`<aÖaZb^dye¾e-f�fgÃgfhi[i°iVnpo-pq.rÉs–tªv‡wcx`zc|•}%ù…€�³^_½_‘`Ée9f¨fµf»i‡l•min^{Ñ{ò{p|�|}$}¢}F~¶~È~2D €�€¢€²lˆ{º|d~¥l{{­|W~ˆ‹’–¢¦ª®²¹½ÆÍÜãòù 15<CGNUdhov€�“𡍵¹½ÁÎÕÜãçîòù (9Qdkry„ˆšž¢¦ª®ÆÍÔÛâéð÷û &-9=DHOVZarvz~…‰�”˜Ÿ£§®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†µl‹{½|f~Ô_®`¯`°`±`²`³`áeQfÒfÓfÔfÕfÖf×f¬mŠn‹nŒn�nŽn�n�n‘n’n |<}Õ~Q€¯€lKnKpKpKpKsKsKuKwK{K}K€KƒKƒKƒKƒK…K‡K‡K‡K‰KŒKŒKŽK�K–KjKyK�K’K”K–K‚ÿ‚Ù_´`æeVfØf±m“nè{|‡|}A}¹}Â~Ú~>V€œ€µ€-    †   q,ù&}©Ø core_intrinsicsÁfmt_helpers_for_deriveÁ¢g¡gõvøá‚A¯šÎ“R"[•ÄÎÉ´â…ÿ‚]´œõvøá‚A¯š-$ªPê°Á†Ö úûèõvøá‚A¯š)¯ 檢\žo$œu‚‚´®Çderive_clone_copy_internalsÁú Ì õvøá‚A¯šŸ†¼EtÓÍ  Ó úûèõvøá‚A¯šmk5¹Z_`ÜêG úûèõvøá‚A¯šÙ² Óº«»e,ì&}”V¯®ÇëÈð‰âõvøá‚A¯š£awÊ÷}é~€'eöi_®Çderive_eq_internalsÁ¢ŒÏ¾õvøá‚A¯šßX Õ  Ü õvøá‚A¯ššøZÃ`*”ü6 úûèõvøá‚A¯šÌj�ך»O§Éüã&,ê´œõvøá‚A¯š«Z¾lø ‚� í úûèõvøá‚A¯š?[¤ s¡Ñ£e,ë:®ÇëÈð‰âõvøá‚A¯š"š…è]~r+ úûèõvøá‚A¯š|öuœw7¤ ´+ úûèõvøá‚A¯š�5'À…Û.o$ó&{®ÇëÈú Ì õvøá‚A¯š%}¯¦·*½-É´Œ ´œõvøá‚A¯šÈ°öýÒW5¶L„'�ÀO_®Ç¢Ë¾õvøá‚A¯š«F¦¿° ‰ ³! úûèõvøá‚A¯š¸ b`Ïžze,•”®ÇëÈð‰âõvøá‚A¯š,2žH»‹èð( úûèõvøá‚A¯šNîÕàýROo$ò§®ÇëÈú Ì õvøá‚A¯šö€™šA à úûèõvøá‚A¯šWígq3x‰\¨A£)£M£e£1£Q£r£9£Y£%£=£]£-£E£a£5£U£!£I£i£m£v£Š¥§õ£Þ¥”§R¤:¦ù§¥Í¦š£;¥/§%¤ ¦Ì§¥¤r¦.¨±¥f§Ó¤Ÿ¦Š£¡¥§¤ü¥¼§•¤b¦¨+¥ò¦å£z¥V§B¤*¦é§Ã¤�¦L¨Î¥„§ð¤½¦°ODHT �·Þ6y€:ÿƒ � ¢´uW,'ÃzM_®…©ûä½j½vÄOœ*àllxÛB|å W59� ÁZ—Ÿ=r"H«¥¨�sòÌ IØÚXV�Ãô˜j¢Ú�…  -S"­½gBJ][WޝÊf]ø…=-2œa¨õ •Œ>ëSž¾ÜÃÁŒ6e¬�gä9@�HnÌ=:ó “?‹Ùo°NakÄè\}ªx#G\Yo½'¤'pèê>‘xÜ(Ú«úóý`(L£îÿ:å+,�6$MîÛ�,“ RTï—«- ‡ðd¶×*/Ï7r%ä�;3�mÞïã4Г�*1fF7µªZ­#9¯™‚ZÅŽ¢ø:üCãF¼í;¨•-r;4¸;a«Jì<‡Ò+³Ìb =%Û2Hkf3V>7ï‹REÉ}?@‡`,'%¯AŠW. ©Ë>BgO�Æß:˜P+^ñs¼�B³6¸wG6;âE™e«`“Ã#G-š°àD@5HÏI Ñ|¹G§8ÃN­ðàÉMTä2QÏâldO°à?0ch�~R÷£ ex�RBN¬’)k6T±· E�#¼àU›ðç&d1ófV'¶X|—R4 œcăF,XŽ®åÐÍ÷U+èázùrÔ‘ZèÍ>ñ X ç‡7FÒ`\î´(оS^xs„Õø§Ñ^EÙ 1=ˆAø_2Ê¡2ë-•y^ „ŒVujÚžceËtkóüªnd šqY¶{2iPÚþe²Jékl¯U;nk$lÚŸf&iŽzm_‡ë[†<zn¬bBjn J0{x¾Þsƒ‰óF�ZâÐsþ!v¦,L'|€ Gyß5÷0}€}Aƒ•!T~1:ÌgLÄ¥6�?Ï�Aõvøá‚A¯šøE~”‚‘‚R æÔVr… r+ÉDWì†Zöâ€:Ø¥±‡�tÙ…Hþõ–ˆCDÇŒZôŠŒ}#Hã~ô�÷$#!þq(…�8fÃU‰†ÅÇ’{äj÷cwm“¬qS "B“`¦ÜnýÃXnš¹­ˆˆE»±Òœþ‘uKu|oœï iO zœŠ(xl võÿŸ™ÊC†,=P§�7·�´q¬âÖ”g®ëý¬zË?!ñ·n¬|€øLѧö¯ævaMW³‹¯•8W¼\¯VK_•Òü±Ë-î}qeú„¶uEx„U6W%¸¥¨F@☠»=Ôn†½€… ŠÚ:~¾Pþž7Ô·uÀØ!Øìß‚ÀË·�Bô«¨ØÀ|³q|A@\mÆ0Ô{p(ï°ÇP,)<Ý#ùÊŠÃh‹­½Ë¯{ƒs|>÷¨Ð¸Ha8¢í UÕØ ÀYÖà{¿‰=løäX˜ðm'䣚åí÷¯NÉ�å¶¿BCŒ[ŽêÄ% 3¹êëê¨f²u<¢„Uïh&¢PÄÉuñþ†ÊÕ}ñªn/fž¶Nò�WGÓ_3ô –4°�ÀsöÓÏáhNÚ®ø”çü.·j™�û¹Çt‚Öœû­˜�‚6Ž«oÿYÜñONÿB^6ÿ?OTÿÿmÿQ)!3ÿ ÿuFrÿlÿÿÿÿtÿÿÿ.ÿÿÿuUQÿ)xÿ9ÿÿÿoHÿÿÿAqJiE\UÿX$aÿÿÿÿÿÿQVs,N ptsZÿBPPFÿ:8ÿÿÿÿÿ*OuVÿÿÿy;ÿÿÿÿÿÿÿ# fÿÿ@M)ÿqlcÿÿÿ ÿÿaÿr)nÿÿÿÿÿDÿ:;    "JF' 802 % t,ˆÔ¢ù±»�п²C,H¶é·S¹»x86_64-unknown-linux-gnuÁAðúžu†²‘ó¹Þ*ôF‡ untrustedÁ-6046503770adb7b5Áõvøá‚A¯š¨ùRó ›ú e�eèRö%ohhhThTh%¸go�µh��Ð�ššhhÐhÐhÐh¸hÐgÐÎGhŽÐ<hÐhÐ<h¸gÎ\\¸�¸š\h¸Ðh¸gÎÍ ><<¹'rust-end-file