ó
    %Äãg„e  ã                  ó^  • S r SSKJr  SSKrSSKrSSKJr  SSKJrJ	r	J
r
  SSKJrJr  SSKJrJr  \(       a  SS	KJrJr  SS
KJrJr  \R,                  " S5      r\" S5      r\" S5      r\" / SQ5      r\" / SQ5      r\" SS/5      r\" / SQ5      r\" S/5      r \" S/5      r!\" \"" \\5      5      r#    S5S jr$S6S jr%S7S jr&S8S jr'S6S jr( " S S\
5      r)S9S 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r0    S:S# jr1      S<S$ jr2S=S% jr3    S:S& jr4    S:S' jr5S>S( jr6S?S) jr7    S5S* jr8    S5S+ jr9    S5S, jr:    S:S- jr;S:S. jr<    S5S/ jr= S@     SAS0 jjr>    S:S1 jr?    S:S2 jr@ " S3 S4\R‚                  \B\	4   5      rCg)BzW
h2/utilities
~~~~~~~~~~~~

Utility functions that do not belong in a separate module.
é    )ÚannotationsN)Ú
whitespace)ÚTYPE_CHECKINGÚAnyÚ
NamedTuple)ÚHeaderTupleÚNeverIndexedHeaderTupleé   )ÚFlowControlErrorÚProtocolError)Ú	GeneratorÚIterable)ÚHeaderÚHeaderWeaklyTypeds   [A-Z]ó   :ó   1)s
   connections   proxy-connections
   keep-alives   transfer-encodings   upgrade)ó   :methodó   :schemeó
   :authorityó   :pathó   :statusó	   :protocols   authorizations   proxy-authorization)r   r   r   r   r   r   r   c              #  óÖ   #   • U  H_  n[        US   [        5      (       d   eUS   [        ;   d  US   S;   a(  [        US   5      S:  a  [	        US   US   5      v •  M[  Uv •  Ma     g7f)a^  
Certain headers are at risk of being attacked during the header compression
phase, and so need to be kept out of header compression contexts. This
function automatically transforms certain specific headers into HPACK
never-indexed fields to ensure they don't get added to header compression
contexts.

This function currently implements two rules:

- 'authorization' and 'proxy-authorization' fields are automatically made
  never-indexed.
- Any 'cookie' header field shorter than 20 bytes long is made
  never-indexed.

These fields are the most at-risk. These rules are inspired by Firefox
and nghttp2.
r   ó   cookier
   é   N)Ú
isinstanceÚbytesÚ_SECURE_HEADERSÚlenr	   ©ÚheadersÚhdr_validation_flagsÚheaders      Ú./usr/lib/python3/dist-packages/h2/utilities.pyÚ_secure_headersr%   L   sj   é € ó& ˆÜ˜& ™)¤U×+Ñ+Ð+Ð+Ø�!‰9œÓ'¨F°1©I¸Ó,BÄsÈ6ÐRSÉ9Ã~ÐXZÓGZÜ)¨&°©)°V¸A±YÓ?Ô?àŒLò ùs   ‚A'A)c                ó¸   • U  HT  u  p[        U[        5      (       a
  US:X  a  Us  $ [        U[        5      (       d  M;  US:X  d  MC  UR                  S5      s  $    g)z4
Extracts the request method from the headers list.
r   z:methodúutf-8N)r   r   ÚstrÚencode)r!   ÚkÚvs      r$   Úextract_method_headerr,   g   sO   € ó ‰ˆÜ�aœ×Ñ A¨£OØŠHÜ�aœ×Ó ! y¥.Ø—8‘8˜GÓ$Ò$ñ	 ð
 ó    c                ó|   • U  H6  u  pUR                  S5      (       d    gUS:w  a  M%  UR                  S5      s  $    g)aÊ  
Searches headers list for a :status header to confirm that a given
collection of headers are an informational response. Assumes the header
are well formed and encoded as bytes: that is, that the HTTP/2 special
headers are first in the block, and so that it can stop looking when it
finds the first header field whose name does not begin with a colon.

:param headers: The HTTP/2 headers.
:returns: A boolean indicating if this is an informational response.
r   Fr   r   )Ú
startswith©r!   Únr+   s      r$   Úis_informational_responser2   s   s@   € ó ‰ˆØ�|‰|˜D×!Ñ!ÙØ�
‹?áà�|‰|˜DÓ!Ò!ñ ð r-   c                ó<   • SnX-   nX2:”  a  SU 3n[        U5      eU$ )a  
Increments a flow control window, guarding against that window becoming too
large.

:param current: The current value of the flow control window.
:param increment: The increment to apply to that window.
:returns: The new value of the window.
:raises: ``FlowControlError``
iÿÿÿz+May not increment flow control window past )r   )ÚcurrentÚ	incrementÚLARGEST_FLOW_CONTROL_WINDOWÚnew_sizeÚmsgs        r$   Úguard_increment_windowr9   ‰   s6   € ð #,ÐàÑ"€HàÓ-Ø;Ð<WÐ;XÐYˆÜ˜sÓ#Ð#à€Or-   c                ó.   • U  H  u  pUS:X  d  M  Us  $    g)aƒ  
Given a header set, searches for the authority header and returns the
value.

