ó
    ´ÕiýT  ã                  ó  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
JrJrJrJrJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJr  S SKrS SK rS SK!J"r"  S SK#J$r$  S SK%J&r&  S SK'J(r(J)r)J*r*  S SK+J,r,  S SK-J.r.J/r/J0r0J1r1   " S S5      r2 " S S\25      r3 " S S\25      r4 " S S\25      r5 " S S\25      r6\7\8-  \9-  r:\\:   r;\
\:   r<\<\;-  r= " S S\25      r> " S S\?5      r@ " S S \?5      rA " S! S"\25      rBg)#é    )ÚannotationsN)ÚAsyncIterableÚ	AwaitableÚCallableÚIterableÚMappingÚSequence)Údatetime)Úformat_datetimeÚ
formatdate)Úpartial)Ú
guess_type)Ú	token_hex)ÚAnyÚLiteral)Úquote)Úcollapse_excgroups)ÚBackgroundTask)Úiterate_in_threadpool)ÚURLÚHeadersÚMutableHeaders)ÚClientDisconnect)ÚMessageÚReceiveÚScopeÚSendc                  ó  • \ rS rSrSrSr     S           SS jjrSS jrSSS jjr\	SS j5       r
         S                     SS jjr     S             SS	 jjrSS
 jrSS jrSrg)ÚResponseé   Núutf-8c                ó|   • X l         Ub  X@l        XPl        U R                  U5      U l        U R                  U5        g ©N)Ústatus_codeÚ
