Files
boc/aamos-ledger-rust/target/debug/deps/libtower_http-26b1bf7416a4675a.rmeta
T

1810 lines
382 KiB
Plaintext
Raw Normal View History

rust
#rustc 1.96.0 (ac68faa20 2026-05-25)ÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁòÖÀH•‘PIÓHã#£-055f30b747f859b6Árustc_std_workspace_coreÁ­Cçß^ò½èÝ$­Çÿ+Cé-c4878ee60b2242c9ÁŸÃï+Ñ]ŠqB<ÏïW#-8dd1dd90e70d0b6aÁ miniz_oxideÁ€š»J(P>àö÷g\K-1eb618da2918ab7fÁadler2ÁÆ;+Þ®5¥Ìýݰ¦ÛLˆ-f7919172d268e069Á hashbrownÁPäV9ÒÆèÜ"ÊÖVŽ\-0fc2184a5da6723aÁrustc_std_workspace_allocÁs&ØòØy¯s•bæ!‰ýŠ-97e4bf30be240674Á
std_detectÁhŠBîÙºÌI®ËÅš-9dbbf8346ba7ac8bÁrustc_demangleÁûë9´Ç×@Œ’ùXFº-f33013f239bf9f14Ácfg_ifÁÜLhž§Œaã¯>­-0a71c8f33a838301Á addr2lineÁ׎Þ!]8V$É@@-e618e6be60e87ba2ÁgimliÁ¸
°µ~Î1‹Ñt ðÁ€w-1f7768a68858f670ÁobjectÁ
áPÃ?­À¶¼QHJ¥-914cd6a4dbe590d1ÁmemchrÁ›º«8Ór­2Ù $¨ûib-cf21ca6f2bb15dcdÁë
‹ás«LÖ€îâƒ×ɯŒ-ee6f3747e38367f0ÁhttpÁz"fL†ØÞÄ_°¢_ qÛ-e48ab040bc3ddb47ÁbytesÁ`²['3_²µÆ=üå¥-d4f44708ed5da7b6ÁitoaÁrLpèòÐ
ݽ‚AéGT'-7ba5a7b63f68a66bÁ futures_utilÁNdpµÙærC˜ÊÉíNá-c6fee091c887f5ffÁ futures_coreÁÆöc$޳–º¾v¸dK-ac1e9cdb826f83c0Á futures_taskÁÀð‘ôRî-Ø¡±ê¹-b68ad6d97da04350Á futures_sinkÁL1T𽉤
¾
Èþ.-14e3b8a05e30b9eeÁpin_project_liteÁ·x¼+Ä`·á¨›t—¸Íœ-2dc344ecc91b59efÁslabÁ³=E–¿Ü;Ö¾t,)ã(-82737aed38d266b2Á
futures_ioÁTo«Š§ J­íZu\Ȩ-94612345b0215f77Áì­†°<šÒ"®9eæ·3š¶Ø-809318e8f6183885Á http_bodyÁÙè!" )I
lŽà‚ÝFŬ-5ba25dbd9e9a894eÁtowerÁAnZç$!Å01ÇòIÛÊÔ-de95768b458050ffÁtokioÁJ;Ì3<þÝñŠ7_ú-081d57d1ceb823d6Á parking_lotÁâ°r4¨6ª(ü²Hd©n¼-21962aa896c8619bÁlock_apiÁEcÓŽ/ÅS}sw‡A$P-0e8055cd433fa267Á
scopeguardÁ’‰‘p ÒÞa¢ßöéqÓB-29f0bdb2ea82739eÁparking_lot_coreÁ’Ý%Ž=Eq^U4FOV)àŸ-e1ee0517e8b9a4bfÁsmallvecÁ[“S‰«2ûÓàÁ3™ËºS-fa382cf08413422fÁserdeÁFVæ¸Û•IÄÀzÍ-9c8ce3cf08540cc3Á serde_deriveÁ,w|êñ]ù¿¥­C£ð-975c43f96d83014eÁ
serde_coreÁ²€Ãb˜cÐòžÇÇ
-7a42419d8e43b208Á®f©¾/ô)c§{õa“â‘-a3906971a93fd1b8Áæ\‹±ÔcdùÀTƒ-f86f80b348d33b13ÁmioÁGùj0ðÔ·â"FÆ#0Q-3545320490828222Á tokio_macrosÁóÁm¹^E¼>ŽCê
z3-074a4ab5bbda1a72Ásocket2ÁsT›¸n>~RÊ1G/R-c161f09f0083d1e0Ásignal_hook_registryÁœ¥¿’g›´·DV<{Y<<-b3ea108dcb9d0adeÁerrnoÁÍ\Ý|#{°zŽ¡p&a”-464950f23d45b34dÁ
tower_serviceÁ:`¡{¶aÛ¬í"aô-3b2010b03e380b78Á tower_layerÁX*ø6êWHNᕈf§-ee72e88a461fccddÁ sync_wrapperÁTÃ@Oø~:åÍžêƒE¦«-fb4745e3f4df95dbÁurlÁ|2¿Ë|«ÔËÞ
Î'7‰&h-eb4862146510db1cÁform_urlencodedÁg
¥N`ù®”b§³‚ŽŠ-8b8228a5928ce2f9Ápercent_encodingÁ¼Ë¥"Iý¹é·Aµ†gãä-bde46fa019ba58c1ÁidnaÁ×—Ö½;Çí6öpU…·-5708750a07396acaÁ idna_adapterÁ¨Võý|ìÖà%\!2øB-f67616d3ed188abdÁicu_normalizerÁ‡/CE@îÁŽ<{9ÐháX-4bb868b749a66746Á icu_providerÁ±Õ¿¨ÞNXþNmÖ(/ÂèS-db5b46d656d85189ÁzerotrieÁá}"SŽUMö@0=$_²-05178122ec16f752Á
displaydocÁ©$-.ÿæ§ï=[œiF-53df79815c011341ÁzerofromÁ/ŽErÅÉŽV 7Í-92c585200eab8211Ázerofrom_deriveÁŸæþÇŽá2?M¥e (-abe85a41d9dcc735ÁyokeÁ?9›Š´;1ˆOøÀ-f8bf9e5b8bbb2034Ástable_deref_traitÁ½ÊTýö÷n˜TóQ-á†-771635b0451f799dÁ yoke_deriveÁ×ã„Ô„ýT·+CIƒ•sÙ-ad663b8de2c8c776ÁzerovecÁ 
åLì{'h‚ïhïD¯Ð-719747d224e025f1Ázerovec_deriveÁ£½+d“ð΃-m*¸]-09ac241eaa4a8700Á writeableÁ²é´‘¥1§%‚ý uÈ%-735c33932dd69842Áicu_locale_coreÁ*WéŽu>9gà ¦$hs-18874daa5c5c87adÁlitemapÁÎ xj+Þ*`²ÔtJ²-5054981e83d0528aÁtinystrÁ ²ãЕ 'xË´BXßñÖ-607f5ace9a59a465Áicu_collectionsÁŸÚõñ«œnD&èK˜vf—-7ebf91bcf11bab00Á
potential_utfÁ‘j&fX`ËW¯czw㈛-f50640784dd0cec0Á utf8_iterÁ‚×úÐ'œÌx G¤Ä^-6f20145e2e3e1c24Áicu_normalizer_dataÁÈÙãµ§ù»/ô#\“ï-4d42ceae66c85c80Áicu_propertiesÁѬU°É(W9PKÅQ{5øú-18d7694dd09bc684Áicu_properties_dataÁTˆ{Z3Ñnþ&H¶=_?3-8894fd72e4000317ÁbitflagsÁÊCd©Áòt!ž
è±éŠ-795688bf52842371Á test_helpersÁd±6$¦6authÁ$á6»š„Æ6
set_headerÁT7»
set-headerÁ´î6propagate_headerÁ„É7»propagate-headerÁä¢7 compressionÁ\ü8»compression-brÁÔë7»compression-deflateÁü‹8»compression-gzipÁä°8»compression-zstdÁäÒ8üå7Œ
add_extensionÁl´9»
add-extensionÁÌ9sensitive_headersÁŒò9»sensitive-headersÁìÊ9
decompressionÁl®;»decompression-brÁä•:»decompression-deflateÁü·:!»decompression-gzipÁôÞ:»decompression-zstdÁô‚;ü:”content_encodingÁ„µ> »­ ÔÍ;»Ç üí;»ç ä’<»ƒ!ä´<»¦"äÖ<»Â"üø<!»ä"ôŸ=»#ôÃ=»fsÁtç=üÇ;çcompression_utilsÁŒõ@»­ Ô×>»Ç ü÷>»ç äœ?»ƒ!ä¾?»¦"äà?»Â"ü‚@!»ä"ô©@»#ôÍ@üÑ>CompressionLevelÁ„ÍC»­ Ô˜A»Ç ü¸A»ç äÝA»ƒ!äÿA»¦"ä¡B»Â"üÃB!»ä"ôêB»#ôŽCü’Amap_response_bodyÁŒŽD»map-response-bodyÁìæCmap_request_bodyÁ„ÏD»map-request-bodyÁä¨DtraceÁ,„E»­'ŒèD testsÁ,š$0È',â$×KÈ',«$ XÈ',$~È',ùÈ',ŸA$”AÈ',üb$ñblimitÁ,ìE»Ò(ŒÐEmetricsÁ<˜F»í(œúEcorsÁ$ÃF»Š)„¨F
request_idÁTñF»
request-idÁ´ÐF catch_panicÁ\¦G» catch-panicÁ¼„G
set_statusÁTÛG»
set-statusÁ´ºGtimeoutÁ<ŒH»¤*œîGnormalize_pathÁtÁH»normalize-pathÁÔœH
on_early_dropÁlüH»
on-early-dropÁÌØHÀÈ',âY$×YÈ',™  usable_for_retriesÁ”Øe
$Íe
ëredirectÁDÿ »ò+¤à ëRedirectÁDÎ »ò+¤ ë¤$ø »¤$tß ëServeDirÁD¶ »¤$tƒ ë ServeFileÁLÀ »¤$ "builderÁ<ÎI»utilÁ„·I service_extÁ\ôI»-„ÝIServiceBuilderExtÁŒÂJ»-„ˆJ
ServiceExtÁTâJ»- "validate_requestÁ„K»validate-requestÁäöJbodyÁ$ M»å)¼¿K»¦"äÜK»Â"üþK!»ä"ô¥L»‚#ôÉL»¤$tíL»Ò(ŒMü¹KÜÀmacrosÁdefine_inner_service_accessorsÁ opaque_bodyÁ
opaque_futureÁfollow_redirectÁpolicyÁµ      æ BdÁ ê0ò+
on_requestÁ
clone_bodyÁ 
clone_body_fnÁ$$×''''ò+'²1Ç1--filter_credentialsÁ0000000000 0 BLOCKLISTÁ0<æ <block_cross_originÁ< block_anyÁ<
block_noneÁ<remove_blocklistedÁ<
remove_allÁ< remove_noneÁ0D>0FFFò+F¡1limitedÁKKKKKPæ KR>KTTTò+
XXXXXX^^^æ aê0aXdê0ddddò+d¡1d²1k  redirect_fnÁmmmmmmss×mvvvvò+m€6{{ same_originÁ~~~~~~~æ ~×~ò+ 
  
PolicyÁŸŸŸò+Ÿ¡1Ÿ²1¥¥¥¡¥ò+¥¡1¥²1¬¬¬¡¬ò+¬¡1¬²1 PolicyExtÁ³µ´¡´´³
¸¡¸¸¼¥¼µ¾¡¾¾¼
¡ÂÂStandardÁAttemptÁÇ'aÁÇstatusÁÇmethodÁÇlocationÁÇprevious_methodÁÇpreviousÁÎê:Îô:΂;Î;Π;η;Õ is_followÁÕis_stopÁØØØò+ÜÜÜò+ eq_originÁ 
  
 !"#æ ¡ with_policyÁФСŠServiceÁŠlayerÁ¤æ Å>¤¡>layer_with_policyÁ˜ReqBodyÁ˜ResBodyÁ˜¤˜¡˜ResponseÁ˜ErrorÁ˜FutureÁ˜
poll_readyÁ˜Ñ¢¤¢§?¢¶?¢¡¢°¢Š ¨ ¨ ««takeÁ«try_clone_fromÁ®¡®²1±¡±± resolve_uriÁclassifyÁgrpc_errors_as_failuresÁÀÀÀÀÀÀÀÀÀÀ À
À ÀÍ into_bitmaskÁÀÏ÷ÀÑ÷ÀÓ try_from_u32ÁÀÕ>À׿ × with_successÁ×make_classifierÁÀÛ FailureClassÁÛ ClassifyEosÁÛclassify_responseÁÞÛclassify_errorÁàÀâóCâ classify_eosÁâ»DåÀç×Àclassify_grpc_metadataÁéor_elseÁé map_failure_classÁìììììììììõõõæ ìùùù×ìýýýNewClassÁýóCý‡DýšDƒý»DìÙFóCæD»Dstatus_in_range_is_errorÁæ  new_for_client_and_server_errorsÁinto_make_classifierÁóC‡DšD »D¢¤× 
  
MakeClassifierÁ°
ClassifierÁ°óC°‡D°×C´æ ¹¹óC¹‡D¹þI¹×C¾ClassifyResponseÁÀóCÀ‡DÀšDÃÀ»DÅÀÉEÇÇÙF‡DÊóCÊæDÊ»DÍÊÉEÏÏÙFNeverClassifyEosÁÒ¥Ò
_output_tyÁÒ_neverÁÖ¥ÖóCÖæDÖ»DÚÜ¥Ü×ßæ ß×CâóCâ‡DâšDåâ»Dçé×servicesÁBoxErrorÁ AndÁííí¬í­ òòòƒ öö ùùù× ýýý> CloneBodyFnÁ±ƒ0FilterCredentialsÁ™3²3Ó3ì3blockedÁ0ƒ0×KLimitedÁ remainingÁKKƒKK×XOrÁ¬­X   ƒX¤¤X§§§×X«««>m
RedirectFnÁ¯¯±m²²ƒmµ~
SameOriginÁ·_privÁ~~ºƒ~~½>ActionÁ¿FollowÁÀ
¿StopÁÂ
Ń 
È×FollowRedirectLayerÁʡʩ0̓͡ С
Ò¡Ò× Õ¡Õ>FollowRedirectÁؤءØinnerÁØ©0 ݤݡ݃
á¤á¡ä¤ä¡ä×get_refÁget_mutÁ
into_innerÁResponseFutureÁë¤ëë¡ëfutureÁëserviceÁë©0ë;ëuriÁëÄëheadersÁëÀ.÷¤÷÷¡÷×üý¤ýý¡ü__assert_not_repr_packedÁ¤¡ü
ProjectionÁ'__pinÁ¤¡µVÃV©0‚;âVÄõVÀ.ü
ProjectionRefÁX¤¡µVÃV©0‚;âVÄõVÀ.ýprojectÁŸXý project_refÁ¡Xü__OriginÁ£X£¤££¡£__dummy_lifetimeÁ£µV£ÃV£©0£‚;£âV£Ä£õV£À.ü±X±¤±±¡üMustNotImplDropÁü·¥ü¹¤¹¹¡
RequestUriÁ½
½ˆÀƒBodyReprÁÂÂÛÄ
ĈÂEmptyÁÇ
婃
ËË×ÀGrpcCodeÁΫÏ
Î CancelledÁÑ
ÎUnknownÁÓ
ÎInvalidArgumentÁÕ
ÎDeadlineExceededÁ×
ÎNotFoundÁÙ
Î
AlreadyExistsÁÛ
ÎPermissionDeniedÁÝ
ÎResourceExhaustedÁß
ÎFailedPreconditionÁá
ÎAbortedÁã
Î
OutOfRangeÁå
Î
UnimplementedÁç
ÎInternalÁé
Î UnavailableÁë
ÎDataLossÁí
ÎUnauthenticatedÁï
À À
òƒÀ À õ×ÀÀGrpcCodeBitmaskÁø
øˆÀ
û×ÀÀþƒÀ÷InternalBitFlagsÁ
ˆ÷÷ƒ÷÷÷÷Ö÷ï
÷÷§ù÷ ÷
FLAGSÁ__bitflags_flag_namesÁBitsÁ´from_bits_retainÁ all_namedÁœ ALL_NAMEDÁOKÁ CANCELLEDÁUNKNOWNÁINVALID_ARGUMENTÁDEADLINE_EXCEEDEDÁ NOT_FOUNDÁALREADY_EXISTSÁPERMISSION_DENIEDÁRESOURCE_EXHAUSTEDÁFAILED_PRECONDITIONÁABORTEDÁ OUT_OF_RANGEÁ
UNIMPLEMENTEDÁINTERNALÁ UNAVAILABLEÁ DATA_LOSSÁUNAUTHENTICATEDÁÑcÛcìcûc“d¬d½dÓdìd†e¡e°eÄeÙeéeüef÷ À PrimitiveÁÀï_÷ Ã>÷
Å×÷Ç×÷ÉÉþË ÷ÍÉ÷Ï÷÷Ñbits_mutÁ÷ÓemptyÁÓ£Ó´Ó from_bitsÁÓfrom_bits_truncateÁÓ—cÓ from_nameÁÚábÛÓis_emptyÁÓis_allÁÓ
intersectsÁÓcontainsÁÓinsertÁÓremoveÁÓtoggleÁÓsetÁÓ intersectionÁÓCÓ
differenceÁÓsymmetric_differenceÁÓ
complementÁÛÑcÛÛcÛìcÛûcÛ“dÛ¬dÛ½dÛÓdÛìdÛ†eÛ¡eÛ°eÛÄeÛÙeÛéeÛüeÛf÷û×÷ý×÷ÿ×÷×÷ƒ°ƒ±÷²÷ˆ°ˆµ÷÷°¯÷°÷°Ú÷Û÷ °
÷!šextendÁ¥÷"ùž¥ž÷#¡ù¡
iter_namesÁ÷$¤¤IntoIterÁ¤ê÷%¨½h¨£¨´¨Úh¨ëh¨—c¨i¨«i¨»i¨Éi¨Ûi¨ëi¨ùi¨‡j¨•j¨ j¨C¨»j¨Íj¨éj÷&½×÷'¿×÷(Á×÷)Ã×÷*Űű÷+Ȳ÷,ʰʵ÷-Í÷.ϰϯ÷/Ò°÷0Ô°ÔÚ÷1×Û÷2Ù°Ù
÷3ÜÙmÝ¥÷4ßùà¥à÷5ãùã–n÷6ææµnæêÀGrpcErrorsAsFailuresÁê
success_codesÁÀì×ÀîƒÀGrpcEosErrorsAsFailuresÁð¿rÀò×ÀôƒÀGrpcFailureClassÁöCodeÁ÷
÷ˆöå?ú
úˆÀý×ÀParsedGrpcStatusÁÿSuccessÁ
ÿ
NonSuccessÁ
ˆÿGrpcStatusHeaderMissingÁ
ÿHeaderNotStringÁ
ÿ HeaderNotIntÁ
À×ÀÀŽÀÖìMapFailureClassÁ÷T±ìƒìStatusInRangeAsFailuresÁžrangeÁ ×¢ƒStatusInRangeFailureClassÁ¤
StatusCodeÁ¥
¥ˆ¤å?¨
¨ˆ«×SharedClassifierÁ­­
classifierÁ°°×³³ƒClassifiedResponseÁóC‡Dȹ
¹ˆ RequiresEosÁ¼
¼ˆ ¿óC¿‡D¿×ServerErrorsAsFailuresÁÃäR
Ń Ç× É>ServerErrorsFailureClassÁË¢wÌ
̈Ëå?Ï
ψ
Ò× LatencyUnitÁÔSecondsÁÕ
ÔMillisÁ×
ÔMicrosÁÙ
ÔNanosÁÛ
߃á×






&
&
&
'
+
+
+
,
,
-
I
I
I
J
J
W
W
W
i
i
i
j
j
k
k
u
u
u
v
v
z
z
z
{
{
ˆ
ˆ
ˆ
Œ
Œ
Œ
¢
¢
¢
£
£
¤
¤
¥
©
©
©
ª
ª
«
«
°
°
°
±
±
²
²
Ð
Ñ
Ò
Ó
Ô
Ö
×
Û
Û
Û
ß
ß
ß
à
à
Ž
 
 
 
¡
¨
¨
¨
¨
­
®
®
®
±
±
µ
µ
Þ
à
ä
å
è
è
è
é
ü
ü
ü
ƒ

Œ

 
¢
¥
¥
¥
´
´
¾
¾
Ã
Å
Ì
Í
Ù
Ú
Þ
Þ
Þ
å
ç
ê
ê
ê
õ
ü
ü
ü






š
š
š
£
ª
ª
ª
´
»
Æ
É
É
É
Ï
Ô
Ô
Ô
à
ç
ç
ç
è
é
û
û
û

Á
Í
Í
Í
ó
ö
ö
ö
ü
ü
ü
ÿ

Š
Š
Œ
Ž
Ž




š
Æ
Æ
Æ
È
È
È
Ë
Î
Ò
Ö
Ú
Ý
Þ
ß
à
á
â
ã
ä
ü
ü
ü
þ
þ
þ







Œ



¢
£
«
¯
°
±
²
³
´
µ

·
¾
¾
¾
À
À
À
Â
Â
Â
Ä
Ä
Ä
É
Î
Ó
Ø
Ý
ä
å
í
í
í
ï
ó
ó
ó
õ
þ
þ
þ
Œ
Œ
Œ



š
¡
¡
¡
£
¬
¬
¬
²
²
²
µ
Â
Â
Â
Æ
È
È
È
Ó
Ó
Ó
à
â
â
â
Ÿ³°ÀÊØííNð¬ ñ­ žÿi+Úâ–Š ̈¿c̈³̈ŸííNð¬ ñ­ žÿi+Úâ–ê0Ø¡Oƒ±Ëdt[Š Š¿cŠŸŠЉØãOŠ™30²30ŒÓ30ì30ŽœP0ï\‚ÕüÁÌ¿côгôŠŸôŠ‚ŠÛÂPÑPK‚gÞJŒhNØÿ‹Š ÿ‹¿cÿ‹³ÿ‹Ÿÿ‹î‹‚ŠØQž¬XŸ­XbèFÍ{¿×³„‰ЉŠ òŒ¿còŒ³òŒŸQž¬XŸ­XbèFÍ{¿×³ð‰ö‰ü‰‚ŠØ¯¯‘R±±m ‰À±/¼ŠŠ ©Ž¿c©ŽŸ¯¯‘R±±m ‰À±/î‹‚ŠÛ··ÒR¸äR~B=p¦'Á娹Р¹³¹¿c¹Ÿ¹î‹‚ŠŸ 8¡ЉçŠŸžBoxÁ¡ˆˆ¢ˆl }.xÏ¡çEçEèEGlobalÁ ¿±‡§í#î‹‚Š³¥Û¿ÀÁSÂðSiM²|"cØÖ‘Š Ö‘¿cÖ‘ŸÖ‘î‹‚ŠŸÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ö‘‚Šî‹‚ŠØÊÊàSÌ©0zt#•™4¡Š ¬“¿c¬“³¬“ÊÊàSÌ©0zt#•™4¡¤ØØØÑTÛ÷TÜ©0⟮IG½÷º”´”Š Ç”¿cÇ”1ØØÑTÛ÷TÜ©0⟮IG½÷¤±ôôRequestÁöheadÁ¦÷À.¦Œ4ñŠ|å§?¿cëë‡VïµVðÃVñ©0ò‚;óâVôÄõõVöÀ.R3N›Ì=º”Љˆ‘“íëë‡VïµVðÃVñ©0ò‚;óâVôÄõõVöÀ.R3N›Ì=¤±É‘·–‚Øëë‡VïµVðÃVñ©0ò‚;óâVôÄõõVöÀ.R3N›Ì=º”§?±Ø½½¾—\¿ˆ I{Ðy¬©¿cÂÄÅÛÆˆÇÈî\ÉÊ©Ye¥Ë^²¤î‹ÛÎÏЫÑÒ¾]ÓÔÔ]ÕÖè]ר„^ÙÚ¡^Ûܶ^ÝÞÐ^ßàí^áâ‹_ ã
åæ¾_ çèÕ_ éêï_
ëì„`íîœ`ïð±`ºÞ—ÚÑÏØŽ›Š Ž›¿cŽ›éŽ›éŽ›ô ô õ ¨÷ ˆÐ  mjçítoé¿cøøùø`úˆÀ ÿ c`ºƒ ÛªžØªžŠ ªžÛÀaƒˆÀ Vá†uÈÞOØ„ŸŠ „ŸÐ섟µß„Ÿ„Ÿ„Ÿíß„Ÿ„Ÿº„Ÿše„ŸN{ªžªž³„Ÿ¿c„ŸÄc„Ÿïy„Ÿà„Ÿé„ŸÈc„ŸÆc„ŸÊc„ŸÌc„Ÿ–ú„Ÿ„Ÿ•˜„Ÿ„Ÿ¶û„Ÿ„Ÿ̘„Ÿ„Ÿöø„Ÿ„ŸÞ—„Ÿ„Ÿï„Ÿ„Ÿœö„Ÿ„Ÿ•!„ŸÐL„Ÿ„ŸÃL„Ÿ„ŸÇL„ŸÈcªžÆcªžÊcªžÌcªž–úªžªž•˜ªžªž¶ûªžªž̘ªžªžöøªžªžÞ—ªžªžïªžªžœöªžªž•!ªžÐLªžªžÃLªžªžÇLªž¿cêê£rë¿rÀÌbø 5xؽ¤³½¤À½¤¿cððîrñ¿rÀ.«$fÞcÞØ“¥Ê“¥¿cö÷øÇsùˆúûå?üˆ6Ú ”}MÄcÞ¥¿cÿštƒ®tˆÍtˆñtŠud„ÁF¸OÐ츦µß¸¦¸¦¸¦ØÒu÷Tì±ì ÛŠ ×§¿c×§À×§Ê×§¿cžž»vŸÚvònÜr!™aØШÀШ¿c¤¥¦¢w§ˆ¨©å?ªˆEE=•aE&'Äc›©¿c­­ãw¯ƒxážÃúTž˜‘¨Øõ©°õ©¿c¹ºÈ»ˆ¼½þx¾ˆ1lŒ!©-ïóC‡DÊÒÒšLÔºLÕÌL8ÖŸ
#~îÉ‘¿cŸ«ØÃûyÄäRƒËM@xܶ¿c﫳ï«Àï«¿cËÌÍ¢wΈÏÐå?шËç ßR-ñÄcŬŠ ÔÕÖðzר„{ÙÚ—{Ûܪ{Iƒ›prÉÇÛŸ­ØŸ­¿cŸ­òí ²¯º·Å¿ÍÊÝØÀ½òÎþøîêô𢞳­ÅÃßÔö혤µ¯¼·Ç¿ÐÊáØôÎøÝÔùí$§s¯·È¿ÒÊäØ÷ëËÂõÎûøÅìêòðýöÿù ž«¤°­¿ÜÒÇÃÒËáÔýíDR«½·ÕÊÃÕêÉÃí'FTdv¯·¥
¬Ø¿ÜÖ¿¹·Ä¿ñÎýøÞÔ¼ŠÊ˜Ø±ë·¹ë¢ëÏÎÑÎψÿŽÿÿøÀøÇçö¤¤éËÉÍû½øý¿øÿÁøÃøƒÅøÈøˆÊøÍøÏøÒøÔø×øÙøšÜøßø¤æøÛêýžâÃâðÖÒ¹­Ø¸Š ¿cb³ Ÿ =ÛF³12Ú1“í‚Ø
éÐìµßíߺšeN{ÄcïyàÈcÆcÊcÌc–ú•˜¶û̘öøÞ—ïœö•!ÐLÃLÇLÀʰü˜T ; ëë
HeaderNameÁì÷TÃŽ4LÓNç¢ivƒ 
Ú¸ ëü÷v;ǹ׸Î׸ÖÙ¸ü™SÚ¸¬ŸÚ¸Ú¸ÜÎ׸g*ÁÚ¸,ÏÚ¸.äÚ¸^fÁÚ¸iqÏÚ¸t|äÚ¸¨ Ú¸œ«;׸ÇÙ¸òÚ¸ïÚ¸íÚ¸ëï ÁÚ¸ÏÚ¸äÚ¸ñxóŒN
 ±xóŒN
®œ˜9ùxÛŒ7Nžªž!xìŒN,
z‰½œÑ¬sŸªžmç
î≽œŠ ܠꪞÖýP
XM‰½œÃ H¡WªžDlÀ
Ƚ‰½œü ð¸¢Çªž´Ü0
8-‰½œµ! `(£7ªž$L 
¨‰½œî!@И¤§ªž¼

‰½œ§"@¥ªž,
ˆ}‰½œà"°x¦ªžtœð
øí‰½œ™# è§÷ªžä `
h]‰½œÒ#X¨gªžT|Ð
ØÍ‰½œ‹$ȩתžÄì@
H=‰½œÄ$p8ªGªž4\°
¸­‰½œý$ ਫ·ªž¤Ì 
(‰½œ¶%@P¬'ªž<
˜‰½œï%Àˆ­ªž¬
ý‰½œ¨&0ø®ªžôùx‹’ûN
 FlagÁÐ Nf»Nfz§ºÔ./ªžvƒ 
†Ì x…šN x“šNùx… NûÌùx’(NƒÌìƒÌô…ÌùxŒ’úN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêN†ÌšêNƒÌùD#©x‡•N¯ yx¥•Nžªž#°òÏŸªž;±òÏ5 ªžS²òÏM¡ªžk³òÏe¢ªžƒ´òÏ}£ªžµòϤªž³òÏ­¥ªžË·òÏŦªžã¸òÏݧªžû¹òÏõ¨ªžºòÏ©ªž-»òÏ(ªªžG¼òÏB«ªža½òÏ\¬ªž{¾òÏv­ªž¿òÏ®ªžµƒÌùxõ”GN‰xõ”N
Nvªžï¯òÏüžûGMGÉÓ,°òÏ9+Ÿªž8ŠÉÓi±òÏvh ªžuÁÇÁÉÓ¦²òϳ¥¡ªž²þÿÉÓä³òÏñ㢪žð<C>ÉÓ$´òÏ1#£ªž0|ƒ~ÉÓdµòÏqc¤ªžp¼Ã¾ÉÓ¤òϱ£¥ªž° üþÉÓä·òÏñ㦪žð
 <C> ÉÓ$¸òÏ1#§ªž0 
|ƒ~
ÉÓd¹òÏqc¨ªžp  ¼Ã¾ ÉÓ¤ºòϱ£©ªž°
 üþ ÉÓä»òÏñ㪪žð
<C>
ÉÓ$¼òÏ1#«ªž0|ƒ~ÉÓd½òÏqc¬ªžp¼Ã¾ÉÓ¤¾òϱ£­ªž°üþÉÓä¿òÏñ㮪žð< †Ì 
  
Wf¹ƒÌƒ…̆̊†Ì†Ì†Ì{†Ìv†Ìq†Ìl†Ìg†Ìb†Ì]†ÌX†ÌS†ÌN†ÌI†ÌD†Ì?†Ì:- ",¯òÏ'žªžF°òÏAŸªž`±òÏ[ ªžz²òÏu¡ªž³òÏ¢ªž®´òÏ©£ªžÈµòÏ䪞âòÏÝ¥ªžü·òÏ÷¦ªž¸òϧªž0¹òÏ+¨ªžJºòÏE©ªžd»òÏ_ªªž~¼òÏy«ªž˜½òϬªž²¾òÏ­­ªžÌ¿òÏÇ®ªžòÏ"OK"Á òÏ "CANCELLED"ÁòÏ "UNKNOWN"ÁòÏ"INVALID_ARGUMENT"ÁòÏ"DEADLINE_EXCEEDED"Á òÏ "NOT_FOUND"ÁòÏ"ALREADY_EXISTS"ÁòÏ"PERMISSION_DENIED"ÁòÏ"RESOURCE_EXHAUSTED"Á òÏ"FAILED_PRECONDITION"Á
òÏ "ABORTED"Á òÏ"OUT_OF_RANGE"Á
òÏ"UNIMPLEMENTED"Á
òÏ
"INTERNAL"Á òÏ
"UNAVAILABLE"Á òÏ "DATA_LOSS"ÁòÏ"UNAUTHENTICATED"Á‰ ixˆNÙx˜N
)xÍNN
šêN!x¤ŸNùx¬Ÿ)N N|ªžûÌ xÖŸN ùx¬Ÿ,N# ùx«Ÿ-N xØŸNùxûŸN yxþŸN
!xþŸN   #
*Axƒ N
Nyªž :
Qxƒ NX
 xŒ N IxÀ N   ™xÌ N
axÌ N !xÌ N )
0)xÑ N
Nxªž:9xÑ N\ x× N
!xÙ N
«
1xÙ N xÞ Nùx´ +N
 
 
& xß NùxŽ tN ' x‚¡N 
¸ x¡N
  1x¤¡N x©¡N* *