Note that this doesn't use indexing, so should only be called if the
headers are for a client request. Otherwise, will loop over the entire
header set, which is potentially unwise.

:param headers: The HTTP header set.
:returns: The value of the authority header, or ``None``.
:rtype: ``bytes`` or ``None``.
r   N© r0   s      r$   Úauthority_from_headersr<   Ÿ   s"   € ó ‰ˆØ�ÕØŠHñ ð r-   c                  ó>   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg)	ÚHeaderValidationFlagséµ   ÚboolÚ	is_clientÚ
is_trailerÚis_response_headerÚis_push_promiser;   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r;   r-   r$   r>   r>   µ   s   ‡ ØƒOØÓØÓØÖr-   r>   c                ó²   • [        X5      n [        X5      n [        X5      n [        X5      n [	        X5      n [        X5      n [        X5      n [        X5      $ )z²
Validates a header sequence against a set of constraints from RFC 7540.

:param headers: The HTTP header set.
:param hdr_validation_flags: An instance of HeaderValidationFlags.
)Ú_reject_empty_header_namesÚ_reject_uppercase_header_fieldsÚ_reject_surrounding_whitespaceÚ
_reject_teÚ_reject_connection_headerÚ_reject_pseudo_header_fieldsÚ_check_host_authority_headerÚ_check_path_header©r!   r"   s     r$   Úvalidate_headersrU   ¼   sx   € ô  )Øó€Gô .Øó€Gô -Øó€Gô Øó€Gô (Øó€Gô +Øó€Gô +Øó€Gô ˜gÓ<Ð<r-   c              #  ód   #   • U  H&  n[        US   5      S:X  a  Sn[        U5      eUv •  M(     g7f)zá
Raises a ProtocolError if any header names are empty (length 0).
While hpack decodes such headers without errors, they are semantically
forbidden in HTTP, see RFC 7230, stating that they must be at least one
character long.
r   z&Received header name with zero length.N)r   r   ©r!   r"   r#   r8   s       r$   rL   rL   å   s6   é € ó ˆÜˆv�a‰y‹>˜QÓØ:ˆCÜ Ó$Ð$ØŒò	 ùs   ‚.0c              #  óŠ   #   • U  H9  n[         R                  US   5      (       a  SUS   < S3n[        U5      eUv •  M;     g7f)zO
Raises a ProtocolError if any uppercase character is found in a header
block.
r   zReceived uppercase header name Ú.N)ÚUPPER_REÚsearchr   rW   s       r$   rM   rM   ô   sF   é € ó ˆÜ�?‰?˜6 !™9×%Ñ%Ø3°F¸1±I±=ÀÐBˆCÜ Ó$Ð$ØŒò	 ùs   ‚AAc              #  ó
  #   • U  Hy  nUS   S   [         ;   d  US   S   [         ;   a  SUS   < 3n[        U5      eUS   (       a4  US   S   [         ;   d  US   S   [         ;   a  SUS   < 3n[        U5      eUv •  M{     g7f)z\
Raises a ProtocolError if any header name or value is surrounded by
whitespace characters.
r   éÿÿÿÿz.Received header name surrounded by whitespace r
   z/Received header value surrounded by whitespace N)Ú_WHITESPACEr   rW   s       r$   rN   rN     s‘   é € ó ˆØ�!‰9�Q‰<œ;Ó&¨&°©)°B©-¼;Ó*FØBÀ6È!Á9Á-ÐPˆCÜ Ó$Ð$Ø�!�9˜6 !™9 Q™<¬;Ó6Ø�1‰I�b‰Mœ[Ó(ØCÀFÈ1ÁIÁ=ÐQˆCÜ Ó$Ð$ØŒò ùs   ‚BBc              #  óŽ   #   • U  H;  nUS   S:X  a+  US   R                  5       S:w  a  SUS   < 3n[        U5      eUv •  M=     g7f)zw
Raises a ProtocolError if the TE header is present in a header block and
its value is anything other than "trailers".
r   s   ter
   s   trailerszInvalid value for TE header: N)Úlowerr   rW   s       r$   rO   rO     sO   é € ó
 ˆØ�!‰9˜Ó &¨¡)§/¡/Ó"3°{Ó"BØ1°&¸±)±Ð?ˆCÜ Ó$Ð$àŒò ùs   ‚AAc              #  ój   #   • U  H)  nUS   [         ;   a  SUS   < S3n[        U5      eUv •  M+     g7f)zO
Raises a ProtocolError if the Connection header is present in a header
block.
r   z*Connection-specific header field present: rY   N)ÚCONNECTION_HEADERSr   rW   s       r$   rP   rP   $  s@   é € ó
 ˆØ�!‰9Ô*Ó*Ø>¸vÀa¹y¹mÈ1ÐMˆCÜ Ó$Ð$àŒò ùs   ‚13c                ó2   • X;  a  SU < S3n[        U5      eg)z«
