/ lib / requests / utils.pyc
utils.pyc
  1  o

  2  ��Yć�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
  3  Z
  4  ddlZddlm
Z
ddlmZmZddlmZddlmZddlmZmZdd	lmZmZmZmZmZmZdd
  5  lmZddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&ddl'm(Z(dd
l)m*Z*m+Z+m,Z,m-Z-ddl.m/Z/dZ0e�1�Z2ddd�Z3d�4e�5dedd�d��Z6ej7dkr�dd�Z8dd�Z dd�Z9dd �Z:dtd"d#�Z;d$d%�Z<d&d'�Z=ej>d(d)��Z?d*d+�Z@d,d-�ZAd.d/�ZBd0d1�ZCdtd2d3�ZDd4d5�ZEd6d7�ZFd8d9�ZGd:d;�ZHd<d=�ZId>d?�ZJd@dA�ZKdBdC�ZLeMdD�ZNdEdF�ZOdGdH�ZPdIdJ�ZQdKdL�ZRdMdN�ZSdOdP�ZTej>dQdR��ZUdSdT�ZVdudUdV�ZWdWdX�ZXdvdYdZ�ZYdwd\d]�ZZd^d_�Z[d`da�Z\db�]dc�Z^e^ddZ_e^deZ`dfdg�Zadhdi�Zbdjdk�Zcdldm�Zddndo�Zedpdq�Zfdrds�ZgdS)xz�
  6  requests.utils
  7  ~~~~~~~~~~~~~~
  8  
  9  This module provides utility functions that are used within Requests
 10  that are also useful for external consumption.
 11  �N)�OrderedDict)�make_headers�	parse_url�)�certs��__version__)�HEADER_VALIDATORS�to_native_string)�Mapping�
 12  basestring�bytes�
 13  getproxies�getproxies_environment�
integer_types)�parse_http_list)�proxy_bypass�proxy_bypass_environment�quote�str�unquote�urlparse�
 14  urlunparse��cookiejar_from_dict)�FileModeWarning�
InvalidHeader�
 15  InvalidURL�UnrewindableBodyError)�CaseInsensitiveDict)z.netrc�_netrc�Pi�)�http�httpsz, z,\s*T)�accept_encodingzaccept-encoding�win32c	Cs�zddl}Wn
 16  tyYdSwz|�|jd�}t|�|d�d�}|�|d�d}Wnttfy8YdSw|r=|s?dS|�d�}|D]*}|dkrSd|vrSd	S|�	dd
 17  �}|�	dd�}|�	d
d�}t
 18  �||t
 19  j�rpd	SqFdS)NrFz;Software\Microsoft\Windows\CurrentVersion\Internet Settings�ProxyEnable�
ProxyOverride�;z<local>�.Tz\.�*z.*�?)
�winreg�ImportError�OpenKey�HKEY_CURRENT_USER�int�QueryValueEx�OSError�
 20  ValueError�split�replace�re�match�I)�hostr,�internetSettings�proxyEnable�
proxyOverride�test�r>��C:\Users\Jacks.GUTTSPC\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\requests\utils.py�proxy_bypass_registryGs:���
 21  �r@cCst�rt|�St|�S)z�Return True, if the host should be bypassed.
 22  
 23          Checks proxy settings gathered from the environment, if specified,
 24          or the registry.
 25          )rrr@)r9r>r>r?rksrcCst|d�r	|��}|S)z/Returns an internal sequence dictionary update.�items)�hasattrrA)�dr>r>r?�dict_to_sequencews
 26  rDc	Cs d}d}t|d�rt|�}n2t|d�r|j}n)t|d�r@z|��}Wntjtfy.Ynwt�|�j}d|j	vr@t
 27  �dt�t|d�r�z|�
�}WntyZ|durX|}Yn)wt|d�r�|dur�z|�dd	�|�
�}|�|ptd�Wnty�d}Ynw|dur�d}td||�S)
 28  Nr�__len__�len�fileno�ba%Requests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.�tell�seek�)rBrFrG�io�UnsupportedOperation�AttributeError�os�fstat�st_size�mode�warnings�warnrrIr2rJ�max)�oZtotal_lengthZcurrent_positionrGr>r>r?�	super_len�sJ
 29  
 30  
 31  
 32  �
 33  �
 34  ���rWFc	Cs>tj�d�}|dur|f}ndd�tD�}z}ddlm}m}d}|D]!}ztj�|�}Wnty8YWdSwtj�	|�rC|}nq"|durKWdSt
 35  |�}	d}
 36  t|t�r[|
 37  �
d�}
 38  |	j�|
 39  �d}z||��|�}|r|drsdnd	}
||
|d
 40  fWWSWWdS|tfy�|r��YWdSwttfy�YdSw)z;Returns the Requests tuple auth for a given url from netrc.ZNETRCNcss�|]}d|��VqdS)z~/Nr>)�.0�fr>r>r?�	<genexpr>�s�z!get_netrc_auth.<locals>.<genexpr>r)�NetrcParseError�netrc�:�asciirrK)rO�environ�get�NETRC_FILESr\r[�path�
 41  expanduser�KeyError�existsr�
 42  isinstancer�decode�netlocr4�authenticatorsr2r-rN)�urlZraise_errorsZ
 43  netrc_fileZnetrc_locationsr[r\Z
 44  netrc_pathrY�loc�riZsplitstrr9r Zlogin_ir>r>r?�get_netrc_auth�sL
 45  ��
 46  
 47  ����rmcCsNt|dd�}|rt|t�r!|ddkr#|ddkr%tj�|�SdSdSdSdS)z0Tries to guess the filename of the given object.�nameNr�<������>)�getattrrfrrOrb�basename)�objrnr>r>r?�guess_filename�s&�rucCs�tj�|�r|Stj�|�\}}|r2tj�|�s2tj�|�\}}|s#nd�||g�}|r2tj�|�rt�|�s9|St�|�}||��vrF|St	�
 48  �}tj�||�d�d�}tj�|�syt|��}|�|�
|��Wd�|S1stwY|S)z�Replace nonexistent paths that look like they refer to a member of a zip
 49      archive with the location of an extracted copy of the target, or else
 50      just return the provided path unchanged.
 51      �/rpN)rOrbrer4�join�zipfile�
 52  is_zipfile�ZipFile�namelist�tempfile�
 53  gettempdir�atomic_open�write�read)rb�archive�member�prefix�zip_file�tmpZextracted_pathZfile_handlerr>r>r?�extract_zipped_pathss.�
 54  
 55  
 56  
 57  ��r�ccsz�tjtj�|�d�\}}z"t�|d��}|VWd�n1s"wYt�||�WdSty<t�|��w)z-Write a file to the disk in an atomic fashion)�dir�wbN)	r|�mkstemprOrb�dirname�fdopenr5�
BaseException�remove)�filenameZtmp_descriptorZtmp_nameZtmp_handlerr>r>r?r~'s��
 58  �r~cCs.|durdSt|ttttf�rtd��t|�S)aTake an object and test to see if it can be represented as a
 59      dictionary. Unless it can not be represented as such, return an
 60      OrderedDict, e.g.,
 61  
 62      ::
 63  
 64          >>> from_key_val_list([('key', 'val')])
 65          OrderedDict([('key', 'val')])
 66          >>> from_key_val_list('string')
 67          Traceback (most recent call last):
 68          ...
 69          ValueError: cannot encode objects that are not 2-tuples
 70          >>> from_key_val_list({'key': 'val'})
 71          OrderedDict([('key', 'val')])
 72  
 73      :rtype: OrderedDict
 74      N�+cannot encode objects that are not 2-tuples)rfrr
�boolr0r3r��valuer>r>r?�from_key_val_list4s
 75  r�cCs@|durdSt|ttttf�rtd��t|t�r|��}t|�S)a�Take an object and test to see if it can be represented as a
 76      dictionary. If it can be, return a list of tuples, e.g.,
 77  
 78      ::
 79  
 80          >>> to_key_val_list([('key', 'val')])
 81          [('key', 'val')]
 82          >>> to_key_val_list({'key': 'val'})
 83          [('key', 'val')]
 84          >>> to_key_val_list('string')
 85          Traceback (most recent call last):
 86          ...
 87          ValueError: cannot encode objects that are not 2-tuples
 88  
 89      :rtype: list
 90      Nr�)	rfrr