media_typeÚ
backgroundÚrenderÚbodyÚinit_headers©ÚselfÚcontentr$   Úheadersr%   r&   s         ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/starlette/responses.pyÚ__init__ÚResponse.__init__!   s8   € ð 'ÔØÑ!Ø(ŒOØ$ŒØ—K‘K Ó(ˆŒ	Ø×Ñ˜'Õ"ó    c                ó|   • Uc  g[        U[        [        -  5      (       a  U$ UR                  U R                  5      $ )Nr1   )Ú
isinstanceÚbytesÚ
memoryviewÚencodeÚcharset©r+   r,   s     r.   r'   ÚResponse.render0   s4   € Ø‰?ØÜ�gœu¤zÑ1×2Ñ2ØˆNØ�~‰~˜dŸl™lÓ+Ð+r1   c                óÜ  • Uc  / nSnSnOpUR                  5        VVs/ s H5  u  pVUR                  5       R                  S5      UR                  S5      4PM7     nnnU Vs/ s H  owS   PM	     nnSU;  nSU;  n[        U SS 5      n	U	b]  U(       aV  U R                  S:  dF  U R                  S;   d6  [        [        U	5      5      n
UR                  SU
R                  S5      45        U R                  nUbe  U(       a^  UR                  S	5      (       a&  S
UR                  5       ;  a  USU R                  -   -  nUR                  SUR                  S5      45        X l        g s  snnf s  snf )NTúlatin-1r   s   content-lengths   content-typer(   éÈ   )éÌ   i0  ztext/zcharset=z
; charset=)ÚitemsÚlowerr6   Úgetattrr$   ÚstrÚlenÚappendr%   Ú
startswithr7   Úraw_headers)r+   r-   rE   Úpopulate_content_lengthÚpopulate_content_typeÚkÚvÚhÚkeysr(   Úcontent_lengthÚcontent_types               r.   r)   ÚResponse.init_headers7   sW  € Ø‰?Ø57ˆKØ&*Ð#Ø$(Ñ!àZa×ZgÑZgÔZiÔjÒZiÑRVÐRS˜AŸG™G›I×,Ñ,¨YÓ7¸¿¹À)Ó9LÓMÑZiˆKÑjÙ"-Ó.¢+˜Q�a”D¡+ˆDÐ.Ø&7¸tÑ&CÐ#Ø$3¸4Ñ$?Ð!ä�t˜V TÓ*ˆàÑÞ'Ø×%Ñ%¨Ó+¨t×/?Ñ/?À:Ó/Mä ¤ T£›^ˆNØ×ÑÐ 1°>×3HÑ3HÈÓ3SÐTÔUà—‘ˆØÑ#Ö(=Ø×&Ñ& w×/Ñ/°JÀl×FXÑFXÓFZÓ4ZØ ¨t¯|©|Ñ ;Ñ;�Ø×Ñ °×1DÑ1DÀYÓ1OÐPÔQà&Õùó) kùÚ.s   ž<E#Á!E)c                ól   • [        U S5      (       d  [        U R                  S9U l        U R                  $ )NÚ_headers©Úraw)Úhasattrr   rE   rP   )r+   s    r.   r-   ÚResponse.headersS   s+   € ä�t˜Z×(Ñ(Ü*¨t×/?Ñ/?Ñ@ˆDŒMØ�}‰}Ðr1   c                óP  • [         R                  R                  5       nX+U'   Ub  X;U   S'   Ub,  [        U[        5      (       a  [        USS9X±   S'   OXKU   S'   Ub  X[U   S'   Ub  XkU   S'   U(       a  SX±   S'   U(       a  SX±   S'   U	b"  U	R                  5       S	;   d   S
5       eX›U   S'   U
(       a&  [        R                  S:  a  [        S5      eSX±   S'   UR                  SS9R                  5       nU R                  R                  SUR                  S5      45        g )Nzmax-ageT©ÚusegmtÚexpiresÚpathÚdomainÚsecureÚhttponly)ÚstrictÚlaxÚnonez1samesite must be either 'strict', 'lax' or 'none'Úsamesite)é   é   z@Partitioned cookies are only supported in Python 3.14 and above.ÚpartitionedÚ )Úheaders
   set-cookier;   )ÚhttpÚcookiesÚSimpleCookier3   r
   r   r?   ÚsysÚversion_infoÚ
ValueErrorÚoutputÚstriprE   rC   r6   )r+   ÚkeyÚvalueÚmax_agerX   rY   rZ   r[   r\   r`   rc   ÚcookieÚ
cookie_vals                r.   Ú
set_cookieÚResponse.set_cookieY   sH  € ô 04¯|©|×/HÑ/HÓ/JˆØˆs‰ØÑØ%,�3‰K˜	Ñ"ØÑÜ˜'¤8×,Ñ,Ü)8¸ÈÑ)N�‘˜IÒ&à)0�s‘˜IÑ&ØÑØ"&�3‰K˜ÑØÑØ$*�3‰K˜Ñ!ÞØ$(ˆF‰K˜Ñ!ÞØ&*ˆF‰K˜
Ñ#ØÑØ—>‘>Ó#ð (ó ð Cð Có	Cð ð
 '/�3‰K˜
Ñ#ÞÜ×Ñ 'Ó)Ü Ð!cÓdÐdØ)-ˆF‰K˜Ñ&à—]‘]¨"�]Ð-×3Ñ3Ó5ˆ
Ø×Ñ×Ñ °
×0AÑ0AÀ)Ó0LÐ MÕNr1   c                ó0   • U R                  USSUUUUUS9  g )Nr   )rp   rX   rY   rZ   r[   r\   r`   )rs   )r+   rn   rY   rZ   r[   r\   r`   s          r.   Údelete_cookieÚResponse.delete_cookie†   s-   € ð 	�‰ØØØØØØØØð 	ò 		
r1   c                ó   ^• SU4S jjnU$ )Nc              “  ó^   >#   • U S   nUS;   a  0 U ESSU-   0En T" U 5      I S h  v•N   g  N7f)NÚtype>   úhttp.response.bodyúhttp.response.startz
websocket.© )ÚmessageÚmessage_typeÚsends     €r.   ÚwrappedÚ5Response._wrap_websocket_denial_send.<locals>.wrapped›   s;   øé € Ø" 6™?ˆLØÐLÓLØJ˜WÐJ f¨l¸\Ñ.IÑJ�Ù�w“-×Óùs   ƒ"-¥+¦-)r~   r   ÚreturnÚNoner}   )r+   r€   r�   s    ` r.   Ú_wrap_websocket_denial_sendÚ$Response._wrap_websocket_denial_sendš   s   ø€ ÷	 ð ˆr1   c              ƒ  ó"  #   • US   S:X  a  U R                  U5      nU" SU R                  U R                  S.5      I S h  v•N   U" SU R                  S.5      I S h  v•N   U R                  b  U R	                  5       I S h  v•N   g g  NH N- N
7f)Nrz   Ú	websocketr|   ©rz   Ústatusr-   r{   )rz   r(   )r…   r$   rE   r(   r&   )r+   ÚscopeÚreceiver€   s       r.   Ú__call__ÚResponse.__call__£   s‰   é € Ø�‰=˜KÓ'Ø×3Ñ3°DÓ9ˆDÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlÙÐ0¸$¿)¹)ÑDÓE×EÐEà�?‰?Ñ&Ø—/‘/Ó#×#Ñ#ð 'ñ 	mÙEñ $ùs5   ‚>BÁ B	ÁBÁBÁ$BÂBÂBÂBÂB)rP   r&   r(   r%   rE   r$   )Nr<   NNN©r,   r   r$   Úintr-   úMapping[str, str] | Noner%   ú
str | Noner&   úBackgroundTask | Nonerƒ   r„   )r,   r   rƒ   zbytes | memoryviewr#   )r-   r‘   rƒ   r„   )rƒ   r   )	rd   NNÚ/NFFr^   F)rn   rA   ro   rA   rp   z
int | NonerX   zdatetime | str | int | NonerY   r’   rZ   r’   r[   Úboolr\   r•   r`   ú'Literal['lax', 'strict', 'none'] | Nonerc   r•   rƒ   r„   )r”   NFFr^   )rn   rA   rY   rA   rZ   r’   r[   r•   r\   r•   r`   r–   rƒ   r„   )r€   r   rƒ   r   ©r‹   r   rŒ   r   r€   r   rƒ   r„   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r%   r7   r/   r'   r)   Úpropertyr-   rs   rv   r…   r�   Ú__static_attributes__r}   r1   r.   r   r      sy  † Ø€JØ€Gð ØØ,0Ø!%Ø,0ð#àð#ð ð#ð *ð	#ð
 ð#ð *ð#ð 
õ#ô,ö'ð8 óó ðð Ø"Ø/3ØØ!ØØØ<AØ!ð+Oàð+Oð ð+Oð ð	+Oð
 -ð+Oð ð+Oð ð+Oð ð+Oð ð+Oð :ð+Oð ð+Oð 