Given a set of header names, checks whether the string or byte version of
the header name is present. Raises a Protocol error with the appropriate
error if it's missing.
zHeader block missing mandatory z headerN©r   )Úbytes_headerÚ
header_setr8   s      r$   Ú_assert_header_in_setrg   1  s)   € ð Ó%Ø/°Ñ/?¸wÐGˆÜ˜CÓ Ð ð &r-   c              #  óv  #   • [        5       nSnSnU  H•  nUS   S   [        :X  a|  US   U;   a  SUS   < 3n[        U5      eUR                  US   5        U(       a  SUS   < 3n[        U5      eUS   [        ;  a  SUS   < 3n[        U5      eUS   S;   a  US   nOS	nUv •  M—     [        X$U5        g7f)
zì
Raises a ProtocolError if duplicate pseudo-header fields are found in a
header block or if a pseudo-header field appears in a block after an
ordinary header field.

Raises a ProtocolError if pseudo-header fields are found in trailers.
FNr   z'Received duplicate pseudo-header field z.Received pseudo-header field out of sequence: z$Received custom pseudo-header field r   r
   T)ÚsetÚSIGILr   ÚaddÚ_ALLOWED_PSEUDO_HEADER_FIELDSÚ(_check_pseudo_header_field_acceptability)r!   r"   Úseen_pseudo_header_fieldsÚseen_regular_headerÚmethodr#   r8   s          r$   rQ   rQ   =  sç   é € ô !$£ÐØÐØ€FãˆØ�!‰9�Q‰<œ5Ó Ø�a‰yÐ5Ó5Ø?ÀÀqÁ	¹}ÐM�Ü# CÓ(Ð(à%×)Ñ)¨&°©)Ô4æ"ØFÀvÈaÁyÁmÐT�Ü# CÓ(Ð(à�a‰yÔ =Ó=Ø<¸VÀA¹Y¹MÐJ�Ü# CÓ(Ð(à�a‰y˜JÓ&Ø ™�øð #'ÐàŒñ- ô2 -Ø!Ð+?õùs   ‚B7B9c                óð  • UR                   (       a  U (       a  SU  3n[        U5      eUR                  (       a-  [        SU 5        U [        -  nU(       a  SU 3n[        U5      eg
