
    <|hԇ              	          d Z ddlmZ ddlZej
                  ZddlZddlmZm	Z	 ddlm
Z ddlmZ eZddlmZ g dZ eed	      rej+                  d	       g Znd	gZdd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z(  ee e)       edgz   d      Z*ee*z   ez   Z+de+v re+jY                  d       ejZ                  Z. G d  d!ej^                        Z0 G d" d#e1      Z2 G d$ d%e.      Z- G d& d'e      Z3e3e-_4         ed(      Z5 ed)      Z6 ed*      Z7ddd+ee$dd,d,df	d-Z8e$dfd.Z9y)/zSSL wrapper for socket objects on Python 3.

For the documentation, refer to :mod:`ssl` module manual.

This module implements cooperative SSL socket wrappers.
    )absolute_importN)sockettimeout_default)timeout)copy_globals)ref)
SSLContext	SSLSocketget_server_certificatewrap_socket)AF_INET)SOCK_STREAM)SO_TYPE)
SOL_SOCKET)SSLWantReadError)SSLWantWriteError)SSLEOFError)SSLZeroReturnError)	CERT_NONE)SSLError)SSL_ERROR_EOF)SSL_ERROR_WANT_READ)SSL_ERROR_WANT_WRITE)PROTOCOL_SSLv23)CHANNEL_BINDING_TYPES)CERT_REQUIRED)DER_cert_to_PEM_cert)create_connectionr    )names_to_ignoredunder_names_to_keep
namedtuplec                   "     e Zd ZdZ fdZ xZS )_contextawaresock)_sslsockc                 8    t         |   ||||       || _        y N)super__init__r%   )selffamilytypeprotofilenosslsocket_wref	__class__s         I/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/ssl.pyr)   z_contextawaresock.__init__[   s    uf5&    )__name__
__module____qualname__	__slots__r)   __classcell__r0   s   @r1   r$   r$   X   s    I' 'r2   r$   c                       e Zd ZdZd Zd Zy)	_Callbackuser_functionc                     || _         y r'   r;   )r*   r<   s     r1   r)   z_Callback.__init__d   s
    *r2   c                 H    |j                         } | j                  |g| S r'   )r%   r<   )r*   connargss      r1   __call__z_Callback.__call__g   s%    }}!t!!$...r2   N)r3   r4   r5   r6   r)   rA   r   r2   r1   r:   r:   `   s    "I+/r2   r:   c                   @    e Zd ZdZdZ	 	 	 	 	 ddZ eej                  d      rZej                  j                   fd       Zej                  j                   fd       Z
ej                  j                   fd       Z eed      r<ej                  j                   fd	       Zej                  j                   fd
       Z eed      re fd       Zej                   fd       Z eed      r"e fd       Zej                   fd       Z xZS  fdZ xZS )r	   r   Nc           	      2    | j                  |||||| |      S )N)sockserver_sidedo_handshake_on_connectsuppress_ragged_eofsserver_hostname_context_session)sslsocket_class)r*   rD   rE   rF   rG   rH   sessions          r1   r   zSSLContext.wrap_socketr   s0     ##;$;!5+ $  	r2   setterc                 J    t         t        t        
  j                  | |       y r'   )r(   orig_SSLContextoptions__set__r*   valuer0   s     r1   rP   zSSLContext.options   s    /?;CCD%Pr2   c                 J    t         t        t        
  j                  | |       y r'   )r(   rO   verify_flagsrQ   rR   s     r1   rU   zSSLContext.verify_flags   s    /?@HHuUr2   c                 J    t         t        t        
  j                  | |       y r'   )r(   rO   verify_moderQ   rR   s     r1   rW   zSSLContext.verify_mode   s    /??GGeTr2   minimum_versionc                 J    t         t        t        
  j                  | |       y r'   )r(   rO   rX   rQ   rR   s     r1   rX   zSSLContext.minimum_version       /?CKKDRWXr2   c                 J    t         t        t        
  j                  | |       y r'   )r(   rO   maximum_versionrQ   rR   s     r1   r\   zSSLContext.maximum_version   rZ   r2   _msg_callbackc                 T    t         |   }t        |t              r|j                  }|S r'   )r(   r]   
