rust äÏ#rustc 1.98.1 (48a229cea 2026-09-01)ÁûÊÆÍRLñ.åSÛAúwjL-df1bddb45adbe94bÁ±ò‰<å%Z‰>¸64‡ËV`-2d2ab9fb0fe1def5ÁŠûÀ GeneratorÁ´generateÁõ ƒ ñƒõ“Šƒ ˜   reconstructÁ “Šƒ ÷ set_indexÁreset_and_skipÁ word_offsetÁremaining_resultsÁ next_wordÁ&Š&ƒ& &next_u64_from_u32Á+“+Š+ƒ+ + fill_bytesÁ0 utilsÁ222next_u64_via_u32Á5Ž2fill_bytes_via_next_wordÁ7�7“7impl FnMut() -> ResultÁ2next_word_via_fillÁ;“;Ž2 read_wordsÁ>“>Š> >  seedable_rngÁCCCC SeedableRngÁGSeedÁG from_seedÁG seed_from_u64ÁGfrom_rngÁKŽG try_from_rngÁMŽGforkÁGtry_forkÁCpcg32ÁQ QMULÁQINCÁ unwrap_errÁUUUUUZŽZErrorÁZ try_next_u32ÁZ try_next_u64ÁZtry_fill_bytesÁU panic_msgÁ`impl core::error::ErrorÁUbŽUd'rÁdŽdreÁg'bÁwordÁiWordÁiiisealedÁmSealedÁnBytesÁn from_le_bytesÁn to_le_bytesÁn�n into_usizeÁmtË u t× të t�t„ m{Ë | {× {ë {�{„ RngÁ„next_u32Á„next_u64Á„ŽˆŽˆþ ˆŽ ˆŽ CryptoRngÁŽŽTryRngÁ�í�ù�Œ�Ÿ•Ž•í•ù•Œ•Ÿ TryCryptoRngÁœŽRngCoreÁŸŽ TryRngCoreÁ¡í£Ž£íBlockRngÁ¦ƒ¦resultsÁ¦ûªƒªŽ> U UnwrapErrÁ® ®Ž®óU²Ž²ñUµŽµ>U¸Ž¸ŽU»ŽU½Ž½ÝUÀŽU Ž•U ÅŽÅÆÇÿ 8 8 8 8¬888888 8!8"8#8$8%8*808085878;8>8K8M8O8P8Q8´8´8´8º8¿8Ä8Ä8Ç8Ç8]8^8_8_8…8†8‡8‡8Š8‹8Œ8Œ8’8“8”8”8˜8™8š8š8Gjn„��›ž¡…¦¦¤ ¨¼ ©ûFÎ�FÚ†BƒŸg§€#§Ÿg®®¯ê ±ó ŦEò±"Žöþ…þù þÌþ�Çþ÷±þþûhþ�þ›þjjn˜n¡„­�­�­›­ž­¡­ª¦¸® ¦²®¦µ®»®½®À®Â®Å®Z®•b®œklt{ˆŽŸ£…yŸg€# öù Ì�Ç÷±ûh�› j n„�ž¡í ü M¬ØÍ L¨  ô4³ð Y�œ Ý" †Ï3;XþÝ †Ý,5(ì ¦Ýñð>¬M§X §bÏã ÏíÝ´ ݾ�—åžàÏ€Tý  äìdð ×gì9Äð/4œ ÿT¤ Ý ŸgüìC,– ´dœeUÌ–üìh¬½ ¹dS¼½Úü«¯ ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwéĤĤŤí Ñâó:½ÖàM\Ö”,² €g€gŠ‚gê ûcƒgbufÁûcØ«q¢1È¡¹ ¨d¨d DebugStructÁ«dñ�d¬dÇ �d­d has_fieldsÁ�d»1âî¦9èÏ´Ù<ÛDÿeÿø ¶êñ¯‘•�¶øF–ÍìL©ÝŒ¸Ïü©!$³ ÝD5¼³ÑüŒEéž §L”éc Ý— Ï�&Jï “dû!Tû! ÷“"Œú!Š„¢"l¢" r•" °"Š . �" Ù"T•"Ù"Š &Ù"Šì•"$Ç"<Í"Ô¼" ¦ƒÜ" Û"ü»!¡üè!t ¦¦¤ ¨¼ ©ûFÎ�FÚ†B�$\Ò!�$$Æ!•"Š\ì!•"¬•"yÙ"N8�$öš%ïûH¼ F¢Ù"ŠvÙ"Š‚Ù"Š�"Ê"é�$ \®% d½%T½%�" Œ¼%мÚ%ÜÚ% ô%Ù"м”&Ü�&  �&Ù"Š  !Ù"Š @ Ù"<¹& 8Á& ÌýÙ"LÀ& ª#š%ÌýÌý¾Îý‚É>�ÌIFëTÙ" u k  Wü¹&3|Ê& øx•" „¹&ŒÚ&  üÊ&"¤‡'l‡'Ê",•'   ‚' Ù"Tú&Ù"Š &Ù"Š üú&!<¹'$Â' Ô®' ¦�$ü©'  Å™Ò$ü×%ž $ç' Å™Ò$%  ú' û' üÛ$ ; !üª%Ñü„&ÏřǙș­É™Ê™àË™óG*¤�R{9 Ò$d“%�$$î$  •"Œ÷$š%ª•"ˆQÙ"gÙ",ˆ&Ù"=Ù":éh Ò-Ñ š%ê(•"WÙ":$Ò$²š%é�$ãaû°›°¼ ^÷¡lÙ"ŠÕÙ"ŠáÙ"Š¥Ù"бÙ"Š�"Ž ³w•"jò/5á(±Â)YÊ"(�$ �$ ö* Ù"|é*Ù"Š &Ù"Š9š%äé*Tù* s•"gdù*‹+ üÆ*EÙ",Ù* Ò$,Ï*•"«Ù"ϸCÏÙ"ŠÚÙ"Š£1œLå+ å+Ù"$Tò+ û+Ù"ŠÉ‡T]  ¸[)ÿ$¤™,l™,Ê",§, ”, Ù"|‡,Ù"Š &Ù"Šü‡,&š%´,!ü§+� éÌ+ Ò$L´+Ù",¿+[/•"äÙ"ǰ=÷AoaÙ"ŠàÙ"ŠëÙ"Ь3gÊ"B4©0 ®0Ù"$Œ¾0LÃ0 !•"Š�$$¾0 Í0Ù"Š dÃ0,€1 „1Ù"ŠL�1�$Œ£1 š%ü�1%Dš1 �$D 5Üš1p ø0¬3tÿ~#Œ¿1LÄ1Ú6$¿1 Î1 dÄ1×1"üñ/æ é›0€5L‡0Ù" ’0�éc'§éÞ �$«.éžQ¤U€eÙ"Š›Ù"ŠÚ6Óõ7?¬3Ú6ñdÍ3,Ò3 •"Š�$$Í3<Ò3Tæ3 ï3Ù"Š ó3 Ù"üã3",þ3‹4#ü”3wüÁ3JÙ",±3ã1,§3Ù",Å3²÷OÆÙ"ŠÌ:dÁ7,Æ7Ì:$Á7<Æ7dØ7š%8å7 ÌýÙ"Lä7 ‘ýš%ê(L>)ó7$üƒ7püµ7>Ð-$¦7ã1,œ7Ù",¹7 š%¥ê(™%÷)ZÌ:øÄ=¨$î8dî8,ó8Ì:%<ó8,‡9T‡9 �9Ù"ŠL 9�$Œ³9š%ü 9%Dª9õ7?0ܪ9LÓ9 Û9Ù"ü„9c,Š: œý9  Ù"Š  &Ù"Š 9š% ,©: L©:  ±:Ù"$  'Ù"K Ù"Ìš:LŸ:Ú6$š: x ¤Ÿ:È:%ü³8•üÞ8êüñ9W•" Ò8€5LÄ8Ù"Lâ8ã1,ñÙ"éªÈ9Ü«.ÐÙ"mfé·Ù"Ù"1�.+q÷u�,õ9¾aÙ"ŠÁÙ"ŠÍÙ"ŠÌ:Éõ7GÚ63$‘<d‘<,–< ˜Šƒ6<–<,ë<  ë<Ù"Š ï<Ù"/  2Ù"Š0Ù"_ Ù"lã<œ„= Ù"Š  &Ù"Š9 ˜ŠÄÿ< L·= ¿=Ù"$ 'Ù"K Ù"¼ª= Ù"Š &Ù"Š 9 ùF ä¥= LÛ= ã=Ù"$ 'Ù"¬Ï=Ù"üà<¾,•> •>Ù"Š ™>Ù"/ 2Ù"Š0Ù" _Ù"œˆ>Ù"Š &Ù"Š 9ùFă>L©>ŠEŒ¼>ùFü©>%D³> ŠED5 ܳ> î> Ù"|á>Ù"Š &Ù"Š 9ùF¤Ü>lþ> Š?Ù"Tœ? ¥?Ù"Š ¾?<¹? ä? Ù"|×?Ù"Š &Ù"Š9ùF¤Ò?lø? „@Ù"ü™?{L¶@!̧@L¬@ !˜ŠŠE$§@!9 ¤¬@Õ@$lË@LË@ ®¡˜$.#&¬Ê@%Ü@ ˜&%)@˜9 &#< ñOY"#Z ñOì@(lâ@Lâ@½O(%'üÊ@% "'õ@*üÐ;¥ü…<ðü§<ÎüÂ<³)¡÷; ¦¦¤ ¨¼ ©ûFÎ�FÚ†BŠELé;Ù",‰< ×QÉÙ"l«<˜4Ç<˜4Ï<7Ù"®�.¶˜-4˜�Ù"ä�.ì˜�.F˜tÙ"ë�.ó‹é ŠED ùF;˜âÙ"ñ˜Z˜)Ù"N8éªÙ"¡G¡z˜’˜_f¡ë˜H÷M new_indexÁNloÁShiÁXÿùÙ"ŠÙ"ŠÙ"Š Ù"Š´Ù"ŠÀÙ"ŠýÙ"Š Ù"ŠŽÙ"ŠBÙ"ŠNÙ"Š÷Ù"ŠÙ"ŠTÙ"Š`Ù"ŠüDñµK¿ôN½OýO$ µB Ù"$ÐBdÐB,ÕBÌ:%<ÕBDìB$÷B T÷B ¬ìB,“C T“C   œCÙ"Š L°C �$ŒÃCš%ü°C%DºCõ7 ?0 ܺCLçC ïCÙ"ü�Co̘D¼˜D Ù•"DÕDP ÕD ÌýÙ"dÔD ª# ê($ÐD@+üÐD'„áD òw¾Z„ÐD$òD´áDd“Eš%, E8" E ÌýÙ"LŸEÄ=P4 ä“E$©E ìw•"¬“E 4©E4ËE|ËE4ÒE �RëªëªChunksExactMutÁóo請 óoðª chunk_sizeÁóoñª_markerÁóo9Wè¿p¹¾Z¤ DÒEßEdßE4ãE �R�p�pIterÁ pí óo¡p end_or_lenÁóo¢p™\óoÛê2ÝЫ•"� DãEüËE!ÛE ÞQ Ä\ ÷]X« ŒÛE4‹Fd‹F’F �Q²Œ²ŒZipÁµŒ—ÍJ¶Œ˜ÍJ·Œ÷ÍJ¸Œ¶ÍJÉ by­]òù^ÿ^ˆ,’Fü¥FQD¬F æQÁ_1•"Š�$ ½Z •"éUÿé4¥FÐÎ`üµF@ ü¬FJœ„G! !+!Ù"Œ±G# #+"#Ù"ì¥G$" $"+$Ù"äG&TäG$èG ÆQ÷]&+%4èG)'%LØG'#ÝG(%àî`4ÚH*¼ÚHtáH „t¾Z*,)„áHD‹I ,)t‹I +,,®I -+ ²IÙ"$ -äI 3(ŒäI \èI q•"3*2lèI( 12ÔäI 4öI ¥o•"½Z1Z0!DöI$ÿI 4 àýÙ"+,þI  ‘ý½ZàýàýÆâý’ür 1¡z÷Ù"0›4l/!XüÊI: |ÓI øx¾Z)DÊI/üãI .!üÓI1 „J 2TšJ 5 £JÙ"$ 5'Ù"K 5Ù"DËJ 9dËJ :9+ :9+ + 8:Ù"1 à ] 78$ÙJ =TÙJ <=9 è ] ;<‰ ß ] 6 7;A € ] >6 Ù"I Š ] ?6ŽiI ¯ ] A>Q ¼ ] B?É ® ] @AB @ù é !] C ±šá Í] E Å™‰¥‰¥ ArgumentsÁ‹¥templateÁûcŒ¥Çûcg‡@#éó ù �]] ù � ] Ê[Ù"Ù"C! ®]>Q ´]?Y À]E§DE,¾KG¬¯KL´KÚ6$¯KG+F „´KËK† 2"üêAá  0 ü¢B© üÀB‹ ü�D™ü¿Dçü…E¡ü¾EèüúE¬üïG­üËHÑüƒI™ ù ÿ Œ] ù Þ Ÿ] Hé—B€5LüAé`$‡BÙ"d¦BÙ"LÄBã1@ è Ù" Ù"  ½Z Ú Ù"ð é“ È9Å «.¹ Ù"$‘DÄ\TÃDé` ê(= Ù"S ÷]<‰EÐ-– §>Ü ê(à Ù"Ù Á_4ÂEù^] ù^v ÿ^ºÿ^ÓÙ"TþE Á_é‹�.+Ù"ø�.�.ÍřǙș­É™Ê™àË™óG*¤�R{9 î`Îÿ^ç©î`žé`DÏHÄ\—Ù" ‡I ümmWé5ümœümõ ¦e6¦e>•"Wùeä�.)ŽiŽiTŽi™Ù"ÜÙ"ò�.ìŽiŒÙ"¢üm¹Ži€ Žiq BÙ"lÙ"c±š²š³š~´šµšNeÁ¶š·šMatchÁ¨±vXç]! â ] řǙș­É™Ê™àË™óG*¤�R{9 ™jÆé Ù"#*destÁ3read_lenÁ@÷CßõchunksÁþsrcÁìzippedÁÕ num_chunksÁÂÂsÓ(dest_remÁA )¤< +left_valÁ1 > right_valÁ/ ?¦[ CÈ¡Ù"ŠÌ:> ³w¾Z õ7{ìY*·Zâ ìZ¶ Ä=K ‚\+ ¾\õ ñ]H ó^Í »_Š Å` îbã Þcy óuE êdù eÉïe~Ñf%¦eóóu'ƒk Ú6¶¦e ,·Fé`¾Fî`ÚFŒÚF\ÞFêd%lÞF#ÔÚF4ìF eEDìFüÄF1|ÊFÑf,ÄFBüÊF+ ôFõFí 1ü p éÃF Î` ç`d¶Fé`%î`ümÏŒq¦e•"(chunkÁ\ÂsVw êdF eÑfû¦eѦeÖ”ÆdÊ ’­Ætʘ&Æ �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw˜‘­ {€Œ3œÆm˜ô¼L¼½O.'Ø[ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¸Ä¬©^—¯fÁ{b† �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡Á{Ò|ì Ö”òdö½zò tö˜(òéz :    ,  œò m˜ôèLè½O . )„  [Ò|’É} * ªL�• ñO˜)@˜9 < ñO YZ ñOl� ŒŒ Àœ¡Á{Ÿ  5 ü›„ü´k¡¨¯ñüà?+29{ Ï}¬× ­Ç¡ ¸ÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^Ò|˜8ïzm»pfÒ|n˜±¡ äÁ‚eïz”»pýÒ|˜H¡k¡æ˜îõrngÁá®åÆ íŽ4¯‡Æ u ޼ –½z>éz½O]É}#½zKéz*½OÚÉ}6$t³d³ Ù“ "üž$„¢ìZžE ü¢ \ÕX*Õ ‘Pù^* "'ø*È{A PU ÆQù^ f ot € 3,Ì àé`Lõ\õ Š#‚é/3é)   24Ò¼ÒtÙÞc$ „Ù`+õ �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwº…� Ü   x} ‰ dõ mº…Œ¡\¥ qº…¡  l¥,€ [ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡}£‰Ms �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw飉±ŠÛ" ÄÔ¡4³ ¥oº…½ZJD³ü‹1|‘Ñf ,‹Tü‘+ ¼ ó tó D÷ ´w¾Z+ T÷, L– \– ܇$3é '`-– ʈB " . d– mº…Ô– \£ÿ‰ / l£.¡ [±Š™  •‹,# ³Ï $dÏ 4Ó¤Œ$%#DÓÞ 'LÞ &'X/Ü % àýÙ"&lÛ ïe#q%4" üº/ |¾Ñfº"ÔÎ!ü¾+ ï  4õ Àœé£‰3é üýa  ‹ L!ü‚ûù) 7(ü�ð&üëXZahµüȵüŒd    d (›‹lùé`³â‡lÇÄ\T‘Ù"Iù^êù^ù^úřǙș­É™Ê™àË™óG*¤�R{9 é`G ù^R»p%é`ÇÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^±Šº…‹Ј ⇻pȱŠÑº… é±ümñ ªŒ"ªŒ+é`ÌÄ\&–üm¯ªŒ� ó”7ЈnÖ•ˆ»pÓ±ŠÜ º…$ éümLüm³Œ–Ìùe‚Ù"˜üm¯ dstÁð³ô°sù�ÞæxO ŽïÆ òŽD»  Žî Æ ¨ Žó *´…¹ ìZ– ™†_ æ†f ܇©ÞchʈIÿ‰œ•‹W¤Œ…ÑfSªŒ+¬�܇Ìʈ¥ÿ‰S•‹³¤ŒòóuÄïeŸÑf~ªŒTâ‡%â‡,ªŒiªŒŠâ‡A<‘!  ”¥!  „¥! ÷¦e2Ð!dÐ!4Ô! ¨¦e½Z.DÔ!ü½! tÁ! ”޽!TäÁ!ø1½!!  �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwé‘»›¬~ƒ�¢ø!   ¬ç!„ç! p•" =  #2Ý![ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡}Üas �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw•"Üå�ÛØ þ! Ìä! Àœ•"Ü - 5ÿ! L T )üµ Ê� ‘  ;3ü�!r¡¨¯ü½!! Ïžœó  »›ã ¦e“ÊüÍüÎümÏüóÐüÑü[Òüó}µŒOƒDê^å�é)ñ›ié`  ¦e¼»pYå�b•"’¦e½�Žƒ²²IÆ žŽô3éXÒše…›$µ›üë›Ì¸�ÉžÚ¦e¦eùÏ Ì]#„­$\­$ Û½Z¹$$1à ]9è ] >•"ŠŽi‰ß ] A€ ]ŽiIŠ ]ŽiI¯ ] Q¼ ] É® ]  „è$lè$Ê" ö$Ù".ùé !] ±šáÍ] Å™™jù�]]ù� ]ƒk !®]Q´]YÀ] P <¬ç$Št %d %ìYü�% d“% ñw¾Z�%Aä“%É% .tÉ%DÍ% íw•";TÍ%ÔÉ%Ø% ÞQµpµpIterMutÁ¸pí óo¹pš]óoºp™\óo¥hECØ8G•"áªáª ChunksExactÁ䪬óo媻 óo檂\óoœå‘û¥ÇI¾Zï4Ü%\Ø%Ð3É% ‘P²Œ²ŒÍ^µŒ—ÍJ¶Œ˜ÍJ·Œ÷ÍJ¸Œ¶ÍJÉ by­]ò³¨…©R „ø3µ%½ Ÿ®³ ÆQŽªÅ ÍÒÞ ñº%à •"üm‰¬,¿%à‡¬üm”†&# „†&Òš-÷&ü&¢& d¢&4¦&…› &D¦&ü¢&#|¯&Ñf<,¿&´¯&ç&# "¬Ö&„Ö&¸�"9!äÏ&! ñ&# à üÛ#¡/?#>3ùÿ Œ]ùÞ Ÿ]üÙ$£ü‚%ú29üî%„$š%4•$üm†$·qªŽiäÙ"ŽiäŽi¶Žiª{Ù"¥Ù"œ¢r!â ]„s5š%<Ý$•"�…©4†%Ù"莪yŽª^³¨’ .»«.ÃŽª¤Å™Ç™È™­É™Ê™àË™óG*¤�R{9 ‡¬ò Žªþ»pt‰¬ümû¦e<ò%élé`›œ¢µ•"6¦ea Âsp¥t ¹t¦F ½–9°s3�¦ï ºæx¢²«r¯>•"ŠŽiø£Ê"*ƒkËìY|±§d‚¨­¨õˆª ³«'Òšõ…› Ñf¸�7¦e œ¿$Œ¿$ Ùš%Q`>8Ži|Ù"V‹D²% ¬½% œ½% ÷Hô:$ë%lë%4ð% ¨úµ½Z/Dð%üë%!„ù%ìZE Š&Ù"œù%L£&H4£&™†%"ø4–&Y< KPæ† \ ej  v  ‰,š&  àé`TØ&ŒÒ&,Ò& Q' $‚'¬‚'t‡'Þc$ „‡'”Ñ&ümü»&)|Á&Ñf ,»&< üÁ&#¥'t¥'D©'¬�& T©'' TÝ'Œ×',×'ã¸&#ë'Lë'X5é' àýÙ"lè' ‘ý¾ZÙ"ùe“L8üÂ'4|Æ'ÑfÂ'üÖ'üÆ'0$›( ¬‹(|‹( Iô=# ¥( ¦(üû$«/?øÖJHü®%øüÜ%Ê,3üø&® ô$Ÿ%¡LŒ%úµnÄ\Dà%é` úµ7ù^²ù^Ëù^‹”ËØ”Ô»p¬é`Té»ümã λïλP ¡lé`ü&Ä\H½ümÖéÞüm%•¿—λ ª¿ºùeeÙ"{üm’úµò®ƒseedÁ…��¼æx8 » ¸áôµ³®¶jìZ@™†ûæ†ã¸PÞc"Ñfä¬�­ã¸móu5Ç»ÑfØܼŒúµkD’3 ¬�3 œ�3ôµ.$Ë3lË34Ð3®¶&DÐ3ì¼3TÀ3 ‡»›¼3IÌÀ3$ó3 ¬ã3|ã3ܼ9 ý3 þ3üÒ2¬/?K3üŽ3pô$ÿ2�¡ï2úµvéþé`,¿¾Fúµå¤Žƒ<º¿¶¤ôµ´®¶wúÂWܼ úµìDô5  ¬ÿ5  œÿ5ôµ.$±6l±64¶6®¶&D¶6üž6!t¢6µ›ž6Dì¢6ø7ž6" ë›D#/B$Ý6   ¬Í6|Í6ܼ 9  8¿6[å�«  �%ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwôÜå�ˆ! è6 ÌÊ6 ÀœôÜ - 5é6 L T )ü›5Î� ‘  M3üð5yNU\üž6" ÆÈ´Ï5�¡¿5úµÆ²¡ ñ›Xé`‡¿¾¡»p²å�»ôçúµ:Žƒbº¿,Æ ùŽ¢3éôµH®¶ µ›ëë›Ãܼ^ÀÈÑúµ¯úµ¶¤•9t•9 Kôô$¤9'¯9OüÏ8`ô$å8òL×8 ,‡ÍtÄÁ<”Á< Môô$Ô<'ß<Püß;€ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwô‘ôÌù;òLë; ‡ˆÎÏÙ"4Á-•L-ôQX¡0x5851_F42D_4C95_7F2DÁó¾oäTv¡¡0xA176_54E4_6FBE_17F3Á(à  ÿ(–­ øHM çg^cRpÈ´‰‡” þž‘¥ÿ¬ø�  ­ªðѲќÞèîÑøÞŠÑú(– ÷­8Ê ®­Ñ·.þ9­aGËÒr(–­ †­,4(Ó ®­Øº.þ9ÏÑA­�ðщYcÛÓ¦â¿àéÏÑ%/(–­­', ù±­­AFNíÄHä ÏÑÏÑðÑŒðÑ”6î CMïÕ¾(–­ üh­ÿ2 ïBóÇ$é/ÏÑ7 °×BðÑ�Sƒ`j§×«4º­¬ºdÁ½z*tÁüº(<Ð Ç_˜Á{¡} `Á{NLØ–Ù ”Ðè]üùoÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw˜¡}Ä— þL‰ïzñ¬‚‘½z‡Ùø4½ ­¬½ dÄ  “­0tÄ ü½ (<Ó  Ç_¡Á{¡}–ÙPLÛ –Ù ”Ó ë ^üüoÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡¡}Äš µÚLŒ Ï}ñ¬‚�ŸÛËÛó4Ñ ­ÔÑ tØ  ”­0ç œØ üÑ -<ì  Ç_éÁ{¡}–ÙWLô –Ù ”ì „ _üÿ …ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwé¡}¼¯ µÚL‘ é`œ ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwéÁ{T¬‚sw½–|úÞ݉‘Þ^:ø ù:Ž"` (:÷   Ä  §fžá 5>U §¤§¤ArgumentÁ©¤‚¡f‹0mÖ”49d�¥ ¾ZÙ"+Å ÓØ ‹gÙ"+Ù"  ùñ@`áñ` ´[ùŽ"`) ÿ üˆ x`u| ¡}T¶ žá• ~™jiœá¬œáÄØáÙ"ÌØáëâÞ µäêœáóerrÁnÇÇijáÙâ4«ãžáõ4Ž�¡Œ„ ®�¡›gü¨s®®¯ê ±ó ŦEò±"�¡¤Ç “æd¶�¡ hÙ"4ÁÔëœë ±¤,ÿ"�wü°_˜$Øλ,ÁbytesÁ3£çv¼äŒä «¤$ö"…xü²Sλ\ʘ$Á -¦èptÙDÝ ²Ù"˜ÙTݼÙ4è Ó_˜£ä£ä¤äTryFromIntErrorÁ¥äó ¬q£:{ aŽDèúyü©Q˜$ÆÙ"·ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw˜Üé"Žgˆ£éAÓé|ÈDÍ ²˜Ù"$ÈTÍÄÈ4Ø Ó_Ù"ÜéNDØêzü�MÙ",´˜$«ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwÙ"Üéâe†ùëÿ©ìÕÙ"8ÁÔˆ œˆ  ç¥,œ "¬ ~üÍ _¡$õ ¾ZÙ",Þ ðæ <Ÿî¼� Œ�  á¥$“ "¢ üÏ SÞî\ç ¡$Þ  -«ïptö Dú  ²Ù"¡ö Tú ¼ö 4…  Ó_¡ÜéND… — €üÆ Q¡$ã Ù"Ô ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡ÜéãŽf‡¨ðØðØ|å Dê  ²¡Ù"$å Tê Äå 4õ ©ìEDõ ‡ �üº MÙ",Ñ ¡$È ÷ìˆ4½ò¥©ì{œÛdà½z$Ûtà%ÌÕD €¯˜˜Šü­kTý˜Ç¬‚L¹ÚÙ »p,ý®tQ½zМÚdߟÛ$Útß&ÌÔE ÿ¯¡—‹ü¬kTü¡Æ¬‚L¸šÜ¡»p,ü®tQŸÛÒÄätéÞÝ$äøœé-ôÞL¨Œü«}éÓ¬‚L¹é`ÄáÞ‘»p4‹%½–*UÞÝÅ„Å=LÊ= ê"­$Å=\Ê=üÅ=dÖ= ’Ý"­PtÖ=ê=˜ü„=fÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw˜‘·ùÄ¢=¬‚L”= ·ùò“ƒù±ùé„¿>LÄ>ƒù$¿>\Ä>ü¿>dÐ> “·ùDtÐ>ä>™üþ=fÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡ÄúÄœ>¬‚LŽ>àúÛˆƒùøÏûÖ„Ê?LÏ?ƒù$Ê?\Ï?üÊ?$tÛ? ”·ùDê?œÛ?ô?šüø>|ÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´ÒwéÄú¼¨?¬‚LŠ?é`•?àúë½–!ŸƒùÚýõüö ®­¯+þ6­=D2CUi„��›ž¡ûDerefMutÁD±é" InfallibleÁTӸĒ\ÂG‚ê Lã®ƒê ¯ƒü#îPü#/, Áøã ü_&ã # rand_core: core random number generation traits
[![crate][crate-badge]][crate-link] [![Docs][docs-image]][docs-link] [![Apache2/MIT licensed][license-image]][license-link] [![Build Status][build-image]][build-link]
This crate provides a collection of traits used by implementations of Random Number Generation (RNG) algorithms. Additionally, it includes helper utilities that assist with the implementation of these traits. Note that the traits focus solely on the core RNG functionality. Most users should prefer the [`rand`] crate, which offers more advanced RNG capabilities built on these core traits, such as sampling from restricted ranges, generating floating-point numbers, list permutations, and more. [`rand`]: https://docs.rs/rand ## License The crate is licensed under either of: * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) * [MIT license](http://opensource.org/licenses/MIT) at your option. [//]: # (badges) [crate-badge]: https://img.shields.io/crates/v/rand_core.svg [crate-link]: https://crates.io/crates/rand_core [docs-image]: https://docs.rs/rand_core/badge.svg [docs-link]: https://docs.rs/rand_core [license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg [build-image]: https://github.com/rust-random/rand_core/actions/workflows/test.yml/badge.svg?branch=master [license-link]: #license [build-link]: https://github.com/rust-random/rand_core/actions/workflows/test.yml?query=branch:master Áü†š%https://www.rust-lang.org/favicon.icoÁ„ã9https://www.rust-lang.org/logos/rust-logo-128x128-blk.pngÁl’2CUi„��›ž¡ûK½ÿEé"Øÿ;¸Ä’:G‚ê 9®ƒê J¯ƒ²µ¸œ¦§ÌÄ‘làü,) The [`Generator`] trait and [`BlockRng`]Á-�ü1MJ Trait [`Generator`] may be implemented by block-generators; that is PRNGsÁü<9 whose output is a *block* of words, such as `[u32; 16]`.Á¼�üÀNK The struct [`BlockRng`] wraps such a [`Generator`] together with an outputÁü�KH buffer and implements several methods (e.g. [`BlockRng::next_word`]) toÁüÛLI assist in the implementation of [`TryRng`]. Note that (unlike in earlierÁü¨NK versions of `rand_core`) [`BlockRng`] itself does not implement [`TryRng`]Áü÷MJ since in practice we found it was always beneficial to use a wrapper typeÁ´Å over [`BlockRng`].ÁÜ�là # ExampleÁî�<ò ```Áüú" use core::convert::Infallible;Áü�.+ use rand_core::{Rng, SeedableRng, TryRng};ÁüÌ0- use rand_core::block::{Generator, BlockRng};Áý�´� struct MyRngCore {Áô˜ // Generator state ...ÁÌ· # state: [u32; 8],Á,Ñ }Á×�üÛ" impl Generator for MyRngCore {Áüþ type Output = [u32; 8];Áž�ü¢;8 fn generate(&mut self, output: &mut Self::Output) {ÁüÞ-* // Write a new block to output...ÁüŒ" # *output = self.state;ÁL¯ }Á,¹Ž—¿�üÃ)& // Our RNG is a wrapper over BlockRngÁüí*' pub struct MyRng(BlockRng);Á˜ �üœ  impl SeedableRng for MyRng {Áì½  type Seed = [u8; 32];ÁüÛ 0- fn from_seed(seed: Self::Seed) -> Self {ÁüŒ " let core = MyRngCore {Á´¯  // ...ÁüÆ <9 # state: rand_core::utils::read_words(&seed),Átƒ };Áü’ &# MyRng(BlockRng::new(core))ÁL¹ ±™,à Ž—É �ÜÍ  impl TryRng for MyRng {Áüé  type Error = Infallible;ÁŠ �ŒŽ  #[inline]Áü  ?< fn try_next_u32(&mut self) -> Result {Áüà " Ok(self.0.next_word())ÁLƒ ±™� �Œ‘ ±žü£ ?< fn try_next_u64(&mut self) -> Result {Áüã *' Ok(self.0.next_u64_from_u32())ÁLޱ™˜�Œœ±žü®RO fn try_fill_bytes(&mut self, bytes: &mut [u8]) -> Result<(), Infallible> {Áü�(% Ok(self.0.fill_bytes(bytes))ÁLª±™,´Ž—º�ü¾85 // And if applicable: impl TryCryptoRng for MyRng {}Á÷�üû*' let mut rng = MyRng::seed_from_u64(0);Áü¦0- println!("First value: {}", rng.next_u32());Áü×-* # assert_eq!(rng.next_u32(), 1171109249);Á<…ì”��ì‘ [`TryRng`]: crate::TryRngÁü¯'$ [`SeedableRng`]: crate::SeedableRngÁ,覞 $êj4ñúûc”Ü)LôœŸô€ A random (block) generatorÁL©ÿÆôüŸÐ›§›§! þÆ‚d¾ѧ \¾¤¹ The output type.ÁÒ�üÚ_\ For use with [`rand_core::block`](crate::block) code this must be `[u32; _]` or `[u64; _]`.Á4Ãü´2üÐ%" Generate a new block of `output`.Áú�ü‚-* This must fill `output` with random data.ÁD·ÉÊ Éô Ê‚éBÿ À ô$Åð 4Ëü -ôì Destruct the output bufferÁ��ü—EB This method is called on [`Drop`] of the [`Self::Output`] buffer.Áüá,) The default implementation does nothing.Á$£ËÌ Ëô Ì‚éBÿ ¨ ô$­ð � üÝGƒ  þÆÝ âÝL�ŸgÝT™§ g-/ü«6®ÎÏРΧ Ï€g€gŠ‚gê ûcƒg²ûcØ«q¢1ȡЇBÿ  ² Ý$³ñÓüÞ'ƒ¶­ ãÆ­Læ§�#”Œ$�Ñ Ñ§éBÿ ” Ý$™üÕR“Šƒ �$š%|Š ŠÙ"tíþÆ�$ ýj•"$Ýö•"<ä�$Ô€ þÆ•" ÚÒ$  c óÙ"[]ü»!"ü® =: Create a new `BlockRng` from an existing RNG implementingÁüð 85 `Generator`. Results will be generated on first use.ÁÂ!�$Ò$Bÿ •"Š�$ûüÛ$Düâ";8 Reconstruct from a core and a remaining-results buffer.Á¢#�üª#DA This may be used to deserialize using a `core` and the output ofÁüó#  [`Self::remaining_results`].Á˜$�ü $63 Returns `None` if `remaining_results` is too long.Á\â$Ò�$ ÒÒ-ù,Bÿ Š% •"Š�$ûJ›Wüÿ'H“Šƒú°|ª(‹±t�(™± �(©±$‡(ƱÔ (Ô± „(Ò$ !"#$%@ “(Ù"@BÄÆ*,É*Ó ÓÒ$Ù"Bÿ Ï*Ì:$Ð*ü§+%Lª+Ô ÔÒ$Ù"éBÿ ´+Ú6$¹+÷üñ/*üº,=: Re-generate buffer contents, skipping the first `n` wordsÁü,�ü„-C@ Existing buffer contents are discarded. A new set of results isÁüÌ-GD generated (either immediately or when next required). The first `n`Áü˜.IF words are skipped (this may be used to set a specific word position).Áæ.�dî. # PanicsÁÿ.�ü‡/GD This method will panic if `n >= N` where `N` is the buffer size (inÁ\Ó/ words).Átø/Õ ÕÒ$Ù"éBÿ ‡0 "•"Š�$$Œ0¤ü”3"üÝ1A> Get the number of words consumed since the start of the blockÁ£2�ü«2FC The result is in the range `0..N` where `N` is the buffer size (inÁ\ö2ñ»\›3Ö ÖÒ$Ù"Bÿ §3 #•"Š�$$¨3üƒ7'ü‘40- Access the unused part of the results bufferÁÆ4�üÎ4FC The length of the returned slice is guaranteed to be less than theÁü™5EB length of `::Output` (i.e. less than `N` whereÁ¼ã5 `Output = [W; N]`).Áÿ5�ü‡6=: This is a low-level interface intended for serialization.ÁüÉ6'$ Results are not marked as consumed.ÁŒŠ7× ×Ò$ ×Ò-Bÿ œ7 $•"Š�$$�7ü³8 üù7'$ Generate the next word (e.g. `u32`)ÁLº8Ø ØÒ$•"Bÿ Ä8 %•"Š�$$É8üÌ:AŠ'ƒ('( ŠEùFŒî:þÆŠE á:ŠEää:ŠÙ"tÑ:×Q* ×:Ù"-/üÐ;*ü”;)& Generate a `u64` from two `u32` wordsÁŒ×;Ù Ù×Q¡Bÿ& é;& *ŠŠE$î;üù@H“,Š-ƒ.,-.ú°|¤A‹±t‡A™± —A©±$�AƱÔšAÔ± þ@Ò$0  6 �AÙ"68üêA-|ÈA Fill `dest`ÁTñAÚÛ ÚÒ$ Û½ZéBÿ+ üA+ 0•"Š�$$�BòrE6tµF0�1�1�110Î`lïü)& Utilties to aid trait implementationsÁ*�”. ## PortabilityÁA�üENK For cross-platform reproducibility, Little-Endian order (least-significantÁü”JG part first) has been chosen as the standard for inter-type conversion.ÁüßHE For example, [`next_u64_via_u32`] generates two `u32` values `x, y`,Áü¨! then outputs `(y << 32) | x`.ÁÊ�üÎLI Byte-swapping (like the std `to_le` functions) is only needed to convertÁü›EB to/from byte sequences, and since its purpose is reproducibility,ÁüáDA non-reproducible sources (e.g. `OsRng`) need not bother with it.Á¦�ôª ## Implementing [`TryRng`]ÁÉ�üÍKH Usually an implementation of [`TryRng`] will implement one of the threeÁü™LI methods over its internal source. The following helpers are provided forÁüæ" the remaining implementations.Á‰�Ô� **`fn try_next_u32`:**Áü¨  - `self.next_u64() as u32`ÁüÉ(% - `(self.next_u64() >> 32) as u32`Áüò1. - [next_word_via_fill][](self)Á¤�Ô¨ **`fn try_next_u64`:**ÁüÃ/, - [next_u64_via_u32][](self)Áüó1›Ñ¥�ä© **`fn try_fill_bytes`:**ÁüÆ=: - [fill_bytes_via_next_word][](self, dest)Á„ �üˆ # ## Implementing [`SeedableRng`]Á¬ �ü° KH In many cases, [`SeedableRng::Seed`] must be converted to `[u32; _]` orÁüü 41 `[u64; _]`. [`read_words`] may be used for this.Á± �üµ 'ð¤üÝ 30 [`SeedableRng::Seed`]: crate::SeedableRng::SeedÁ‘ �t•  ## ExampleÁ¤ �ü¨ NK We demonstrate a simple multiplicative congruential generator (MCG), takenÁü÷ JG from M.E. O'Neill's blog post [Does It Beat the Minimal Standard?][0].Á �üÆ PM [0]: https://www.pcg-random.org/posts/does-it-beat-the-minimal-standard.htmlÁ— �<› ì”ü£ "ý”üÆ 52 use rand_core::{Rng, SeedableRng, TryRng, utils};Áü �ä€ pub struct Mcg128(u128);Á��ü¡! impl SeedableRng for Mcg128 {Áìà type Seed = [u8; 16];Áá�Œå±žü÷0 ›ü¨MJ // Always use little-endian byte order to ensure portable resultsÁüö+( Self(u128::from_le_bytes(seed))ÁL¢±™,¬Ž—²�ä¶ impl TryRng for Mcg128 {ÁüÓ ü�ô�Œø±žüŠ?ÌžüÊ.+ Ok((self.next_u64() >> 32) as u32)ÁLù±™ƒ�Œ‡±žü™?çŸüÙMJ self.0 = self.0.wrapping_mul(0x0fc94e3bf4e9ab32866458cd56f5e605);Áü§%" Ok((self.0 >> 64) as u64)ÁLͱ™×�ŒÛ±žüíPM fn try_fill_bytes(&mut self, dst: &mut [u8]) -> Result<(), Infallible> {Áü¾HE utils::fill_bytes_via_next_word(dst, || self.try_next_u64())ÁL‡±™,‘Ž—,— #Áü�.+ # let mut rng = Mcg128::seed_from_u64(42);ÁüÌ-* # assert_eq!(rng.next_u32(), 3443086493);Áüú63 # assert_eq!(rng.next_u64(), 3462997187007721903);Áì± # let mut buf = [0u8; 5];ÁüÏ # rng.fill_bytes(&mut buf);Áüï-* # assert_eq!(buf, [154, 23, 43, 68, 75]);Á<�ì”,÷57;>å 4±�23ž $Îj4lª$ŒÁü›QüÕ;8 Generate a `u64` using `next_u32`, little-endian order.Á„¢Ü Ü­Ï}BÿŽ66 ÌÿÆ­4¿�­4¶ 5­Žƒ²@ ³ü‚„ü¡+( Fill `dst` with bytes using `next_word`ÁÍ�üÑA> This may be used to implement `fill_bytes` over `next_u32` orÁü“KH `next_u64`. Words are used in order of generation. The last word may beÁÄß partially discarded.ÁĉÝ Ý½Z⇛‹Bÿ�8“9‚:89: ¸þÆ£‰ ¢þƺ… ¥þÆâ‡äÖjº…$¨ˆ#â‡é¼Û�#â‡éЈdæ 7£‰º…⇽–RI³LË�{}wyüµ Qüÿ52 Generate a `u32` or `u64` word using `fill_bytes`Á”¼ Þ Þ»›ÏžBÿ“<Ž==< è Ô± Ï þÆ»› Ø ©±$Ò �»›4Û  ;•"»›Žƒ$P@B<>üÛ#@ü�"-* Reads an array of words from a byte sliceÁ¯"�ü³"GD Words are read from `src` in order, using LE conversion from bytes.Áû"�dÿ"ÿºŒ#�ü�#85 Panics if `size_of_val(src) != size_of::<[W; N]>()`.ÁTâ#ß ß½Zš%Bÿ“?Š@?@ ‹$Ô± í#‹±tö#©±$ð# >•"ŠÂsfW(*- ü#Ù"„ÿdƒGQó  „CEå 4�CF,$&ä‘ü<9 A random number generator that can be explicitly seeded.ÁX�ü\EB This trait encapsulates the low-level functionality common to allÁü¢GD pseudo-random number generators (PRNGs, or algorithmic generators).Áê�üîMJ A generator implementing `SeedableRng` will usually be deterministic, butÁü¼NK beware that portability and reproducibility of results **is not implied**.Áü‹OL Refer to documentation of the generator, noting that generators named afterÁüÛIF a specific algorithm are usually tested for reproducibility against aÁü¥KH reference vector, while `SmallRng` and `StdRng` specifically opt out ofÁüñ reproducibility guarantees.Á\›GGþÆô,¨GóõóõHIJKMOPHIJKMOPþÆúµüÿ7…úµ,Šöúµ<’£úµ½Z\œ¦úµ½Z\ª¯öOÁöDÑö:áö-ôö MKIOPJüÿ6ü´KH Seed type, which is restricted to types mutably-dereferenceable as `u8`Áü„1. arrays (we recommend `[u8; N]` for some `N`).Áº�üÂKH It is recommended to seed PRNGs with a seed of at least circa 100 bits,Áü’LI which means an array of `[u8; 12]` or greater to avoid picking RNGs withÁüã" partially overlapping periods.ÁŠ�ü’JG For cryptographic RNG's a seed of 256 bits is recommended, `[u8; 32]`.Áá�é�üñ:7 # Implementing `SeedableRng` for RNGs with large seedsÁ° �ü¸ LI Note that [`Default`] is not implemented for large arrays `[u8; N]` withÁü‰ JG `N` > 32. To be able to implement the traits required by `SeedableRng`ÁüØ DA for RNGs with such large seeds, the newtype pattern can be used:Á¡ �<© ì”üµ  use rand_core::SeedableRng;ÁÙ �Äá  const N: usize = 64;Á¤þ  #[derive(Clone)]Áü— &# pub struct MyRngSeed(pub [u8; N]);ÁÌ  # #[allow(dead_code)]Áüà  pub struct MyRng(MyRngSeed);Á… �ü�  impl Default for MyRngSeed {Áü² # fn default() -> MyRngSeed {ÁìÚ  MyRngSeed([0; N])ÁLü ±™,ŠŽ—”�üœ$! impl AsRef<[u8]> for MyRngSeed {ÁüÅ# fn as_ref(&self) -> &[u8] {Áœí &self.0ÁL…±™,“Ž—��ü¥$! impl AsMut<[u8]> for MyRngSeed {ÁüÎ+( fn as_mut(&mut self) -> &mut [u8] {Á¼þ &mut self.0ÁLš±™,¨Ž—²�üº Кôß type Seed = MyRngSeed;Á‚�üŠ0- fn from_seed(seed: MyRngSeed) -> MyRng {Á¼¿ MyRng(seed)ÁLÛ±™,鎗<óì”$„GGüÁ'ü¼+( Create a new PRNG using the given seed.Áì�üôHE PRNG implementations are allowed to assume that bits in the seed areÁüÁHE well distributed. That means usually that the number of one and zeroÁüŽMJ bits are roughly equal, and values like 0, 1 and (size - 1) are unlikely.ÁüàHE Note that many non-cryptographic PRNGs will show poor quality outputÁü­KH if this is not adhered to. If you wish to seed from simple numbers, useÁäý `seed_from_u64` instead.Áž�ü¦KH All PRNG implementations should be reproducible unless otherwise noted:ÁüöHE given a fixed `seed`, the same sequence of output should be producedÁüÃLI on all runs, library versions and architectures (e.g. check endianness).Áü”KH Any "value-breaking" changes to the generator should require bumping atÁüä<9 least the minor version and documentation of the change.Á¥�ü­C@ It is not required that this function yield the same state as aÁüõLI reference implementation of the PRNG given equivalent seed; if necessaryÁüÆ>; another constructor replicating behaviour from a referenceÁü‰  implementation can be added.Á®�ü¶JG PRNG implementations should make sure `from_seed` never panics. In theÁü…HE case that some special values (like an all zero seed) are not viableÁüÒIF seeds it is preferable to map these to alternative constant value(s),Áü KH for example `0xBAD5EEDu32` or `0x0DDB1A5E5BAD5EEDu64` ("odd biases? badÁüðLI seed"). This is assuming only a small number of values must be rejected.ÁLÄúµôBÿGGܼº¿$Îüû$(üî)& Create a new PRNG using a `u64` seed.Áœ�ü¤JG This is a convenience-wrapper around `from_seed` to allow constructionÁüóLI of any `SeedableRng` from a simple `u64` value. It is designed such thatÁüÄ HE low Hamming Weight numbers like 0 and 1 can be used and should stillÁü‘!DA result in good, independent seeds to the PRNG which is returned.ÁÚ!�üâ!LI This **is not suitable for cryptography**, as should be clear given thatÁü³"# the input size is only 64 bits.ÁÛ"�üã"HE Implementations for PRNGs *may* provide their own implementations ofÁü°#KH this function, but the default implementation should be good enough forÁü€$JG all purposes. *Changing* the implementation of this function should beÁüÏ$'$ considered a value-breaking change.Álþ$¡ôBÿGG Jôƒ,�%üÒ21ü¬(63 Create a new PRNG seeded from an infallible `Rng`.Áç(�üï(LI This may be useful when needing to rapidly seed many PRNGs from a masterÁüÀ)LI PRNG, and to allow forking of PRNGs. It may be considered deterministic.Á‘*�ü™*JG The master PRNG should be at least as high quality as the child PRNGs.Áüè*DA When seeding non-cryptographic child PRNGs, we recommend using aÁü±+GD different algorithm for the master PRNG (ideally a CSPRNG) to avoidÁüý+GD correlations between the child PRNGs. If this is not possible (e.g.ÁüÉ,JG forking using small non-crypto PRNGs) ensure that your PRNG has a goodÁü˜-IF mixing function on the output or consider use of a hash function withÁ„æ- `from_seed`.Áû-�üƒ.JG Note that seeding `XorShiftRng` from another `XorShiftRng` provides anÁüÒ.FC extreme example of what can go wrong: the new PRNG will be a cloneÁ”�/ of the parent.Á´/�ü¼/JG PRNG implementations are allowed to assume that a good RNG is providedÁü‹0JG for seeding, and that it is cryptographically secure when appropriate.ÁüÚ0GD As of `rand` 0.7 / `rand_core` 0.5, implementations overriding thisÁü¦1EB method should ensure the implementation satisfies reproducibilityÁüð1.+ (in prior versions this was not required).Á£2�ü«2" [`rand`]: https://docs.rs/randÁDÕ2à à»›ôBÿGŽLL ô2GÿÆ»›4ç2„»›á2 Kô»›ŽƒØa Þ2ü›5Jü„4?< Create a new PRNG seeded from a potentially fallible `Rng`.ÁÈ4�üÐ4FC See [`from_rng`][SeedableRng::from_rng] docs for more information.Ádž5á á»›ÆÈBÿGŽNN Ä5G�¦4·5îë4®5 Mô»›Žƒe «5üÏ87”ï6 Fork this PRNGÁ†7�üŽ7NK This creates a new PRNG from the current one by initializing a new one andÁüá7$! seeding it from the current one.ÁŠ8�ü’885 This is useful when initializing a PRNG for a threadÁ$Ò8â âôôBÿG ×8G„ô‚9 Oô$Ü8üß;S”µ9ÿ§Ì9�üÔ9N§¨ü§:$ÿ¨Ð:�üØ:96 This is useful when initializing a PRNG for a thread.Á–;�üž;<9 This is the failable equivalent to [`SeedableRng::fork`]ÁDâ;ã ãôÃÎBÿG ë;G�ô4«< Pô$ð;ü€=$,ƒ=Cä ä¡λBÿ �=㸃,‰= ¢=Ù"t«=±=C¡t×=Ý=C¡t‘T•`®¯ØÿT ¸ÄUW¾ d›UXå 4&�UY,:<(*üŸ'Ž[[þÆ­ ¤Ýå4§þ\]^_‘’“”]_^02TÍ,ÒZZ¡}üù6düî îþÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw˜‘þBÿZ ‰Z ]­$Žüü6dÿï ïþÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡è±BÿZ Œ Z ^­$‘ üÿ Gt‚ ðñ ðþ ñ½ZÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwéè±BÿZ ‘ Z _­$– ½–­jüˆ 8L‹ Užá¡}BÿÄaaþƞἚ �žá”Ÿ  `žá÷ã×h$&ü‚ 3Žcc…° ‡ ›­dŠ þüº 1ñeŽfef�¦4Ï îë4Æ ®®¯ê ±ó ŦEò±" ñ»›g¿  à ü¨Müò  Reborrow with a new lifetimeÁ— �üŸ KH Rust allows references like `&T` or `&mut T` to be "reborrowed" throughÁüï PM coercion: essentially, the pointer is copied under a new, shorter, lifetime.ÁüÄIF Until rfcs#1403 lands, reborrows on user types require a method call.Á¯ Š ï¶®®¯ê ±ó ŦEò±" Š »›BÿdŠ hhdñŠ ò gñ»›Š $¾²D¡$¥jmôvü.+ A marker trait for supported "word" types.ÁG�üK*' This is implemented for: `u32`, `u64`.Á$€jj›§üv!nôt†j›§'Ó¼›§3Ó¼+Œ™˜Œ®¡TÄ4Èinü‹I4•nn›§ü‹Èöô<�ù ô$§³ôÙ"t®Ìô¿ûhô„Än›§iä½^ó½U‚¾I”¾@£¾7›§�佂ó½y‚¾m”¾d£¾[opqrsopqrsþÆoô,õöž¿<룞¿½Z\ý¦ž¿½Z\‹–¿>­¿4½¿'пprsqüß7,ännü¡-l¤ž¿ôBÿnn pôðæ,²ü×$\Úôž¿Bÿnn qô$æü…"TˆÙ"ôBÿnn rôŽ“ì°T³ôÙ"Bÿnn sô$¾œÙ˜uwxyzopqrsywzxT÷,üttλ ‰Ù"ü°,l³o˜˜Bÿtt wðæâmü²#\µ˜¦ÃBÿtt xœmü©!T¬Ù"˜Bÿtt yŽçlä�T ˜Ù"Bÿtt z lœö¡|~€�opqrs�€~T” ,™ {{Þî ¦ Ù"üÍ ,lÐ o¡¡Bÿ{{ ~ðæ´küÏ #\Ò ¡�ÆBÿ{{ rküÆ !TÉ Ù"¡Bÿ{{ €Žýjäº T½ ¡Ù"Bÿ{{ �-jÌ´kc¬×acüÑ )üï1. Trait for infallible random number generatorsÁ¡�ü¥A> `Rng` is a sub-trait of [`TryRng`] for infallible generators.Áç�”ë # RequirementsÁþ�ü‚63 See [`TryRng`#Requirements] which also apply here.Á¹�\½ # UsageÁÉ�üÍGD The [`rand`] crate provides higher level functionality, for exampleÁü•NK generation of floating-point values, uniform ranged sampling and shufflingÁüäOL sequences. In particular, [`rand::RngExt`] is an extension trait over `Rng`Áü´OL providing many of the methods one might expect to be able to use on an RNG.Á„�Ĉ # Implementing `Rng`Á¡�ü¥VS Implement [`TryRng`] with type Error = [core::convert::Infallible][].Áü�ü€ # [`rand`]: https://docs.rs/rand/Áü¤ HE [`rand::RngExt`]: https://docs.rs/rand/latest/rand/trait.RngExt.htmlÁüí # [`fill_bytes`]: Rng::fill_bytesÁü‘  [`next_u32`]: Rng::next_u32Áü±  [`next_u64`]: Rng::next_u64ÁÛ „„›§üÑ ‚ì­Ôà ‘ô¡}”ç „›§6ì­2ÏÐ&›§Hì­DÏÐ8…†‡…†‡‡…†ô§ ü� ! Return the next random `u32`.ÁDª ò òô˜Bÿ„ ³ „ …ô$¸ ôñ üË ! Return the next random `u64`.ÁDô ó óô¡Bÿ„ ý „ †ô$‚ ü¨)ü• ! Fill `dest` with random data.Á» �üà ?< This method should guarantee that `dest` is entirely filledÁü‡ 63 with new data, and may panic if this is impossibleÁü B? (e.g. reading past the end of a file that is being used as theÁÔ‰ source of randomness).ÁT«ôõ ôô õ½ZéBÿ„ ¶„ ‡ô$»½–ÁüÕCމ‰‘­¡}”ûÝåÔôÍå4‘­Š‹Œ…†‡Š‹Œ Úì­D°ö ö­˜Bÿˆ ¹ˆ Š­$¾ì¬D¯÷ ÷­¡Bÿˆ ¸ˆ ‹­$½ü«(T®øù ø­ ù½ZéBÿˆ ¹ˆ Œ­$¾½–¶pü•;ü¬=: A marker trait for securely unpredictable infallible RNGsÁê�üî[X This is a convenient trait alias for [TryCryptoRng].ÁüÊJG It is equivalent to the trait sum [Rng] + [TryCryptoRng].ÁLŸ��›§ü•>²«ª›ôü° ÏД½�›§;²«8£Ü/ÏÐ,›§S²«P£ÜGÏÐDüÕJŽ��óÖ”ƒš¶üö Íå4™­ Ú„î7ü¤C@ Base trait for random number generators and random data sourcesÁè�üìOL This trait provides a base interface designed to support efficient usage ofÁü¼MJ (`u32`, `u64`) word generators, block generators and random data sources.ÁüŠNK There is no required relationship between the output of each method or anyÁüÙOL requirement to use all generated random bits; for example an implementationÁü©PM of [`try_fill_bytes`](Self::try_fill_bytes) may discard some generated bytesÁüú41 to avoid storing a partially used word or block.Á¯�”³˜ÈÆ�ÔÊ ### Quality and lengthÁå�üéLI Implementions should produce bits uniformly: each output value should beÁü¶HE equally likely, without observable patterns in successive outputs orÁüÿOL between the output streams of multiple instances of an implementation usingÁüÏGD different seeds or streams (where supported by the implementation).Á—�ü›LI Pathological implementations (e.g. constant or counting generators whichÁüèNK rarely change some bits) may cause issues in consumers of random data, forÁü·LI example dead-locks in rejection samplers and obviously non-random outputÁü„NK (e.g. a counting generator may result in apparently-constant output from aÁüÓ! uniform-ranged distribution).Áõ�üùNK Cryptographically unpredictable output is not a requirement of this trait,ÁüÈ-* but is a requirement of [`TryCryptoRng`].Áö�üúPM In practice, most implementations are pseudo-random number generators with aÁüË JG finite *period* or *cycle length*, and (among non-cryptographic PRNGs)Áü–!C@ statistical anomalies may appear long before a cycle occurs. AnÁüÚ!HE implementation should ensure its period is sufficiently long that noÁü£"LI anomalies are likely to appear in usage and/or document its limitations.Áð"�üô"NK For more on PRNG quality and period, see [The Rust Rand Book: Quality][0].ÁÃ#�üÇ#C@ [0]: https://rust-random.github.io/book/guide-rngs.html#qualityÁ‹$�¼�$ ### ReproducibilityÁ§$�ü«$LI Algorithmic generators implementing [`SeedableRng`] should normally haveÁüø$OL *portable, reproducible* output, i.e. fix Endianness when converting valuesÁüÈ%LI to avoid platform differences, and avoid making any changes which affectÁü•&KH output (except by communicating that the release has breaking changes).Áüá&63 See also [The Rust Rand Book: Reproducibility][1].Á˜'�üœ'=: [1]: https://rust-random.github.io/book/crate-reprod.htmlÁÚ'�\Þ'‹Éê'�üî'GD Often, usage of the infallible trait [`Rng`] or its extension traitÁü¶(>; [`rand::RngExt`] is preferred to direct usage of `TryRng`.Áüø(ZW Many implementations of `TryRng` (those with type Error = [Infallible][])ÁüÓ)QN already implement [`Rng`]; in other cases [`UnwrapErr`] may be used to obtainÁü¥*! an implementation of [`Rng`].ÁÇ*�ÜË* # Implementing `TryRng`Áç*�üë*OL Most algorithmic generators (i.e. pseudo-random number generators or PRNGs)Áü»+PM never fail; in this case type `Error` should be [`Infallible`]; in this caseÁüŒ,JG trait `Rng` is implemented automatically. Cycling is not considered anÁT×, error.Áâ,�üæ,;8 Small PRNGs often yield either `u32` or `u64` natively.Áü¢-OL Module [`crate::utils`] provides utilities to help implement other methods.Áò-�üö-GD Byte sources may implement [`try_fill_bytes`](Self::try_fill_bytes)Ál¾. natively.ÁüÌ.OÛøœ/�ü /PM Block generators (which produce `[u32; N]` or `[u64; N]` for some fixed `N`)Áüñ/30 should make use of the [`crate::block`] module.Á¥0�ü©0! With regards to other traits:ÁË0�üÏ0LI - **Do not** implement [`Default`] for seedable pseudorandom generators,Áüœ1FC though the trait may be implemented for stateless interfaces andÁôã1 auto-seeding generators.Áü‚2PM - **Do** implement [`SeedableRng`] for seedable pseudorandom generators. SeeÁüÓ20- [Reproducibility](#reproducibility) above.Áü„3OL - Implement [`Clone`] for non-cryptographic PRNGs but consider not doing soÁüÔ3OL for cryptographic generators to avoid the risk of key-stream duplication.Áü¤4NK - **Do not** implement [`Copy`] since accidental copies may cause repeatedÁló4 values.Áü�5LI - Implement [`Debug`](core::fmt::Debug), except that cryptographic PRNGsÁüÎ5PM should use a custom implementation which avoids leaking internal state (orÁüŸ6/, the subset of this derived from the key).ÁüÏ6QN - [`Eq`] and [`PartialEq`] could be implemented, but are probably not useful.Á¡7�ü¥7HÙÍ4ø7��›§üî7”�›§›§"‘’“”‘’“”þÆ•Ïü¡9�•Ï”­9Æ…Ø…“’”ô¡9ü…82/ The type returned in the event of a RNG error.Á¼8�üÄ8XU Use type [`Infallible`] (re-exported by `rand_core`) for infallible implementations.Á,¦9��üì97üÆ9!ÁÐdï9ú úôÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw˜•ÏBÿ� ü9� ’ô$�:üÎ:7ü¨:!ÂÑdÑ:û ûôÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¡•ÏBÿ� Þ:� “ô$ã:ü¸;HüŠ;)& Fill `dst` entirely with random data.Át»;üý üô ý½ZÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òwé•ÏBÿ� Ê;� ”ô$Ï;½–Õ;ü„<;Ž––…° ‰<é"­DŒ<�·ù4¸<­—˜™š‘’“”˜š™NPTÆ<,Ë<••Äúü„=6d‡=þ þ­ïzBÿ• ”=• ˜­$™=üþ=6d�>ÿ ÿ­Ï}Bÿ• Ž>• ™­$“>üø>Gtû>€� €­ �½ZÏßBÿ• Š?• š­$�?½–ôŠKüø?B? A marker trait over [`TryRng`] for securely unpredictable RNGsÁ»@�ü¿@LI This marker trait indicates that the implementing generator is intended,ÁüŒAKH when correctly seeded and protected from side-channel attacks such as aÁüØAOL leaking of state, to be a cryptographically secure generator. This trait isÁü¨BKH provided as a tool to aid review of cryptographic code, but does not byÁüôB@= itself guarantee suitability for cryptographic applications.ÁµC�ü¹CPM Formally, a CSPRNG (Cryptographically Secure Pseudo-Random Number Generator)ÁüŠDNK should satisfy an additional property over other generators: assuming thatÁüÙDKH the generator has been appropriately seeded and has unknown state, thenÁü¥E52 given the first *k* bits of an algorithm's outputÁüÛEKH sequence, it should not be possible using polynomial-time algorithms toÁü§FIF predict the next bit with probability significantly greater than 50%.ÁñF�üõFOL An optional property of CSPRNGs is backtracking resistance: if the CSPRNG'sÁüÅGMJ state is revealed, it will not be computationally-feasible to reconstructÁü“HFC prior output values. This property is not required by `CryptoRng`.ÁÚH�üÞHIF Implementors of `TryCryptoRng` should only implement [`Default`] if aÁü¨IJG default-constructed instance is itself a secure generator, for exampleÁüóI96 [`getrandom::SysRng`] which is a stateless interface.Á­J�ü±JXU [`getrandom::SysRng`]: https://docs.rs/getrandom/latest/getrandom/struct.SysRng.htmlÁd”K›››§üŠK!ì­4¢K››§#ì­ ›§/ì­,ü­KBŽ��…° ²KÒŒDµK›·ùdãK­!´ÂMüôKa^ DEPRECATED: stub trait to print a deprecation warning and aid discovering that [`Rng`] is theÁ„ÖL replacement.Á0.10.0Áuse `Rng` insteadÁœ¬Mü†M;<ÌMý�‡žžž›§ÌÂM²«ÕMž›§"²« ›§.²«,ÔñMŽ  …° öM„­ùM­ääOü�Nda DEPRECATED: stub trait to print a deprecation warning and aid discovering that [`TryRng`] is theÁ„õNê�ý�use `TryRng` insteadÁ´ËOü¥O>TîOý�Õ ¡¡›§üäOXì­4úO¡›§#ì­ ›§/ì­,¢¢þÆ¢ôü›P�袔§Pà¢ù¢ô›P|‡P Error type.Á, Pý�Õ Õ¡¡üÒP ޤ¤…° ×PÝå4ÚP­¥¢TùP,þP££Á{üô!üñ/, RNG functionality for a block [`Generator`]Á¡�ü¥LI This type encompasses a [`Generator`] [`core`](Self::core) and a buffer.ÁüòLI It provides optimized implementations of methods required by an [`Rng`].Á¿�üÃNK All values are consumed in-order of generation. No whole words (e.g. `u32`Áü’NK or `u64`) are discarded, though where a word is partially used (e.g. for aÁüáNK byte-fill whose length is not a multiple of the word size) the rest of theÁ´° word is discarded.ÁÇ�¼Ë [`Rng`]: crate::RngÁDÿƒ§§¶­ ˆÆ­L‹§FÎ�FÚ†B¨©)+”œ<œ¦¦Ï\þü´EB The *core* part of the RNG, implementing the `generate` function.Á$‚¦¦Ý8  ƒ««¶­Ú…݈ƭè…Ï8 §¬†¬8 8 Í Í§§Bÿªìª ¬Ý8 Kü0QN Wrapper around [`TryRng`] implementation which implements [`Rng`][crate::Rng]Áü‚%" by panicking on potential errors.Á¨�t¬ # ExamplesÁ»�\¿ ```rustÁüË.+ # use rand_core::{UnwrapErr, TryRng, Rng};Áüú,) fn with_try_rng(mut rng: R) {Áü§! // rng does not impl Rng:ÁüÉ+( let _ = rng.try_next_u32(); // okayÁüõ+( // let _ = rng.next_u32(); // errorÁ¡�ü¥$! // An adapter borrowing rng:ÁüÊ/, let _ = UnwrapErr(&mut rng).next_u32();Áú�üþ! // An adapter moving rng:Áü %" let mut rng = UnwrapErr(rng);ÁüÆ let _ = rng.next_u32();Á,掗ì�üðC@ fn call_with_unsized_try_rng(rng: &mut R) {Áü´1. // R is unsized, thus we must use &mut R:Áüæ%Ÿ°üŒΰ,¬Ž—<²ì”L�ް°…° ‹Ýå4ŽþŦEò±"¯±­þBÿKT­þBÿ®® ¯­km,–®®­·g޳³…°±Ÿg­‹Ýå¿þ´ g´×Ù·g·gåæç åþ æ€g€gŠ‚gê ûcƒg²ûcØ«q¢1È¡ç‡Bÿ²Ã² ´­·gœ·gßh޶¶…°·ö­‹ÝåÆþ·÷·ßâßhßhþBÿµµ ·­ti޹¹…°H…­‹ÝåWþº†ºpstitiè èþþBÿ¸Ó¸ º­ti ÚŽ¼¼…°÷ù ­‹Ýåþj޾¾…°EÌ­‹ÝåTþ¿Î¿mpjjjjé éþéBÿ½à½ ¿­j¥jŽÁÁ…°÷±­­‹Ýå"þ03¥jŽÃÃ…°aù»GÝåfþÄù±Ä€ƒ¥j¥jêë êþ ëþBÿÂä ĭ¥jî ¥j>kŽÆÆ…°ûh­‹Ýå+þÇühÇDG>k>kìí ìþ í°×éBÿÅÿÈÈïÅþư×>kƒi°×>k Ç­°×>kƒ>k>k>k‘Š3 Ó3y‰3 »3 3yˆ3 ¾3LÈ3î‡3ê„3ôƒ3¦ƒ3|�3h€3|~3ò}3è|3Ý{3 �B3™m3ðk3¥j3öh3M3GL3ÚJ3¦I3JI393?3·g33ò3ò3ø3(3.3ÏG3.G3|F3 ¡ 3É73N73½53 Æ3ø43¨43F43 É3²333 Ú;3.3Ý3z3 š?3&+d¥ MIT licenseÁ"http://opensource.org/licenses/MITÁ2https://docs.rs/rand/latest/rand/trait.RngExt.htmlÁcore::fmt::DebugÁ¢g core::fmtÁgetrandom::SysRngÁrandÁó å �Apache License, Version 2.0Á�*http://www.apache.org/licenses/LICENSE-2.0ÁÐÁ‡Âcore::convert::InfallibleÁ¸ÄûReproducibilityÁ¾ÂÙÂûcó „¶Ëhttps://docs.rs/randÁ•Ã�ºÃ rand::RngExtÁ‡Âû crate::utilsÁžÄ¾ÂŸgWhttps://github.com/rust-random/rand_core/actions/workflows/test.yml?query=branch:masterÁ¶ØÄ•Ãhttps://docs.rs/rand/Á‚Åe‰4https://rust-random.github.io/book/crate-reprod.htmlÁ¢ÅžÄê rø Build StatusÁÄÅØÄTryRng#RequirementsÁ±Æ‚Ŷ÷±#The Rust Rand Book: ReproducibilityÁÛÆ’ê ¢Å2req¢g~ÏApache2/MIT licensedÁ¯ÇÄÅÌDZƾ 2https://rust-random.github.io/book/guide-rngs.htmlÁûÇ’ÛÆê ®röe…q~https://docs.rs/rand_coreÁÝȯÇÌÇThe Rust Rand Book: QualityÁ“ɾ ûÇ’Goú q~ÌDocsÁƒÊÝÈ;https://img.shields.io/badge/license-Apache2.0/MIT-blue.svgÁSelf::try_fill_bytesÁ¾ ›³Ê“Éo"https://crates.io/crates/rand_coreÁŒËƒÊ#https://docs.rs/rand_core/badge.svgÁ¡Ë Rng::next_u64Áá˳Ê=https://docs.rs/getrandom/latest/getrandom/struct.SysRng.htmlÁoù ”ÌŒË-https://img.shields.io/crates/v/rand_core.svgÁÇÌ Rng::next_u32Á¡Ëõ̆áËØÿ“Í”Ì[https://github.com/rust-random/rand_core/actions/workflows/test.yml/badge.svg?branch=masterÁêÍÇÌRng::fill_bytesÁ¢Î…õÌØÿŸ crate::blockÁ getrandomÁ“ÍàÁÝÎêÍ core::convertÁÉχ¢ÎŸØÿ¸ÄùÏçŠÐýÂå ÐÁàÁÝÎõôÐÉÏŸùÏÙÂçŠÐýÂó å û�ºÃõôÐò6±DropÁ€#rand_core::blockÁSelf::remaining_resultsÁùÏ Self::OutputÁBlockRng::next_wordÁ crate::TryRngÁ� Self::coreÁó å ¤ crate::SeedableRngÁ rand_coreÁû crate::RngÁ¬Ò±‰Ò—ÒùÏÎÒßÒŽÓ÷Ò¤ ¦¬Óå ÃÓûó ±ÞÓ¬Ò‰Ò—ÒùÏÎÒßÒ÷Ò¬ÓG¤ å ÃÓûŽÓó ÞÓ„$"Does It Beat the Minimal Standard?Á¥ ;Ghttps://www.pcg-random.org/posts/does-it-beat-the-minimal-standard.htmlÁ·å �¬ÓÕ’SeedableRng::SeedÁcrate::SeedableRng::SeedÁ HÌ¥ÒÕ‚Ö·¬Óå ñÖ’ÕÌ >‡×ÒÕ‚Ö¥· 5¬ÓGå Ì’Õ 7ñÖ‡×ÓØÄSeedableRng::from_rngÁ’röSeedableRng::forkÁOØÄÓÍØ’õØrØÄÓÍØK’GõØrø ÞÓå ÞÓ„ó å ó å �ÞÓó jŠP³¯¿´´ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²�jŠP³¯¿´´ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²„�GŠP³¯¿´´ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²›�ŠP³¯¿´´ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²é"G„��›ž¡ŠP³¯¿´´ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²BlockRngcore)assertion failed: 0 < index && index <= N)assertion failed: n < N UnwrapErr +(rand_core::UnwrapErr: failed to unwrap: À+ØÞçÞòÞ¢ßÀßÐßë8SêÛ#Ê€û4d]Ô�LN ®OùP©(kN÷6ÿµ7=¿qžøÐÌ'8„æÎ•möž¦b×r…7ZYq ¥âX5-H2½ÊbïES£S¨êxè RÑ’ºYg °Š¶Â§ ®©|i„_ ŽäX¶&¤Çl[Ú› ÝM6g[“Èï#TMNÒn_E»F×NãDŸ“à3q:¥Ía¥�J ;,RÕk¶c…ù'×z°“÷-ˆøÌ7^Ën‡qßÓL`�æã„ø)•µ@À€ƒAÛc/m–ۯàOÓ3æ@Y¾?d­Î¾‰î7î]åû ÄU“B‘"zúM ·ÅÂ4ÓÜ=Ô¨edâ ùŸ2¢ŠSØú'Vaˆ;@ŸÙA,>'%8Ôÿþ¡M½~$²“ŠU¢6ÎÍÊzšå´;ÞlnfM�Æä´ÿQ–ñ¹>³Ó€Ï”…¹pÞS°’YZøgj·{ýRøròÿ¼‘Ò]K·¦<òÝp¦’ld‚õàw9¦�P²|A6ßxDÞt³SZpUX#Œ­l ¹¤$tÃûcäs‘ù¯ÐÍÀ ,PémD”Ä ¥GûïL!oª×lBRòTmóL+sTr½àN;C§’ðµ¹ hÅeù[AûЍm®§B�ÇÃÈ`¶aƒÃÞÉ{]q\P[?ßÿoNÑŸ+ll?w{S’L‚Ól2€Ü”ùZ©5»ð„[‚æµÇöèL!'r ‡mà¿jþœÑ"•|î¨Ý»Å®!>a¥Ëœ]Ús·V7Wé1u�Õo%“¨`&oà²/1ˆåçÊ\M\šE^ó2¿q,±Lr÷‡œ:×&T#ÌÅlUÕä«IÙÈîvìí¨üö}�ÿŽk×—GøêÆòU̶ŒÈ°3;èú‡ÝTdÆ}? íŸÚ€Ú¢é<˯Y©Ù‡GÄpÆ�ØGöq&v‡— àÎ’ºŸ'1§µNJˆÍ_-®ÿÖžëË®F<•ãvdŽF½yo�“ˆ`çÔC‰ý˱hÕîà»§öË6-î‘pJ*B÷öŒrA65Ò½2Á~%ûìÌ<ø§ÃM֦ݰFô#PO»E©&*ÝgÜê[ÈßúD:«vË7s­<ë‡õaæ·˜í�¤óŠC‰¯?åü•JN%ùuƒ>"ûæ)4½rÀGµ›3NàwJt�äMõX(¥1Ú©K8úu1‹7zºÙªQætSßÉ{7õÀÁ�xËqz&�'•ˆ!ǽ6='<ë+Bë¸Ø¬ƒY6µBe8ħƒé`Þˆì!r‡w±Cò9Y߸"l×@'sƒ÷8 ìrJÏLhÞåèJŸ¼³@ßS!Ë{Å�ËùáªíGîÒ6‘‹l^�­Mo|ªQ×úE¸Ó¯Q(twÈYK8—ßgä¶�û0¾L˾ֹI»#%UD}ðŸRÈä6A*¼9úV媮ћ¾uŽž‰å逃ˆã[çêÖˈœÑ`ƒ¿ð63ð¯«×!×+Xà.ßþ�p'òlLnÔ|$Z�aÝ)ëHù£êD;�L¿¢Š S~‰rÅÿ—â�n¹zzu¢wº,2+³YzÏÆFõ¼°X²Þÿ< g5ýÙ¨K€28%[¼¿ÉÚCÌ-óâ�ˆŸÃEím³¯¼–0�º£7Ô†Wá-Ô­iéZÖ|$ç�¯F?’^wTNw‘s¤Q‡XÛs ã/¤|–Käê·èZùœp_fÝ–ÜØ—3Š[ê9«±ogP“®ºßEß`“»bßg=““ºñÝÂÞòçÌí( pÂC“™ºýÝæÞèäí.|ÎÈ Ì ÷† ’‰±P·×-€j‡n‡u‡|K‡Ì’Ò’Ø’s“”ú”–€–1—u—É—‘˜f™ãšx›Ê›% œcžvŸh¡ø¡w¢£‘£¤fY¤°±¶±½±�²³´¯µF·w·y·}·ƒ ·B3»JÂÉ™ÌÈÒõÓSÕ�ÖéÖýÖ×\×^×b×f×m×Ñ×é×—Ø>ÙþÙzÚ½ÚEÛ-Ý:ÝÞÞ0Þ>Þ�ߦßêß,àmà­àãà áPá�áÉáâ>âfâ«âèâ%ãaãhãpã6è·è9éÙêKë¡ëøëhìîJYî‡I¹°,Gžõe(u�ÑVš´ a{âG›âøMþW�è>ŒåV¨øc¼æ †�’I“…±N·Ÿº×5Ý Þ8Þ ßèüí4"ˆÚL“d–Z—e˜E›Z¢g£¦ºžתÚ(Û ÞÞ+Þß¹àâèëüí6î<ò"cˆ¿Ü�J)Œ19ÊyǕٞ                                '          农’“ ”¥”Ê•˜–�—2™“š�›â›ž/Ÿ¡±¡Â¢Á£„±²©³ µÂ¶L·]º8ÂßÈoÌHÒ…ÓÕAÖ¥ÖíÖ××Õ×دØVÙÚ•Ü3ݵÝ6ÞDޔ߾ßàDà…àçà#áhá¥áááBâ~âÃâã=ã¥çyèúè€êcë¹ëìzíõ5o'0_¶ Ð *{5ž eÎ^I¯ädnÿÓ(€a‡g‡j‡q‡x‡È’Î’Ô’o“”õ”–n–{–,—d—q—Ä—j˜w˜˜Œ˜a™ÞšR›_›g›t›Å› œ^žqŸc¡ó¡]¢e¢r¢£j£w££Œ£¤b¤¬±²±¸±z²‰²‡´”´¡´®´�µ�µªµ-·:·B·t·w·{··=»EÂɔ̴ÒÃÒáÓðÓNÕˆÖÖÖåÖùÖ ×Y×\×`×d×h×À×Í×ä×’Ø9ÙùÙhÚuÚ«Ú¸Ú+Û1Û@Û#Ý)Ý7Ý ÞÞ,Þ9Þ‹ß¡ßåß'àià©àßà÷àáKáˆáÅáâ:âRâaâ¦âãâ!ã]ãdãkã2è³è4éÔê8ëGë�ëóëcìýí7îFîƒDü´«(B™ða#dq‰ÀÍQ‰–¯P]wß5D˜–ÑÞõ=JûETŒÖå9z‰ÓâS–¥æõ`ª¹Yhnu{‚ˆŽ•œ¢¨®´ºÀÆÌÒØßåëñ÷ý     ! ' - 3 9 ? E K Q W ] d j p v } ƒ ‰ � – œ ¢ ¨ ¯ µ » Á d‡n‡u‡˜’Ì’Ò’“”�”²•p–€–f—u—l˜y˜�˜™{šT›a›i›x›Ê›û�Ÿÿ ™¡_¢g¢ª¢l£y£�£©£€±°±¶±²~²‘³‰´–´£´ò´’µŸµª¶/·<·H·y·}·Yº4ÂÇÈWÌ0Ò¸ÒmÓåÓðÔ)Ö�ÖéÖýÖ×^×b×f×Â×Ñ×é×—Ø>ÙþÙjÚ­Ú/Û5Û}Ü'Ý/ݱÝ2Þ@Þ�ߦßêß,àmàãà áPá�áÉá>âfâ«âèâ%ãaãhã¡çaèâèhê<ëKë¡ëøëví;îñ1Wì,GžõÌ f&Âw1‹šRaÊ8GE™Óâ?MHWÙè}֙鸭¼\krx…‹’™Ÿ¥«±·½ÃÉÏÕÜâèîôú      $ * 0 6 < B H N T Z a g m s z € † Œ “ ™ Ÿ ¥ ¬ ² ¸ ¾ Å +|6“”Û”–3–x–—F—n—²—÷—t˜‰˜F™¼š›\›q›¸› œ<žVŸH¡Ø¡¢o¢è¢3£t£‰£ù£\¤J²†²ù³‘´ž´«´Jµšµ§µÿ¶7·pºAÂòÈ�Ì|ÒÀÒºÓíÓ-ÕgÖÉÖàÖõÖ ×‚×Ê×Þ×€Ø'ÙßÙ5ÚrÚ�ÚµÚÝÚ=ÛóÜÈÝÞ'ÞWÞ�ßÑßàVà—àµàðàá;ázá¶áòá âKâ\â–âÕâãNãºçŸè é·êðêDë‰ëßëGì�íîCî ?è ŽÇ%:…ÜEå ?nL¤Ê�Lm“¨!ZpØûA…`ÂÛîGáQ¨â&W†¥ß@o¢ÁòF|¶e“ ”Ï”ô• –r–—3—h—¦—Ë—n˜ƒ˜>™°šåšV›k›¬›œ0žJŸ<¡Ì¡ú¡i¢Ü¢£n£ƒ£í£3¤3²€²È³‹´˜´¥´&µ”µ¡µÜ¶1·^º9ÂêÈyÌcÒºÒ¡ÓçÓ!Õ[Ö¿ÖÚÖïÖ×o×Ä×Ö×tØÙÓÙ"ÚlÚ|Ú¯Ú¿Ú7ÛàܶÝÞ!ÞEÞ•ßÉß àNà�à¯àèàûà3árá®áêáâCâVâŽâÍâ ãFã¦ç’èéªêÛê>ë|ëÒë:ì{íî=îö6Û“�²1xÏ8Ñ *h8�ĉCX�Ÿ TgÏæ;wK¹ÕåüAÓKv“ÜB€�Ù2Zœ¬ì8g°ÿ_ß”–b–—X—¶—c˜}˜J™ÀšC›e›¼›œ@žZŸL¡Ü¡X¢c¢ì¢e£}£ý£`¤k²g´}µ·@·öÈ…Ì¡ÒÎÓ@ÕzÖËÖâÖ÷Ö ×œ×âׄØ+ÙãÙXÚ¨ÚïÚÝÞ)ÞÕßàZà›à·àôàá?á~áºáöáâOâ^âšâÙâãRã¤è%é¼êëŽëäëLì4îí¥“ð?ŠáJa½­3uÝ'ŠrÉó/æ7„È+wÅE“×Kœ@¦”Ë•™–Ž—3™”š’›ä›ž0Ÿ¡²¡Ã¢Â£²ª³ µÃ¶àÈpÌIÒ†Ó ÕBÖ§ÖذØWÙÚ–Ü¿ßàEà†à$áiá¦áâáâÄâã>ãzèûè�êdëºëìp(`· _J°eoÔ§”Ì•š–�—6™—š•›ç›ž3Ÿ¡µ¡Å¢Å£²­³ µÅ¶áÈqÌKÒˆÓ ÕCÖ§ÖرØXÙÚ™ÜÀßàFà‡à$áiá¦áâáâÄâã>ã{èüè‚êeë»ëìq)a¸`ޱfpÖ‘”¶•„–y—™š|›Î›ÿ�Ÿ¡�¡®¢­£¤²•³ö´®¶ËÈ[Ì4ÒqÓôÔ-Ö‘Öí×›ØBÙÚ�ܪßîß0àqàáTá‘áÍájâ¯âìâ)ãeèæèlêOë¥ëüë[ðK¢ùJ›PZëû¿e o   & / 8 B L V ` j " y µ ¿ É Ó Ý è ö ,“z–p—v˜‹˜^›s›q¢v£‹£ˆ²“´ ´­´œµ©µ9·‚ºÂÒïÓÌ×tÚ·Ú?ÛàݱÞàçFëºíEî'ø p^̰•\CÝISäˆá¤ô¸gB ì ´|´¨º•ºßéÛ!+;«<!B˜LMQ9Zj`Zbôeuf»kùl8nêoFrs”stgu�vw–w«xcy@z{ñ{}~¼ µgºh9iêiz{ï{}~Gê ¸h7ièi:jk¹k» ³{³§¹”¹ÞèÚ!+;ª< B—LLQÌYi`YbóetfPgøl7néoErür“stfuxvw•wªxby?z{ð{}~Hë š¹h8iéi;jkºkÇ^grgšg s†vbgvgžgsŠvæ” –—½—Z™Ðš¾›œPžjŸ\¡ì¡ù¢ ¤r²w´ˆµ&·ùÈŒ̬ÒÙÓGÕ�ÖÎÖ‹Ø2ÙêÙ`ÚÝÜß àaà¢àCá‚á¾áúážâÝâãWã¬è-éÄê–ëìëTìõ­›’éR’îŒ3MSLN-“ƒºáݲÞáç»íù _±㆖’ÿ’–1—É—ãšø¡£~±F·Wº×m×zÚ½Ú-ݯÝÞÞ0Þ>Þ­àâŸçÙêtíîï°Ê ($�uVäCú‘@ŽXªeB�5tˆ‹’–šž¥©­½ÄÓÚÞåìð÷þ "&8<@GNUY`p…—¯¿ÃÊÑÕíñøÿ +/3JQpw~¡ºÁÈÙàçëï  +;O^exŠ™¥©³½ÎÒÖÚÞâéõ0@^bimv}†�𥩭ºÇÓçù '.5<@GKRY`gkoy‰™¡¥­µ½ÅÕÙáîöþ"*2:MQYgks„Œ�˜ ¯·ÆÎÒÚâæöû #+26>FJRV^fjrv~†Š’𢍮´ºÁÇÍÓÙßåëñ÷ý !'-39?EKRY`gnu|ƒŠ�–œ¢©°·¾ÅÌÓÚáèïöý E„O“f“g“e–[—g˜h˜K›L›M›N›O›P›[¢h£­º$»%»&»'»(»)»¢×§×¬×±×)Ûßzß{ß|ß}ß¾àÂàÆàÊàÎàâââ#â'â"è#è$èë!ë&ëDstuúÿ Þƒ+3;ÌÉÛ Í )Ð*@,Ü,Ú(.'"-’"-þ#-m".äÖá`âh“j–`—i˜Q›\¢i£*»¶×ªÚ*Û ÞÞ+Þ~ßÒà+â%è+ëüí6îv"cˆ¿ˆ08@ÑyΕá¥Q‚¬˜),/25%(+.14!96$'*  0#&33 \Ü3ë8SêÛ#ÊܛС É„ã…ÿ‚]´œë8SêÛ#Ê&H‘k²V[:$crate::panic::panic_2021Á øÇ 7¥Â`panic_internalsÁÏ¢[ˆZë8SêÛ#ÊóŸ}Ç>4… Ý!3úûèë8SêÛ#ÊV~T~² \é'3ë8SêÛ#Ê«¼x®&Täš < E3ë8SêÛ#ʺ�gd¸Šè ¿63úûèë8SêÛ#ÊTM§T’É$crate::assertÁɇT]�±ù]core_intrinsicsÁµ»ƒgeneric_assert_internalsÁ±œë8SêÛ#Êû´ÛÒ“lþq,Ã}©Ø ¯½fmt_helpers_for_deriveÁ¢g¡gë8SêÛ#ÊÑ[šê%–?3úûèë8SêÛ#Ê{ÈC)Úo$Úu‚‚´¯½derive_clone_copy_internalsÁú Ì ë8SêÛ#Ê+˜ìÛ´UWD3úûèë8SêÛ#ÊQK„uÁ‘¼‘$ïuÔ=‰¯½�i€ië8SêÛ#ʃ.fq´ËWµ ¡3úûèë8SêÛ#Êóƒv6ä’NôähÅŽñ]©œë8SêÛ#ÊMp[ÏîCò <Á&3ë8SêÛ#Ê{(ú-’ôGÔP3úûèë8SêÛ#ʽU¬ê´ûDÇÚtø0B¯½µ»ƒȽ±œë8SêÛ#Ê1úJ+0Òü–&Y3ë8SêÛ#ÊÍ‹¬Qt¢Éüº;é´œë8SêÛ#ÊÒܨÇÎôN|þd3úûèë8SêÛ#Êþ²fYmyÊ5 ÿI3ë8SêÛ#ÊÿÌ-”(‰ Ø3úûèë8SêÛ#Ê&ÚUt1[ÈI$crate::assert_eqÁá ò[]µŽ ]µ»�‹ë8SêÛ#Ê´öP+‚pQïe,Ó}”V¯¯½’¿ð‰âë8SêÛ#ʃìtü·PüÈ{3ë8SêÛ#Êaf �ÅÜʶLä�ÀO_¯½¢Ë¾ë8SêÛ#ÊXV1²œ²ß×F3úûèë8SêÛ#Êã:,MU»T33Ü ë8SêÛ#ÊÈÃìLy8]µ$crate::const_format_argsÁùŽ"`õÄ–] fmt_internalsÁfmt_arguments_from_strÁŸœë8SêÛ#ÊÒ£µß <å73ë8SêÛ#ÊÛÍþh£!üµ%½3ë8SêÛ#ʦS¼*Mm1Ûü¢$1ൻ�‹ë8SêÛ#Êìñ =H©¬þ TÕD3ë8SêÛ#ʧ+W£¢Î¢¾e,쯽’¿ð‰âë8SêÛ#Êdto‹ôíýw 4q3ÎÆÞÆë8SêÛ#Êî€�s°‰Äƒ=3úûèë8SêÛ#ʤÄ6‚;¿c¾r<Ê�Äl¯½øôë8SêÛ#ÊY}�eôºÏ „3úûèë8SêÛ#ÊÃGêÚ,¥µÐ~àeöi_¯½derive_eq_internalsÁ¢ŒÏ¾ë8SêÛ#Ê„DÒ�8 €3úûèë8SêÛ#ÊDan:ã÷ï% ö üÇ 7•Ú]ƒŒ‹ë8SêÛ#Ê&_]›‚<   debug_assertÁü×+&ÍœS]ƒ‘‹ë8SêÛ#Ê]žnkXâWOdebug_assert_eqÁüºJ*å„[]’‹ë8SêÛ#Êñïá…s⤥Úœvœâœ¬¥êœ†œ°¥úœœ–œþœΜšœ�Öœ¢œ´¥~œæœ®œîœöœŽœ¾œ�Êœžœ �Òœ¦œrœÞœªœzœ²œ‚œòœ¶œŠœºœ’œ¨¥Æœ�ö¢\ V�ì¥Ü ,¦Ý£>¡¸¥4¤Šžë¡ÿžƤ2¢yŸ'¥’¢ùŸ†�£‹ “£¤8ž™¡™¤½¡LŸù¤m¢ÌŸv¥É¢. 2�¯ æ�·£¡žl¡\žl¤"� £{ v�¦ ¡[¦¤\¡Ü¥\¤ïž"¢<Ÿé¤]¢¼Ÿf¥¹¢ Ö�ƒ£Ÿ §£$¤Lž­¡¶¤Û¡iŸ¥‚¢éŸ”¥æ¢L F�Ì žÍ£.¡(ž‰¡zž‰¤°4ODHT ·ÞP[?ßÿoNÑKëHù£êD;íѪßMú¦L¯.º­l” ÚÍcVĉùÌ*¼9úVäòÿ¼‘Ò]K92‡kØ5gΧ3á¹àê¦áÿ@kÀ̲j—ä¶�û0¾L�aæ·˜í�u·{ýRør8½4¬üE“”Œ­l ¹¤?¹zzu¢wºð�p˜„�£&v‡— àÎeU“B‘"zúM¡M½~$²“Š$xËqz&�'•¸Ó¯Q(twÈ�î‘pJ*B÷ömò܆¦1DÉ€ÉÜØ—3Š[êß„³4Ž¢*ÁŒrA65Ò½2n‹üNî6––LÒ,>'%8Ôÿþ#s„;n;Æã’žåÀ?ÞyÑs׌8ARøÂ»%š=ÞAO´â¼¿ÉÚCÌ-õÈßúD:«vspÆ�ØGöqd”œB‰G”U÷ÛÇöèL!'P§ÃMÖ¦Ýpp'òlLnÔëzºÙªQætS}×lBRòTmDES£S¨êx óL+sTr½àE0´ VðÒ�;Ë…FWL¹šõ¶èYö+­,2+³YzÏÆñ»ð„[‚æµOÊ\M\šX€û4d]Ô�L¥Ëœ]Ús·TZùœp_fÝ–ÿb0“Èb’*BÍ$tÃûcäs‘@Ü=Ô¨edâ©&*ÝgÜê[rþK]ïg"f“®©|i„_ G#bµixH´¶CÂÖþlÈt”1Ûc/m–Û¯>´;ÞlnfM3·²Yóo^Z0*r ‡mà¿QÒ6‘‹l^�­‹÷8 ìrJÏL‡Èä6AãU¢6ÎÍÊzš%f‰ŠªÍ*Óµtç)mÎâI›Ö¹>³Ó€Ï”5öž¦b×r…c…ù'×z°Õä«IÙÈîv\ aæ›Ú€»×¥·¦<òÝp¦:§ƒé`Þˆìƒ@åß´—¼+Xà.ßþ�ê`�æã„ø)|–Käê·èþƒˆã[çêÖËçÁ~%ûìÌ<øo¥·ºíPU×¢4­„aïX/ÅjéVTñ~ <¡˜�øòt¢Ã®ßÉ{7õÀÁ�~ìí¨üö}�](kN÷6ÿµN ®OùP©€Ü”ùZ©5N2Hÿ„&ج;€M ?êîÓ!r‡w±C„×@'sƒ†<§2ÚÕ]ß7ZYq ¥âX‡XÛs ã/¤ý³SZpUX#>>"ûæ)4½x’ld‚õà;uÚ†üÙ~…P‚Ÿ·Ö«jþœÑ"•|îRü•JN%ùuƒwØú'Va!V7Wé1u�ÕU’ºŸ'1§µfàOÓ3æ@[›}3=äg0ˆ!ǽ6='<€YK8—ßgލK€28%[ôÜQÇÇ;‰Ù«ÄË7s­<ë‡õtŸ+ll?w{SLˆ;@ŸÙA"27ƒCA•ÉG¨Y6µBe8Ä‚ãvdŽF½yi›f]G±¸Ë¾Ö¹I»#%�hÞåèJŸ¼³ˆ¥GûïL!oªC°Fô#PO»EqMo|ªQ×úEŒ ;,RÕk¶ôz�|QuŽqª{ËÿWKΘÞÉ{]q\JMNÒn_E»Fo�“ˆ`çÔjb2`·½á,q:¥Ía¥�JÃÈ`¶aƒÃINJˆÍ_-®ÿgŽ¥ë_å—Ÿ3ø7d�jØÂÿ< g5ýÙóo³†j9Œn' T‰|kÕÊ.·@*qp»�™^Ën‡qßÓLgÄPårûŠ›-ÑŸqóø¦ÃdEõ®s8|È©K8úu1‹7|æ+%6wo³u´õÕ(öwO�¹Ö|$çú£AÎ~¥r܈œÑ`ƒ¿ð6è3;èú‡ÝTd`à²/1ˆåçW¤óŠC‰¯?åv·ï'ˆ»$ê›VËÉñFožuŽž‰å逿|$Z�aÝ)ì�L¿¢Š S~îóâ�ˆŸÃEöÿŽk×—Gøê^vâ/š§�Mœl[Ú› ÝMrÀGµ›3Này×NãDŸ“à3vO—ÄŸÅO(2Ö3t¢9,Þ–0�º£7Ô†øõX(¥1Ú{w9¦�P²<ŽÌ §y¹’©ËùáªíGîŠ3ð¯«×!×éWá-Ô­iéZù¨Ý»Å®!>aSX<Žò±ÀáÔ9«±ogLPo³±è±Vð¸ç×ùººD&F¸yoÐÊ(fõ»ÓЉõQi¼ÁÈãà6ïò§½1úèÀE^ó2¿q,±Yu�ëfŠU 6g[“Èï#T@ßS!Ë{Å�‰T#ÌÅlU['8„æÎ•m}¼HÏ•®m–�&ÈíΧٷÏ媮ћ¾å’L‚Ól2M˯Y©Ù‡GÄcˆáp’Üor2¾…¹pÞS6íîUBááÁ0°¯OõãqðP2î7î]åû Äf}+åí¯Š¤k9ÿqæÝ¼ÎÇ5ʰëè‡ñzØë8SêÛ#Ê üB8ë÷ ˆËÆ}? íŸaîà»§öË6-l°’YZøgj7 hÅeù[AûG/ f6ør§�Æä´ÿQ–ñ4hÿÿ&|ÿÿÿÿÿÿÿ+%3S5ÿ&Nÿ9ÿÿIR] ÿÿgÿ&ÿEÿJÿdÿ{ÿÿÿÿÿÿ@ÿu&ÿÿÿqÿÿÿ<ÿaZ;ÿÿ8{ÿÿÿnjÿÿ)6ÿ:Fÿÿÿsÿ ÿÿÿÿÿÿÿ2sru7@?"ÿÿÿÿÿÿÿuÿÿ&&pÿÿ'ÿCÿ YIÿÿwkÿ-0ÿÿp3ÿÿÿÿ|hÿ qtÿXÿÿ*ÿÿÿÿÿ*ÿÿ@*ÿ 6[_ÿÿÿÿÿÿbÿÿÿ)ÿÿÿ(ÿbEg=ÿeDÿ ÿÿÿÿÿÿÿÿÿ5}ÿÿÿÿxhÿÿ&|ÿÿÿÿÿÿÿ+%X/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/block.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/block.rsÁ ¨Ûp1só*d¬7âv§JÎKÎK´-N=OLMON#/1# <.# *+!1#=' !@# @+ S) 9+1.(d*27#J140MMOOO$JO#=%'%*+UB=)-'#@I%;K-)5A/- K.NM%,00BHLNL1 /FK)"+5KJB,.",'&3 )#D.1"&*#&3"& #.K4&&72F8<+_!+,J8(P @ ¸—à˜ä+´ŸCǰt+ˆp°X/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/utils.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/utils.rsÁ ûẦLf�ÀùÊä�J¢2=ý&ý&—*OKI"MFELM#!)202>$L5(4OKQ#6"1N, !@/ @N& QI /.7 .< TA,,,BL -1; ;'.9 6T0'.H 9C7)354-&H*$bŽ¥ã$„Å#ð_/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/seedable_rng.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1Á_/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/seedable_rng.rsÁ ëgLR€«Ù‰w{_¬®Üu›A›AÎ=FHNOPJL P6PQ'O?QOI $+%%(" )( )0 %#5 <0MMRMP!PMQPAHQC%OMNPQ,.OQMIQ(MPO,/.:!7 )B ;QQOILLONOKOOLJ3'8.'DKQ.,"S)= S)>A8 !',,E+89=$*]¾ÄÚÞ½ØÐ,c#m]/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/unwrap_err.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1Á]/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/unwrap_err.rsÁ ¨›ðIs®ÿV]Uˆó“ žžF/R& /-",,%0"& D2& <(*=1=1N6;<74%PUN8 ƒ@Xá*ä¢û‹X¸e.j§,W/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/word.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1ÁW/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/word.rsÁ `L„ÐJ+IüåC&�#ªd� � B/+" 6PA6-+&7' .$ ,$ '% 7' .$ ,$ '% r VŠ×nj.ŒûAælÈV/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/lib.rsÁK/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1ÁV/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.10.1/src/lib.rsÁ —ZK»‰æ¾·�ïB38’Q’Q�#0 'Q?# #2B7 HOPPW$I$ ,&#&#&D;G.,$$ $$ /) >\K?NDPNOPQ5MIPHMOMO"O.QKDIMODMPML7> H?[R"PQK