õ+Oð` Ø!ØØØ<Að
àð
ð ð
ð ð	
ð
 ð
ð ð
ð :ð
ð 
õ
ô(÷$r1   r   c                  ó   • \ rS rSrSrSrg)ÚHTMLResponseé­   z	text/htmlr}   N©r˜   r™   rš   r›   r%   r�   r}   r1   r.   rŸ   rŸ   ­   s   † ØƒJr1   rŸ   c                  ó   • \ rS rSrSrSrg)ÚPlainTextResponseé±   ú
text/plainr}   Nr¡   r}   r1   r.   r£   r£   ±   s   † ØƒJr1   r£   c                  ó\   ^ • \ rS rSrSr    S           SU 4S jjjrSS jrSrU =r$ )	ÚJSONResponseéµ   zapplication/jsonc                ó(   >• [         TU ]  XX4U5        g r#   )Úsuperr/   )r+   r,   r$   r-   r%   r&   Ú	__class__s         €r.   r/   ÚJSONResponse.__init__¸   s   ø€ ô 	‰Ñ˜¨wÀJÕOr1   c                óP   • [         R                  " USSS SS9R                  S5      $ )NF)Ú,Ú:)Úensure_asciiÚ	allow_nanÚindentÚ
separatorsr!   )ÚjsonÚdumpsr6   r8   s     r.   r'   ÚJSONResponse.renderÂ   s-   € Ü�zŠzØØØØØ!ñ
÷ ‰&�‹/ð	r1   r}   ©r<   NNNr�   )r,   r   rƒ   r4   )	r˜   r™   rš   r›   r%   r/   r'   r�   Ú__classcell__©r«   s   @r.   r§   r§   µ   sl   ø† Ø#€Jð
 Ø,0Ø!%Ø,0ðPàðPð ðPð *ð	Pð
 ðPð *ðPð 
÷Pð P÷ò r1   r§   c                  óH   ^ • \ rS rSr   S         SU 4S jjjrSrU =r$ )ÚRedirectResponser=   c                ód   >• [         TU ]  SX#US9  [        [        U5      SS9U R                  S'   g )Nr1   )r,   r$   r-   r&   z:/%#?=@[]!$&'()*+,;)ÚsafeÚlocation)rª   r/   r   rA   r-   )r+   Úurlr$   r-   r&   r«   s        €r.   r/   ÚRedirectResponse.__init__Í   s4   ø€ ô 	‰Ñ °+Ð[eÐÑfÜ#(¬¨S«Ð8MÑ#Nˆ�‰�ZÒ r1   r}   )i3  NN)
r¿   z	str | URLr$   r�   r-   r‘   r&   r“   rƒ   r„   )r˜   r™   rš   r›   r/   r�   r¸   r¹   s   @r.   r»   r»   Ì   sO   ø† ð Ø,0Ø,0ðOàðOð ðOð *ð	Oð
 *ðOð 
÷Oö Or1   r»   c                  ój   • \ rS rSr% S\S'       S
           SS jjrSS jrSS jrSS jrS	r	g)ÚStreamingResponseéÞ   ÚAsyncContentStreamÚbody_iteratorNc                óÂ   • [        U[        5      (       a  Xl        O[        U5      U l        X l        Uc  U R
                  OUU l        XPl        U R                  U5        g r#   )r3   r   rÅ   r   r$   r%   r&   r)   r*   s         r.   r/   ÚStreamingResponse.__init__á   sO   € ô �gœ}×-Ñ-Ø!(Õä!6°wÓ!?ˆDÔØ&ÔØ-7Ñ-?˜$Ÿ/š/ÀZˆŒØ$ŒØ×Ñ˜'Õ"r1   c              ƒ  óF   #   •  U" 5       I S h  v•N nUS   S:X  a  g M   N7f)Nrz   zhttp.disconnectr}   )r+   rŒ   r~   s      r.   Úlisten_for_disconnectÚ'StreamingResponse.listen_for_disconnectò   s)   é € ØÙ#›I—oˆGØ�v‰Ð"3Ó3Øñ Ù%ùs   ‚!Ž�!c              ƒ  óX  #   • U" SU R                   U R                  S.5      I S h  v•N   U R                    S h  v•N n[        U[        [
        -  5      (       d  UR                  U R                  5      nU" SUSS.5      I S h  v•N   MV   Nf NS N

 U" SSSS.5      I S h  v•N    g 7f)Nr|   r‰   r{   T©rz   r(   Ú	more_bodyr1   F)r$   rE   rÅ   r3   r4   r5   r6   r7   )r+   r€   Úchunks      r.   Ústream_responseÚ!StreamingResponse.stream_responseø   s£   é € ÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlØ×-Ò-÷ 	Y�%Ü˜e¤U¬ZÑ%7×8Ñ8ØŸ™ T§\¡\Ó2�ÙÐ 4¸eÐRVÑWÓX×XÒXñ	 	mñ	Yñ Yð .ñ
 Ð0¸#ÈEÑRÓS×SÒSùsN   ‚$B*¦B§B*·B»B¼B¿AB*ÂBÂB*ÂBÂB*ÂB*Â#B&Â$B*c           	   ƒ  óª  ^#   • US   S:X  aP  U R                  U5      nU R                  U5      I S h  v•N   U R                  b  U R                  5       I S h  v•N   g [        [	        [
        UR                  S0 5      R                  SS5      R                  S5      5      5      nUS:¼  a   U R                  U5      I S h  v•N   O“[        5          [        R                  " 5        IS h  v•N mS	U4S jjnTR                  U[        U R                  U5      5        U" [        U R                  U5      5      I S h  v•N   S S S 5      IS h  v•N   S S S 5        U R                  b  U R                  5       I S h  v•N   g g  GNN GN, NÅ! [         a    [        5       ef = f Nµ Ne NW! , IS h  v•N  (       d  f       Nl= f! , (       d  f       Nu= f NW7f)
Nrz   rˆ   ÚasgiÚspec_versionz2.0Ú.)é   é   c              “  ód   >#   • U " 5       I S h  v•N   TR                   R                  5         g  N7fr#   )Úcancel_scopeÚcancel)ÚfuncÚ
task_groups    €r.   ÚwrapÚ(StreamingResponse.__call__.<locals>.wrap  s&   øé € Ù"›fŸ˜Ø"×/Ñ/×6Ñ6Õ8ñ %ùs   ƒ0Ž.� 0)rÚ   zCallable[[], Awaitable[None]]rƒ   r„   )r…   rÏ   r&   ÚtupleÚmapr�   ÚgetÚsplitÚOSErrorr   r   ÚanyioÚcreate_task_groupÚ
start_soonr   rÉ   )r+   r‹   rŒ   r€   rÓ   rÜ   rÛ   s         @r.   r�   ÚStreamingResponse.__call__  s}  øé € Ø�‰=˜KÓ'Ø×3Ñ3°DÓ9ˆDØ×&Ñ& tÓ,×,Ð,Ø�‰Ñ*Ø—o‘oÓ'×'Ð'ØäœS¤ e§i¡i°¸Ó&;×&?Ñ&?ÀÐPUÓ&V×&\Ñ&\Ð]`Ó&aÓbÓcˆà˜6Ó!ð)Ø×*Ñ*¨4Ó0×0Ñ0ô $Õ%Ü ×2Ò2×4Ô4¸
÷9ð ×)Ñ)¨$´¸×8LÑ8LÈdÓ0SÔTÙœw t×'AÑ'AÀ7ÓKÓL×LÐL÷ 5×4÷ &ð �?‰?Ñ&Ø—/‘/Ó#×#Ñ#ð 'ò/ -â'ñ 1øÜó )Ü&Ó(Ð(ð)úñ 5ñ M÷ 5×4×4Ð4ú÷ &Õ%úñ $ùsË   ƒ/G²F ³$GÁFÁAGÂ,F Ã FÃF ÃGÃG Ã*F Ã+G Ã.AF&Ä<F"Ä=F&ÅG ÅF$ÅG Å(GÅ9GÅ:GÆGÆF ÆFÆGÆ G Æ"F&Æ$G Æ&F=	Æ,F/Æ-F=	Æ9G Ç 
GÇ
G)r&   rÅ   r%   r$   r·   )r,   ÚContentStreamr$   r�   r-   r‘   r%   r’   r&   r“   rƒ   r„   )rŒ   r   rƒ   r„   )r€   r   rƒ   r„   r—   )
r˜   r™   rš   r›   Ú__annotations__r/   rÉ   rÏ   r�   r�   r}   r1   r.   rÂ   rÂ   Þ   se   ‡ Ø%Ó%ð
 Ø,0Ø!%Ø,0ð#àð#ð ð#ð *ð	#ð
 ð#ð *ð#ð 