UR                  (       d  UR                   (       dm  [        SU 5        [        SU 5        [        SU 5        U [
        -  nU(       a  SU 3n[        U5      eUS:w  a"  U [        -  nU(       a  S	U< 3n[        U5      eg
g
g
g
)zy
Given the set of pseudo-headers present in a header block and the
validation flags, confirms that RFC 7540 allows them.
z"Received pseudo-header in trailer r   z!Encountered request-only headers r   r   r   z"Encountered response-only headers s   CONNECTz)Encountered connect-request-only headers N)rB   r   rC   rg   Ú_REQUEST_ONLY_HEADERSÚ_RESPONSE_ONLY_HEADERSÚ_CONNECT_REQUEST_ONLY_HEADERS)Úpseudo_headersrp   r"   r8   Úinvalid_response_headersÚinvalid_request_headersÚinvalid_headerss          r$   rm   rm   h  s  € ð ×&×&®>Ø2°>Ð2BÐCˆÜ˜CÓ Ð ð ×.×.Ü˜j¨.Ô9Ø#1Ô4IÑ#IÐ Þ#Ø5Ð6NÐ5OÐPˆCÜ Ó$Ð$ð $ð #×5×5Ø"×-×-ô 	˜h¨Ô7Ü˜j¨.Ô9Ü˜j¨.Ô9Ø"0Ô3IÑ"IÐÞ"Ø6Ð7NÐ6OÐPˆCÜ Ó$Ð$Ø�ZÓØ,Ô/LÑLˆOÞØAÀ/ÑATÐU�Ü# CÓ(Ð(ð ð  ð .ð 6r-   c              #  ó  #   • SnSnU  H$  nUS   S:X  a  US   nOUS   S:X  a  US   nUv •  M&     USLnUSLnU(       d  U(       d  Sn[        U5      eU(       a#  U(       a  X:w  a  SU< SU< 3n[        U5      eggg7f)	zò
Given the :authority and Host headers from a request block that isn't
a trailer, check that:
 1. At least one of these headers is set.
 2. If both headers are set, they match.

:param headers: The HTTP header set.
:raises: ``ProtocolError``
Nr   r   r
   s   hostz@Request header block does not have an :authority or Host header.zARequest header block has mismatched :authority and Host headers: z / rd   )r!   Úauthority_header_valÚhost_header_valr#   Úauthority_presentÚhost_presentr8   s          r$   Ú_validate_host_authority_headerr~   ’  s¼   é € ð"  ÐØ€OãˆØ�!‰9˜Ó%Ø#)¨!¡9Ñ Ø�A‰Y˜'Ó!Ø$ Q™iˆOàŒñ ð .°TÐ9ÐØ#¨4Ð/€Lö ¦\ØPˆÜ˜CÓ Ð ö ž\Ð.BÓ.UðØ1Ñ4°C¸Ñ7JðLð 	ô ˜CÓ Ð ð /V˜\Ðùs   ‚A=A?c                óv   • UR                   =(       d    UR                  nU(       a	  S U  5       $ [        U 5      $ )z²
Raises a ProtocolError if a header block arrives that does not contain an
:authority or a Host header, or if a header block contains both fields,
but their values do not match.
c              3  ó$   #   • U  H  ov •  M     g 7f©Nr;   ©Ú.0Úhs     r$   Ú	<genexpr>Ú/_check_host_authority_header.<locals>.<genexpr>Ñ  ó   é € Ð#š7�a”š7ùó   ‚©rC   rB   r~   ©r!   r"   Úskip_validations      r$   rR   rR   Â  ó;   € ð 	×/Ñ/÷ 	(Ø×'Ñ'ð ö Ù#™7Ó#Ð#ä*¨7Ó3Ð3r-   c                ó€   ^ • SU 4S jjnUR                   =(       d    UR                  nU(       a	  S T  5       $ U" 5       $ )za
Raise a ProtocolError if a header block arrives or is sent that contains an
empty :path header.
c               3  óh   >#   • T H'  n U S   S:X  a  U S   (       d  Sn[        U5      eU v •  M)     g 7f)Nr   r   r
   z"An empty :path header is forbiddenrd   )r#   r8   r!   s     €r$   ÚinnerÚ!_check_path_header.<locals>.innerÜ  s7   øé € ÛˆFØ�a‰y˜HÓ$¨V°A¯YØ:�Ü# CÓ(Ð(àŒLò ùs   ƒ/2c              3  ó$   #   • U  H  ov •  M     g 7fr�   r;   r‚   s     r$   r…   Ú%_check_path_header.<locals>.<genexpr>ì  r‡   rˆ   )ÚreturnúGenerator[Header, None, None])rC   rB   )r!   r"   r�   r‹   s   `   r$   rS   rS   Ö  s=   ø€ ÷ð 	×/Ñ/÷ 	(Ø×'Ñ'ð ö Ù#™7Ó#Ð#Ù‹7€Nr-   c                óR   • [        U [        5      (       a  U $ U R                  S5      $ )z¥
Given an assumed `str` (or anything that supports `.encode()`),
encodes it using utf-8 into bytes. Returns the unmodified object
if it is already a `bytes` object.
r'   )r   r   r)   )r+   s    r$   Ú	_to_bytesr–   ð  s$   € ô ˜1œe×$Ñ$ˆ1Ð;¨!¯(©(°7Ó*;Ð;r-   c                óò   • / nU  Hn  n[        US   5      [        US   5      4n[        U[        5      (       a)  UR                  UR	                  US   US   5      5        M]  UR                  U5        Mp     U$ )zï
Given an iterable of header two-tuples, rebuilds that as a list with the
header names and values encoded as utf-8 bytes. This function produces
tuples that preserve the original type of the header tuple for tuple and
any ``HeaderTuple``.
r   r
   )r–   r   r   ÚappendÚ	__class__)r!   Úencoded_headersr#   r„   s       r$   Úutf8_encode_headersr›   ù  su   € ð %'€OÛˆÜ�v˜a‘yÓ!¤9¨V°A©YÓ#7Ð8ˆÜ�fœk×*Ñ*Ø×"Ñ" 6×#3Ñ#3°A°a±D¸!¸A¹$Ó#?Ö@à×"Ñ" 1Ö%ñ ð Ðr-   c              #  óÐ   #   • U  H\  n[        U[        5      (       a*  UR                  US   R                  5       US   5      v •  MB  US   R                  5       US   4v •  M^     g7f)zØ
Given an iterable of header two-tuples, rebuilds that iterable with the
header names lowercased. This generator produces tuples that preserve the
original type of the header tuple for tuple and any ``HeaderTuple``.
r   r
   N)r   r   r™   r`   r    s      r$   Ú_lowercase_header_namesr�   
  sZ   é € ó ˆÜ�fœk×*Ñ*Ø×"Ñ" 6¨!¡9§?¡?Ó#4°f¸Q±iÓ@Ô@à˜!‘9—?‘?Ó$ f¨Q¡iÐ0Ô0ò	 ùs   ‚A$A&c              #  ó  #   • U  Hx  n[        U[        5      (       a8  UR                  US   R                  5       US   R                  5       5      v •  MP  US   R                  5       US   R                  5       4v •  Mz     g7f)zô
Given an iterable of header two-tuples, strip both leading and trailing
whitespace from both header names and header values. This generator
produces tuples that preserve the original type of the header tuple for
tuple and any ``HeaderTuple``.
r   r
   N)r   r   r™   Ústripr    s      r$   Ú_strip_surrounding_whitespacer      sh   é € ó ˆÜ�fœk×*Ñ*Ø×"Ñ" 6¨!¡9§?¡?Ó#4°f¸Q±i·o±oÓ6GÓHÔHà˜!‘9—?‘?Ó$ f¨Q¡i§o¡oÓ&7Ð8Ô8ò	 ùs   ‚B Bc              #  óD   #   • U  H  nUS   [         ;  d  M  Uv •  M     g7f)u9   
Strip any connection headers as per RFC7540 Â§ 8.1.2.2.
r   N)rb   r    s      r$   Ú_strip_connection_headersr¢   '  s#   é € ó
 ˆØ�!‰9Ô.Õ.ØŒLò ùs   ‚ —	 c                óv   • UR                   =(       d    UR                  nU(       a	  S U  5       $ [        U 5      $ )zÆ
Raises an InvalidHeaderBlockError if we try to send a header block
that does not contain an :authority or a Host header, or if
the header block contains both fields, but their values do not match.
c              3  ó$   #   • U  H  ov •  M     g 7fr�   r;   r‚   s     r$   r…   Ú4_check_sent_host_authority_header.<locals>.<genexpr>@  r‡   rˆ   r‰   rŠ   s      r$   Ú!_check_sent_host_authority_headerr¦   1  rŒ   r-   c              #  ó¶   #   • / nU  H&  nUS   S:X  a  UR                  US   5        M"  Uv •  M(     U(       a   SR                  U5      n[        SU5      v •  gg7f)u[  
RFC 7540 Â§ 8.1.2.5 allows HTTP/2 clients to split the Cookie header field,
which must normally appear only once, into multiple fields for better
compression. However, they MUST be joined back up again when received.
This normalization step applies that transform. The side-effect is that
all cookie fields now appear *last* in the header block.
r   r   r
   ó   ; N)r˜   Újoinr	   )r!   r"   Úcookiesr#   Ú
cookie_vals        r$   Ú_combine_cookie_fieldsr¬   E  s\   é € ð €GÛˆØ�!‰9˜	Ó!Ø�N‰N˜6 !™9Ö%àŒLñ	 ö
 Ø—Z‘Z Ó(ˆ
Ü% i°Ó<Ó<ð ùs   ‚AAc              #  óH  #   • U  H˜  n[        US   [        5      (       d   e[        US   [        5      (       d   eUS   S:X  aT  US   R                  S5       H:  n[        U[        5      (       a  UR	                  US   U5      v •  M1  US   U4v •  M<     M”  Uv •  Mš     g7f)uÂ   
RFC 7540 Â§ 8.1.2.5 allows for better compression efficiency,
to split the Cookie header field into separate header fields

We want to do it for outbound requests, as we are doing for
inbound.
r   r
   r   r¨   N)r   r   Úsplitr   r™   )r!   r"   r#   r«   s       r$   Ú_split_outbound_cookie_fieldsr¯   \  sœ   é € ó ˆÜ˜& ™)¤U×+Ñ+Ð+Ð+Ü˜& ™)¤U×+Ñ+Ð+Ð+Ø�!‰9˜	Ó!Ø$ Q™iŸo™o¨eÖ4�
Ü˜f¤k×2Ñ2Ø ×*Ñ*¨6°!©9°jÓAÔAà  ™) ZÐ/Ô/ó	 5ð ŒLò ùs   ‚B B"c                ó~   • [        X5      n U(       a  [        X5      n [        X5      n [        X5      n [	        X5      $ )zÕ
Normalizes a header sequence that we are about to send.

:param headers: The HTTP header set.
:param hdr_validation_flags: An instance of HeaderValidationFlags.
:param should_split_outbound_cookies: boolean flag
)r�   r¯   r    r¢   r%   )r!   r"   Úshould_split_outbound_cookiess      r$   Únormalize_outbound_headersr²   r  s:   € ô & gÓD€GÞ$Ü/°ÓNˆÜ+¨GÓJ€GÜ'¨ÓF€GÜ˜7Ó9Ð9r-   c                ó   • [        X5      $ )z�
Normalizes a header sequence that we have received.

:param headers: The HTTP header set.
:param hdr_validation_flags: An instance of HeaderValidationFlags
)r¬   rT   s     r$   Únormalize_inbound_headersr´   …  s   € ô " 'Ó@Ð@r-   c                óp   • [        X5      n [        X5      n [        X5      n [        X5      n [	        X5      $ )z°
Validates and normalizes a header sequence that we are about to send.