isinstancer:   r<   r*   resultr0   s     r1   r]   zSSLContext._msg_callback   s'    W*F&),--Mr2   c                     |rt        |      rt        |      }t        t        _        	 t
        t        t          j                  | |       t        t        _        y # t        t        _        w xY wr'   )callabler:   rO   __ssl__r	   r(   r]   rQ   rR   s     r1   r]   zSSLContext._msg_callback   sK    %!%(!0G0j*;CCD%P%/"Z"s   "A A-sni_callbackc                 T    t         |   }t        |t              r|j                  }|S r'   )r(   re   r_   r:   r<   r`   s     r1   re   zSSLContext.sni_callback   s'    W)F&),--Mr2   c                 z    |rt        |      rt        |      }t        t        t          j                  | |       y r'   )rc   r:   r(   rO   re   rQ   rR   s     r1   re   zSSLContext.sni_callback   s-    %!%(/?@HHuUr2   c                 T    |rt        |      rt        |      }t        |   |       y r'   )rc   r:   r(   set_servername_callback)r*   server_name_callbackr0   s     r1   ri   z"SSLContext.set_servername_callback   s(    #1E(F'01E'F$G+,@Ar2   )FTTNN)r3   r4   r5   r6   rK   r   hasattrrO   rP   rM   rU   rW   rX   r\   propertyr]   re   ri   r7   r8   s   @r1   r	   r	   k   sl   I O,1,0)-$( 	  &&1 
	 	 	'	'	Q 