õ#ô"ôT÷$r1   rÂ   c                  ó"   • \ rS rSrSSS jjrSrg)ÚMalformedRangeHeaderi  c                ó   • Xl         g r#   ©r,   r8   s     r.   r/   ÚMalformedRangeHeader.__init__   s   € Ø�r1   rì   N)zMalformed range header.)r,   rA   rƒ   r„   ©r˜   r™   rš   r›   r/   r�   r}   r1   r.   rê   rê     s   † ÷ñ r1   rê   c                  ó   • \ rS rSrSS jrSrg)ÚRangeNotSatisfiablei$  c                ó   • Xl         g r#   ©Úmax_size)r+   ró   s     r.   r/   ÚRangeNotSatisfiable.__init__%  s   € Ø �r1   rò   N)ró   r�   rƒ   r„   rî   r}   r1   r.   rð   rð   $  s   † ÷!r1   rð   c                  ó  • \ rS rSrSr       S                 SS jjrSS jrSS jrSS jr            SS jr	          SS	 jr
SS
 jr\SS j5       r\SS j5       r          SS jrSrg)ÚFileResponsei)  i   Nc	                óä  • Xl         X l        X`l        Uc   [        U=(       d    U5      S   =(       d    SnX@l        XPl        U R                  U5        U R                  R                  SS5        U R                  bZ  [        U R                  5      n	X�R                  :w  a  U SU	 3n
OU SU R                   S3n
U R                  R                  SU
5        Xpl
        Ub  U R                  U5        g g )	Nr   r¥   zaccept-rangesr4   z; filename*=utf-8''z; filename="Ú"zcontent-disposition)rY   r$   Úfilenamer   r%   r&   r)   r-   Ú
setdefaultr   Ústat_resultÚset_stat_headers)r+   rY   r$   r-   r%   r&   rù   rû   Úcontent_disposition_typeÚcontent_disposition_filenameÚcontent_dispositions              r.   r/   ÚFileResponse.__init__,  så   € ð Œ	Ø&ÔØ ŒØÑÜ# H×$4°Ó5°aÑ8×H¸LˆJØ$ŒØ$ŒØ×Ñ˜'Ô"Ø�‰×Ñ °Ô9Ø�=‰=Ñ$Ü+0°·±Ó+?Ð(Ø+¯}©}Ó<Ø)AÐ(BÐBUÐVrÐUsÐ&tÑ#à)AÐ(BÀ,ÈtÏ}É}ÈoÐ]^Ð&_Ð#Ø�L‰L×#Ñ#Ð$9Ð;NÔOØ&ÔØÑ"Ø×!Ñ! +Õ.ð #r1   c                óÄ  • [        UR                  5      n[        UR                  SS9n[        UR                  5      S-   [        UR                  5      -   nS[        R
                  " UR                  5       SS9R                  5        S3nU R                  R                  SU5        U R                  R                  SU5        U R                  R                  S	U5        g )
NTrV   Ú-rø   F)Úusedforsecurityúcontent-lengthúlast-modifiedÚetag)
rA   Úst_sizer   Úst_mtimeÚhashlibÚmd5r6   Ú	hexdigestr-   rú   )r+   rû   rL   Úlast_modifiedÚ	etag_baser  s         r.   rü   ÚFileResponse.set_stat_headersK  s³   € Ü˜[×0Ñ0Ó1ˆÜ" ;×#7Ñ#7ÀÑEˆÜ˜×,Ñ,Ó-°Ñ3´c¸+×:MÑ:MÓ6NÑNˆ	Ø”7—;’;˜y×/Ñ/Ó1À5ÑI×SÑSÓUÐVÐVWÐXˆà�‰×ÑÐ 0°.ÔAØ�‰×Ñ °Ô?Ø�‰×Ñ ¨Õ-r1   c              ƒ  ó„  #   • US   nUS:H  =(       a    US   R                  5       S:H  nUS:H  =(       a    SUR                  S0 5      ;   nUS:X  a  U R                  U5      nU R                  c“   [        R
                  R                  [        R                  U R                  5      I S h  v•N nU R                  U5        UR                  n[        R                  " U5      (       d  [        SU R                   S	35      eOU R                  n[        US9n	U	R                  S5      n
U	R                  S5      nU
b  Ub1  U R!                  U5      (       d  U R#                  X5U5      I S h  v•N   O U R%                  X§R&                  5      n[3        U5      S:X  a/  US   u  nnU R5                  X?UUR&                  U5      I S h  v•N   O%U R7                  X<UR&                  U5      I S h  v•N   U R8                  b  U R9                  5       I S h  v•N   g g  GNk! [         a    [        SU R                   S
35      ef = f NÕ! [(         a.  n[+        UR,                  SS9" XU5      I S h  v•N  s S nA$ S nAf[.         a5  n[+        SSSUR0                   30S9nU" XU5      I S h  v•N  s S nA$ S nAff = f Nõ NÑ N®7f)Nrz   rf   ÚmethodÚHEADúhttp.response.pathsendÚ
extensionsrˆ   zFile at path z is not a file.z does not exist.)r‹   Úrangezif-rangei�  )r$   i   zContent-Rangezbytes */)r$   r-   é   r   )Úupperrà   r…   rû   rã   Ú	to_threadÚrun_syncÚosÚstatrY   rü   Úst_modeÚS_ISREGÚRuntimeErrorÚFileNotFoundErrorr   Ú_should_use_rangeÚ_handle_simpleÚ_parse_range_headerr  rê   r£   r,   rð   ró   rB   Ú_handle_single_rangeÚ_handle_multiple_rangesr&   )r+   r‹   rŒ   r€   Ú
scope_typeÚsend_header_onlyÚsend_pathsendrû   Úmoder-   Ú
http_rangeÚhttp_if_rangeÚrangesÚexcÚresponseÚstartÚends                    r.   r�   ÚFileResponse.__call__U  s’  é € Ø˜6‘]ˆ
Ø%¨Ñ/×U°E¸(±O×4IÑ4IÓ4KÈvÑ4UÐØ" fÑ,×hÐ1IÈUÏYÉYÐWcÐegÓMhÑ1hˆØ˜Ó$Ø×3Ñ3°DÓ9ˆDà×ÑÑ#ðSÜ$)§O¡O×$<Ñ$<¼R¿W¹WÀdÇiÁiÓ$P×P�Ø×%Ñ% kÔ2ð #×*Ñ*�Ü—|’| D×)Ñ)Ü&¨°t·y±y°kÀÐ'QÓRÐRð *ð ×*Ñ*ˆKä Ñ&ˆØ—[‘[ Ó)ˆ
ØŸ™ JÓ/ˆàÑ -Ñ";ÀD×DZÑDZÐ[h×DiÑDiØ×%Ñ% d¸mÓL×LÑLð<Ø×1Ñ1°*×>QÑ>QÓR�ô �6‹{˜aÓØ# A™Y‘
��sØ×/Ñ/°¸SÀ+×BUÑBUÐWgÓh×hÑhà×2Ñ2°4À×ATÑATÐVfÓg×gÐgà�?‰?Ñ&Ø—/‘/Ó#×#Ñ#ð 'òA Qøä$ó PÜ" ]°4·9±9°+Ð=MÐ#NÓOÐOðPúñ Møô (ó cÜ.¨s¯{©{ÈÒLÈUÐ]aÓb×bÐbÕbûÜ&ó <Ü,¸ÀÐZbÐcf×coÑcoÐbpÐXqÐFrÑs�Ù% e°dÓ;×;Ð;Õ;ûð<úñ iágñ $ùsÍ   ‚A-K Á0;H Â+HÂ,H ÃB)K Å*I Å+K Å1I Æ8K ÇJ:Ç%K Ç*J<Ç+$K ÈJ>ÈK ÈH È$H=È=K É
J7ÉI5É*I-É+I5É/J7É0K É5J7Ê%J2Ê'J*Ê(J2Ê,J7Ê-K Ê2J7Ê7K Ê<K Ê>K c              ƒ  ó„  #   • U" SU R                   U R                  S.5      I S h  v•N   U(       a  U" SSSS.5      I S h  v•N   g U(       a'  U" S[        U R                  5      S.5      I S h  v•N   g [        R
                  " U R                  S	S
9I S h  v•N  IS h  v•N nSnU(       aW  UR                  U R                  5      I S h  v•N n[        U5      U R                  :H  nU" SXeS.5      I S h  v•N   U(       a  MW  S S S 5      IS h  v•N   g  Nï NÖ Nª N„ N} NS N* N! , IS h  v•N  (       d  f       g = f7f)Nr|   r‰   r{   r1   FrÌ   r  )rz   rY   Úrb©r'  T)	r$   rE   rA   rY   rã   Ú	open_fileÚreadÚ
chunk_sizerB   )r+   r€   r%  r&  ÚfilerÍ   rÎ   s          r.   r   ÚFileResponse._handle_simple�  sú   é € ÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlÞÙÐ 4¸cÐPUÑVÓW×WÑWÞÙÐ 8Ä#ÀdÇiÁiÃ.ÑQÓR×RÑRä"Ÿ_š_¨T¯Y©Y¸TÑB×B×BÐBÀdØ �	ÞØ"&§)¡)¨D¯O©OÓ"<×<�EÜ # E£
¨d¯o©oÑ =�IÙÐ(<ÀeÑdÓe×eÐe÷  �i÷ C×BÐBñ 	máWáRãBñ =áe÷ C×B×BÐBüs±   ‚$E ¦D§E ÁDÁ-E Á/DÁ0'E ÂDÂE Â DÂ!E Â$(D&ÃD Ã*D&Ã7D"Ã8D&ÄE ÄD$ÄE ÄE ÄE ÄE ÄE Ä D&Ä"D&Ä$E Ä&D=Ä,D/Ä-D=Ä9E c              ƒ  ó
  #   • [        [        U R                  5      S9nSU SUS-
   SU 3US'   [        X2-
  5      US'   U" SS	UR                  S
.5      I S h  v•N   U(       a  U" SSSS.5      I S h  v•N   g [
        R                  " U R                  SS9I S h  v•N  IS h  v•N nUR                  U5      I S h  v•N   SnU(       a|  UR                  [        U R                  X2-
  5      5      I S h  v•N n	U[        U	5      -  n[        U	5      U R                  :H  =(       a    X#:  nU" SX˜S.5      I S h  v•N   U(       a  M|  S S S 5      IS h  v•N   g  Nÿ Næ NÀ N¹ N¢ Nl N* N! , IS h  v•N  (       d  f       g = f7f)NrQ   zbytes r  r  r”   zcontent-ranger  r|   éÎ   r‰   r{   r1   FrÌ   r1  r2  T)r   ÚlistrE   rA   rR   rã   r3  rY   Úseekr4  Úminr5  rB   )
r+   r€   r-  r.  Ú	file_sizer%  r-   r6  rÍ   rÎ   s
             r.   r"  Ú!FileResponse._handle_single_range�  sP  é € ô !¤T¨$×*:Ñ*:Ó%;Ñ<ˆØ%+¨E¨7°!°C¸!±G°9¸A¸i¸[Ð#Iˆ�Ñ Ü$'¨©Ó$4ˆÐ Ñ!ÙÐ1¸SÈWÏ[É[ÑYÓZ×ZÐZÞÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_š_¨T¯Y©Y¸TÑB×B×BÐBÀdØ—i‘i Ó&×&Ð&Ø �	ÞØ"&§)¡)¬C°·±ÀÁÓ,MÓ"N×N�EØœS ›ZÑ'�EÜ # E£
¨d¯o©oÑ =× MÀ%Á+�IÙÐ(<ÀeÑdÓe×eÐe÷	  �i÷ C×BÐBñ	 	[áWãBÙ&ñ Oñ f÷ C×B×BÐBüsµ   ‚AFÁEÁFÁ4EÁ5'FÂEÂFÂ%EÂ&FÂ)E)Â>E!Â?7E)Ã6E#Ã7AE)Ä:E%Ä;E)ÅFÅE'ÅFÅFÅFÅFÅ!E)Å#E)Å%E)Å'FÅ)F Å/E2Å0F Å<Fc           	   ƒ  óÌ  #   • [        S5      nU R                  X%X0R                  S   5      u  pg[        [	        U R
                  5      S9nSU 3US'   [        U5      US'   U" SSUR                  S.5      I S h  v•N   U(       a  U" S	S
SS.5      I S h  v•N   g [        R                  " U R                  SS9I S h  v•N  IS h  v•N n	U H©  u  p«U" S	U" X«5      SS.5      I S h  v•N   U	R                  U
5      I S h  v•N   X«:  aX  U	R                  [        U R                  Xº-
  5      5      I S h  v•N nU
[        U5      -  n
U" S	USS.5      I S h  v•N   X«:  a  MX  U" S	SSS.5      I S h  v•N   M«     U" S	SU S3R!                  S5      SS.5      I S h  v•N   S S S 5      IS h  v•N   g  GN8 GN  Nú Nó NÔ N½ N‹ Nk NR N) N! , IS h  v•N  (       d  f       g = f7f)Né   zcontent-typerQ   zmultipart/byteranges; boundary=r  r|   r9  r‰   r{   r1   FrÌ   r1  r2  Ts   
ú--r;   )r   Úgenerate_multipartr-   r   r:  rE   rA   rR   rã   r3  rY   r;  r4  r<  r5  rB   r6   )r+   r€   r*  r=  r%  ÚboundaryrL   Úheader_generatorr-   r6  r-  r.  rÎ   s                r.   r#  Ú$FileResponse._handle_multiple_ranges¢  sÏ  é € ô ˜R“=ˆØ+/×+BÑ+BØ˜i¯©°nÑ)Eó,
Ñ(ˆô !¤T¨$×*:Ñ*:Ó%;Ñ<ˆØ$CÀHÀ:Ð"Nˆ�ÑÜ$'¨Ó$7ˆÐ Ñ!ÙÐ1¸SÈWÏ[É[ÑYÓZ×ZÐZÞÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_š_¨T¯Y©Y¸TÑB×B×BÐBÀdÛ"(‘J�EÙÐ(<ÑFVÐW\ÓFbÐquÑvÓw×wÐwØŸ)™) EÓ*×*Ð*Ø›+Ø&*§i¡i´°D·O±OÀSÁ[Ó0QÓ&R× R˜Ø¤ U£Ñ+˜Ù"Ð,@È%Ð^bÑ#cÓd×dÐdð  �+ñ Ð(<ÀgÐ\`ÑaÓb×bÒbñ #)ñ à 4Ø"$ X J¨bÐ 1× 8Ñ 8¸Ó CØ%*ñó÷ ð ÷ C×BÐBò	 	[âWãBáwÙ*á RádÙbñ÷ C×B×BÐBüsð   ‚A8G$Á:F2Á;G$ÂF5Â'G$Â=F8Â>G$ÃF:ÃG$Ã
G
Ã'F<Ã(G
Ä F>Ä3G
Ä4G Ä5!G
ÅGÅ	G
Å"G
Å1GÅ2*G
ÆGÆG
Æ!G$Æ,GÆ-G$Æ5G$Æ8G$Æ:G$Æ<G
Æ>G
Ç G
ÇG
ÇG
ÇG
ÇG$Ç
G!ÇGÇG!ÇG$c                óT   • XR                   S   :H  =(       d    XR                   S   :H  $ )Nr  r  )r-   )r+   r)  s     r.   r  ÚFileResponse._should_use_rangeÆ  s(   € Ø§¡¨_Ñ =Ñ=×fÀ×R^ÑR^Ð_eÑRfÑAfÐfr1   c                ót  ^• / n UR                  SS5      u  pEUR                  5       R	                  5       nUS:w  a  [        S5      eU R                  UT5      n[        U5      S:X  a  [        S5      e[        U4S jU 5       5      (       a  [        T5      e[        S U 5       5      (       a  [        S	5      e[        U5      S:X  a  U$ UR                  5         US   /nUSS   H5  u  pxUS
   u  pšXz::  a  U	[        X¨5      4US
'   M#  UR                  Xx45        M7     U$ ! [         a    [        5       ef = f)NÚ=r  r4   zOnly support bytes ranger   z%Range header: range must be requestedc              3  ó\   >#   • U  H!  u  pS Us=:*  =(       a    T:  Os  (       + v •  M#     g7f)r   Nr}   )Ú.0r-  Ú_r=  s      €r.   Ú	<genexpr>Ú3FileResponse._parse_range_header.<locals>.<genexpr>Û  s&   øé € ÐCºF±°�A˜×*Ó* Ô*×+Ñ+ºFùs   ƒ),c              3  ó.   #   • U  H  u  pX:„  v •  M     g 7fr#   r}   )rK  r-  r.  s      r.   rM  rN  Þ  s   é € Ð4ªV™z˜uˆuŽ{ªVùs   ‚z)Range header: start must be less than endéÿÿÿÿ)rá   rk   rê   rm   r?   Ú_parse_rangesrB   Úanyrð   ÚsortÚmaxrC   )Úclsr(  r=  r*  ÚunitsÚrange_Úresultr-  r.  Ú
last_startÚlast_ends     `        r.   r!  Ú FileResponse._parse_range_headerÉ  s<  ø€ à(*ˆð	)Ø&×,Ñ,¨S°!Ó4‰MˆEð —‘“×#Ñ#Ó%ˆà�GÓÜ&Ð'AÓBÐBà×"Ñ" 6¨9Ó5ˆäˆv‹;˜!ÓÜ&Ð'NÓOÐOäÔC¹FÓC×CÑCÜ% iÓ0Ð0äÑ4©VÓ4×4Ñ4Ü&Ð'RÓSÐSäˆv‹;˜!ÓØˆMð 	�‰ŒØ)/°©¨ˆØ   ›*‰JˆEØ#)¨"¡:Ñ ˆJØÓ Ø(¬#¨hÓ*<Ð=��r“
à—‘˜u˜lÖ+ñ %ð ˆøôA ó 	)Ü&Ó(Ð(ð	)ús   …D" Ä"D7c                óÒ  • / nUR                  S5       H¾  nUR                  5       nU(       a  US:X  a  M"  SU;  a  M*  UR                  SS5      u  pVUR                  5       nUR                  5       n U(       a  [        U5      OU[        U5      -
  nU(       a$  U(       a  [        U5      U:  a  [        U5      S-   OUnUR                  Xx45        MÀ     U$ ! [         a     MÑ  f = f)Nr®   r  r  )rá   rm   r�   rC   rk   )	rU  rW  r=  r*  ÚpartÚ	start_strÚend_strr-  r.  s	            r.   rQ  ÚFileResponse._parse_rangesð  sÎ   € à(*ˆà—L‘L Ö%ˆDØ—:‘:“<ˆDö ˜4 3›;Ùð ˜$‹Ùà!%§¡¨C°Ó!3ÑˆIØ!Ÿ™Ó)ˆIØ—m‘m“oˆGðÞ*3œ˜Iœ¸ÄSÈÃ\Ñ9Q�Þ*3¾ÄCÈÃLÐS\ÓD\”c˜'“l QÒ&Ðbk�Ø—‘˜u˜lÖ+ñ% &ð. ˆøô	 ó âðús   Á3ACÃ
C&Ã%C&c                ó¶   ^^^^• [        T5      nSU-   [        T5      -   [        [        T5      5      -   m[        U4S jU 5       5      SU-   -   nUUUU4S j4$ )aW  
Multipart response headers generator.

```
--{boundary}\r\n
Content-Type: {content_type}\r\n
Content-Range: bytes {start}-{end-1}/{max_size}\r\n
\r\n
..........content...........\r\n
--{boundary}\r\n
Content-Type: {content_type}\r\n
Content-Range: bytes {start}-{end-1}/{max_size}\r\n
\r\n
..........content...........\r\n
--{boundary}--
```
é1   c              3  ó�   >#   • U  H;  u  p[        [        U5      5      [        [        US -
  5      5      -   T-   X!-
  -   v •  M=     g7f)r  N)rB   rA   )rK  r-  r.  Ústatic_header_part_lens      €r.   rM  Ú2FileResponse.generate_multipart.<locals>.<genexpr>'  sF   øé € ð 
ò %‘
�ô ”�U“‹_œs¤3 s¨Q¡w£<Ó0Ñ0Ð3IÑIØ‰{öâ$ùs   ƒAArÖ   c                óL   >• ST ST SU  SUS-
   ST S3R                  S5      $ )	NrA  z
Content-Type: z
Content-Range: bytes r  r  r”   z

r;   )r6   )r-  r.  rC  rM   ró   s     €€€r.   Ú<lambda>Ú1FileResponse.generate_multipart.<locals>.<lambda>0  sL   ø€ ðØ€*ð Øˆnð Ø�W˜A˜c A™g˜Y a¨ zð 2ð÷ ‰f�YÓð  r1   )rB   rA   Úsum)r+   r*  rC  ró   rM   Úboundary_lenrL   rd  s     ```  @r.   rB  ÚFileResponse.generate_multipart  sn   û€ ô0 ˜8“}ˆØ!# lÑ!2´S¸Ó5FÑ!FÌÌSÐQYË]ÓI[Ñ![ÐÜô 
ñ %ó
ó 
ð
 �Ññ
ˆð ö ð

ð 
	
r1   )r&   rù   r%   rY   rû   r$   )r<   NNNNNÚ
attachment)rY   zstr | os.PathLike[str]r$   r�   r-   r‘   r%   r’   r&   r“   rù   r’   rû   zos.stat_result | Nonerý   rA   rƒ   r„   )rû   zos.stat_resultrƒ   r„   r—   )r€   r   r%  r•   r&  r•   rƒ   r„   )r€   r   r-  r�   r.  r�   r=  r�   r%  r•   rƒ   r„   )
r€   r   r*  úlist[tuple[int, int]]r=  r�   r%  r•   rƒ   r„   )r)  rA   rƒ   r•   )r(  rA   r=  r�   rƒ   rm  )rW  rA   r=  r�   rƒ   rm  )
r*  zSequence[tuple[int, int]]rC  rA   ró   r�   rM   rA   rƒ   z'tuple[int, Callable[[int, int], bytes]])r˜   r™   rš   r›   r5  r/   rü   r�   r   r"  r#  r  Úclassmethodr!  rQ  rB  r�   r}   r1   r.   rö   rö   )  sb  † Ø€Jð
 Ø,0Ø!%Ø,0Ø#Ø-1Ø(4ð/à$ð/ð ð/ð *ð	/ð
 ð/ð *ð/ð ð/ð +ð/ð #&ð/ð 
õ/ô>.ô*$ôXfðfØðfØ!$ðfØ+.ðfØ;>ðfØRVðfà	ôfð&"àð"ð &ð"ð ð	"ð
 ð"ð 
ô"ôHgð ó$ó ð$ðL óó ðð8+
à)ð+
ð ð+
ð ð	+
ð
 ð+
ð 
1÷+
r1   rö   )CÚ
__future__r   r	  Úhttp.cookiesrf   r´   r  r  ri   Úcollections.abcr   r   r   r   r   r	   r
   Úemail.utilsr   r   Ú	functoolsr   Ú	mimetypesr   Úsecretsr   Útypingr   r   Úurllib.parser   rã   Úanyio.to_threadÚstarlette._utilsr   Ústarlette.backgroundr   Ústarlette.concurrencyr   Ústarlette.datastructuresr   r   r   Ústarlette.requestsr   Ústarlette.typesr   r   r   r   r   rŸ   r£   r§   r»   rA   r4   r5   ÚContentÚSyncContentStreamrÄ   rç   rÂ   Ú	Exceptionrê   rð   rö   r}   r1   r.   Ú<module>r‚     sö   ðÝ "ã Û Û Û 	Û Û 
ß [× [Ý ß 3Ý Ý  Ý ß Ý ã Û å /Ý /Ý 7ß AÑ AÝ /ß 9Ó 9÷M$ñ M$ô`�8ô ô˜ô ô�8ô ô.	O�xô 	Oð �‰+˜
Ñ
"€Ø˜WÑ%Ð Ø" 7Ñ+Ð Ø"Ð%6Ñ6€ô>$˜ô >$ôB˜9ô ô
!˜)ô !ô
O
�8õ O
r1   