:param headers: The HTTP header set.
:param hdr_validation_flags: An instance of HeaderValidationFlags.
)rO   rP   rQ   r¦   rS   rT   s     r$   Úvalidate_outbound_headersr¶   �  sK   € ô Øó€Gô (Øó€Gô +Øó€Gô 0Øó€Gô ˜gÓ<Ð<r-   c                  óF   ^ • \ rS rSrSU 4S jjrSU 4S jjrSS jrSrU =r$ )	ÚSizeLimitDicti¨  c                ót   >• UR                  SS 5      U l        [        TU ]  " U0 UD6  U R	                  5         g )NÚ
size_limit)ÚpopÚ_size_limitÚsuperÚ__init__Ú_check_size_limit)ÚselfÚargsÚkwargsr™   s      €r$   r¾   ÚSizeLimitDict.__init__ª  s4   ø€ Ø!Ÿ:™: l°DÓ9ˆÔÜ‰Ò˜$Ð) &Ò)à×ÑÕ r-   c                óD   >• [         TU ]  X5        U R                  5         g r�   )r½   Ú__setitem__r¿   )rÀ   ÚkeyÚvaluer™   s      €r$   rÅ   ÚSizeLimitDict.__setitem__°  s   ø€ Ü‰Ñ˜CÔ'à×ÑÕ r-   c                ó¨   • U R                   bE  [        U 5      U R                   :”  a+  U R                  SS9  [        U 5      U R                   :”  a  M*  g g g )NF)Úlast)r¼   r   Úpopitem)rÀ   s    r$   r¿   ÚSizeLimitDict._check_size_limitµ  sG   € Ø×ÑÑ'Ü�d“)˜d×.Ñ.Ó.Ø—‘ %�Ñ(ô �d“)˜d×.Ñ.×.ð (r-   )r¼   )rÁ   zdict[int, int]rÂ   r   r“   ÚNone)rÆ   ÚintrÇ   z	Any | intr“   rÍ   )r“   rÍ   )	rE   rF   rG   rH   r¾   rÅ   r¿   rJ   Ú__classcell__)r™   s   @r$   r¸   r¸   ¨  s   ø† ÷!÷!÷
)ò )r-   r¸   )r!   úIterable[Header]r"   úHeaderValidationFlags | Noner“   r”   )r!   rÐ   r“   úbytes | None)r!   rÐ   r“   r@   )r4   rÎ   r5   rÎ   r“   rÎ   )r!   rÐ   r"   r>   r“   rÐ   )r!   rÐ   r"   r>   r“   r”   )re   r   rf   ú(set[bytes | str] | set[bytes] | set[str]r“   rÍ   )ru   rÓ   rp   rÒ   r"   r>   r“   rÍ   )r!   rÐ   r“   r”   )r+   zbytes | strr“   r   )r!   zIterable[HeaderWeaklyTyped]r“   zlist[Header])F)r!   rÐ   r"   rÑ   r±   r@   r“   r”   )DÚ__doc__Ú
__future__r   ÚcollectionsÚreÚstringr   Útypingr   r   r   Úhpack.structr   r	   Ú
exceptionsr   r   Úcollections.abcr   r   r   r   ÚcompilerZ   Úordrj   ÚINFORMATIONAL_STARTÚ	frozensetrb   rl   r   rr   rs   rt   Úmapr^   r%   r,   r2   r9   r<   r>   rU   rL   rM   rN   rO   rP   rg   rQ   rm   r~   rR   rS   r–   r›   r�   r    r¢   r¦   r¬   r¯   r²   r´   r¶   ÚOrderedDictrÎ   r¸   r;   r-   r$   Ú<module>rã      s­  ðñõ #ã Û 	Ý ß 1Ñ 1ç =ç 7æß3ç6à�:Š:�hÓ€ÙˆD‹	€Ù˜$“iÐ ñ
 ò  ó Ð ñ !*ò +ó !Ð ñ àØðó €ñ "ò #ó Ð ñ # J <Ó0Ð ñ
 !*¨<¨.Ó 9Ð ñ ™˜C Ó,Ó-€ðØ*FðØKhôô6	ôô,ô,ô,˜Jô ô%=ðRØ5JðØOlôð
Ø:Oð
ØTqô
ðØ9NðØSpôô,
ô
ð	!Ø&Nð	!ØSWô	!ð(Ø7Lð(ØQnô(ðV')Ø5Að')àCXð')à]aô')ôT-!ð`4Ø7Lð4ØQnô4ð(Ø-BðØGdôô4<ôð"1Ø2Nð1ØSpô1ð9Ø8Tð9ØYvô9ðØ4PðØUrôð4Ø<Qð4ØVsô4ô(=ð.Ø8TðØYvôð0 DIð:Ø5Qð:à>Bð:àMjõ:ð&AØ4IðAØNkôAð=Ø4Ið=ØNkô=ô0)�K×+Ñ+¨C°¨HÑ5õ )r-   