(	Q 
	%	%	,	,	V 
-	V 
	$	$	+	+	U 
,	U  12 
	(	(	/	/	Y 
0	Y 
	(	(	/	/	Y 
0	Y 0 
	 
	 
			0 
	0 /		 
	
 
			V 
	V	B 	Br2   r	   c                        e Zd ZdZddddeeddeeddddddddfdZd Z	d Z
ed	        Zej                  d
        Zed        Zej                  d        Zed        Zd Zd4dZd Zd5dZd Zd6dZd Z eed      r	d Zd Zd Zd Zd ZdefdZd4dZ d Z!d7dZ"d8dZ#d9d Z$d8d!Z%d9d"Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d:d*Z.d+ Z/d, Z0d- Z1 fd.Z2d;d/Z3d0 Z4 ee5jl                  d1      r
d2 Z7d3 Z8 xZ9S  xZ9S )<r
   zp
    gevent `ssl.SSLSocket
    <https://docs.python.org/3/library/ssl.html#ssl-sockets>`_ for
    Python 3.
    NFTr   c                    |r|| _         n|r|st        d      |r|st        d      |r|s|}t        |      | _         || j                   _        |r| j                   j	                  |       |r| j                   j                  ||       |r| j                   j                  |       |r| j                   j                  |       || _        || _	        || _
        || _        || _        || _        |j                  t        t               t"        k7  rt%        d      |r|rt        d      |t        d      | j                   j&                  r|st        d      || _        || _        || _        || _        || _        d}d }|g|j3                         }t5        j6                  | |j8                  |j:                  |j<                  |j?                                |jA                          n3|t5        j6                  | |	       nt5        j6                  | |	|
|
       d| _!        d | _"        	 | jF                  jI                          d}| ja                  |       || _1        |rL	 | je                  ||      | _"        |r1| j3                         }|dk(  rt        d      | jg                          y y y # tJ        $ r}|jL                  tL        jN                  k7  r| jQ                           | jS                         }| jU                  d       	 | jW                  d      }nE# tJ        $ r9}|jL                  tL        jN                  tL        jX                  fvr d}Y d }~nd }~ww xY w| jU                  |       |rId}t[        jL                  |      }||_.        d |_/        	 | jQ                          |# tJ        $ r Y |w xY wY d }~zd }~ww xY w# tJ        $ r | jQ                           w xY w)Nz5certfile must be specified for server-side operationszcertfile must be specifiedz!only stream sockets are supportedz4server_hostname can only be specified in client modez,session can only be specified in client modez'check_hostname requires server_hostnameF)r+   r,   r-   r.   )r.   )r+   r,   r-   T   r2   z5Closed before TLS handshake with data in recv buffer.        zHdo_handshake_on_connect should not be specified for non-blocking sockets)4rI   
ValueErrorr	   rW   load_verify_locationsload_cert_chainset_npn_protocolsset_cipherskeyfilecertfile	cert_reqsssl_versionca_certsciphers
getsockoptr   r   r   NotImplementedErrorcheck_hostnamerJ   rE   rH   rF   rG   
gettimeoutr   r)   r+   r,   r-   r.   detach_closed_sslobj_sockgetpeernameOSErrorerrnoENOTCONNclosegetblockingsetblockingrecvEINVALr   reasonlibrary
settimeout
_connected_SSLSocket__create_sslobjdo_handshake)r*   rD   rv   rw   rE   rx   ry   rz   rF   r+   r,   r-   r.   rG   npn_protocolsr{   rH   rJ   rI   	connectedsock_timeouteblockingnotconn_pre_handshake_datar    notconn_pre_handshake_data_errorr   s                              r1   r)   zSSLSocket.__init__   s    $DM8  ". / /x !=>>"&{3DM(1DMM%33H=--h@//>))'2"DL$DM&DN*D$DM"DL ??:w/;>%&IJJ  "2 3 3#  "2 3 3==''FGG &.'>$$8!	??,LOOD#';;!%"&**#';;=	2 KKMOOD0OODd%H(	JJ""$N I%##33KJ*"oo/G#~()stt%%' + U  $	7ww%..( 

 '')HU#
1
 .2YYq\* 1775>>5<<"@@-0*	1
 X&) Q3;AGGV3L0:@07;?08JJL 76  66 */$	7j  

st   ,J/ #A	O
 /
O9AO	LO	M$/MOM<ON,*O,	N95O8N99OO
O%c           	      2    t        ||||t        |             S r'   )r$   _wref)r*   r+   r,   r-   r.   s        r1   _gevent_sock_classzSSLSocket._gevent_sock_classd  s     ufeDkJJr2   c                 v    d| j                   d| j                  | j                  j                         S dS )Nz server=z	, cipher= )rE   r   cipherr*   s    r1   _extra_reprzSSLSocket._extra_reprg  sA    %)\\%=DLL!E
 	
CEE
 	
r2   c                     | j                   S r'   )rI   r   s    r1   contextzSSLSocket.contextn  s    }}r2   c                 4    || _         || j                  _        y r'   )rI   r   r   )r*   ctxs     r1   r   zSSLSocket.contextr  s    "r2   c                 H    | j                   | j                   j                  S y)z!The SSLSession for client socket.N)r   rL   r   s    r1   rL   zSSLSocket.sessionw  s#     <<#<<''' $r2   c                 N    || _         | j                  || j                  _        y y r'   )rJ   r   rL   )r*   rL   s     r1   rL   zSSLSocket.session}  s$    <<##*DLL  $r2   c                 H    | j                   | j                   j                  S y)z.Was the client session reused during handshakeN)r   session_reusedr   s    r1   r   zSSLSocket.session_reused  s#     <<#<<... $r2   c                 F    t        d| j                  j                  z        )NzCan't dup() %s instances)r}   r0   r3   r   s    r1   dupzSSLSocket.dup  s$    !"<"&.."9"9#: ; 	;r2   c                      y r'   r   )r*   msgs     r1   _checkClosedzSSLSocket._checkClosed  s    r2   c                 >    | j                   s| j                          y y r'   )r   r   r   s    r1   _check_connectedzSSLSocket._check_connected  s    
  r2   c                    | j                          d}	 | j                  st        d      |dk(  r|dS dS 	 |!|| j                  j                  ||      z  }|S | j                  j                  |xs d      S # t        $ r4 | j
                  dk(  r | j                  | j                  t               Y nt        $ r4 | j
                  dk(  r | j                  | j                  t               Y n]t        $ r | j                  r
|dcY S |cY S  t        $ r3}|j                  d   t        k(  r| j                  r|dn|cY d}~S  d}~ww xY w;)zRead up to LEN bytes and return them.
        Return zero-length string on EOF.

        .. versionchanged:: 24.2.1
           No longer requires a non-None *buffer* to implement ``len()``.
           This is a backport from 3.11.8.
        r   z'Read on closed or unwrapped SSL socket.Nr2      rp   timeout_exc)r   r   rq   readr   r   _wait_read_event_SSLErrorReadTimeoutr   _write_eventr   rG   r   r@   r   )r*   nbytesbuffer