r�r0r3rrA�listr�r>r>r?�to_key_val_listOs
 91  r�cCsXg}t|�D]#}|dd�|dd�krdkr$nnt|dd��}|�|�q|S)aParse lists as described by RFC 2068 Section 2.
 92  
 93      In particular, parse comma-separated lists where the elements of
 94      the list may include quoted-strings.  A quoted-string could
 95      contain a comma.  A non-quoted string could have quotes in the
 96      middle.  Quotes are removed automatically after parsing.
 97  
 98      It basically works like :func:`parse_set_header` just that items
 99      may appear multiple times and case sensitivity is preserved.
100  
101      The return value is a standard :class:`list`:
102  
103      >>> parse_list_header('token, "quoted value"')
104      ['token', 'quoted value']
105  
106      To create a header from the :class:`list` again, use the
107      :func:`dump_header` function.
108  
109      :param value: a string with a list header.
110      :return: :class:`list`
111      :rtype: list
112      Nrrp�")�_parse_list_header�unquote_header_value�append)r��result�itemr>r>r?�parse_list_headerms(r�cCsxi}t|�D]3}d|vrd||<q|�dd�\}}|dd�|dd�kr+dkr5nnt|dd��}|||<q|S)a^Parse lists of key, value pairs as described by RFC 2068 Section 2 and
113      convert them into a python dict:
114  
115      >>> d = parse_dict_header('foo="is a fish", bar="as well"')
116      >>> type(d) is dict
117      True
118      >>> sorted(d.items())
119      [('bar', 'as well'), ('foo', 'is a fish')]
120  
121      If there is no value for a key it will be `None`:
122  
123      >>> parse_dict_header('key_without_value')
124      {'key_without_value': None}
125  
126      To create a header from the :class:`dict` again, use the
127      :func:`dump_header` function.
128  
129      :param value: a string with a dict header.
130      :return: :class:`dict`
131      :rtype: dict
132      �=Nrrpr�)r�r4r�)r�r�r�rnr>r>r?�parse_dict_header�s(
133  r�cCs^|r-|d|dkrdkr-n|S|dd�}|r#|dd�dkr-|�dd��d	d�S|S)
134  z�Unquotes a header value.  (Reversal of :func:`quote_header_value`).
135      This does not use the real unquoting but what browsers are actually
136      using for quoting.
137  
138      :param value: the header value to unquote.
139      :rtype: str
140      rrpr�rNrKz\\�\z\")r5)r�Zis_filenamer>r>r?r��s"�r�cCsi}|D]}|j||j<q|S)z�Returns a key/value dictionary from a CookieJar.
141  
142      :param cj: CookieJar object to extract cookies from.
143      :rtype: dict
144      )r�rn)�cj�cookie_dict�cookier>r>r?�dict_from_cookiejar�sr�cCs
145  t||�S)z�Returns a CookieJar from a key/value dictionary.
146  
147      :param cj: CookieJar to insert cookies into.
148      :param cookie_dict: Dict of key/values to insert into CookieJar.
149      :rtype: CookieJar
150      r)r�r�r>r>r?�add_dict_to_cookiejar�s
151  r�cCsTt�dt�tjdtjd�}tjdtjd�}t�d�}|�|�|�|�|�|�S)zlReturns encodings from given content string.
152  
153      :param content: bytestring to extract encodings from.
154      z�In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)z!<meta.*?charset=["\']*(.+?)["\'>])�flagsz+<meta.*?content=["\']*;?charset=(.+?)["\'>]z$^<\?xml.*?encoding=["\']*(.+?)["\'>])rSrT�DeprecationWarningr6�compiler8�findall)�contentZ
155  charset_reZ	pragma_re�xml_rer>r>r?�get_encodings_from_content�s�	
156  ���r�c
157  Cs�|�d�}|d��|dd�}}i}d}|D]0}|��}|rH|d}}|�d�}	|	dkrB|d|	��|�}||	dd��|�}|||��<q||fS)	z�Returns content type and parameters from given header
158  
159      :param header: string
160      :return: tuple containing content type and dictionary of
161           parameters
162      r(rrNz"' Tr�rp)r4�strip�find�lower)
163  �header�tokens�content_type�paramsZparams_dictZitems_to_strip�param�keyr�Zindex_of_equalsr>r>r?�_parse_content_type_header�s
164  
165  
166  �r�cCsP|�d�}|s	dSt|�\}}d|vr|d�d�Sd|vr dSd|vr&dSdS)	z}Returns encodings from given HTTP Header Dict.
167  
168      :param headers: dictionary to extract encoding from.
169      :rtype: str
170      zcontent-typeN�charsetz'"�textz
171  ISO-8859-1zapplication/json�utf-8)r`r�r�)�headersr�r�r>r>r?�get_encoding_from_headerss
172  �r�ccsj�|jdur
|EdHdSt�|j�dd�}|D]}|�|�}|r$|Vq|jddd�}|r3|VdSdS)zStream decodes an iterator.Nr5��errors�T)�final)�encoding�codecs�getincrementaldecoderrg)�iterator�r�decoder�chunk�rvr>r>r?�stream_decode_response_unicode.s�
173  
174  
175  �
176  �r�ccsX�d}|dus|dkrt|�}|t|�kr*||||�V||7}|t|�ksdSdS)z Iterate over slices of a string.rN)rF)�stringZslice_length�posr>r>r?�iter_slices?s��r�cCsvt�dt�g}t|j�}|r%zt|j|�WSty$|�|�Ynwz	t|j|dd�WSt	y:|jYSw)z�Returns the requested content back in unicode.
177  
178      :param r: Response object to get unicode content from.
179  
180      Tried:
181  
182      1. charset from content-type
183      2. fall back and replace all unicode characters
184  
185      :rtype: str
186      z�In requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)r5r�)
187  rSrTr�r�r�rr��UnicodeErrorr��	TypeError)r��tried_encodingsr�r>r>r?�get_unicode_from_responseIs"�	
188  �
189  �r�zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c	Cs�|�d�}tdt|��D]Q}||dd�}t|�dkrT|��rTz	tt|d��}Wnty8td|�d���w|tvrJ|||dd�||<qd||��||<qd||��||<qd	�	|�S)
190  z�Un-escape any percent-escape sequences in a URI that are unreserved
191      characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
192  
193      :rtype: str
194      �%rrrK�z"Invalid percent-escape sequence: '�'N�)
195  r4�rangerF�isalnum�chrr0r3r�UNRESERVED_SETrw)�uri�parts�i�h�cr>r>r?�unquote_unreservedvs
196  �
197  r�cCs:d}d}z	tt|�|d�WStyt||d�YSw)z�Re-quote the given URI.
198  
199      This function passes the given URI through an unquote/quote cycle to
200      ensure that it is fully and consistently quoted.
201  
202      :rtype: str
203      z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~)�safe)rr�r)r�Zsafe_with_percentZsafe_without_percentr>r>r?�requote_uri�s�r�cCslt�dt�|��d}|�d�\}}t�dt�tt|����d}t�dt�|��d|@}||@||@kS)z�This function allows you to check if an IP belongs to a network subnet
204  
205      Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24
206               returns False if ip = 192.168.1.1 and net = 192.168.100.0/24
207  
208      :rtype: bool
209      z=Lrrv)�struct�unpack�socket�	inet_atonr4�dotted_netmaskr0)�ip�netZipaddrZnetaddr�bits�netmask�networkr>r>r?�address_in_network�s
210  r�cCs&ddd|>dA}t�t�d|��S)z�Converts mask from /xx format to xxx.xxx.xxx.xxx
211  
212      Example: if mask is 24 function returns 255.255.255.0
213  
214      :rtype: str
215      l��r� z>I)r��	inet_ntoar��pack)�maskr�r>r>r?r��sr�cCs&zt�|�WdStyYdSw)z
216      :rtype: bool
217      FT)r�r�r2)Z	string_ipr>r>r?�is_ipv4_address�s��r�cCs�|�d�dkr?zt|�d�d�}Wn
218  tyYdSw|dks%|dkr'dSz
t�|�d�d�WdSty>YdSwdS)zV
219      Very simple check of the cidr format in no_proxy variable.
220  
221      :rtype: bool
222      rvrFr�rT)�countr0r4r3r�r�r2)Zstring_networkr�r>r>r?�
is_valid_cidr�s���r�c	csz�|du}|rtj�|�}|tj|<zdVW|r*|dur#tj|=dS|tj|<dSdS|r<|dur7tj|=w|tj|<w)z�Set the environment variable 'env_name' to 'value'
223  
224      Save previous value, yield, and then restore the previous value stored in
225      the environment variable 'env_name'.
226  
227      If 'value' is None, do nothingN)rOr_r`)�env_namer�Z
value_changed�	old_valuer>r>r?�set_environ�s�
228  �r�c	
229  Cs8dd�}|}|dur|d�}t|�}|jdurdS|rkdd�|�dd	��d
230  �D�}t|j�rJ|D]}t|�r@t|j|�r?dSq0|j|krHdSq0n!|j}|jrX|d|j��7}|D]}|j�|�sg|�|�rjdSqZt	d|��zt
231  |j�}Wnttj
fy�d}YnwWd�n1s�wY|r�dSdS)
zL
232      Returns whether we should bypass proxies or not.
233  
234      :rtype: bool
235      cSstj�|�p
tj�|���S�N)rOr_r`�upper)r�r>r>r?�	get_proxy�sz(should_bypass_proxies.<locals>.get_proxyN�no_proxyTcss�|]}|r|VqdSr�r>)rXr9r>r>r?rZs�z(should_bypass_proxies.<locals>.<genexpr>� r��,�:F)r�hostnamer5r4r�r�r��port�endswithr�rr�r��gaierror)	rjr�r�Zno_proxy_arg�parsedZproxy_ipZhost_with_portr9Zbypassr>r>r?�should_bypass_proxies�sJ
236  
237  �
238  ��	����rcCst||d�riSt�S)zA
239      Return a dict of environment proxies.
240  
241      :rtype: dict
242      �r�)rr)rjr�r>r>r?�get_environ_proxies3srcCsv|pi}t|�}|jdur|�|j|�d��S|jd|j|jd|jdg}d}|D]
}||vr8||}|Sq+|S)z�Select a proxy for the url, if applicable.
243  
244      :param url: The url being for the request
245      :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
246      N�allz://zall://)rr�r`�scheme)rj�proxies�urlpartsZ
247  proxy_keys�proxyZ	proxy_keyr>r>r?�select_proxy?s"
248  ��rc	Cst|dur|ni}|j}t|�j}|�d�}|��}|r8t||d�s8t||d�}|�||�d��}|r8|�||�|S)a�This method takes proxy information from a request and configuration
249      input to resolve a mapping of target proxies. This will consider settings
250      such a NO_PROXY to strip proxy configurations.
251  
252      :param request: Request or PreparedRequest
253      :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
254      :param trust_env: Boolean declaring whether to trust environment configs
255  
256      :rtype: dict
257      Nr�rr)rjrrr`�copyrr�
258  setdefault)	�requestr�	trust_envrjrr��new_proxiesZenviron_proxiesrr>r>r?�resolve_proxiesYs
259  
260  r�python-requestscCs|�dt��S)zO
261      Return a string representing the default user agent.
262  
263      :rtype: str
264      rvr)rnr>r>r?�default_user_agenttsrcCstt�tddd��S)z9
265      :rtype: requests.structures.CaseInsensitiveDict
266      z*/*z
267  keep-alive)z
268  User-AgentzAccept-Encoding�Accept�
269  Connection)rr�DEFAULT_ACCEPT_ENCODINGr>r>r>r?�default_headers}s��rc	
270  Cs�g}d}|�|�}|s
|St�d|�D]M}z
271  |�dd�\}}Wnty-|d}}Ynwd|�d�i}|�d�D] }z	|�d�\}}Wn
272  tyOYnw|�|�||�|�<q:|�|�q|S)	z�Return a list of parsed link headers proxies.
273  
274      i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg"
275  
276      :rtype: list
277      z '"z, *<r(rr�rjz<> '"r�)r�r6r4r3r�)	r��linksZ
replace_chars�valrjr��linkr�r�r>r>r?�parse_header_links�s*
278  ��r�r^rK�cCs�|dd�}|tjtjfvrdS|dd�tjkrdS|dd�tjtjfvr)dS|�t�}|dkr4d	S|dkrN|ddd�tkrCd
279  S|ddd�tkrNdS|dkrf|dd�t	kr\d
S|dd�t	krfdSdS)z
280      :rtype: str
281      N�zutf-32rz	utf-8-sigrKzutf-16rr�z	utf-16-berz	utf-16-lez	utf-32-bez	utf-32-le)
282  r��BOM_UTF32_LE�BOM_UTF32_BE�BOM_UTF8�BOM_UTF16_LE�BOM_UTF16_BEr��_null�_null2�_null3)�data�sampleZ	nullcountr>r>r?�guess_json_utf�s*
283  r&cCslt|�}|\}}}}}}}	|j}
284  |
285  s||
286  }
287  }|r d�||
288  g�}
289  |dur&|}|dur,d}t||
290  |d||	f�S)z�Given a URL that may or may not have a scheme, prepend the given scheme.
291      Does not replace a present scheme with the one provided as an argument.
292  
293      :rtype: str
294      �@Nr�)rrhrwr)rj�
295  new_schemer�r�authr9r�rb�query�fragmentrhr>r>r?�prepend_scheme_if_needed�s
296  r,c	Cs@t|�}z
t|j�t|j�f}W|Sttfyd}Y|Sw)z{Given a url with authentication components, extract them into a tuple of
297      username,password.
298  
299      :rtype: (str,str)
300      )r�r�)rr�username�passwordrNr�)rjr�r)r>r>r?�get_auth_from_url�s��r/cCsv|\}}|D]}t|�tvr td|�d|�d|�dt|�����qt|dtt|�d�t|dtt|�d�d	S)
301  z�Verifies that header parts don't contain leading whitespace
302      reserved characters, or return characters.
303  
304      :param header: tuple, in the format (name, value).
305      z
Header part (z) from {�: z$} must be of type str or bytes, not rnrr�rN)�typer	r�_validate_header_part)r�rnr��partr>r>r?�check_header_validitys���r4cCs"|�|�std|�d|����dS)NzSInvalid leading whitespace, reserved character(s), or returncharacter(s) in header r0)r7r)Zheader_partZheader_kind�	validatorr>r>r?r2s
306  ����r2cCsFt|�\}}}}}}|s||}}|�dd�d}t|||||df�S)zW
307      Given a url remove the fragment and the authentication part.
308  
309      :rtype: str
310      r'rrpr�)r�rsplitr)rjrrhrbr�r*r+r>r>r?�
urldefragauths
311  
312  r7cCsRt|jdd�}|dur%t|jt�r%z||j�WdSty$td��wtd��)zfMove file pointer back to its recorded starting position
313      so it can be read again on redirect.
314      rJNz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)rr�bodyrf�_body_positionrr2r)�prepared_request�	body_seekr>r>r?�rewind_body/s
315  ���r<)Fr�)T)r)h�__doc__r��
316  contextlibrLrOr6r�r��sysr|rSrx�collectionsr�urllib3.utilrrr�rr�_internal_utilsr	r
317  �compatrrr
rrrrr�rrrrrrr�cookiesr�
318  exceptionsrrrr�
319  structuresrra�where�DEFAULT_CA_BUNDLE_PATH�
DEFAULT_PORTSrwr4r�platformr@rDrWrmrur��contextmanagerr~r�r�r�r�r�r�r�r�r�r�r�r�r��	frozensetr�r�r�r�r�r�r�r�rrrrrrr�encoder!r"r#r&r,r/r4r2r7r<r>r>r>r?�<module>s� $	
320  �
321  $	
322  B9%
323   
324  #
325  (�
326  
327  <
328  
329  	
330  &