ó
    °"³j“G  ã            
      óž  • S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  Sr	Sr
Sr\R                  " S	5      rS
R                  \" SS5       V s/ s H  o S;  d  M
  \" U 5      PM     sn 5      rS
R                  \" SS5       V s/ s H  o S;  d  M
  \" U 5      PM     sn 5      rS
R                  \" SS5       V s/ s H  o S;  d  M
  \" U 5      PM     sn 5      rS
R                  \" SS5       V s/ s H  n U S;  d  M  \" U 5      PM     sn 5      rS
R                  \" SS5       V s/ s H  n U S;  d  M  \" U 5      PM     sn 5      rS
R                  \" SS5       V s/ s H  n U S;  d  M  \" U 5      PM     sn 5      r\R                  " SR/                  SSSSSS95      r\R                  " SR/                  SSSS95      r\R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      S.r\R                  " S5      r\R                  " S 5      r " S! S"\R:                  5      rS+S,S# jjrS-S$ jr S.S% jr!S/S& jr"S0S' jr#S1S( jr$S2S) jr%S2S* jr&gs  sn f s  sn f s  sn f s  sn f s  sn f s  sn f )3aï  
An implementation of `urlparse` that provides URL validation and normalization
as described by RFC3986.

We rely on this implementation rather than the one in Python's stdlib, because:

* It provides more complete URL validation.
* It properly differentiates between an empty querystring and an absent querystring,
  to distinguish URLs with a trailing '?'.
* It handles scheme, hostname, port, and path normalization.
* It supports IDNA hostnames, normalizing them to their encoded form.
* The API supports passing individual components, as well as the complete URL string.

Previously we relied on the excellent `rfc3986` package to handle URL parsing and
validation, but this module provides a simpler alternative, with less indirection
required.
é    )ÚannotationsNé   )Ú
InvalidURLi   zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~z!$&'()*+,;=z%[A-Fa-f0-9]{2}Ú é    é   )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   r   r   r   r   r   r   r   r   r   r   r   r   r   z‚(?:(?P<scheme>{scheme}):)?(?://(?P<authority>{authority}))?(?P<path>{path})(?:\?(?P<query>{query}))?(?:#(?P<fragment>{fragment}))?z([a-zA-Z][a-zA-Z0-9+.-]*)?z[^/?#]*z[^?#]*z[^#]*z.*©ÚschemeÚ	authorityÚpathÚqueryÚfragmentzA(?:(?P<userinfo>{userinfo})@)?(?P<host>{host}):?(?P<port>{port})?z(\[.*\]|[^:@]*))ÚuserinfoÚhostÚportz[^@]*z(\[.*\]|[^:]*))r   r   r   r   r    r!   r"   r#   z ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$z^\[.*\]$c                  ó˜   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	\S
'   S	\S'   \SS j5       r\SS j5       rSS jrSS jr	Sr
g)ÚParseResulté’   Ústrr   r!   r"   ú
int | Noner#   r   ú
str | Noner   r    c                ó   • SR                  U R                  (       a  U R                   S3OSSU R                  ;   a  SU R                   S3OU R                  U R                  b  SU R                   3/5      $ S/5      $ )Nr   Ú@Ú:Ú[Ú])Újoinr!   r"   r#   ©Úselfs    ÚM/home/mande/repo/quber/.venv/lib/python3.13/site-packages/httpx2/_urlparse.pyr   ÚParseResult.authority›   sz   € à�w‰wà'+§}§}�4—=‘=�/ Ñ#¸"Ø$'¨4¯9©9Ó$4�!�D—I‘I�;˜aÑ ¸$¿)¹)Ø#'§9¡9Ñ#8�!�D—I‘I�;�ðó
ð 	
ð ?Aðó
ð 	
ó    c                ó¾   • SR                  SU R                  ;   a  SU R                   S3OU R                  U R                  b  SU R                   3/5      $ S/5      $ )Nr   r,   r-   r.   )r/   r"   r#   r0   s    r2   ÚnetlocÚParseResult.netloc¥   sd   € à�w‰wà$'¨4¯9©9Ó$4�!�D—I‘I�;˜aÑ ¸$¿)¹)Ø#'§9¡9Ñ#8�!�D—I‘I�;�ðó
ð 	
ð ?Aðó
ð 	
r4   c                óÀ   • U(       d  U $ U R                   U R                  U R                  U R                  U R                  S.nUR                  U5        [        S0 UD6$ )Nr   ©r   )r   r   r   r   r    ÚupdateÚurlparse)r1   ÚkwargsÚdefaultss      r2   Ú	copy_withÚParseResult.copy_with®   sR   € ÞØˆKð —k‘kØŸ™Ø—I‘IØ—Z‘ZØŸ™ñ
ˆð 	�‰˜ÔÜÑ'˜hÑ'Ð'r4   c                ó,  • U R                   nSR                  U R                  (       a  U R                   S3OSU(       a  SU 3OSU R                  U R                  b  SU R                   3OSU R
                  b  SU R
                   3/5      $ S/5      $ )Nr   r,   ú//Ú?Ú#)r   r/   r   r   r   r    )r1   r   s     r2   Ú__str__ÚParseResult.__str__¼   s’   € Ø—N‘Nˆ	Ø�w‰wà%)§[§[�4—;‘;�-˜qÑ!°bÞ$-�"�Y�KÑ °2Ø—	‘	Ø$(§J¡JÑ$:�!�D—J‘J�<Ñ ÀØ'+§}¡}Ñ'@�!�D—M‘M�?Ð#ðó