bytes_readexs        r1   r   zSSLSocket.read  sG    	 
<< !JKK{$ns3!3%$,,"3"3FF"CCJ%%||((488# O<<3&

4++9M
N$ P<<3&

4,,:N
O% ,,"(.3@j@  771:.43L3L"(.3j@5 sA   "A9 A9 9:E
59E
0E

E
	E
'E>E
EE
c                    | j                          	 | j                  st        d      	 | j                  j                  |      S # t        $ r}|j
                  d   t        k(  r2| j                  dk(  r | j                  | j                  t               nI|j
                  d   t        k(  r2| j                  dk(  r | j                  | j                  t               n Y d}~nd}~ww xY w)zhWrite DATA to the underlying SSL channel.  Returns
        number of bytes of DATA actually transmitted.z(Write on closed or unwrapped SSL socket.r   rp   r   N)r   r   rq   writer   r@   r   r   r   r   _SSLErrorWriteTimeoutr   r   )r*   datar   s      r1   r   zSSLSocket.write  s     	<< !KLL||))$// 
771:!44||s*JJt//=RJSWWQZ#77||s*JJt00>SJT
 s   A 	C)BC$$C)c                     | j                          | j                          	 | j                  j                  } ||      S # t        $ r | j                  j
                  }Y )w xY w)zReturns a formatted version of the data in the
        certificate provided by the other end of the SSL channel.
        Return None if no certificate was provided, {} if a
        certificate was provided, but not validated.)r   r   r   peer_certificateAttributeErrorgetpeercert)r*   binary_formcs      r1   r   zSSLSocket.getpeercert  s\     		)--A
 ~	  	)((A	)s   A   A"!A"c                     | j                          | j                  rt        j                  sy | j                  j	                         S r'   )r   r   _sslHAS_NPNselected_npn_protocolr   s    r1   r   zSSLSocket.selected_npn_protocol  s1    ||4<<||1133r2   HAS_ALPNc                     | j                          | j                  rt        j                  sy | j                  j	                         S r'   )r   r   r   r   selected_alpn_protocolr   s    r1   r   z SSLSocket.selected_alpn_protocol  s1    <<t}}<<6688r2   c                 6    | j                   j                         S )zReturn a list of ciphers shared by the client during the handshake or
            None if this is not a valid server connection.
            )r   shared_ciphersr   s    r1   r   zSSLSocket.shared_ciphers  s     <<..00r2   c                 P    | j                   sy| j                   j                         S )z^Return a string identifying the protocol version used by the
            current SSL channel. N)r   versionr   s    r1   r   zSSLSocket.version  s!     <<<<''))r2   c                 p    | j                          | j                  sy | j                  j                         S r'   )r   r   r   r   s    r1   r   zSSLSocket.cipher  s+    ||||""$$r2   c                 p    | j                          | j                  sy | j                  j                         S r'   )r   r   compressionr   s    r1   r   zSSLSocket.compression   s+    ||||''))r2   c                    | j                          |t        u r| j                  }| j                  r:|dk7  rt	        d| j
                  z        	 	 | j                  j                  |      S t        j                  | |||      S # t        $ r/ | j                  dk(  rY y| j                  | j                         Y n:t        $ r/ | j                  dk(  rY y| j                  | j                         Y nw xY w)Nr   z3non-zero flags not allowed in calls to send() on %srp   )r   r   r   r   rq   r0   r   r   r   r   r   r   r   send)r*   r   flagsr   s       r1   r   zSSLSocket.send&  s    o%llG<<z INN#$ $ 	2<<--d33 ;;tT5':: ( 1||s* JJt//0( 2||s* JJt0012 s$   B C1C1:C1C10C1c                     | j                          | j                  rt        d| j                  z        |t	        j
                  | ||      S t	        j
                  | |||      S )Nz%sendto not allowed on instances of %s)r   r   rq   r0   r   sendto)r*   r   flags_or_addraddrs       r1   r   zSSLSocket.sendto=  s^    <<D!^^, - -<==t];;}}T4==r2   c                 2    t        d| j                  z        )Nz&sendmsg not allowed on instances of %sr}   r0   r*   r@   kwargss      r1   sendmsgzSSLSocket.sendmsgF  s      ""J"&..#1 2 	2r2   c                     | j                          | j                  r|dk7  rt        d| j                  z        	 t	        j
                  | ||      S # t        $ r | j                  dk(  rt        d       w xY w)Nr   z6non-zero flags not allowed in calls to sendall() on %srp   z&The operation did not complete (write))	r   r   rq   r0   r   sendall_socket_timeoutr   r   )r*   r   r   s      r1   r   zSSLSocket.sendallL  sz    <<z LNN#$ $	>>$e44 	||s"'(PQQ		s   A %A7c                     | j                          | j                  r4|dk7  rt        d| j                  z        |dk(  ry| j	                  |      S t        j                  | ||      S )Nr   z3non-zero flags not allowed in calls to recv() on %sr2   )r   r   rq   r0   r   r   r   r*   buflenr   s      r1   r   zSSLSocket.recv\  sh    <<z INN#$ $ { 99V$${{4//r2   c                 0   | j                          |&| t        |      5 }|j                  }ddd       |sd}| j                  r/|dk7  rt	        d| j
                  z        | j                  ||      S t        j                  | |||      S # 1 sw Y   `xY w)z
        .. versionchanged:: 24.2.1
           No longer requires a non-None *buffer* to implement ``len()``.
           This is a backport from 3.11.8.
        Nr   r   z8non-zero flags not allowed in calls to recv_into() on %s)	r   