PùxþžËN xÈ¡N  ñŸêNšêN N|ªžûÌ    þùõïëò 
êÊç
â6 ßÛâØÔÛÑØ÷
ÿÐâè È Å@
HíéP
¾º
ÑØ³¯¸=Ò«´`¨¯¥ ¡Ç  È
ï  ©¢ óŸêNšêN!£"Ÿ#¦#¯N|ªžûÌœ$£$%#¦&$%¸ &%$"#$$'(ƒ)Š)"£
«Êç)³(zÎ( w)s*z*p+l,s-i.p."
hâè.-`¸,-].Ø
à[­é,è+VR,N
*+i+p*K-G'PÕj)C'Lø@(G'=/9_ /`
/8!A3#:" õŸêN!šêN0;172>2GN|ªžûÌ43;3142>534P 543.123)3%678"81;
CÊç8K7f7 8 99:; <==1'
/âè=1<øP;<õ=p
xó­é;:îê;æ
9::9ã<ß6èm  8Û6ä Ø7ß6Õ>Ñ÷ >ø
>Ð0ÙË2Ò1 ÷ŸêN0šêN?Ó
@Ï
AÖ
Aß
N|ªžûÌÌ
BÓ
BÉ
CAÖ
DBCè
 DCB!Æ
@ABÁ
B½
E·
F³
Gº
G@Ó

Û
²
ÊçGã
F"ª
þ
F&# §
G£
Hª
H 
Iœ
J£
K
L 
L@¿

Ç
˜
âèLÉ
K$
è
JK
L 
 
­éJ I%

J~

HI
I 
H{
Kw
E
 'š Gs
E|
( 'p
Fw
Em
Mi

 M
(
·
Mh
?q
c
Aj
@ ùŸêN?šêNNk
Og
Pn
Pw
N|ªžûÌd
Qk
Qa
RPn
SQR
 SRQ)^
OPQY
QU
TO
UK
VR
VOk

s
J
ÊçV{
U*B

U.+ ?
V;
WB
W8
X4
Y;
Z1
[8
[OW

_
0
âè[a
Z,(

YZ%
[ 

¨
#
­éY°
X-

Y

WX1
X8
W
Z
T
/2V
T
À/
U
T
\
'
 \(
0
O
\
N
û P
O ûŸêNNšêN]^ÿ__N|ªžûÌü``ùa_b`a ba`1ö^_`ñ`í cç dã eê e^
  âÊçed2Ú. d63 × eÓ fÚ fÐ gÌ hÓ iÉ jÐ j^ï
÷ Èâèjùi4À hi½ j8
@ »­éhHg5² h® 
fgÉ gÐ f« i§ c°5 7Ê e£ c¬X 7  d§ c k¿ kÀ8
ç k˜]¡_š^ ýŸêN]1ÿšêNlmnžn§N|ªžûÌoopnžqop° qpo9Žmnoo
r
s{
t
tm
£
zÊçt«s:rÆ
s>; o
tk
ur
uh
vd
wk
xa
yh
ym

`âèyx<X°
wxU
yÐ
Ø
S­éwàv=NJ
wF

uva
vh
uC
x?
rHÍ
?b
t;
rDð
?8
s?
r5
z1W
zX@

z0l9+n2m ÿŸêNl1šêN{3|/}6}?N|ªžûÌ,~3~)}6~I ~A(|}~#~   ƒ ƒ|9
A ÊçƒJBf FC  ƒ
        ˆ ˆ|0
8  âèˆ;D[  ˆ~
 ­éEþú ÷ 
  ø õ ÿ G ƒó ý© Gñ ù ð í H
< î{÷é}ð| ŸêN{šêNŠòïŒ÷ŒN|ªžûÌîö펌üŽ ŽIòŒðí è å í 
 çÊçJá5 NK ß Ü ä Û Ø à × ß 
 Ùâè LÓ+ Ò N
V Ñ­é_MÎÊ Ç 
ä ì È Å ÏT Oé à Íy OÁ É À ˜½ã ˜åP
  ˜¾ŠÈºŒÂ ƒŸêNŠ1…šêNÆšÃËÕN|ªžûÌœʜÁОœå žœQÆšœÄœÁ
Ÿ¼
 ¹
¡Á
¡šÜ
ä
»Êç¡í Rµ 
 VS ³
¡°
¢¸
¢¯
£¬
¤´
¥«
¦³
¦šÔ
Ü
­âè¦ß¥T§ÿ
¤¥¦
¦"
*
¥­é¤3£U¢ž
¤

¢£¸
£À
¢œ
¥
Ÿ£(
W½
¡
Ÿ¡M
W
 
Ÿ
§·
§¹X
à
§œŽšŸêN1‡šêN¨š©ªŸª©N|ªžûÌ«ž«¬ª¤­«¬¹ ­¬«Yš©ª«˜«®¯°°©°
¸Êç°Á¯Zݯ^[ °±Œ±ƒ²³ˆ´µµ©¨
°âèµ³´\{Ó³´zµö
þy­é³²]vr³o
±²Œ²±p´m®wü_°k®u!_i¯q®he `
´f¨pbªj©ŸêN¨1‰šêN·n ¸k ¹s ¹} N|ªžûÌj ºr ºi »¹x ¼º»  ¼»ºan ¸¹ºl ºi ½d ¾a ¿i ¿¸
Œ c Êç¿• ¾b] ± ¾fc [ ¿X À` ÀW ÁT Â\ ÃS Ä[ ĸ| 
U âèć ÃdO § ÂÃN ÄÊ 
Ò M ­éÂÛ ÁeJ F ÂC 
ÀÁ` Áh ÀD ÃA ½K Ð!ge!¿? ½I õ!g= ¾E ½< Å9 _  Åa h
ˆ Å: ·D 6 ¹> ¸ŸêN·1‹šêNÆB#Ç?#ÈG#ÈQ#N|ªžûÌ>#ÉF#É=#ÊÈL#ËÉÊa# ËÊÉiB#ÇÈÉ@#É=#Ì8#Í5#Î=#ÎÇX#
`#7#ÊçÎi#Íj1#…#Ínk /#Î,#Ï4#Ï+#Ð(#Ñ0#Ò'#Ó/#ÓÇP#
X#)#âèÓ[#Òl##{#ÑÒ"#Óž#
¦#!#­éѯ#Ðm##Ñ#
ÏÐ4#Ð<#Ï#Ò#Ì#¤$o9$Î#Ì#É$o#Í#Ì#Ô
#3# Ô5#p
\#Ô#Æ#
#È#ÇŸêNÆ1šêNÕ&Ö&×&×%&N|ªžûÌ&Ø&Ø&Ù× &ÚØÙ5& ÚÙØq&Öר&Ø&Û &Ü &Ý&ÝÖ,&
4& &ÊçÝ=&Ür&Y&Üvs &Ý&Þ&Þÿ%ßü%à&áû%â&âÖ$&
,&ý%âèâ/&át÷%O&àáö%âr&
z&õ%­éàƒ&ßuò%î%àë%
Þß&ß&Þì%áé%Ûó%x'w
'Ýç%Ûñ%'wå%Üí%Ûä%ãá%& ã &x
0&ãâ%Õì%Þ%׿%Ö ŸêNÕ1šêNäê(åç(æï(æù(N|ªžûÌæ(çî(çå(èæô(éçè ) éèçyê(åæçè(çå(êà(ëÝ(ìå(ìå)
)ß(ÊçìzÙ(-)ë~{ ×(ìÔ(íÜ(íÓ(îÐ(ïØ(ðÏ(ñ×(ñåø(
)Ñ(âèñ|Ë(#)ïðÊ(ñF)
N)É(­éïW)î}Æ(Â(ï¿(
íîÜ(îä(íÀ(ð½(êÇ(L*á)ì»(êÅ(q*¹(ëÁ(ê¸(òµ(Û( òÝ(
)ò·(äÁ(³(æ»(å ŸêNä1‘šêNó¿+ô¼+õÄ+õÎ+N|ªžûÌ»+öÃ+öº+÷õÉ+øö÷Þ+ ø÷öÀ+ôõö¾+ö»+ù¶+ú³+û»+ûôÖ+
Þ+µ+Êçûç+ú°+,úƒ °+û­+üµ+ü¬+ý©+þ±+ÿ¨+°+ôÑ+
Ù+ª+âèÜ+ÿ¥+ý+þÿ¤+ ,
(,£+­éþ1,ý¡++þš+
üý·+ý¿+ü›+ÿ˜+ù¢+'-½,û—+ù¡+M-–+úž+ù•+’+¸+ º+ˆâ+”+óž++õ˜+ôŸêNóIx±¢N xË¢N ùxØœõNùx„ÈNùxɃNùx Ÿ©N
%+17=CIOU[agùx’¢:NîÌ/­/´, †Ì‹/û̉/m/_/f///íÄ/².¤. ªž¥.ÁÅ®.íĦ.-9-íÄ
0ûÌ 0ï/á/è/š/”/íÄ/4/&/ÁÅ$/ÁÅ-/íÄ%/ßÅ
.¶-íÄŠ0û̈0l0^0e000íÄ0±/£/ÁÅ¡/ÁŪ/íÄ¢/ßÅŠ.3.íÄ1ûÌ1é0Û0â0”0Ž0íÄŒ0.0 0ÁÅ0ÁÅ'0íÄ0ßÅ/°.íÄ„1ûÌ‚1f1X1_11 1íÄ 1«00ÁÅ›0ÁŤ0íÄœ0ßÅ„/-/íÄ2ûÌÿ1ã1Õ1Ü1Ž1ˆ1íĆ1(11ÁÅ1ÁÅ!1íÄ1ßÅ0ª/íÄ~2ûÌ|2`2R2Y2 22íÄ2¥1—1ÁÅ•1ÁÅž1íÄ–1ßÅ~0'0íÄû2ûÌù2Ý2Ï2Ö2ˆ22íÄ€2"22ÁÅ2ÁÅ2íÄ2ßÅû0¤0íÄx3ûÌv3Z3L3S33ÿ2íÄý2Ÿ2‘2ÁÅ2ÁŘ2íÄ2ßÅx1!1íÄõ3ûÌó3×3É3Ð33|3íÄz333ÁÅ 3ÁÅ3íÄ
3ßÅõ1ž1íÄr4ûÌp4T4F4M4ÿ3ù3íÄ÷3™3‹3Áʼn3ÁÅ’3íÄŠ3ßÅr22íÄï4ûÌí4Ñ4Ã4Ê4|4v4íÄt444ÁÅ4ÁÅ4íÄ4ßÅï2˜2íÄl5ûÌj5N5@5G5ù4ó4íÄñ4“4…4ÁŃ4ÁÅŒ4íÄ„4ßÅl33íÄé5ûÌç5Ë5½5Ä5v5p5íÄn555ÁÅ5ÁÅ 5íÄ5ßÅé3’3íÄf6ûÌd6H6:6A6ó5í5íÄë555ÁÅ}5Áņ5íÄ~5ßÅf44íÄã6ûÌá6Å6·6¾6p6j6íÄh6
6ü5ÁÅú5ÁÅ6íÄû5ßÅã4Œ4íÄ`7ûÌ^7B747;7í6ç6íÄå6‡6y6ÁÅw6ÁÅ€6íÄx6ßÅ`5 truncatedÁ=8´"8flagÁü7ßÔ 8ßÔ8"ßÔ#81ßÔ08@ßÔ=8OßÔJ8 ^ßÔW8
mßÔd8 |ßÔq8 ßÔ8
šßÔ8©ßÔ›8¸ßÔ©8ÇßÔ·8ÖßÔÅ8åßÔÓ8ô+
49æ8N|ªžûÌö8N|ªžûÌ9N|ªžûÌ9N|ªžûÌ&9N|ªžûÌ69N|ªžûÌF9N|ªžûÌV9N|ªžûÌf9N|ªžûÌv9N|ªžû̆9N|ªžûÌ–9N|ªžû̦9N|ªžû̶9N|ªžûÌÆ9N|ªžûÌÖ9N|ªžûÌæ9N|ªžûÌù•×$!N Ù•Ü$Nó’NÔù–»’8N„Ÿ!–Ó’N NEi•¿%NÙ•Ï%N
)•„&NŒ&N
1˜šêN!•Û'Nù•â'4N ù•â',Nù•â')N N|ªžûÌŒ(N   F
R 
c  
v 
ž)•(Nâè¢9•(NÅ•(Nù•â';N

!•—(N­é1•—(N œ(N(N  I•Ì(N   !•Ø(N
 
á•À(N
 
Û(N
  1•þ(Nƒ)N* *Pù•µ'îN¢)N ˜ŸêNšêN)%,!#,N|ªžûÌ \i{ ±
¹âèºÚ
­é

  ýú
öýóï =î÷é šŸêNšêN
  N|ªžûÌþ!!A" N#!"` #"! t !
žâèŸ
þ¿û÷
ÿó­éï ï ëç!î õå$ì$â%é%ß
$%Û%â$Ø&Ôú &û "&ÓÜÎ œŸêNšêN'ó(ï)ö*ë+æ,í,öN|ªžûÌã-ê-&.,3/-.E /.-
Y+,-{
ƒæâè+*ã¤)*à+Ü
䨭é)Ô(Ô Ð)Ì-Ó,Ú*Ê0Ñ0Ç1Î1(Ä
01À1Ç0½2¹ß 2à2¸'Á³( žŸêN'1 šêN3Ø4Ô5Û6Ð7Ë8Ò8ÛN|ªžûÌÈ9Ï9 :8;9:* ;:9>789`
hËâè7i6È56Å7Á
ɽ­é5¹4¹ µ5±9¸8¿6¯<<¬=³=4©
<=¥=¬<¢>žÄ >Åì>3¦˜4  ŸêN3šêN?½ @¹ AÀ Bµ C° D· DÀ N|ªžûÌ­ E´ Eð FDý GEF
 GFE#
CDEE

M
° âèCN
B­ n
ABª C¦ 
® ¢ ­éAž
@ž š A E D¤ BH H I˜ I@Ž 
HIŠ I HJƒ ©  Jª Ñ J ? } @ ¢ŸêN?šêNK¢ Lž M¥ Nš O Pœ P¥ N|ªžûÌ Q QÕ RPâ SQRô  SRQ OPQ* 
2  âèO3 N S MN O 
  ­éMƒ Lƒ  M{ Q P Ny T Tv U} ULs 
TUo Uv Tl Vh Ž V  Vg Kp b L ¤ŸêNKšêNW
Xƒ
YŠ
Z
[z
\
\Š
N|ªžûÌw
]~
]º
^\Ç
_]^Ù
 _^]í
[\]
z
âè[Zw
8YZt
[p

x
l
­éYhXh
d
Y`
]g
\n
Z^
`e
`[
ab
aXX

`aT
a[
`Q
bM
s
bt
 
bL
WU
G
X ¦ŸêNWšêNcldheofdg_hfhoN|ªžûÌ\iciŸjh¬kij¾ kji!Òghiô
ü_âègýf"\efYgU
]Q­éeMd#M IeEiLhSfC lJ l@ mG md= 
lm9 m@ l6 n2X nY$ n1c:,d ¨ŸêNcšêNoQpMqTrIsDtKtTN|ªžûÌAuHuvtwuv£ wvu%·stuÙ
áDâèsâr&Aqr>s:
B6­éq2p'2 .q*u1t8r( x/ x% y, yp" 
xy y% x z= z>(e zop ªŸêNošêN{6|2}9~.)1;N|ªžûÌ(0m|ƒ ƒ)¨Ì
Ô7âèÕ~*4õ}~1-
5)­é}%|+% !}%-~
%

$
|


!

;
=,d
{| ¬ŸêN{šêN7ˆ4<Š2.Œ6Œ@N|ªžûÌ-5rŽŒŽ Ž-­ŒÒ
Ú=âèÜŠ.<ýŠ;8
@4­é1ˆ/2 .+3Œ;Š,4+3ˆ+
)1(%K M0t&0"ˆ ®ŸêNšêNJGOEA˜I˜SN|ªžûÌ@Hš˜š© š1À˜å
íPâèï2ONK
SG­éD3E A>F˜N?œGœ>F>
œ<Dœ;ž8^ ž`4ž9C5 °ŸêNšêNŸ] Z¡b¢X£T¤\¤fN|ªžûÌS¥[¥˜¦¤§§¥¦¼ §¦¥5Ó£¤¥ø
câ裢6b#¡¢a£^
fZ­é¡W 7X T¡Q¥Y¤a¢R¨Z¨Q©Y© Q
¨©O©W¨NªKq ªs8šªLŸVH  ²ŸêNŸšêN«p¬m­u®k¯g°o°yN|ªžûÌf±n±«²°º³±²Ï ³²±9毰± 
vâ诮:u6­®t¯q
ym­é­j¬;k g­d±l°t®e´m´dµlµ¬d
´µbµj´a^ <­_«i[¬ ´ŸêN«šêN·ƒ¸¹ˆº~»z¼¼ŒN|ªžûÌy½½¾¾¼Í¿½¾â ¿¾½=ù»¼½
&âè»(º>ˆI¹º»
Œ­é¹}¸?~ z¹w½¼ºxÀÀwÁÁ¸w
ÀÁuÁ}ÀtÂq Â@ÀÂr·|n¸ŸêN·šêNÃÄÅÆÇÈÈŸN|ªžûÌŒÉÉÑÊÈàËÉÊõ ËÊÉA ÇÈÉ1 
9 œâèÇ; ÆB\ ÅÆšÇ
Ÿ­éÅ ÄC ÅŠÉÈšÆÌÌŠÍÍÄŠ
Ì͈ÍÌΪ άD
ÓÎÃÄ ¸ŸêNÃI•*NÏ Ïy•‹*N Ï™*NÏ«*N †”NÕù–Ò“4Nù•»%ñNù•€&¬Nù•×N
%+17=CIOU[agù•ì)@NЄŸ!–è“N#ó"Ö Í"ÁÅË"ÁÅÔ"íÄË"ûÌÈ"¬"ä"ë"Ñ!Ã!ßÅ!:!1#ÁÅ/#ÁÅ8#íÄ/#ûÌ,##H#O#5"'"ßÅõ!ž!•#ÁÅ“#ÁÅœ#íÄ“#ûÌ#t#¬#³#™""ßÅY""ù#ÁÅ÷#ÁÅ$íÄ÷#ûÌô#Ø#$$ý"ï"ߎ"f"]$ÁÅ[$ÁÅd$íÄ[$ûÌX$<$t${$a#S#ßÅ!#Ê"Á$ÁÅ¿$ÁÅÈ$íÄ¿$û̼$ $Ø$ß$Å#·#ßÅ…#.#%%ÁÅ#%ÁÅ,%íÄ#%ûÌ %%<%C%)$$ßÅé#’#‰%ÁŇ%ÁÅ%íć%ûÌ„%h% %§%$$ßÅM$ö#í%ÁÅë%ÁÅô%íÄë%ûÌè%Ì%& &ñ$ã$ßű$Z$Q&ÁÅO&ÁÅX&íÄO&ûÌL&0&h&o&U%G%ßÅ%¾$µ&Áų&Áż&íij&ṵ̂&”&Ì&Ó&¹%«%ßÅy%"%'ÁÅ'ÁÅ 'íÄ'ûÌ'ø&0'7'&&ßÅÝ%†%}'ÁÅ{'ÁÅ„'íÄ{'ûÌx'\'”''&s&ßÅA&ê%á'ÁÅß'ÁÅè'íÄß'ûÌÜ'À'ø'ÿ'å&×&ßÅ¥&N&E(ÁÅC(ÁÅL(íÄC(ûÌ@($(\(c(I';'ßÅ '²&©(Áŧ(ÁŰ(íħ(ṳ̂(ˆ(À(Ç(­'Ÿ'ßÅm''
)ÁÅ )ÁÅ)íÄ )ûÌ)ì($)+)((ßÅÑ';ÔÒ)´·)ßÔŽ)ßÔ›)ßÔ¨)ßÔµ)(ßÔÂ)4ßÔÏ)@ßÔÜ) LßÔé)
XßÔö) dßÔ* pßÔ*
|ßÔ*ˆßÔ+*ßÔ9* ßÔG*¬ßÔU*¸ßÔc*ÄlÄ*X*N|ªžûÌh*N|ªžûÌx*N|ªžû̈*N|ªžû̘*N|ªžų̂*N|ªžû̸*N|ªžûÌÈ*N|ªžûÌØ*N|ªžûÌè*N|ªžûÌø*N|ªžûÌ+N|ªžûÌ+N|ªžûÌ(+N|ªžûÌ8+N|ªžûÌH+N|ªžûÌX+N|ªžûÌ1•ã*Nó•NÖù–¹•:N[7 „Ÿ1–Ë•N7I•º+Nñ•Æ+N!•ß+N !
(祮+N
Ø5Hã+Nù•Æ+ Næ+N‰•€,NI•€,N !•,N 7H,N Q•Ú,N!•ß,N   !  ã,N ù•¬,9N Û¼„Ÿä,Nù•ý+áNù•›--N Û¼„Ÿ8Ý-Nï-N˜N×ù–ž—rNù•¶+ºN
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ„Ÿù–×-N)–µ—N@„Ÿ>;ÖÓÅ„Ÿˆ´Q¾ÔÛ¡•¹.N!•¹.N i•À.NY•À.N
I•À.N
Õ-<l Ì.N Ñ•´.N Í.Nß.NÖ™NØù–û˜[N„Ÿ!–©™N)–›™Nþú넟è´-W!•§/N Q•¢/N «/N„›NÙù–­šWN„Ÿ!–ÙšN)–ËšN}´AòÏ"OK"Á òÏ "CANCELLED"ÁòÏ "UNKNOWN"ÁòÏ"INVALID_ARGUMENT"ÁòÏ"DEADLINE_EXCEEDED"Á òÏ "NOT_FOUND"ÁòÏ"ALREADY_EXISTS"ÁòÏ"PERMISSION_DENIED"ÁòÏ"RESOURCE_EXHAUSTED"Á òÏ"FAILED_PRECONDITION"Á
òÏ "ABORTED"Á òÏ"OUT_OF_RANGE"Á
òÏ"UNIMPLEMENTED"Á
òÏ
"INTERNAL"Á òÏ
"UNAVAILABLE"Á òÏ "DATA_LOSS"ÁòÏ"UNAUTHENTICATED"Á1•—:N ù•—:%NÙ•¡:N»:N’ŸNÝù–ΞDN!–ïžN¯³ù–Ì•ž NAz±•¦<Ni•¦<NY•¦<N
I•¦<Nѹ+ :1•¶<N o
»<N 1•À<N ù•¦< NÅ<N ×<Nº NÞù–úŸ@N!–™ N¯³ù–Ì•È
N„Ÿä°8a
œ=N1•œ=N 9•¥=N @ «=N ù•œ=/NÙ•°=NÊ=Nü¡Nßù–¦¡VN!–סN¯³ù–Ì•ø N„Ÿ1–Æ¡NãßË4¹
1j£
Ÿ>N1•Ÿ>N 9•¨>N @ ®>N 9•³>N Ù•Ÿ>N¹>N º£Nàù–è¢RN!–—£N¯³ù–Ì•¸
N„Ÿ1–†£NñíÙ¦;¹
8q
DN1•DN 9•ŠDN ? DN ±•üCN ‘DNƬNåù–í«YN„Ÿ!–Ÿ¬N„Ÿù–Ì•ÀN„Ÿ1–ެN×ÓÀ4¹
1l
çDN1•çDN 9•ðDN ?
öDN ±•âDN ÷DN•®Næù–Ê­KN„Ÿ!–õ­N„Ÿù–Ì•N„Ÿ1–ä­N×ÓÀ4¹
1l
‰•ÒEN1•ÒEN A•ÛEN9•ÜEN %âENa  ¹•ÍEN ãEN¼±Nçù–ç°UN„Ÿ!–—±N„Ÿù–Ì•¸N„Ÿ1–†±NôðÝÙ;¹
8s
ÈFN1•ÈFN 9•ÑFN ? ×FN ±•ÃFN ØFN³³Nèù–ʲiN„Ÿ!–„³N„Ÿù–Ì•¥N„Ÿ1–ó²N×ÓÀ4¹
1l9•ÀGN1•ÁGN %ÆGNù•§G!N

Á•§GNž´_+ÇGNµNéù–È´GN„Ÿ!–ê´N„Ÿù–Ì•N¼¸JùöM.NY˜NN!˜NN #
*!NN
Ö71NN ¢NNj
qùöM!N‰½| £NNùºN.NYÜNN!ÜNN #
*!áNN Ô51áNN æNNh
oùºN!N‰½zŽ çNNùúLN
ùúL'N
Nªžù·M)NN|ªžûÌæQ úNN ‰ON¢ù¨LáNN N IterÁN
÷TNNdoneÁN¢}¶Ù+.‡ªžùÄL#N¯³)ºLNªž!¯³ªžœ˜¯³B©ÿN|ªžûÌù«S.NYÍSN!ÍSN #
*!ÒSN Ô51ÒSN ×SNh
où«S!N‰½zŽ ØSNùïS.NYTN!TN #
*!TN Ô51TN TNh
oùïS!N‰½zŽ œTNùªR†N
ùªR,N
N$ªžùìR)NN|ªžûÌ}æQ ¯TN ¾TN£ùÍQñNNN IterNamesÁNflagsÁNNidxÁNNsourceÁNNÑPNAî2_ömê*ªžùïQ(N¯³)åQNªžB>¯³<ªž¿»¯³¹BÌ"N|ªžûÌÑ‘Ê N
Á‘Ê N
Ô-ù‘Å N øä Nó’N©ù’»’8Nªž!’Ó’N„Ÿ(Á‘­
N
±‘­
Nѹ+ñ‘¨
N ø Å
N†”Nªù’Ò“4Nªž!’è“N„ŸŠ(1 N „Ÿi‘ N
 !‘ N Ô?1 N Nó•N«ù’¹•:NhNÁÅ1’Ë•N¯³š<ù‘ï "N!Œ N "
)á‘ï N
×5I  NXù‘é (N|ù‘ç
-N Û¼ªž
!‘Ú N Û„ŸQ‘
N!
N ! ø š
Nù‘ã 9N Û¼ªž
N ¼N˜N¬ù’ž—rNù‘¬ pNÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙªžù’×-N)’µ—N¸·âÞù‘¬ 3N„ŸYªžA„Ÿ?´I´ƒÑù‘+N!‘¬N "
)ù‘%Nž´4H°Nù‘1N ø±NÖ™N­ù’û˜[Nªž!’©™N)’›™N„ŸÀ»´Iù‘)N!‘¯N "
)ù‘#N
Ù6J³Nù‘/N ø´N„›N®ù’­šWNªž!’ÙšN)’ËšN„ŸÂ½´I1N „Ÿ‰‘N
 A˜N
ÝAQ‘˜N¡N’ŸN°ù’ΞDN!’ïžNÁÅù’Ì•ž N¯³¢B1íN „Ÿy‘íN
 1ôN
ÞAA‘ôNûNº N±ù’úŸ@N!’™ NÁÅù’Ì•È
N¯³¢B1ÒN „Ÿ9‘äN „ŸÑ‘ÒN
 QÙN
ß\D™‘ÙNëN ü¡N²ù’¦¡VN!’סNÁÅù’Ì•ø Nªž1’Æ¡N¯³Ö„ŸÁ/¹
,e1ÀN „Ÿ9‘ÐN „ŸÁ‘ÀN
 AÇN
à\D‰‘ÇN×N º£N³ù’è¢RN!’—£NÁÅù’Ì•¸
Nªž1’†£N¯³Ö„ŸÁ/¹
,eá‘ìN1‘ìN „Ÿ9‘N „ŸA
HaóN
åU?©‘óNN ù‘ç"N øˆNƬN¸ù’í«YNªž!’Ÿ¬Nªžù’Ì•ÀNªž1’ެN„Ÿ„Ÿÿ„Ÿì8¹
5p©‘ÞN1‘ÞN „Ÿ9‘ëN „ŸA
H)åN
æU?qåNòN Ù‘ÙN øóN•®N¹ù’Ê­KNªž!’õ­Nªžù’Ì•Nªž1’ä­N„Ÿ„Ÿþ„Ÿë8¹
5pÑ‘ÎN1‘ÎN „Ÿ9‘àN „ŸA
HQÕN
çU?™‘ÕNçN ù‘É N øèN¼±Nºù’ç°UNªž!’—±Nªžù’Ì•¸Nªž1’†±N„Ÿ„Ÿÿ„Ÿì8¹
5pù‘Í$N1‘ÍN „Ÿ9‘éN „ŸB
I¡‘ÔN
èU?é‘ÔNðN ù‘È*N øñN³³N»ù’ʲiNªž!’„³Nªžù’Ì•¥Nªž1’ó²N„Ÿ„Ÿÿ„Ÿì8¹
5p™‘ÅN1‘ÅN „Ÿ&
-QÌN
é:a‘ÌN×NÉ‘ÀN øØNµN¼ù’È´GNªž!’ê´Nªžù’Ì•N„ŸÌ„ŸÉ!Lù”öM.NY”˜NN!”˜NN #
*!”NN­é51”NN¢NNh
où”öM!N‰½zŽ£NNù”ºN.NY”ÜNN!”ÜNN #
*!”áNN­é51”áNNæNNh
où”ºN!N‰½zŽçNNù”úLN
ù”úL'N¶Öù”·M)NN|ªžûÌxáLúNN ‰ONäù”¨LáN¡×ù”ÄL#NÁÅ)”ºLNªžÞÚÁÅØªž[WÁÅUBmÃN|ªžûÌù”«S.NY”ÍSN!”ÍSN #
*!”ÒSN­é51”ÒSN×SNh
où”«S!N‰½zŽØSNù”ïS.NY”TN!”TN #
*!”TN­é51”TNTNh
où”ïS!N‰½zŽœTNù”ªR†N
ù”ªR,N°Ûù”ìR)NN|ªžûÌxáL¯TN ¾TNåù”ÍQñN›Üù”ïQ(NÁÅ)”åQNªžÞÚÁÅØªž[WÁÅUBmÃN|ªžû̬“X ½¾%ü™1¸¸UriÁ¹schemeÁŒ º authorityÁŒ »path_and_queryÁŒ 
VÀ™×™¢$ÜX Âî‹Å)²š5î‹=Dùl‰[N øù(ªž4„Ÿ<CùpÅ"N („Ÿ4;B$N öø%Þ¥1î9@,ÿN öû%Þ¥1úHúHßûHÁ‘4Ý­f‰úM÷cjTªX ÿƒ%¸¦1î9@ ¤¦%›©1œ¢wˆÖ oôKÐüfRgn ¤©%›©1¢Š9@,”L
Œ«’« º-Ī9Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Œ«\‡M
Œ«’« ½-Ī9’«AHTÀa
ËÍ%Ŭ1è‹9@,´b
ËÐ%Ŭ1¢Š9@ëìÔÀü¥Pü:7 `async fn(HttpRequest) -> Result<HttpResponse, Error>`Á;út? # OverviewÁNúüR`] tower-http is a library that provides HTTP-specific middleware and utilities built on top ofÁ [tower].ÁÀúüÄ^[ All middleware uses the [http] and [http-body] crates as the HTTP abstractions. That meansÁü£YV they're compatible with any library or framework that also uses those crates, such asÁüý! [hyper], [tonic], and [warp].ÁŸú¤£ # Example serverÁ¸úü¼^[ This example shows how to apply middleware from `tower-http` to a [`Service`] and then runÁü›0- that service using [hyper] and [hyper-util].ÁÌú”Ð ```rust,no_runÁ¬ã use tower_http::{Áüù&# compression::CompressionLayer,ÁÔ  trace::TraceLayer,Á };ÁüÂ63 use tower::{ServiceBuilder, service_fn, BoxError};Áüù" use http::{Request, Response};Áüœ)& use std::net::{SocketAddr, Ipv6Addr};Á¬Æ use bytes::Bytes;ÁìÜ use http_body_util::Full;Áüú1. use hyper_util::rt::{TokioIo, TokioExecutor};Áü¬1. use hyper_util::service::TowerToHyperService;ÁÞúüâfc # async fn handler(_: Request<hyper::body::Incoming>) -> Result<Response<Full<Bytes>>, BoxError> {ÁüÉ<9 # Ok(Response::new(Full::new(Bytes::from("hello"))))Á<†  # }ÁŽ ú”’  #[tokio::main]Áü¥ -* async fn main() -> Result<(), BoxError> {ÁüÓ A> let addr = SocketAddr::from((Ipv6Addr::LOCALHOST, 8000));Áü•
B? let listener = tokio::net::TcpListener::bind(addr).await?;矯
1. println!("Listening on http://{}", addr);ÁŠ ú loop {Áü 74 let (socket, _) = listener.accept().await?;ÁÕ úüÙ %" tokio::spawn(async move {Áüÿ 2/ let socket = TokioIo::new(socket);Á² úü¶ -* // Build our middleware stackÁüä 30 let service = ServiceBuilder::new()Áü˜
63 .layer(TraceLayer::new_for_http())ÁüÏ
30 .layer(CompressionLayer::new())Áüƒ)& .service_fn(handler);Á­úü±$! // Wrap it for hyperÁüÖFC let hyper_service = TowerToHyperService::new(service);Áúü¡da if let Err(err) = hyper_util::server::conn::auto::Builder::new(TokioExecutor::new())Áü†<9 .serve_connection(socket, hyper_service)ÁÔà .awaitÁŒÞüðEB eprintln!("failed to serve connection: {err:#}");ÁŒ¶ });Á ```ÁðúüôSP Keep in mind that while this example uses [hyper], tower-http supports any HTTPÁüÈMJ client/server implementation that uses the [http] and [http-body] crates.Áú¤š # Example clientÁ¯úü³>; tower-http middleware can also be applied to HTTP clients:Áòú”ö¬‰ª•üŸ*' decompression::DecompressionLayer,ÁüÊ*' set_header::SetRequestHeaderLayer,ÁÔõø•ü*' classify::StatusInRangeAsFailures,Á›–üÂ52 use tower::{ServiceBuilder, Service, ServiceExt};Áüø@= use hyper_util::{rt::TokioExecutor, client::legacy::Client};Áì¹ç—¬×É—üí96 use http::{Request, HeaderValue, header::USER_AGENT};Á§ú”«á𬾠async fn main() {ÁüÔDA let client = Client::builder(TokioExecutor::new()).build_http();Áü™.+ let mut client = ServiceBuilder::new()ÁüÈ@= // Add tracing and consider server errors and clientÁü‰" // errors as failures.Áü¬# .layer(TraceLayer::new(ÁüÐNK StatusInRangeAsFailures::new(400..=599).into_make_classifier()Á ))Áü®96 // Set a `User-Agent` header on all requests.Áüè52 .layer(SetRequestHeaderLayer::overriding(ÁÜž USER_AGENT,Áüº;8 HeaderValue::from_static("tower-http demo")Áÿ®ü…)& // Decompress response bodiesÁü¯-* .layer(DecompressionLayer::new())ÁüÝ74 // Wrap a `Client` in our middleware stack.Áü•;8 // This is possible because `Client` implementsÁüÑ  // `tower::Service`.Áìò .service(client);ÁúÌ” // Make a requestÁü®(% let request = Request::builder()Áü×&# .uri("http://example.com")Áüþ+( .body(Full::<Bytes>::default())Á´ª .unwrap();ÁÁúìÅ let response = clientÁ¤ã .ready()Á”ø .awaitÁ¬‹  .unwrap()ÁÔ¡  .call(request)Á”¼ ´Ï “µª¥¸¥ô úœø  # Feature FlagsÁŒ!úü!UR All middleware are disabled by default and can be enabled using [cargo features].Áæ!úüê!TQ For example, to enable the [`Trace`] middleware, add the "trace" feature flag inÁ´¿" your `Cargo.toml`:ÁÖ"ú\Ú" ```tomlÁüæ":7 tower-http = { version = "0.1", features = ["trace"] }Á<¡#¸¥©#úü­#.+ You can use `"full"` to enable everything:ÁÜ#ú\à#¹¹üì#96 tower-http = { version = "0.1", features = ["full"] }Á<¦$¸¥®$ú”²$ # Getting HelpÁÅ$úüÉ$a^ If you're new to tower its [guides] might help. In the tower-http repo
„œ '¬ 8 pin_projectÁ  ¹  » Ö , É  Ê Ð + Ë  Ì Ï , Í 8¸ Î 
Ñ 8ß 8 , ê 8Ð   ï , ð  ñ ø , ò 8‹Ð $ ù 
ú  û  ý Ì +     8ÿ
 8¦  © ¯ 8 8÷T &  , ¸ 8×Ì 8  å , æ  ç î , è 8‹Ð $ ï 
ð  ñ , ó 8Ð   ø , ù  ú  , û 8‹Ð $  
ƒ     õ 8    8,˜ 8 Ÿ 8æ ¢  ¥ ´ 8÷T & « , ­ 8×Ì ( 8  ¾ ë 8  Õ Ý 8÷T,× 8$€  ,  , 8‹Ð,ˆ $ Ž 
 8â L ' 8BodyÁ$ 8
¢ , ¦ 8Ð  « , ¬  ­ ´ , ® 8‹Ð $ µ 
 ·  ¹  M8! 8DataÁ Ñ  Ó , Ô 8×Ì 8Ü 8â 'è 8—×  î 'ï 8œØ % õ 8!
8å?,ˆ
Ž

,
8×Ì4
8
8â
'¥
8—×
 «
'¬
8å?
% ³
+ Â
 Ã
Ê
8Ý
8 Ø
8
poll_frameÁ
 å
Ô 8
& û
8Àý
' 8ÿ
 ' 8PinÁ  Š  8Œ 8$  $ 8cxÁ§ & ©  « 8¬ 8À° '³ 8taskÁ '¹ 8k   :8à  Å $ Æ (Ö 8ÀÙ 'Ü 8ˆÜ 'â 8·  è 8¬  ï 8Í  ö 8â ' 8FrameÁ,  8$ˆ 'Œ 8œØ  $ 8$• ' 8å?,    ¢  ¤ æ  8  º 8øY   à  Ä 8÷T  Ê 8¼Ú  Õ Ø 8ÑÛÖ + õ  ö ý 8Ý 8 
8
is_end_streamÁ

¡
 œ
8$
(£
8º
 «
õ
8â
'Æ
8—×
'Ì
8Äß
 Û
ç
 Ü
8
 á
8÷T
+    Œ 8Ý4† 8 š 8 size_hintÁL  ¦ ¬  § 8 (® 8â  'º 8SizeHintÁ  Å  8â L× 'à 8—× 'æ 8£á  ñ ý  ò 8  ÷ 8÷T % œ Ô¹   Ô Ë  Ú Ÿ , Û  Ü ç + Ý  Þ æ , ß 8¸ à & á 8û 
è 8ê 8! , ó 8Ð  & ø 8¼  þ , ÿ    ,  8‹Ð, &  8¼,ˆ $ Ž      ,  8×Ì4• &  8´œ % ž *¡  ¤ É K8 
„® '¾ 8›Ñ  Ë  Í Ý , Û  Ü â + Ý  Þ á , ß 8¸ à 
ã 8ñ 8 , ü 8Ð    ,   ƒ Š ,  8‹Ð,… $   Œ     Ó + ¡  ¢ ¦ 8ÿ
£ 8÷T,¸ & ½ , ¿ 8×Ì 8  ì , í  î õ , ï 8‹Ð $ ö  ÷  ø , ú 8Ð   ÿ ,    ˆ ,  8‹Ð $   Š       8  ž ¤ 8 8 ¦ 8æ ©  ¬ » 8÷T,­ & ² , ´ 8×Ì (½ 8  Å  8  Ü ˆ 8÷T 8  ¯ , °  ± ¸ , ² 8‹Ð $ ¹  º  » 8À½ 'À 8× 'Å 8p 8
Í , Ñ 8Ð   Ö , ×  Ø ß , Ù 8‹Ð $ à  á  â  ä £ 
8 ò 8×õ  ø Ÿ  ù 8 $ þ 8±  &   ƒ 8 8Àˆ ' 8× ' 8ˆL   :8œ  ž (¡ 8À¤ '§ 8ש '¬ 8Í  µ  
8± Ç  È 8 debug_tupleÁ  Ô æ 8Ô  Þ  ß å , à 8Ð   ç 8Â  í   î 8ë  ú  û  7...Á  ƒ 8finishÁ4„  Š  8  ² , ³  ´ » , µ 8‹Ð $ ¼  ½  ¾ 8ÀÀ 'Ã 8µV 'Ë 8ò? 8
Ô , Ø 8Ð   Ý , Þ  ß æ , à 8‹Ð $ ç  è  é 8$ ,  8×Ì4† & Œ 8ÀŽ ' 8µV4“ ' 8ò?4 $ ¡  « à !8! 8° Å  Ç , È 8×Ì 8Ð 8ÀÓ 'Ö 8µV 'Þ 8ò?  æ 'ç 8° % ï + ý  þ  8Ý4ÿ 8  8Š $–  š Ú 8$ & Ÿ 8À¡ '¤ 8ÿ
¦ '© 8“Û«  ®  ¯ 8° 8  ¸ $ ¹ 8ÑÛ» & ½  ¿ 8À 8ÀÄ 'Ç 8ˆÜ 'Í 8k  Ö :8×  Ù (Ü 8Àß 'â 8ˆÜ 'è 8·  î 8 'ó 8°  û  ý ¹  8$   8øY<”   œ   8÷T  £ 8Š   ¨ « 8ÑÛ© ¼°Eü*' Middleware for following redirections.Á+út/Š>úüB`] The [`FollowRedirect`] middleware retries requests with the inner [`Service`] to follow HTTPÁŒ£ redirections.Áµúü¹\Y The middleware tries to clone the original [`Request`] when making a redirected request.Áü–]Z However, since [`Extensions`][http::Extensions] are `!Clone`, any extensions set by outerÁüôZW middleware will be discarded. Also, the request body cannot always be cloned. When theÁüÏ\Y original body is known to be empty by [`Body::size_hint`], the middleware uses `Default`Áü¬b_ implementation of the body type to create a new request body. If you know that the body can beÁü\Y cloned in some way, you can tell the middleware to clone it by configuring a [`policy`].Áìú # ExamplesÁÿú”ƒ ## Basic usageÁú¸¥ü¢"ë–¬ÅÉ—ìÛç—üù52 use tower::{Service, ServiceBuilder, ServiceExt};Áü¯GD use tower_http::follow_redirect::{FollowRedirectLayer, RequestUri};Á÷ú¤û # #[tokio::main]Áü?< # async fn main() -> Result<(), std::convert::Infallible> {ÁüÐHE # let http_client = tower::service_fn(|req: Request<_>| async move {Áü™ 2/ # let dest = "https://www.rust-lang.org/";ÁüÌ 2/ # let mut res = http::Response::builder();Áüÿ  # if req.uri() != dest {Á¼ 
 # res = resÁü¸
>; # .status(http::StatusCode::MOVED_PERMANENTLY)Áü÷
85 # .header(http::header::LOCATION, dest);Á  # }Áü¼ XU # Ok::<_, std::convert::Infallible>(res.body(Full::<Bytes>::default()).unwrap())ÁL•  # });ÁüŸ *' let mut client = ServiceBuilder::new()ÁüÊ *' .layer(FollowRedirectLayer::new())Áôõ  .service(http_client);Á
úü˜
$! let request = Request::builder()Áü½
&# .uri("https://rust-lang.org/")Áüä
'$ .body(Full::<Bytes>::default())Á”Œ .unwrap();ÁŸúü£>; let response = client.ready().await?.call(request).await?;Áüâ! // Get the final request URI.Áü„c` assert_eq!(response.extensions().get::<RequestUri>().unwrap().0, "https://www.rust-lang.org/");Á # Ok(())ÁÅš¸¥úü‰ ## Customizing the `Policy`Á©úü­XU You can use a [`Policy`] value to customize how the middleware handles redirections.Áú¸¥ü’"ë–ìµç—¬ÓÉ—üé5•ÿüŸ&# use tower_http::follow_redirect::{ÁüÆ" policy::{self, PolicyExt},Áäé FollowRedirectLayer,Á4†›–ú¤‘ #[derive(Debug)]Á”¦ enum MyError {Á̹ TooManyRedirects,ÁüÓ Other(tower::BoxError),Áª¥ùú¤ý°€ü’.+ # async fn main() -> Result<(), MyError> {Á¼Á # let http_client =ÁüÙmj # tower::service_fn(|_: Request<Full<Bytes>>| async { Ok(Response::new(Full::<Bytes>::default())) });ÁüÇZW let policy = policy::Limited::new(10) // Set the maximum number of redirections to 10.Áü¢63 // Return an error when the limit was reached.ÁüÙPM .or::<_, (), _>(policy::redirect_fn(|_| Err(MyError::TooManyRedirects)))Áüª_\ // Do not follow cross-origin redirections, and return the redirection responses as-is.ÁüŠ41 .and::<_, (), _>(policy::SameOrigin::new());Á¿úüÃ*½…üî85 .layer(FollowRedirectLayer::with_policy(policy))Áü§  .map_err(MyError::Other)ÁôȤ†çú // ...ÁüöDA # let _ = client.ready().await?.call(Request::default()).await?;Áí‰Åš¸¥»follow-redirectÁÜ’EüŒE#|¸E±µÊØëü½¾ÂS4ý¿âÛ:<…Çã“84ŽŸäÌ:D–ÆåEitherÁ4»²HæCONTENT_ENCODINGÁ„Û ÇèCONTENT_LENGTHÁtõ Éé CONTENT_TYPEÁd ÎêLOCATIONÁD£ ßëTRANSFER_ENCODINGÁŒ¹ öì HeaderMapÁLÌæ
í HeaderValueÁ\׺îMethodÁ4ä¥ïï”ôðÕ?Dõˆñ¢wTÿò»…¸óVersionÁ<”óô—×)õ›Ñöíðøò?4…‚Øùíëú“ÛŸ„¾ûɨ™3üreadyÁ,¸¥‚þk<¿Ìÿ·œØOneshotÁ<ã §LayerÁ,ý¶><—1ƒUrlÁ©4…üa^ Tools for customizing the behavior of a [`FollowRedirect`][super::FollowRedirect] middleware.Á 0KXm~Ÿ³ÆÇà¿NèíŽÇ1l -¡O\ãOŒ¶ÂP<ÖQç€6\ý {‘RTНÒRT¨·˜SchemeÁ4Èšò˜¥ï”ôœ¢wTá»…í¸ž<cgíS4 ¿  Û:<Ç  “84Ÿ 
ï”<0ô ,IK;=-/l*!¤ Í섉 ¥ÍìЉ ¨̈ü»jÉ„‰Љ̈ê0Íìê0ÍÍì ÑŸ„‰ñ¢„£ŸЉñ¢„£l—
„‰Љñ¢„£¬ Ô­ ÚkmegüÊ_ê0Íìü‰ÏÍ삊 ÓÍìð‰
 `£cbufÁ `àB¤GS
ìÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ Èå? O˜éBL$ 
$
&¼Š
± 
ü»O
()**()í¼Š íЉ˜"Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙЉL€
â¡ Ã
ÍìçŠ Æ
í"¼Š¾°œö
¢­ À
Š+,¢¤,+Y[UWü‘<
D”
îïð îŠ ïÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€ðÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ö‘çŠ' 
'
+¼ŠЉçŠ
 ¨
üö+

ñò ñŠ òЉѰ' 
'
,¼ŠЉçŠ$…
À.$
üÒT
üÄP
M Create a new redirection [`Policy`] from a closure `F: Fn(&B) -> Option<B>`.Á
úü™_
\ [`clone_body`][Policy::clone_body] method of the returned `Policy` delegates to the wrappedÁüùX
U closure and [`redirect`][Policy::redirect] method always returns [`Action::Follow`].ÁlÙ
¼ŠŠ././¢­ ç
â¡ ê
ó"¼Š óЉœ’
ó¼Šܸ˜"Ѱ
-¼ŠЉ± í
acfh´”ƒ;‰Ö<L  à02S4¿03Û:<Ç04“84(Ÿ05headerÁ$J08ä·TPë09ï”<aô0:,wyik[]$5”5M4A@B13ô÷0 ɹ´ïôŠ=>?@ABC¤†üŒ_\ Create a new [`FilterCredentials`] that removes blocklisted request headers in cross-originÁŒðúøôŠ<<
=ü¼9üóDA Configure `self` to mark cross-origin redirections as "blocked".Á”ÃôŠôŠ<<
>ýüû"üº<9 Configure `self` to mark every redirection as "blocked".ÁL ôŠôŠ<<
?$ ü–
#ü× :7 Configure `self` to mark no redirections as "blocked".ÁT
ôŠôŠ<<
@
üó 9üŽ MJ Configure `self` to remove blocklisted headers in "blocked" redirections.Áà úüè 1. The blocklist includes the following headers:Áž ú¬¦  - `Authorization`Á  - `Cookie`ÁÜÓ  - `Proxy-Authorization`Á”ú ôŠôŠ<<
A$
ý4—
ü»#üñ
EB Configure `self` to remove all headers in "blocked" redirections.ÁTÂôŠôŠ<<
Büâ$ü™DA Configure `self` to remove no headers in "blocked" redirections.Á\éôŠôŠ<<
CüÚ"ôŠE´E¤ƒ<†ôŠDD
Eü·-GHHGÍìî‹ ¼Ѥ ¿ôŠIJ¢£JI"$')üëBôõö ôôŠ õÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€öÇ’F ÷F
Iî‹‚Šã¦<‚üÜ2÷ø ÷ôŠ øôôï”öÿ”¦÷À.¦Œ4ñŠ|åî‹F êF
Jî‹‚Š¥¨\—<S4 ¿KMÛ:<ÇKN“84ŸKO,68(*ÿ‹Qô›üÖ@= Create a new [`Limited`] with a limit of `max` redirections.Á¢ÿ‹PP
QmaxÁ¦Äèÿ‹S´S¤Òü‡FC Returns the default [`Limited`] with a limit of `20` redirections.Á<Õÿ‹RR
Sü#UVVUÓÅ Ѥ ˜ÿ‹W¢W üº<ùúû ùÿ‹ úÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€ûÇ’T ÆT
Wî‹‚Š Ñ¨S4 ¿XZÛ:<ÇX[“84ŸX\ï”<0ôX],IK;=-/l*_``_Ñ¡ ¢â¡ ¥òŒaü·jÅ„‰ЉòŒ^ê0bcbc^é¢Éü¢ Í£§£l“
a„‰Љñ¢„£¬ Э Ö@BEGüÅ^ê0efghgehfÀ¤ÊѤ Î⤠Ñó¤ Ô„¥lÿœ¥l•Úijk¢£¤ikjKMPRUWZ\üªBD­üýþ üÚ ýÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€þÇ’d d
iü‰‚Šð‰ö‰ã¦ü„3T‡ÿ ÿÚ € ³¨d d
jü‰‚Šð‰ö‰$—¥¨<ü-T    Ú ‚ ü‰ù©d d
kü‰‚Šð‰ö‰À.$¢åk”ªl¬ªlɪllklü‰‚Šð‰ö‰ü«  Ú“¬S4 ¿moÛ:<Çmp“84Ÿmq×/¤,mr,HJ:<,.D*!ü×$tt¢­ Ü©ŽuÀcuü‚8ƒ  ƒ ©Ž  c cˆ¢cµ
 `£c°­ `àB¤GS
×®s s
u¼Š± ü¶cwxyxyw¤ ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€˜"Ç’Œ‡Ѥ ¾Íì¤ Á“"¤ªÛüð(ÓÅ »÷Žz¢zVXRTü Bˆ Š  ˆ ÷Ž ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€Š Ç’v ¬v
zî‹‚Š¤ã¦üßfüˆ63 Create a new redirection [`Policy`] from a closureÁü¿2/ `F: FnMut(&Attempt<'_>) -> Result<Action, E>`.ÁòúüöOL [`redirect`][Policy::redirect] method of the returned `Policy` delegates toÁÄÆ the wrapped closure.Á\漊©Ž|}|}¢­ òѤ õŒ “"¼Š ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€Œ üœ(Œ ¼Šéá˜"Ç’Œ³
{¼Š‚б øÊÌÏÑ·Ö<L  à~S4¿~Û:<Ç~“84(Ÿ~ƒ×:¤,~,_aPRAC24D5&|͹¤ˆüã  Create a new [`SameOrigin`].Á¹
ôÀ¹ˆÀcˆüå8è Ž    ¹ Ž  c cˆ¢cµ
 `£c°­ `àB¤GS
 ×® ì
ˆ± óü×&ŠŠÓÅ ÜѤ ß¹Œ¢Œ "ü„BD‡     ¹ ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€Ç’ 
Œî‹‚Š$•ã¦<$×%ü×'ƒ%†%x%{%ü¢%q%„Íf%4ã[%ü×£R%U%G%J%¼›?%$¼2% %#%%%%%ô$÷$´§
üô;8 Trait for the policy on handling redirection responses.Á°ú
# ExampleÁÂúüÆ# Detecting a cyclic redirection:Áêú¸¥üö%" use http::{Method, Request, Uri};Áüœ" use std::collections::HashSet;Áü¿GD use tower_http::follow_redirect::policy::{Action, Attempt, Policy};Áú¤‹ #[derive(Clone)]Áä  pub struct DetectCycle {Áü½%" uris: HashSet<(Method, Uri)>,Áª¥éúüí-* impl<B, E> Policy<B, E> for DetectCycle {Áü›LI fn redirect(&mut self, attempt: &Attempt<'_>) -> Result<Action, E> {Áüè\Y if self.uris.contains(&(attempt.method().clone(), attempt.location().clone())) {ÁüÅ  Ok(Action::Stop)Á¤æ } else {Áüûb_ self.uris.insert((attempt.previous_method().clone(), attempt.previous().clone()));ÁüÞ " Ok(Action::Follow)Ál

L
˜¥,™
ª¥
¸¥
Ÿ ¡Ÿ ¡Îìü§
øâ¡ ¸
¦± »
Ÿòò*òò£¤¢£¤¢£¤DFIKüž CüÄ
XU Invoked when the service received a response with a redirection status code (`3xx`).Á¡ úü© WT This method returns an [`Action`] which indicates whether the service should followÁ¤…  the redirection.ÁD¡  “ úò ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€½³Ÿ ª Ÿ
¢úòЉçŠ ã¦ ü™3üç \Y Invoked right before the service makes a request, regardless of whether it is redirectedÁ
 or not.ÁØ
úüà
MJ This can for example be used to remove sensitive headers from the requestÁü²)& or prepare the request in other ways.Áàúüè,) The default implementation does nothing.ÁTœ – úò ôôï”öÿ”¦÷À.¦Œ4ñŠ|åЉŸ §Ÿ
£úòЉçŠ_requestÁD²üÜ,üÕNK Try to clone a request body before the service makes a redirected request.Á¨úü°85 If the request body cannot be cloned, return `None`.ÁíúüõWT This is not invoked when [`B::size_hint`][http_body::Body::size_hint] returns zero,ÁüÑKH in which case `B::default()` will be used to create a new request body.Á¡úü©.+ The default implementation returns `None`.ÁTߘ  ˜ úò ™ ЉѰŸ êŸ
¤úòЉçŠ_bodyÁ,ñü¡I8𠦧¡¨¨§š ¦â¡ ¦¦± ©Îì± ¬Ÿ±ЉçЬ©ª«¢£¤«©ªZ\_a[]üñB œ   › ¬ œ ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€ ½³¥ ý¥
©8Љçб$‚ã¦üä2ž Ÿ  ž ¬ Ÿ Éú¥ ò¥
ª8Љçб¥¨üÉ+  ¡    ¬ ¡ ЉѰ¥ ×¥
«8ЉçбÀ.$Þü¢I­®¡¯®­¯ÓÅ §Ѥ ªÎ숑 ­Ÿˆ‘î‹‚ŠÇ°±²¢£¤±²°Z\_a[]üòB¢ £ ¤  ¢ Ç £ ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€¤ Ç’¬ þ¬
°î‹‚Šˆ‘ã¦<‰üå2¥ ¦  ¥ Ç ¦ ¶È¬ ó¬
±î‹‚Šˆ‘¥¨üÊ+§ ¨  § Ç ¨ î‹Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ج
²î‹‚Šˆ‘À.$ßœêü£FC An extension trait for `Policy` that provides additional adapters.Á³³òòüê¡
³òòòò ´¸´¸¸´ü´ vü„[X Create a new `Policy` that returns [`Action::Follow`] only if `self` and `other` returnÁ¬ä `Action::Follow`.Áþúü†^[ [`clone_body`][Policy::clone_body] method of the returned `Policy` tries to clone the bodyÁ¼é with both policies.Áúl‡êŸú¸¥¬³É—ìÍç—üïWT use tower_http::follow_redirect::policy::{self, clone_body_fn, Limited, PolicyExt};ÁËúŒÓ enum MyBody {Á¬é Bytes(Bytes),ÁÔƒ Full(Full<Bytes>),Áª¥¬úü´JG let policy = Limited::default().and::<_, _, ()>(clone_body_fn(|body| {Áüƒ*' if let MyBody::Bytes(buf) = body {Áü²,) Some(MyBody::Bytes(buf.clone()))Á„ã
} else {Á„ø
NoneÁL ˜¥D  }));Á¸¥· úò´”ííNð¬ ñ­ 
~ƒü•&tü°!]Z Create a new `Policy` that returns [`Action::Follow`] if either `self` or `other` returnsÁ¬’"¶Œ¬"úü´"^ጼ—#ȳ#úl»#‡êÍ#ú<Õ#¸¥üá#PM use tower_http::follow_redirect::policy::{self, Action, Limited, PolicyExt};Á¶$ú¤¾$§ì”×$ÅÌî$àtŒ% // ...Á,Ÿ%ª¥©%úü±%SP let policy = Limited::default().or::<_, (), _>(Err(MyError::TooManyRedirects));Á<‰&¸¥˜&úò´”Qž¬XŸ­XbèFÍ{¿×³úò´”³¡¹º»¹º»³È” &Ù” ž&ü¢ ¡&ò”,ê&ƒ•dÛ&›•dü&
¸úò´”Ř„£$¤&¹
,ª&PRUWZ\ü',¥½½ÎìÉ‘ ’'É‘¾Â´¸Â¾ üÀ'vÃ'É‘´”ííNð¬ ñ­ žÿi+Úâ–É‘´”¼¡¿ÀÁÁ¿À¼È” Ç'Ù” Ê'ü¢ Í'ÍìÉ‘,—(ŸÉ‘Ř„£dˆ(›•d©(
¾É‘´”Ř„£$Ð'¹
,Ö'iknpsuüæ(té(É‘´”Qž¬XŸ­XbèFÍ{¿×³É‘´”¼¡ÃÄÅÅÃļȔ ì(Ù” ï(ü¢ ò(§ž,»)¸žd¬)›•dÍ)
ÂÉ‘´”Ř„£$õ(¹
,û(PRUWZ\Œÿ+ü‡*HE A redirection [`Policy`] with a reasonable set of standard behavior.ÁÐ*úüÔ*JG This policy limits the number of successive redirections ([`Limited`])ÁüŸ+_\ and removes credentials from requests in cross-origin redirections ([`FilterCredentials`]).ÁDˆ,ííNð¬ ñ­ žÿi+Úâ–ÿ‹ôŠ´ñ,üµ,;8 A type that holds information on a redirection attempt.Á<ü,ê:ÈÈÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€ê:¢:xþ岘€ÉÊËÌÍ„-ìŽ-4™-ÇÇè‹ì±-4¼-ÇÇ ê:¥¥¦ò˜§ˆÔ É©jm…½¸éäÔ-Dß-ÇÇ ê:±†üö-&|.ÇÇʦä¢.D­.ÇÇ›§¤Ã.ê:ÏÏ”¥ÐÑÒÓÔÈ.üˆ/"üÞ.%" Returns the redirection response.Á4/©  © ”¥è‹Î –/Î
Ðê:$—/ü‡0"üÌ/63 Returns the destination method of the redirection.Á4Ž0ª  ª ”¥ʦÎ •0Î
Ñê:$0üƒ1!üË030 Returns the destination URI of the redirection.ÁDŠ1«  « ”¥›§Î “1Î
Òê:$”1ü‘2+üÈ1DA Returns the method for the previous request, before redirection.Á|˜2¬  ¬ ”¥ʦÎ ¨2Î
Óê:$©2ü˜3!üç2,) Returns the URI of the original request.ÁDŸ3­  ­ ”¥›§Î ¨3Î
Ôê:$©3\´6Ö‘Ö×ü‚7üÆ674 Returns `true` if the `Action` is a `Follow` value.ÁL‰7®  ® Ö‘Õ “7Õ
Ö$”7ìÎ8ü”852 Returns `true` if the `Action` is a `Stop` value.Á<Õ8¯  ¯ Ö‘Õ Ý8Õ
×$Þ8üÚ9"ÙÚÚÙÓÅ ß9Ѥ â9Ö‘Û¢Û "üƒ:<D†:° ± ²  ° Ö‘ ± ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€² Ç’Ø :Ø
Ûî‹‚Š$”: š:üÝ:AÝÞÝÞÓÅ â:Ѥ å:Ø‚Š,˜;ǒߢß+-02ü¥;<D¨;³ ´ µ  ³ Ç’ ´ ÇÇÛ:Éô:Ê‚;Ë;Ì ;Í·;¢:xþ岘€µ Ç’Ü ±;Ü
ßî‹‚Š$¶; ¼;üÎ<*LÑ<·  ¶ ±† · ±† à<
àÛ<rhsÁæ<©O¬OOžOOOOOä¥oO$ÇÄÓVO´í:O¤… O„›
O̱ëNÐNÓN·NºN£N¦N”N—N†N‰NxN{NiNlNTNWN|¤INì¹<NÜ„ç3Ntý&NNNDš N÷MúMüÜYéMìMÚMÝMËMÎM¤Ö¹M”ð§M´ˆšMD¤‹MÄ¥!ÊÊàSÌ©0zt#•™4™"üÄ!PM Create a new [`FollowRedirectLayer`] with a [`Standard`] redirection policy.Á "µ¸
ôÑ"¡ˆˆÍìÙ“ Ö"¬“ 
üÊ#%üö"OL Create a new [`FollowRedirectLayer`] with the given redirection [`Policy`].Á\Ñ#Ù“¬“
Ù“©04Ý#ü¢$P¤¡ŒŒÍ캔 §$È” ª$غ”,Þ$Ø´”,ì$‡”ŽŽBDGIdù$<þ$ŠŠÇ”ü£%*,¦%¸  ¸ ‡”º”‡”º”Š ¬%Š
Žº”´”$­%÷T,³%Ì“(¤‹¼ ˜(ØØÑTÛ÷TÜ©0⟮IG½÷º”ï£JLäƒ)ü³(KH Create a new [`FollowRedirect`] with a [`Standard`] redirection policy.ÁŠ)º”§¾
º”÷T,Ž)üé*%üã)SP Returns a new [`Layer`] that wraps services with a `FollowRedirect` middleware.Á»*úüÃ*! [`Layer`]: tower_layer::LayerÁ,ð*µ¸
º”ü½+3¤¡‹¼ Â+È” Å+´¼,ê+Ç”èéê'),.üÆ,/ü÷+JG Create a new [`FollowRedirect`] with the given redirection [`Policy`].Á\Í,º”´”Ç”
º”´”÷T,Ù,©04ã,üà.=ü¬-RO Returns a new [`Layer`] that wraps services with a `FollowRedirect` middlewareÁüƒ.*' with the given redirection [`Policy`].Á².úüº.!ÀŒç.´”‡”
º”´”©04ù.ü‚0ä§?¶?š¤¡œœš Û•å•1 ˆˆÕ?Šÿ”À.“q8‚ õ™¶?äù0Íì’Ç<0ÍìÛ• ™0Íì± œ01Û•å•üß07Í쪖<‡0ØÛ•,™1)ª–$­1³ª–<´1Ÿ±ª–Û•å•1
ÌÄ1ر,à1£•žŸ ¡1 1
1 1 1
 ¡ãåßáÛÝlí1Dò1˜˜ׯT”2,™2˜˜²È\¯24´2˜˜ëë‡VïµVðÃVñ©0ò‚;óâVôÄõõVöÀ.R3N›Ì=Û•ª–±üá2OTä2¹ º »  ¹ £• º ÌÌkÎwakerÁ¸Ï local_wakerÁ¸ÐextÁ¸Ñ_markerÁ¸Ò_marker2Á¸f'EwÚ]¾å» œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
£•å•1
˜ ï2˜
 ª–’ÇÛ•±$ô2ÑÛú2üà3=$ã3¼  ¼ £•å•£•å•1 ˜ è3˜
¡ª–’ÇÛ•±$í3reqÁ÷3üŸ<Ò¤£§?¤¶?¥¡¦£¥¦¤
º”ôôï”öÿ”¦÷À.¦Œ4ñŠ|åë™1 ˆˆÕ?Šÿ”À.“q8‚ õ™¶?äŒ=Íìë™<§<ÍìŽÑ<°<¾Ç ¹<1º”‘Ðüò<7‹¼ ¤<¤¼,¬=)ë™$À=³ë™<Ç=Ÿ±ë™º”‘Ð1
Ì×=혧¨ƒØ„بeg§©£¥¨ª\ø=4ý=¢¢Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÓДÒü°>I$³>¾ ¿ À „¾„¾“Û†¾ ˜X$]È=„kt• ¾ í˜ ¿ ÌÌkÎßʸÏòʸЋ˸ќ˸ұ˸f'EwÚ]¾åÀ œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã혃آ Â>¢
¨º”뙎ѱ$¸>ÑÛÎ>Ìû@¨”ª©¬ª©ɪ©©¨©º”뙎ѱ½  ½ æ
æ
¶˜è
maskÁé
indicesÁê
entriesÁë
extra_valuesÁì
dangerÁPa $piwººÓ˜»÷T¾¼ is_sensitiveÁ¾ÚÞ ªM,ÄL¨”ªª¬ªªɪªª¨ªº”뙎ѱ ÐØÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ±† ‹XеVÃVŒ©0‚;ŽâVÄõVÀ.é2øt#fzº”ë™±üýX0¬¬ÓÅ ‚Y)î‹$žY³î‹<¥Y²š­®-/ü´Y$·YÁ  Á ²š›Š« ¼Y«
­î‹$ÁYüí[[tð[ à Ä   ²š à î‹ Ä ´”«¡¯°¯° …\«È” ÿ[¦± ‚\Ÿ´”î‹çŠd»\
®î‹´”çŠ$Š\À.$\©04š\LNQSüÞ^kTá^Å Æ  Å Ù“ Æ Š‰Ѱ¡²³´³´² ý^˜º ì^â¡ ï^¦± ò^ŸÙ“ЉçŠd¥_)Љ$º_³Љ<Á_
±Ù“ЉçŠ©04õ^À.$_lnqsvxü“a9\aÇ È  Ç  È ±†Ú ¬a
µrelativeÁD¢abaseÁ$²a„ŒIüA
> Tools for classifying responses as either success or failure.ÁD”IÀì°ÀÊÒ­Ã˶˜LN
æ
¸ï”<Y
ô¹Õ?Db
ˆº¢wTl
»
InfallibleÁTŒ
ˆê½×˜
¤,¾ PhantomDataÁ\¥
¿œã¿¡]DÉ
Ψîr¼Ó
ð©£r¤ì
ꪯs„‚
ö«Òu|²
¬»v¼â
ž®wÌû
¤¯$G
:=+. }
œƒ
þêìœ
Òü´&
¼Ã
éÎðêö÷øùÿ¿x” À‡D\ ÊÀÃúJ„-ÀÀÄãw„?­ÀÅÉD`Àƶ˜Luæ
ÀÈÕ?D€ˆÀÉפ,ÀË
NonZeroI32ÁTŸÌ—ÀÌ,ÄÆ´¤¦–”V‡$nvxfhY[|šBl  Ž›Îü´ 3 Ž›ªžÍÍ
Î ÜÛü×;8 Converts an `i32` gRPC status code into a [`GrpcCode`].Áúü—C@ Unrecognized codes (outside 0-16) map to [`GrpcCode::Unknown`].ÁŽ›ÐëÐÜý$€Ž›ÏÏ
л,…üž"Ž›ÒëÒüÇ"ÑÑ
Ò»¤Æ&ªžÔüá&*dä&ÀëäÓÓ
ÔcodeÁ$ñ&üƒ2%½¤Ö´Ö¤¯2<²2½¤ÕÕ
ÖÌã2½¤ØÙÚ¤²3üƒ3*' Create a new [`GrpcErrorsAsFailures`].Á¹3½¤××
Øüÿ85ü430 Change which gRPC codes are considered success.ÁÕ4úüÝ41. Defaults to only considering `Ok` as success.Á“5úü›5-* `Ok` will always be considered a success.ÁÍ5úlÕ5‡êç5úüï5ZW Servers might not want to consider `Invalid Argument` or `Not Found` as failures sinceÁüÎ6# thats likely the clients fault:Áö6ú\þ6 ```rustÁüŽ7?< use tower_http::classify::{GrpcErrorsAsFailures, GrpcCode};ÁÒ7úüÚ70- let classifier = GrpcErrorsAsFailures::new()Áü80- .with_success(GrpcCode::InvalidArgument)ÁüÄ8*' .with_success(GrpcCode::NotFound);Á<ó8¸¥d†9½¤Ž›½¤××
Ù$—9™ë$9ü¾;2ü‚:]Z Returns a [`MakeClassifier`](super::MakeClassifier) that produces `GrpcErrorsAsFailures`.Áä:úüì:MJ This is a convenience function that simply calls `SharedClassifier::new`.Á|Å;­­ãw¯ƒxážÃúTž˜½¤××
Úü§<.½¤ÜÝÞàÁÂÃÅÞàŒÜ<dá<ÛÛÞ¥„†=\‹=ÛÛ“¥ü·=„Œº=É ½¤ É ˆˆÕ?Šÿ”À.“q8‚ õ™î‹¹ºÈ»ˆ¼½þx¾ˆ1lŒ!©-、Á½¤ÂÛßß ë=ÛÓÅ Ì=
Þî‹$Ø=resÁæ=!ü¶Cht¹CÊ ½¤ Ê ÇøÛáá ØCÛÍìáù ÈCÄcáùd‡Dáù<D
àáù$ËCerrorÁ,ÑC<>üûE,“¥ãäåËÌÍä匮Fd³FââÞ¥üÙFUdÜFË “¥Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ë Ò×Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
“¥Ëâ €Gâ
ä$éFtrailersÁDïFüŸKht¢KÌ “¥ Ì áùøüâææ ÁKâú ±K údðK°ú<ÿK
åáù$´KÌù,ºK-/ü‘O&Þ¥èÅcèü¾O4ÁOÍ Î Ï  Í Þ¥ Î  c cˆ¢cµ
 `£c°­ `àB¤GS
Ï ×®ç ÅOç
è$ÆO± ÌOü›Qx´©QÐ  Ð Òתž¸¦ ÎQ
éõV<ÅQ¿rlÞQ¤šR<§R ¯R ûS ¹R ÒR , ºR8$»R& ¿R8$ÀR$ ÄR, ÆR8¹
,ÇR& ÌR8¼,ÍR*ÔR ×R ôS
8åR8èR8Û$ìR ðR öR8»,ñR øR, úR8$ûR €S ¤S8»,S8$¦S «S êS84½S8t„ÄS'ÔS, ÖS8¹
,×S% ÜS% õS4˜V锪묪ëɪëëéë ªžÁŬÜ
Έ
¿x” ìî‡D\ ÊìïúJ„-Àìð¶˜LKæ
ìòÕ?DVˆìó×j¤,ìô,y{ikY[$DKM;=De.ü… ö÷ö÷Í쑨 ŠÍì—¨ ×§øü¬,º‘¨—¨×§õõ
ø‘¨—¨ÆAD¾± ËüˆHúûûú€† ‘† ¿c‘¨×§üÀcü+-02ü×8ÚÑ Ò Ó  Ñ ×§ Ò  c cˆ¢cµ
 `£c°­ `àB¤GS
Ó ×®ù Þù
ü‘¨—¨± åüÍŠþÿÙFþÿ—¨‘¨Á˜"ÙFDΑ† ÕÍ즊À‘¨„š–"—¨–Šü³#€† Ò×§ƒÁÂÃŃ,.wysuŒÞýý¦Š„€\…ýýÒu÷Tì±ì Û‘¨Â—¨ü¼Œ¿Ô ×§ Ô ˆˆÕ?Šÿ”À.“q8‚ õ™ö‰¹ºÈ»ˆ¼½þx¾ˆ1lŒ!©-ï×§Á×§Âý ðýó¤ Ñ
ƒ‘¨—¨¦Šö‰šøë)+üÖ m Õ ×§ Õ „£ùý ø ýü¢ è Äc„£Œ§
„£

‘¨—¨¦Š„£ Ìù DFü†ˆÙFŠŠˆ—¨‘¨Ë˜"¦Š‘† ޏŠD‘Ê‘¨–"—¨æüâ#€† ×§ŒËÌÍŒ%'gilnŒd’¦Šü°UÖ ×§Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ö Ò×Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
×§Ë ×
Œ‘¨—¨¦Š¥üüÍm× ×§ × „£é“ŽŽ ïü¢ ßÔŒžä
‘¨—¨¦Š„£Ìù9;äó
Ä÷
ž¤¿x” úJ„ ÀšL„2 Òãw„D ­¢wTa ×w ¤,¾t ½£˜, Ž~np^`„[ Qq BDœ| 5äÆ
Шšœü¯
. üé
, ) Creates a new `StatusInRangeAsFailures`.Áš ú # PanicsÁ³ úü» T Q Panics if the start or end of `range` aren't valid status codes as determined byÁì”  [`StatusCode::from_u16`].Á úü¾ l i [`StatusCode::from_u16`]: https://docs.rs/http/latest/http/status/struct.StatusCode.html#method.from_u16Á
½£½£¾¿£¹À£þÁ£ exhaustedÁ1¥œMu7·PШ
šÚv,º
üÙ1 ü“Z W Creates a new `StatusInRangeAsFailures` that classifies client and server responses asÁ
failures.Á úüŒH E This is a convenience for `StatusInRangeAsFailures::new(400..=599)`.Áüà Ш
ü¹; üµE B Convert this `StatusInRangeAsFailures` into a [`MakeClassifier`].Áÿ úü‡- * [`MakeClassifier`]: super::MakeClassifierÁ¤À Ш­­ãw¯ƒxážÃúTž˜Ш
œ ü¤1 ШžŸ ¢ÁÂÃÅ¢ ŒÜ ›© \” ÒÒšLÔºLÕÌL8ÖŸ
#~îШÁüÍŠ ŒÐ Ø Ш Ø À÷¹ºÈ»ˆ¼½þx¾ˆ1lŒ!©-ïá Ш¡¡  ÓÅ â
 î‹ šøü üæm té Ù Ш Ù áùá ££ ˆ ú ø  úŒ· °ú
¢áù Ìù, -/üä/ ›©¥Åc¥üš8  Ú Û Ü  Ú ›© Û  c cˆ¢cµ
 `£c°­ `àB¤GS
Ü ×®¤ ¡ ¤
¥ ± ¨
üš#
j m ^ a R U F I üŸ"
? üšÅ
6 9 * - Ää
ü›<
9 Trait for producing response classifiers from a request.ÁØ
úüÜ^
[ This is useful when a classifier depends on data from the request. For example, this couldÁü»#
include the URI or HTTP method.Áß
úüã]
Z This trait is generic over the [`Error` type] of the `Service`s used with the classifier.ÁüÁ?
< This is necessary for [`ClassifyResponse::classify_error`].Á
úü…^
[ [`Error` type]: https://docs.rs/tower/latest/tower/trait.Service.html#associatedtype.ErrorÁ
°°òòüäÙ
°òòòò ±²³´±²³´Íìúò±ü­}
Àèªü¾k
èªÁúò²üØ!
èªÂúò³üƒ 
àªPùªEŠ«0¥«Íì•«”ž
Ù«Íì°«üú A
ʰ«üŒ .
°«Ë•«ü˜ !
ñ«.ƒ¬#”¬´ü­|
üƒ%
" The response classifier produced.ÁT²
°°Œž
ü° (
% The type of failure classifications.ÁÝ
úüå F
C This might include additional information about the error, such asÁü°
H
E whether it was a client or server error, or whether or not it shouldÁäý
 be considered retryable.Ád£
°°üú @
ü¶ ?
< The type used to classify the response end of stream (EOS).Á\ÿ
°°üø C
üÁ 2
/ Returns a response classifier for this requestÁ|û
Ý Þ  Ý úò Þ Éú誰µµ Ž
°â¡
´úòЉ$
³Î
!#Üž
··€† £
õ©¸ 
üƒP
üÀ>
; Create a new `SharedClassifier` from the given classifier.ÁŠ
‘¨õ©ÉŠ„º
Ø‘¨
¸‘¨ƒxTŽ
üÿU
ºº€† 
ÉŠ„»
ž³
õ©»¼½¾²³±´¾8:ŒÛ

¹¹˜Š„„
\‰
¹¹¯Œ

¹¹‘¨üÅC

ß à  ß õ© à Éúõ©±¹¿¿ Û
¹â¡ Ø
¾‘¨Љ
_reqÁ$â
$&Ô½%
ü´`
] Trait for classifying responses as either success or failure. Designed to support both unaryÁü• S
P requests (single request for a single response) as well as streaming responses.Áé
úüí N
K Response classifiers are used in cases where middleware needs to determineÁü¼!N
K whether a response completed successfully or failed. For example, they mayÁü‹"K
H be used by logging or metrics middleware to record failures differentlyÁœ×"
 from successes.Áë"
úüï"I
F Furthermore, when a response fails, a response classifier may provideÁü¹#O
L additional information about the failure. This can, for example, be used toÁü‰$O
L build [retry policies] by indicating whether or not a particular failure isÁtÙ$
retryable.Áè$
úüì$P
M [retry policies]: https://docs.rs/tower/latest/tower/retry/trait.Policy.htmlÁ„Ç%
ÀÀòòü½%½
Àòòòò ÁÂÃÅÇÁÂÃÅÇÍìúòÁ”ø'
ú½ÍìúòÂüÔ(A
Ê¡¾üæ(.
¡¾Ë‚¾üò(!
™¾.²¾#þÇÅÃŒø'
üÞ%A
> The type returned when a response is classified as a failure.Á¤&
úü¬&B
? Depending on the classifier, this may simply indicate that theÁüó&C
@ request failed, or it may contain additional information aboutÁü»'8
5 the failure, such as whether or not it is retryable.Ádý'
ÀÀüÔ(@
ü(?
²®\Ù(
ÀÀü¡1…
ü›)4
1 Attempt to classify the beginning of a response.ÁÔ)
úüÜ)F
C In some cases, the response can be classified immediately, withoutÁü§*5
2 waiting for a body to complete. This may include:Áá*
úüé*1
. - When the response has an error status code.ÁüŸ+@
= - When a successful response does not have a streaming body.Áüä+?
< - When the classifier does not care about streaming bodies.Á¨,
úü°,H
E When the response can be classified immediately, `classify_response`Áüý,G
D returns a [`ClassifiedResponse::Ready`] which indicates whether the矃-!
 response succeeded or failed.Áï-
úü÷-F
C In other cases, however, the classifier may need to wait until theÁüÂ.G
D response body stream completes before it can classify the response.ÁüŽ/D
A For example, gRPC indicates RPC failures using the `grpc-status`Áü×/8
5 trailer. In this case, `classify_response` returns aÁü”0D
A [`ClassifiedResponse::RequiresEos`] containing a type which willÁüÝ0?
< be used to classify the response when the body stream ends.ÁŒ¤1
á úò á ˆˆÕ?Šÿ”À.“q8‚ õ™Љ¹ºÈ»ˆ¼½þx¾ˆ1lŒ!©-¡¾ÀÄÄ Õ1
Àâ¡ ¶1
ÃúòЉ$Â1
šøÐ1
!#üƒ4h
´¬2
 Classify an error.ÁÇ2
úüÏ2_
\ Errors are always errors (doh) but sometimes it might be useful to have multiple classes ofÁü³3K
H errors. A retry policy might allow retrying some errors and not others.Át†4
â úò â ‚Š‚¾ÀÆÆ ¥4
ÀѤ •4
Äc‚ŠdÔ4
‚Š<ã4
Åúò‚Š$˜4
Ìù,ž4
<>ü«A
üñ4:
7 Transform the failure classification using a function.Á°5
úl¸5
‡êÊ5
ú<Ò5
¸¥üÞ5
 use tower_http::classify::{Áü‚69
6 ServerErrorsAsFailures, ServerErrorsFailureClass,ÁüÀ6,
) ClassifyResponse, ClassifiedResponseÁ4ñ6
›–üü6%
" use http::{Response, StatusCode};Áô¦7
 use http_body_util::Empty;Á¬É7
É—ã7
úüë7T
Q fn transform_failure_class(class: ServerErrorsFailureClass) -> NewFailureClass {Á¬Ä8
 match class {ÁüÞ8,
) // Convert status codes into u16Áü9=
: ServerErrorsFailureClass::StatusCode(status) => {矄98
5 NewFailureClass::Status(status.as_u16())ÁlŽ:
ƒñü :#
// Don't change errors.ÁüÈ:7
4 ServerErrorsFailureClass::Error(error) => {Áü„;-
* NewFailureClass::Error(error)Ál¶;
ƒñLÈ;
˜¥,Ö;
ª¥à;
úÔè;
 enum NewFailureClass {Á¤‡<
 Status(u16),Á´ <
 Error(String),Á,»<
ª¥Å<
úüÍ<_
\ // Create a classifier who's failure class will be transformed by `transform_failure_class`Áü±=^
[ let classifier = ServerErrorsAsFailures::new().map_failure_class(transform_failure_class);Á”>
úüœ>&
# let response = Response::builder()矂>2
/ .status(StatusCode::INTERNAL_SERVER_ERROR)Áüþ>$
! .body(Empty::<Bytes>::new())Á”§?
懾?
úüÆ?A
> let classification = classifier.classify_response(&response);ÁŒ@
ú¬”@
 assert!(matches!(Á¼®@
 classification,ÁüÊ@D
A ClassifiedResponse::Ready(Err(NewFailureClass::Status(500)))Á<“A
 ));Á<ŸA
¸¥Œ®A
úò—¨Òu÷Tì±ì Ûúò—¨ÀÈÙFÉÈÉÀ‘† ÀA
¸ŠDÃA
ò”,B
–"—¨‚¾üŸB&
—¨ëÞ˜"¦ŠD½B
Çúò—¨¦Š$ÍA
± ÓA
bdgiƒC
üüBL
I Trait for classifying end of streams (EOS) as either success or failure.Á\ÓC
ÊÊòòüÉC™
Êòòòò ËÌÍÏËÌÍÏÍìúòË”’D
öàÏÍÌŒ’D
üåC(
•¬d—D
ÊÊüåDV
üªD6
3 Perform the classification from response trailers.ÁdèD
ã úòÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ã Ò×Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
þàÊ ŒE
Ê
Ìúò$õD
¥üDûD
ü˜Gh
´ÁE
îËÜE
úüäE_
šÌüÈFK
ƒÍtG
ä úò ä ‚ŠþàÊÎÎ ºG
ÊѤ ªG
®ÏdéG
¾Ï<øG
Íúò‚Š$­G
Ìù,³G
13ü“I
ü†H:
ƒÏÅH
úüÍHA
> See [`ClassifyResponse::map_failure_class`] for more details.ÁŒ–I
úò—¨×ÝÊÐÙFÑÐÑÊ‘† ¨I
¸ŠD«I
ò”,õI
–"—¨þàü‡J&
—¨¼ç˜"¦ŠD¥J
Ïúò—¨¦Š$µI
± »I
bdgiôO
ü¤Mc
` A [`ClassifyEos`] type that can be used in [`ClassifyResponse`] implementations that never haveÁüˆN$
! to classify streaming responses.Á­N
úü±N]
Z `NeverClassifyEos` exists only as type. `NeverClassifyEos` values cannot be constructed.Á„šO
¥ÓÓ§ž «O
Ÿ«8ÖŸ
#~îÔÕ "ü´O"
T´O
ÒÒœãFu\»ŸÉ‘”ÜO
4ÜO
ÒÒˆê)?ÈXM´­üóO+
¥××§ž øO
Ÿ«ØÙÚËÌÍÙÚ%'Œ¥P
dªP
ÖÖÉ‘üÁPV
dÄP
å Ÿ«Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ å Ò×Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ÿ«ËÖ éP
Ö
ÙÉ‘$ÑP
 _trailersÁL×P
ü’Ri
t•R
æ Ÿ« æ ‚Š¬îÖÛÛ µR
ÖѤ ¤R
®ÏdäR
¾Ï<óR
ÚÉ‘‚Š$§R
_errorÁ4­R
68üøS*
¥Ýݧž ýS
Ÿ«ÞÀcÞü©T8
¬T
ç è é  ç Ÿ« è  c cˆ¢cµ
 `£c°­ `àB¤GS
é ×®Ü °T
Ü
ÞÉ‘$±T
± ·T
Ü W
ï«àá¤óW
üÂW,
) Create a new [`ServerErrorsAsFailures`].ÁúW
ï«ßß
àüÔY2
ü­XH
E Returns a [`MakeClassifier`] that produces `ServerErrorsAsFailures`.ÁúX
úü‚YM
öó|ÛY
­­ãw¯ƒxážÃúTž˜ï«ßß
áü½Z0
ï«ãäåçÁÂÃÅçåŒôZ
dùZ
ââŬ„¦[
\«[
ââÒÒšLÔºLÕÌL8ÖŸ
#~îŬüê[„
Β[
ê ï« ê À÷¹ºÈ»ˆ¼½þx¾ˆ1lŒ!©-ïï«Áï«Ââææ ž\
âÓÅ ÿ[
åî‹$\
šø™\
üÐ^h
tÓ^
ë ï« ë áù…÷âèè ò^
âú â^
 úd¡_
°ú<°_
çáù$å^
Ìù,ë^
-/üÆb.
ŬêÅcêüûb8
þb
ì í î  ì Ŭ í  c cˆ¢cµ
 `£c°­ `àB¤GS
î ×®é ‚c
é
ê$ƒc
± ‰c
„žIüK H [`Service`]s that return responses without wrapping other [`Service`]s.ÁL úüPc ` These kinds of services are also referred to as "leaf services" since they sit at the leaves ofÁÌ´  a [tree] of services.ÁÎ úüÒF ŸÃü™? < [tree]: https://en.wikipedia.org/wiki/Tree_(data_structure)ÁD¦IŒèOüÀO'$ Alias for a type-erased error type.ÁDñOžÕ¡ˆˆ¢ˆl }.xϾ Ì쎑¤òü:HE A redirection [`Policy`] that combines the results of two `Policy`s.Áƒúü‡C@ See [`PolicyExt::and`][super::PolicyExt::and] for more details.ÁýîïïîÑ¡ â¡ ̈žÿi+Úâ–ðñ(*-/$  í턉$—  ííЉ(
Ô-óôóôÑ¡­â¡«Ø„‰
ØЉ
̈õÙõæèëíˆŠï  ï ̈̈ò
Ôò
õ„‰Љß Û.÷ø÷øÑ¡Žâ¡Š „‰Š Љ̈¾ÁÅÈ(á/úûûúѡ⡿c„‰¿cЉ̈üÀcüLOSVŽð ñ ò  ð ̈ ñ  c cˆ¢cµ
 `£c°­ `àB¤GS
ò ×®ùáù
ü„‰Љ<±C8è0þÿÿþÑ¡Wâ¡V³„‰Ýà̈´Šˆ̈ýý
„‰Љ̱
ü54
1 A redirection [`Policy`] created from a closure.Áj
úün+
( See [`clone_body_fn`] for more details.Á
¢­ È
ŠËdt[ƒ 
Ñ
¼Š(£
1¢­lؼŠÈ
ŠÙŽUWó  ó ŠŠ£

¼Š§ ª
2ˆˆ¢­Š ¼ŠÈ
Š-0äÛünTQ A redirection [`Policy`] that removes credentials from requests in redirections.ÁŒæôŠï\‚ÕüÁÌŠŒŽÄþ”þ00ı”±0„Ï00(Ì3ôŠÙ"$ô  ô ôŠôŠÌ
o(Ó4ôŠÀc"$õ ö ÷  õ ôŠ ö  c cˆ¢cµ
 `£c°­ `àB¤GS
÷ ×®Ó
Ʊ̔•ü'OL A redirection [`Policy`] that limits the number of successive redirections.Á< ÿ‹‚gÞJŒhN„®K(
5ÿ‹045ÿ‹ÙOQø  ø ÿ‹ÿ‹
œ 6ÿ‹(7ÿ‹šÀcš"$ù ú û  ù ÿ‹ ú  c cˆ¢cµ
 `£c°­ `àB¤GS
û ×®
šÆ±Ìœðü:HÚýƒúü‡A> See [`PolicyExt::or`][super::PolicyExt::or] for more details.ÁûœœÑ¡ þâ¡ òŒbèFÍ{¿×³žŸ(*-/ ŠX„‰$” XЉ(Ò8¡¢¢¡Ñ¡­â¡«ãþôòŒ£Ù£ÖØÛÝxzü  ü òŒòŒ Ò 
£„‰ЉÏ Ù9¥¦¥¦Ñ¡~â¡}ƃþ׃òŒž¡¥¨(ß:¨©©¨Ñ¡ñâ¡ðÉ„þÚ„òŒªÀcª#&~ý þ ÿ  ý òŒ þ  c cˆ¢cµ
 `£c°­ `àB¤GS
ÿ ×®§ß§
ª„‰Љ,±38æ;¬­¬­Ñ¡'â¡&þÝàòŒ®´®RUY\~òŒ««
®„‰Љįü54 ‡júün)& See [`redirect_fn`] for more details.Á°°¢­ Å©Ž ‰À±/±  Îm¯¯¼Š(¡<³³¢­l¤ŠÅ©Ž´Ù´ˆMO
 
©Ž©Ž²¡²
´¼ŠŸ ¨=¢­
΋Å©Ž ¬£ü@B? A redirection [`Policy`] that stops cross-origin redirections.Á¹B=p¦'Áå¸L¿,¿~··(Œ
>¹04>¹»Ù»OQ
 
¹¹ºŒº
»œ ?¹8 ™@¹¾´¾"$¹½½
¾|—5üÛ3GD A value returned by [`Policy::redirect`] which indicates the actionÁü£4UR [`FollowRedirect`][super::FollowRedirect] should take for a redirection response.Á 4 5Ö‘iM²|"cÀÁÂÃÁÃ4Í5Ü­5 Follow the redirection.Á *¿¿Ö‘>@¿¿Ö‘$«6üÙ5MJ Do not follow the redirection, and return the redirection response as-is.Á ]¿¿Ö‘qs¿¿Ö‘(!‚5
AÖ‘04AÖ‘ÆÙÆOQ
 
Ö‘Ö‘Å!‚5Å
Æœ "‰5BÖ‘(#5CÖ‘ÉÀcÉ"$ƒ


 ƒ
Ö‘ 
 c cˆ¢cµ
 `£c°­ `àB¤GS

×®È#5È
ÉÆ±Ìüä ,ü¯WT [`Layer`] for retrying requests with a [`Service`] to follow redirection responses.Áúü‹ 1. See the [module docs](self) for more details.Á
œï ¡Ë˘ºdƒ!¬“zt#•™4Ì ƒ!ï£L—!4—!ÊÊÙ“($Æ D¡ÎΘºQØÙ“$ƒ!¬“ÏÙÏsuUW
 
¬“¬“ÍÍ
ÏÙ“§ %Í E¡ÑјºúŠ Ù“%ƒ!¬“(&Ó F¡ÓÓ˜ºF¿cÙ“&ƒ!¬“ÔÀcÔilXZ
ˆ

 
¬“ ˆ
 c cˆ¢cµ
 `£c°­ `àB¤GS

×®ÒÒ
ÔÙ“±8'Ú G¡ÖÖ˜ºQ³Ù“'ƒ!¬“×´×twXZ¬“ÕÕ
×Ù“üÆ'*ü™&XU Middleware that retries requests with a [`Service`] to follow redirection responses.Áò&úüö&1ͪ tÑ'¤Ù¡ÚÚÙ‹¼ à'È”dã'Ç”⟮IG½÷ÛÜ(*- ã'ï£D÷',÷'ØØº”L…(4…(ØØ´”((±'H¤Þ¡ßÞß‹¼²È”¤¼(à'´¼(ã'Ç”àÙàÛݱ³xzŠ
 Š
ǔǔÝ(±'Ý
ດ´”Ï )¸'I¤â¡ãâ㋼ƒÈ”SŠ º”)à'Š ´”)ã'Ç”³Ž(*¾'J¤å¡ææå‹¼È”Ö¿cº”*à'¿c´”*ã'Ç”çÀcçADŽ
Œ

 
Ç” Œ
 c cˆ¢cµ
 `£c°­ `àB¤GS

×®ä*¾'ä
纔´”<±CØ+ ø+Z/ ÄÆ8+™ Ž
 Ž
Ç” Ž
º” 
躔´” ø+›# ø+Û7 ‚È8+¢ 
 
Ç” 
º” 
麔´” à+¯ ø+ð6 çÉP+¶ Ç”º”
꺔´” ù2•º´ü…9+I2º( Response future for [`FollowRedirect`].ÁUtÕ9¤ìí¡îìí ä9â¡ ç9Í숑 ê91º”Éú™0ó§·–R3N›Ì=ïðñòóôõö[]`b\^á2“»4´:ëë²HµH¶HLeftÁ·Hˆ¸H¹HRightÁºHˆuÃÑñõoÑqº”Éú1  § §Í› ªº µA°:ÿi@,º”Éú°<ï:ë뺔É4ƒ;ë눑â4–;ëëЦû®;ë뱆<À;ëëóóôÞ™õˆ²  &$,„ñ@:]<Ú;ëëÒ×w$ƒ<ëëÂÄÅÛÆˆÇÈî\ÉÊ©Ye¥Ë^²¤Љ(3¾9V¤øù¡úøùú‹¼¨â¡§­½À·3ä9Ú„3ç9¿cˆ‘3ê9¾½´¿cŽ¿‹·–ûÀcû
ÉË


 
·– 
 c cˆ¢cµ
 `£c°­ `àB¤GS

×®÷3¾9÷
ûº”Љˆ‘|±ƒY4ös 4üsù4¸{FT¤þÿ¡þÿ‹¼Dâ¡C­½9¾½-·–Ÿ¡fimpkn4Ú•Á4Ý•
 
·–¤ƒ¡ƒ 4’–‹¼â¡­½¾½û
º”Љˆ‘thisÁ!4Œ–JMQTORù6¨ÝÕ16¨Õ^Q4ÝtX¤ˆ¡ˆÍ쿘ûÙ”ú¾ÇðÅ—X16¤Þ1¿˜ôôï”öÿ”¦÷À.¦Œ4ñŠ|åŘ=¿˜ÉÉ1 Xù5ÿÈ¿˜XŘX ±X-‹XеVÃVŒ©0‚;ŽâVÄõVÀ.é2øt#fzX¿˜Ř±é2øt#fzŠŒŽ16ÓÝilpsnq„¾„¾“Û†¾ ˜X$]È=„kt• X²HµH¶H˽·Hˆ¸H¹H轺HˆuÃÑñõoÑqÊ § §Í› ªº µA°:ÿi@,¿˜ÉÉè8 X¿˜? (F XЦHM X±†hS XÍÀˆ* XÒר0 XÂÄÅÛÆˆÇÈî\ÉÊ©Ye¥Ë^²¤Řù@¨ÝÕ1@¨Õgi4®xX¤¡É
Ù”
¾Ç
­É1@¤Þ¿É
Êù?ÿÈªÊ ·ÊÄʃYµV˜ÃV©0š‚;âVœÄõVžÀ.Í®]X¿˜Ř±Í®]˜šœž1@ÓÝ      
„¾„¾“Û†¾ ˜X$]È=„kt• X„ÍR]
 X¿˜rd
 k
 XЦ²r
 X±†Òx
 XÍÀòO
 XÒ×U
 XåÏùI•‡1Iù…94Ü} „¾„¾“Û†¾ ˜X$]È=„kt•  ·–‹XеVÃVŒ©0‚;ŽâVÄõVÀ.é2øt#fz º”Љˆ‘ý1I°‡ý
Ÿº”Љˆ‘!IŇ')ùR•‡1Rù…Y4¢„¾„¾“Û†¾ ˜X$]È=„kt• ¢·–ƒYµV˜ÃV©0š‚;âVœÄõVžÀ.Í®]¢º”Љˆ‘ý1R°‡ý
¡º”Љˆ‘!RŇ')ù[å½0\A[ñ½X¤¤¥¦¡§¦¤§¥ÉkÙ”j¾Ç`¿ÉT££ªZ ¨ÚZ©µVªÃV«©0¬‚;­âV®Ä¯õV°À.Ë'ÚáüØ~êX¿˜Ř±Ë'ÚáüØ~ꨩª«¬­®¯°1[ú½ILPSNQù[ܾ<[ܾ££œãFu\»Ÿ Xù4݈tD££„ͱ££001 AlwaysUnpinÁ3ˆ ‰4ä\’ÎM¿˜n裣001£Þ3ˆ ‰4ä\’ÎM±´££001£Þ3ˆ ‰4ä\’ÎMЦúB££001£Þ3ˆ ‰4ä\’ÎM±†@o££001£Þ3ˆ ‰4ä\’ÎMÍÀm££001£Þ3ˆ ‰4ä\’ÎMÒ×Κ££001£Þ3ˆ ‰4ä\’ÎMåÏù[ÿe\X²¤³´¡µ³²´µÉ*Ù”)¾Ç“í))*PinnedFieldsOfHelperStructÁ,ˆ Úˆ3Clœ£Ü(Á[ŒÁ¿ÉtÅ—1[È¿°³·ºµ¸©dûé]ydêòòÁdûéòòòò!ùdÏê6]¥¸¸§ž dÔêŒ"É‘¹d×êÉ‘ ùd‘ëV]¤º»¡¼»º¼‹¼Àâ¡¿­½µ¾½©·–Üßãæáä|üðU`] Response [`Extensions`][http::Extensions] value that represents the effective request URI ofÁüÑV;8 a response returned by a [`FollowRedirect`] middleware.ÁWúü‘W^[ The value differs from the original request's effective URI if the middleware has followedÁŒðWúøTžXü™I{Ðy¬©¾¿±†ü™|8±†ü™½½
¾<©X½½±†(f‹Xˆü™ÁÙÁ#%
 
ü™ü™Àf‹XÀ
Áp„ÅXDÊXÃÃÓÅ ÓX²šYe¥Ë^²¤ÄÅÇÈÉÊÅÆî‹²šÈÊHJ,,ÂÂ
Åî‹,,šÂÂîì áXÂÂî‹,éX²šÂ²š$ôX²šÂ²š(g½XÌÌÓÅ¿cî‹gÓX²šÍÀcÍ£¦Y[


 
²š 
 c cˆ¢cµ
 `£c°­ `àB¤GS

×®Ëg½XË
Í Œ”´­ gRPC status codes.ÁÄúüÈ1. These variants match the [gRPC status codes].Áúúüþwt [gRPC status codes]: https://github.com/grpc/grpc/blob/master/doc/statuscodes.md#status-codes-and-their-use-in-grpcÁDŽ›ºÞ—ÚÑÏÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðÐÒÔÖØÚÜÞà  â

ä  æ  è

êìîðÚü¬)& The operation completed successfully.Á9ÎÎŽ›MOÎÎŽ›L‡üâ  The operation was cancelled.Á0ÎÎŽ›DFÎÎŽ›<­”– Unknown error.Á!ÎÎŽ›57ÎÎŽ›üº)& Client specified an invalid argument.Á9ÎÎŽ›MOÎÎŽ›„·üý52 Deadline expired before operation could complete.ÁEÎÎŽ›Y[ÎÎŽ›üÍ(% Some requested entity was not found.Á8ÎÎŽ›LNÎÎŽ›üˆ;8 Some entity that we attempted to create already exists.ÁKÎÎŽ›_aÎÎŽ›„«üÛKH The caller does not have permission to execute the specified operation.Á[ÎÎŽ›oqÎÎŽ›ŒëüÁ%" Some resource has been exhausted.Á5ÎÎŽ›IKÎÎŽ›”Ïü‚HE The system is not in a state required for the operation's execution.ÁXÎÎŽ›lnÎÎŽ›ôç The operation was aborted.Á-ÎÎŽ›ACÎÎŽ›ü— 1. Operation was attempted past the valid range.ÁAÎÎŽ›UWÎÎŽ›l”
üÝ 2/ Operation is not implemented or not supported.ÁBÎÎŽ›VXÎÎŽ›D¿
Ϥ
 Internal error.Á"ÎÎŽ›68ÎÎŽ›
üÍ
)& The service is currently unavailable.Á9ÎÎŽ›MOÎÎŽ› üŒ *' Unrecoverable data loss or corruption.Á:ÎÎŽ›NPÎÎŽ› üÉ >; The request does not have valid authentication credentialsÁNÎÎŽ›bdÎÎŽ›(hÿ
ŠŽ›15ŠŽ›óÙóQS˜
 ˜
ޛޛòhÿò
óž i†Ž›(jŒŒŽ›öÀcö#%
š

 
Ž› š
 c cˆ¢cµ
 `£c°­ `àB¤GS

×®õõ
öDZÍYkälN kêlNÀ~ªžÿ c`ºƒ ùúªžªž~@À®ˆ ªžøø
ùùl¥=NÀøø®ˆ (m²ªžüÀcü#%œ

ž
 œ
ªž 
 c cˆ¢cµ
 `£c°­ `àB¤GS
ž
×®ûû
üDZÍ(n¹
˜ªž15˜ªžÿÙÿQSŸ
 Ÿ
ªžªžþþ
ÿž oÀªžÏškÌnN„ŸVá†uÈÞOƒ„ŸÏ:À„Ÿ