ð 	
ð GIðó
ð 	
r4   © N)Úreturnr'   )r<   r)   rG   r%   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Úpropertyr   r6   r>   rD   Ú__static_attributes__rF   r4   r2   r%   r%   ’   sX   ‡ ØƒKØƒMØ
ƒIØ
ÓØ
ƒIØÓØÓàó
ó ð
ð ó
ó ð
ô(÷

r4   r%   c           	     ó	  • [        U 5      [        :”  a  [        S5      e[        S U  5       5      (       a8  [	        S U  5       5      nU R                  U5      nSU< SU S3n[        U5      eSU;   a*  US   n[        U[        5      (       a  [        U5      OUUS'   SU;   a4  UR                  S5      =(       d    S	nUR                  S
5      u  US'   oqS'   SU;   d  SU;   aa  [        UR                  SS	5      =(       d    S	[        S9n[        UR                  SS	5      =(       d    S	[        S9n	U	(       a  U S
U	 3OUUS'   SU;   a@  UR                  S5      =(       d    S	n
U
R                  S5      u  US'   o±S'   U(       d  S US'   SU;   aU  UR                  S5      =(       d    S	nS
U;   a5  UR                  S5      (       a  UR!                  S5      (       d	  SU S3US'   UR#                  5        Hª  u  pÞUc  M
  [        U5      [        :”  a  [        SU S35      e[        S U 5       5      (       a;  [	        S U 5       5      nUR                  U5      nSU SU< SU S3n[        U5      e[$        U   R'                  U5      (       a  M�  [        SU S35      e   [(        R+                  U 5      nUc   eUR-                  5       nUR                  SUS   5      =(       d    S	nUR                  SUS   5      =(       d    S	nUR                  SUS   5      =(       d    S	nUR                  SUS   5      nUR                  S US    5      n[.        R+                  U5      nUc   eUR-                  5       nUR                  SUS   5      =(       d    S	nUR                  SUS   5      =(       d    S	nUR                  SUS   5      nUR1                  5       n[        U[2        S9n[5        U5      n[7        UU5      nUS	:g  nUS	:g  =(       d    US	:g  =(       d    US Ln[9        UUUS!9  U(       d  U(       a  [;        U5      n[        U[<        S9nUc  S O[        U[>        S9n Uc  S O[        U[@        S9n![C        UUUUUU U!5      $ )"NzURL too longc              3  óx   #   • U  H0  oR                  5       =(       a    UR                  5       (       + v •  M2     g 7f©N©ÚisasciiÚisprintable©Ú.0Úchars     r2   Ú	<genexpr>Úurlparse.<locals>.<genexpr>Ó   s(   é € Ð
EÂ¸�<‰<‹>×4 $×"2Ñ"2Ó"4Ô4Ô4Âùó   ‚8:c              3  ó€   #   • U  H4  oR                  5       (       d  M  UR                  5       (       a  M0  Uv •  M6     g 7frQ   rR   rU   s     r2   rX   rY   Ô   s%   é € ÐV¢S˜T¯L©L¯N“DÀ4×CSÑCS×CU—D‘D¢Sùó   ‚>ž>µ	>z.Invalid non-printable ASCII character in URL, z at position Ú.r#   r6   r   r,   r"   ÚusernameÚpassword©Úsafer!   Úraw_pathrB   r   r   r-   r.   zURL component 'z
' too longc              3  óx   #   • U  H0  oR                  5       =(       a    UR                  5       (       + v •  M2     g 7frQ   rR   rU   s     r2   rX   rY     s(   é € ÐOÊÀ—<‘<“>×<¨$×*:Ñ*:Ó*<Ô&<Ô<ÊùrZ   c              3  ó€   #   • U  H4  oR                  5       (       d  M  UR                  5       (       a  M0  Uv •  M6     g 7frQ   rR   rU   s     r2   rX   rY     s%   é € Ð`ªU T·l±l·n›DÈT×M]ÑM]×M_ŸD™DªUùr\   z-Invalid non-printable ASCII character in URL z component, zInvalid URL component 'Ú'r   r   r    )Ú
has_schemeÚhas_authority)"ÚlenÚMAX_URL_LENGTHr   ÚanyÚnextÚfindÚ
isinstanceÚintr'   ÚpopÚ	partitionÚquoteÚUSERNAME_SAFEÚPASSWORD_SAFEÚgetÚ
startswithÚendswithÚitemsÚCOMPONENT_REGEXÚ	fullmatchÚ	URL_REGEXÚmatchÚ	groupdictÚAUTHORITY_REGEXÚlowerÚUSERINFO_SAFEÚencode_hostÚnormalize_portÚvalidate_pathÚnormalize_pathÚ	PATH_SAFEÚ
QUERY_SAFEÚ	FRAG_SAFEr%   )"Úurlr<   rW   ÚidxÚerrorr#   r6   Ú_r^   r_   rb   Ú	separatorr"   ÚkeyÚvalueÚ	url_matchÚurl_dictr   r   r   r   ÚfragÚauthority_matchÚauthority_dictr!   Úparsed_schemeÚparsed_userinfoÚparsed_hostÚparsed_portrf   rg   Úparsed_pathÚparsed_queryÚparsed_frags"                                     r2   r;   r;   É   ss  € ô
 ˆ3ƒx”.Ó Ü˜Ó(Ð(ô Ñ
EÁÓ
E×EÑEÜÑV¡SÓVÓVˆØ�h‰h�t‹nˆØ@ÀÁÈÐVYÐUZÐZ[Ð\ˆÜ˜ÓÐð �ÓØ�f‰~ˆÜ&0°´s×&;Ñ&;œ˜TœÀˆˆv‰ð �6ÓØ—‘˜HÓ%×+¨ˆØ,2×,<Ñ,<¸SÓ,AÑ)ˆˆv‰˜ &™>ð �VÓ˜z¨VÓ3Ü˜Ÿ™ J°Ó3×9°rÄÑNˆÜ˜Ÿ™ J°Ó3×9°rÄÑNˆÞ9A ˜z¨¨8¨*Ñ5ÀxˆˆzÑð �VÓØ—:‘:˜jÓ)×/¨RˆØ5=×5GÑ5GÈÓ5LÑ2ˆˆv‰˜	¨'¡?ÞØ"ˆF�7‰Oð �ÓØ�z‰z˜&Ó!×' RˆØ�$‹; §¡°× 4Ñ 4¸¿¹Às×9KÑ9KØ    a˜[ˆF�6‰Nð
 —l‘l–n‰
ˆØÓÜ�5‹zœNÓ*Ü  ?°3°%°zÐ!BÓCÐCô ÑOÉÓO×OÑOÜÑ`©UÓ`Ó`�Ø—j‘j Ó&�ØGÈÀuÈLÐY]ÑX`Ð`mÐnqÐmrÐrsÐt�Ü  Ó'Ð'ô # 3Ñ'×1Ñ1°%×8Ó8Ü Ð#:¸3¸%¸qÐ!AÓBÐBñ %ô$ —‘ Ó$€IØÑ Ð Ð Ø×"Ñ"Ó$€Hð �Z‰Z˜ (¨8Ñ"4Ó5×;¸€FØ—
‘
˜;¨°Ñ(=Ó>×DÀ"€IØ�:‰:�f˜h vÑ.Ó/×5°2€DØ�J‰J�w ¨Ñ 1Ó2€EØ�:‰:�j (¨:Ñ"6Ó7€Dô &×+Ñ+¨IÓ6€OØÑ&Ð&Ð&Ø$×.Ñ.Ó0€Nð �z‰z˜* n°ZÑ&@ÓA×GÀR€HØ�:‰:�f˜n¨VÑ4Ó5×;¸€DØ�:‰:�f˜n¨VÑ4Ó5€Dð
  Ÿ™›€MÜ  ´Ñ>€OÜ" 4Ó(€KÜ,¨T°6Ó:€Kà "Ñ$€JØ# rÑ)×Y¨[¸BÑ->×YÀ+ÐUYÐBY€MÜ�$ :¸]ÒKÞ–]Ü˜dÓ#ˆä˜T¬	Ñ2€KØ',¡}™t¼%ÀÌJÑ:W€LØ&*¡l™d¼¸dÌÑ8S€Kô ØØØØØØØóð r4   c                ó¨  • U (       d  g[         R                  U 5      (       a   [        R                  " U 5        U $ [        R                  U 5      (       a   [        R                  " U SS 5        U SS $ U R                  5       (       a!  Sn[        U R                  5       [        U-   S9$  [        R                  " U R                  5       5      R                  S5      $ ! [        R                   a    [        SU < 35      ef = f! [        R                   a    [        SU < 35      ef = f! [        R                   a    [        S	U < 35      ef = f)
Nr   zInvalid IPv4 address: r   éÿÿÿÿzInvalid IPv6 address: z"`{}%|\r`   ÚasciizInvalid IDNA hostname: )ÚIPv4_STYLE_HOSTNAMEr{   Ú	ipaddressÚIPv4AddressÚAddressValueErrorr   ÚIPv6_STYLE_HOSTNAMEÚIPv6AddressrS   rq   r~   Ú
SUB_DELIMSÚidnaÚencodeÚdecodeÚ	IDNAError)r"   ÚWHATWG_SAFEs     r2   r€   r€   G  s:  € ÞØä	×	"Ñ	" 4×	(Ñ	(ð	@Ü×!Ò! $Ô'ð ˆä	×	"Ñ	" 4×	(Ñ	(ð	@Ü×!Ò! $ q¨ *Ô-ð �A�bˆzÐà	�‰�‰ð !ˆÜ�T—Z‘Z“\¬
°[Ñ(@ÑAÐAð=Ü�{Š{˜4Ÿ:™:›<Ó(×/Ñ/°Ó8Ð8øô= ×*Ñ*ó 	@ÜÐ5°d±XÐ>Ó?Ð?ð	@ûô ×*Ñ*ó 	@ÜÐ5°d±XÐ>Ó?Ð?ð	@ûô  �>‰>ó =ÜÐ2°4±(Ð;Ó<Ð<ð=ús#   ¤C ÁD Â,2D- Ã$DÄ$D*Ä-$Ec                ó¦   • U b  U S:X  a  g  [        U 5      nSSSSSS.R                  U5      nX#:X  a  g U$ ! [         a    [        SU < 35      ef = f)Nr   zInvalid port: é   éP   i»  )ÚftpÚhttpÚhttpsÚwsÚwss)rn   Ú
ValueErrorr   rt   )r#   r   Úport_as_intÚdefault_ports       r2   r�   r�   v  sp   € ð �|�t˜r“zØð4Ü˜$“iˆð
  r°C¸rÈ#ÑN×RÑRÐSYÓZ€LØÓ"ØØÐøô ó 4Ü˜>¨$©Ð2Ó3Ð3ð4ús	   Œ6 ¶Ac                ó  • U(       a(  U (       a!  U R                  S5      (       d  [        S5      eU(       dK  U(       dC  U R                  S5      (       a  [        S5      eU R                  S5      (       a  [        S5      eggg)zŸ
Path validation rules that depend on if the URL contains
a scheme or authority component.

See https://datatracker.ietf.org/doc/html/rfc3986.html#section-3.3
Ú/z7For absolute URLs, path must be empty or begin with '/'rA   z3Relative URLs cannot have a path starting with '//'r,   z2Relative URLs cannot have a path starting with ':'N)ru   r   )r   rf   rg   s      r2   r‚   r‚   �  sq   € ö ö ˜Ÿ™¨×,Ñ,ÜÐVÓWÐWæžmð �?‰?˜4× Ñ ÜÐRÓSÐSð �?‰?˜3×ÑÜÐQÓRÐRð  ð ,ˆ:r4   c                ó  • SU ;  a  U $ U R                  S5      nSU;  a  SU;  a  U $ / nU HF  nUS:X  a  M  US:X  a$  U(       a  US/:w  a  UR                  5         M1  M3  M5  UR                  U5        MH     SR                  U5      $ )zx
Drop "." and ".." segments from a URL path.

For example:

    normalize_path("/path/./to/somewhere/..") == "/path/to"
r]   rµ   z..r   )Úsplitro   Úappendr/   )r   Ú
componentsÚoutputÚ	components       r2   rƒ   rƒ   ¨  s‘   € ð �$ƒØˆà—‘˜C“€Jð �*Ó ¨ZÓ!7Øˆð €FÛˆ	Ø˜ÓÙØ˜$ÓÞ˜& R D›.Ø—
‘
–ñ )‰vð �M‰M˜)Ö$ñ  ð �8‰8�FÓÐr4   c                óv   • SR                  U R                  S5       Vs/ s H	  nSUS 3PM     sn5      $ s  snf )Nr   zutf-8Ú%Ú02X)r/   r¥   )ÚstringÚbytes     r2   ÚPERCENTrÁ   Ç  s6   € Ø�7‰7¨v¯}©}¸WÔ/EÓFÒ/E t�a˜˜S�z“NÑ/EÑFÓGÐGùÒFs   Ÿ6c                ó²   • [         U-   nU R                  U5      (       d  U $ SR                  U  Vs/ s H  o3U;   a  UO
[        U5      PM     sn5      $ s  snf )z)
Use percent-encoding to quote a string.
r   )ÚUNRESERVED_CHARACTERSÚrstripr/   rÁ   )r¿   ra   ÚNON_ESCAPED_CHARSrW   s       r2   Úpercent_encodedrÆ   Ë  sY   € ô .°Ñ4Ðð �=‰=Ð*×+Ñ+Øˆà�7‰7ÑU[Ó\ÒU[ÈTÐ$5Ó5‘D¼7À4»=ÒHÑU[Ñ\Ó]Ð]ùÒ\s   ±Ac                óŽ  • / nSn[         R                  " [        U 5       Hg  nUR                  5       UR	                  5       peUR                  S5      nXS:w  a  XU nUR                  [        X�S95        UR                  U5        UnMi     U[        U 5      :w  a  XS n	UR                  [        X‘S95        SR                  U5      $ )a’  
Use percent-encoding to quote a string, omitting existing '%xx' escape sequences.

See: https://www.rfc-editor.org/rfc/rfc3986#section-2.1

* `string`: The string to be percent-escaped.
* `safe`: A string containing characters that may be treated as safe, and do not
    need to be escaped. Unreserved characters are always treated as safe.
    See: https://www.rfc-editor.org/rfc/rfc3986#section-2.3
r   r`   Nr   )
ÚreÚfinditerÚPERCENT_ENCODED_REGEXÚstartÚendÚgroupr¸   rÆ   rh   r/   )
r¿   ra   ÚpartsÚcurrent_positionr{   Ústart_positionÚend_positionÚmatched_textÚleading_textÚtrailing_texts
             r2   rq   rq   Ø  s²   € ð €EØÐÜ—’Ô2°FÖ;ˆØ',§{¡{£}°e·i±i³k˜Ø—{‘{ 1“~ˆàÓ-Ø!°>ÐBˆLØ�L‰Lœ¨ÑAÔBð 	�‰�\Ô"Ø'Òñ <ð œ3˜v›;Ó&ØÐ0Ð1ˆØ�‰”_ ]Ñ>Ô?à�7‰7�5‹>Ðr4   r9   )r‡   r'   r<   r)   rG   r%   )r"   r'   rG   r'   )r#   zstr | int | Noner   r'   rG   r(   )r   r'   rf   Úboolrg   rÕ   rG   ÚNone)r   r'   rG   r'   )r¿   r'   rG   r'   )r¿   r'   ra   r'   rG   r'   )'Ú__doc__Ú
__future__r   rž   rÈ   Útypingr¤   Ú_exceptionsr   ri   rÃ   r£   ÚcompilerÊ   r/   ÚrangeÚchrr†   r…   r„   rr   rs   r   Úformatrz   r}   rx   r�   r¡   Ú
NamedTupler%   r;   r€   r�   r‚   rƒ   rÁ   rÆ   rq   )Úis   0r2   Ú<module>rá      s  ðñõ$ #ã Û 	Û ã å #à€ð ]Ð Ø€
àŸ
š
Ð#4Ó5Ð ð �G‰G¡U¨4°Ô%6ÓbÒ%6 ÐCaÑ:a“V‘S˜–VÑ%6ÑbÓc€	ð �W‰W¡e¨D°$Ô&7ÓcÒ&7 ÐDbÑ;b“f‘c˜!–fÑ&7ÑcÓd€
ð �G‰GÙ˜4 Ô&ÓmÒ&�Ð3lÑ*lƒV�Sˆ†VÑ&Ñmó€	ð —‘ñ �t˜TÔ"óâ"ˆAØðGñGó 	‰ˆAŽÙ"ñó	€ð —‘ñ �t˜TÔ"óâ"ˆAØðGñGó 	‰ˆAŽÙ"ñó	€ð —‘ñ �t˜TÔ"óâ"ˆAØðAñAó 	‰ˆAŽÙ"ñó	€ð" �JŠJð	*÷
 �fØ+ØØØØð ð ó€	ð& —*’*ØQ×YÑYØØ àð	 Zð ó€ð �jŠjÐ5Ó6Ø—’˜IÓ&Ø�JŠJ�xÓ Ø�ZŠZ˜Ó Ø—
’
˜4Ó Ø—
’
˜7Ó#Ø�JŠJÐ)Ó*Ø�JŠJ�tÓñ	€ð —j’jÐ!DÓEÐ Ø—j’j Ó-Ð ô4
�&×#Ñ#ô 4
ön{ô|,=ô^ô2Sô2ô>Hô
^õùò_ cùò dùò
 nùòùòùòsH   Á	J1ÁJ1Â	J6ÂJ6Â9	J;ÃJ;Ã/
K Ã=K Ä&
KÄ4KÅ
K
Å+K