memoryviewr   r   rq   r0   r   r   	recv_into)r*   r   r   r   views        r1   r   zSSLSocket.recv_intoj  s     	>!' )4![[F)<<z ![^b^l^l!lmm99VV,,ffe<<) )s   BBc                     | j                          | j                  rt        d| j                  z        t	        j
                  | ||      S )Nz'recvfrom not allowed on instances of %s)r   r   rq   r0   r   recvfromr   s      r1   r   zSSLSocket.recvfrom~  sD    <<F!^^, - -tVU33r2   c                     | j                          | j                  rt        d| j                  z        t	        j
                  | |||      S )Nz,recvfrom_into not allowed on instances of %s)r   r   rq   r0   r   recvfrom_into)r*   r   r   r   s       r1   r   zSSLSocket.recvfrom_into  sH    <<K!^^, - -##D&&%@@r2   c                 2    t        d| j                  z        )Nz&recvmsg not allowed on instances of %sr   r   s      r1   recvmsgzSSLSocket.recvmsg  s    !"J"&..#1 2 	2r2   c                 2    t        d| j                  z        )Nz+recvmsg_into not allowed on instances of %sr   r   s      r1   recvmsg_intozSSLSocket.recvmsg_into  s     ! #')-#8 9 	9r2   c                 p    | j                          | j                  r| j                  j                         S yNr   )r   r   pendingr   s    r1   r   zSSLSocket.pending  s+    <<<<''))r2   c                 ^    | j                          d | _        t        j                  | |       y r'   )r   r   r   shutdown)r*   hows     r1   r   zSSLSocket.shutdown  s#    c"r2   c                 h   | j                   st        dt        |       z         	 | j                   j                  }| j                  }	 	  |       }	 d | _         || j                  u sJ | S # t        $ r | j                   j
                  }Y Pw xY w# t        $ r. | j                  dk(  r | j                  | j                         Y nnt        $ r. | j                  dk(  r | j                  | j                         Y n9t        $ r Y t        $ r Y t        $ r}|j                   dk(  rY d }~ق d }~ww xY w)NNo SSL wrapper around rp   r   )r   rq   strr   r   unwrapr   r   r   r   r   r   r   r   r   r   r   )r*   r   sr   s       r1   r   zSSLSocket.unwrap  s+   ||5D	ABB	+ ||,,H JJJ6  DJJ e  	+ ||**H	+ $ - <<3&

4++,$ .<<3&

4,,- % 
  77a< / sG   A* 	B *BB4D03D0:D0D0D0D+*D++D0c                 <    d | _         t        j                  |        y r'   )r   r   _real_closer   s    r1   r   zSSLSocket._real_close  s    4 r2   c                 T   | j                          	 	 | j                  j                          y# t        $ r4 | j                  dk(  r | j                  | j                  t               Y n?t        $ r4 | j                  dk(  r | j                  | j                  t               Y nw xY w)zPerform a TLS/SSL handshake.rp   r   N)
r   r   r   r   r   r   r   _SSLErrorHandshakeTimeoutr   r   r   s    r1   r   zSSLSocket.do_handshake  s    
U))+# T<<3&

4++9R
S$ U<<3&

4,,:S
TU s   . :B&*9B&%B&c                 ~    | j                   j                  | j                  || j                  | j                  |      S )N)ownerrL   )r   _wrap_socketr   rH   )r*   rE   rL   s      r1   __create_sslobjzSSLSocket.__create_sslobj  s8    ||((JJT%9%9**g ) 
 	
r2   c                 |   | j                   rt        d      | j                  rt        d      | j                  d| j                        | _        	 |rt        j                  | |      }nd }t        j                  | |       |s#| j                  r| j                          d| _        |S # t        $ r	 d | _         w xY w)Nz!can't connect in server-side modez/attempt to connect already-connected SSLSocket!FT)rE   rq   r   r   rJ   r   r   
connect_exconnectrF   r   socket_error)r*   r   r  rcs       r1   _real_connectzSSLSocket._real_connect  s    @AA ??NOO++E4==A	&&tT2tT*//%%'"&I 	DL	s   AB) )B;c                 (    | j                  |d       y)QConnects to remote ADDR, and then wraps the connection in
        an SSL channel.FNr  r*   r   s     r1   r	  zSSLSocket.connect  s     	4'r2   c                 &    | j                  |d      S )r  Tr  r  s     r1   r  zSSLSocket.connect_ex  s     !!$--r2   c                     t         |          \  }}	 | j                  j                  || j                  | j
                  d      }||fS #  |j                           xY w)z
        Accepts a new connection from a remote client, and returns a
        tuple containing that new connection wrapped with a
        server-side SSL channel, and the address of the remote client.
        T)rF   rG   rE   )r(   acceptrI   r   rF   rG   r   )r*   newsockr   r0   s      r1   r  zSSLSocket.accept  sj     (
	mm//(,(D(D%)%>%> 	 0 G D= 	MMOs   6A Ac                    t        | j                  d      r| j                  j                  |      S |t        vrt	        d      |dk7  rt        dj                  |            | j                  y| j                  j                         S )zGet channel binding data for current connection.  Raise ValueError
        if the requested `cb_type` is not supported.  Return bytes of the data
        or None if the data is not available (e.g. before the handshake).
        get_channel_bindingz Unsupported channel binding type
tls-uniquez({0} channel binding type not implementedN)rk   r   r  r   rq   r}   formattls_unique_cb)r*   cb_types     r1   r  zSSLSocket.get_channel_binding-  s}    
 4<<!67<<33G<<//?@@l"%&P&W&WX_&`aa<<||))++r2   c                 |    | j                   r| j                   j                         S t        dt        |       z         )Nr   )r   verify_client_post_handshakerq   r   r   s    r1   r  z&SSLSocket.verify_client_post_handshake=  s1    <<<<<<>>1CI=>>r2   get_verified_chainc                     | j                   j                         }|g S |D cg c]!  }|j                  t        j                        # c}S c c}w r'   )r   r  public_bytesr   ENCODING_DERr*   chaincerts      r1   r  zSSLSocket.get_verified_chainE  sC    LL335E}	EJKTD%%d&7&78KKK   &Ac                     | j                   j                         }|g S |D cg c]!  }|j                  t        j                        # c}S c c}w r'   )r   get_unverified_chainr  r   r   r!  s      r1   r&  zSSLSocket.get_unverified_chainM  sC    LL557E}	EJKTD%%d&7&78KKKr$  r'   )i  N)F)r   )r   r   r   )FN)r  ):r3   r4   r5   __doc__r   r   r   r   r)   r   r   rl   r   rM   rL   r   r   r   r   r   r   r   r   rk   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  rd   r
   r  r&  r7   r8   s   @r1   r
   r
      s    !$"i,t)-k4&*$!%KZK
   ^^# # ( (
 ^^+ +
 / /
;2z. 4 tZ 	9	1	*%*  !/ ;.>2 0=(4A29#
:x!U&
0(
.
&, ? w  "67	L	L 8r2   r
   zThe read operation timed outzThe write operation timed outz!The handshake operation timed outFTc
                 ,    t        | |||||||||	
      S )N
rD   rv   rw   rE   rx   ry   rz   rF   rG   r{   )r
   r)  s
             r1   r   r   _  s*     $(!,	!,x-D*>$& &r2   c                     | \  }}|t         }nt        }t        |       5 }t        ||||      5 }|j	                  d      }ddd       ddd       dx}}t              S # 1 sw Y    xY w# 1 sw Y   $xY w)zRetrieve the certificate from the server at the specified address,
    and return it as a PEM-encoded string.
    If 'ca_certs' is specified, validate the server cert against it.
    If 'ssl_version' is specified, use it in the connection attempt.N)ry   rx   rz   T)r   r   r   r   r   r   )r   ry   rz   _rx   rD   sslsockdercerts           r1   r   r   n  s     DAq!			4	  0D;#,xA 	0DK))$/G	00 Gd((		0 	00 0s"   A-A!A-!A*	&A--A6):r'  
__future__r   sslrd   r   r   gevent.socketr   r   r   r   gevent._utilr   r   r
  weakrefr   r   __implements__rk   append	__extra__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   globals__imports____all__remover	   rO   r   r$   objectr:   r
   rK   r   r   r  r   r   r   r2   r1   <module>r;     s   ' ||  2 4 %   7M"-(I 	I       !  "    # $  &  $ ! WY"hZ/	 ;
&
27NN< $$'11 '	/ 	/`B `BFE
L E
LP '
  ''EF '(GH +,OP  #T!Y+d(,%)& .=t )r2   