§
    ¡˜ºhjl  ã                   óö  — U d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZ 	 ddlZej        ej        ej        ej        dœZ eed¦  «        oej        Zn# e$ r dZdZY nw xY wd	d
lmZmZmZmZ dZ e!e"d<   dZ#e!e"d<   dZ$e!e"d<   dZ%e!e"d<   de&de'fd„Z( G d„ de¦  «        Z) G d„ de)¦  «        Z* G d„ de*¦  «        Z+ G d„ de¦  «        Z, G d„ de,¦  «        Z- G d „ d!e,¦  «        Z.dS )"zGModule implementing low-level socket communication with MySQL servers.
é    N)ÚABCÚabstractmethod)Údeque)ÚAnyÚDequeÚListÚOptionalÚTupleÚUnion)ÚTLSv1úTLSv1.1úTLSv1.2úTLSv1.3ÚHAS_TLSv1_3Fé   )ÚInterfaceErrorÚNotSupportedErrorÚOperationalErrorÚProgrammingErroré2   ÚMIN_COMPRESS_LENGTHiÿÿÿ ÚMAX_PAYLOAD_LENGTHé   ÚPACKET_HEADER_LENGTHé   ÚCOMPRESSED_PACKET_HEADER_LENGTHÚerrÚreturnc                 óP   — | j         st          | ¦  «        n| j         › d| j        › �S )z`Reformat the IOError error message.

    This function reformats the IOError error message.
    ú )ÚerrnoÚstrÚstrerror)r   s    ú_/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/mysql/connector/network.pyÚ_strioerrorr%   G   s-   € ð
 œ9ÐG�3ˆs‰8Œ8ˆ8¨S¬YÐ*GÐ*G¸¼Ð*GÐ*GÐGó    c                   ó˜   — e Zd ZdZe	 	 ddej        dededee	         dee	         ddfd	„¦   «         Z
edej        dedefd
„¦   «         ZdS )ÚNetworkBrokeraP  Broker class interface.

    The network object is a broker used as a delegate by a socket object. Whenever the
    socket wants to deliver or get packets to or from the MySQL server it needs to rely
    on its network broker (netbroker).

    The netbroker sends `payloads` and receives `packets`.

    A packet is a bytes sequence, it has a header and body (referred to as payload).
    The first `PACKET_HEADER_LENGTH` or `COMPRESSED_PACKET_HEADER_LENGTH`
    (as appropriate) bytes correspond to the `header`, the remaining ones represent the
    `payload`.

    The maximum payload length allowed to be sent per packet to the server is
    `MAX_PAYLOAD_LENGTH`. When  `send` is called with a payload whose length is greater
    than `MAX_PAYLOAD_LENGTH` the netbroker breaks it down into packets, so the caller
    of `send` can provide payloads of arbitrary length.

    Finally, data received by the netbroker comes directly from the server, expect to
    get a packet for each call to `recv`. The received packet contains a header and
    payload, the latter respecting `MAX_PAYLOAD_LENGTH`.
    NÚsockÚaddressÚpayloadÚpacket_numberÚcompressed_packet_numberr   c                 ó   — dS )aó  Send `payload` to the MySQL server.

        If provided a payload whose length is greater than `MAX_PAYLOAD_LENGTH`, it is
        broken down into packets.

        Args:
            sock: Object holding the socket connection.
            address: Socket's location.
            payload: Packet's body to send.
            packet_number: Sequence id (packet ID) to attach to the header when sending
                           plain packets.
            compressed_packet_number: Same as `packet_number` but used when sending
                                      compressed packets.

        Raises:
            :class:`OperationalError`: If something goes wrong while sending packets to
                                       the MySQL server.
        N© )Úselfr)   r*   r+   r,   r-   s         r$   ÚsendzNetworkBroker.sendg   ó   € € € r&   c                 ó   — dS )a)  Get the next available packet from the MySQL server.

        Args:
            sock: Object holding the socket connection.
            address: Socket's location.

        Returns:
            packet: A packet from the MySQL server.

        Raises:
            :class:`OperationalError`: If something goes wrong while receiving packets
                                       from the MySQL server.
            :class:`InterfaceError`: If something goes wrong while receiving packets
                                     from the MySQL server.
        Nr/   )r0   r)   r*   s      r$   ÚrecvzNetworkBroker.recvƒ   r2   r&   ©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úsocketr"   Úbytesr	   Úintr1   Ú	bytearrayr4   r/   r&   r$   r(   r(   O   sÆ   € € € € € ðð ð. ð (,Ø26ðð àŒmðð ðð ð	ð
   ”}ðð #+¨3¤-ðð 
ðð ð ñ „^ðð6 ð˜œð °ð ¸ð ð ð ñ „^ðð ð r&   r(   c                   óÊ   — e Zd ZdZdd„Zdd„Zdej        dededdfd	„Z	ddej        de
defd„Z	 	 ddej        dededee
         dee
         ddfd„Zdej        dedefd„ZdS )ÚNetworkBrokerPlainú,Broker class for MySQL socket communication.r   Nc                 ó   — d| _         d S ©Néÿÿÿÿ©Ú_pktnr©r0   s    r$   Ú__init__zNetworkBrokerPlain.__init__™   s   € ØˆŒˆˆr&   c                 ó*   — | j         dz   dz  | _         dS ©zIncrement packet id.r   é   NrD   rF   s    r$   Ú_set_next_pktnrz"NetworkBrokerPlain._set_next_pktnrœ   s   € à”{ Q‘¨#Ñ-ˆŒˆˆr&   r)   r*   Úpktc                 óÔ   — 	 |                      |¦  «         dS # t          $ r&}t          d|t          |¦  «        f¬¦  «        |‚d}~wt          $ r}t          d¬¦  «        |‚d}~ww xY w)z!Write packet to the comm channel.é  ©r!   ÚvaluesNiÖ  ©r!   )ÚsendallÚIOErrorr   r%   ÚAttributeError)r0   r)   r*   rL   r   s        r$   Ú	_send_pktzNetworkBrokerPlain._send_pkt    s•   € ð	8Ø�LŠL˜ÑÔÐÐÐøÝð 	ð 	ð 	Ý"Ø G­[¸Ñ-=Ô-=Ð#>ðñ ô àðøøøøõ ð 	8ð 	8ð 	8Ý"¨Ð.Ñ.Ô.°CÐ7øøøøð	8øøøs    ‚ ™
A'£!AÁA'ÁA"Á"A'r   Úsizec                 óÌ   — t          |¦  «        }t          |¦  «        }|rC|                     ||¦  «        }|dk    r|dk    rt          d¬¦  «        ‚||d…         }||z  }|°C|S )z(Read `size` bytes from the comm channel.r   iÝ  rQ   N)r=   Ú
memoryviewÚ	recv_intor   )r0   r)   rV   rL   Úpkt_viewÚreads         r$   Ú_recv_chunkzNetworkBrokerPlain._recv_chunk«   s|   € å˜‰oŒoˆÝ˜c‘?”?ˆØð 	Ø—>’> (¨DÑ1Ô1ˆDØ�qŠyˆy˜T AšX˜XÝ$¨4Ð0Ñ0Ô0Ð0Ø   ”ˆHØ�D‰LˆDð ð 	ð ˆ
r&   r+   r,   r-   c           
      óX  — |€|                       ¦   «          n|| _        t          |¦  «        t          k    r–d}t	          t          |¦  «        t          z  ¦  «        D ]e}|                      ||dt          j        d| j        ¦  «        z   |||t          z   …         z   ¦  «         |                       ¦   «          |t          z  }Œf||d…         }|                      ||t          j        dt          |¦  «        ¦  «        dd…         t          j        d| j        ¦  «        z   |z   ¦  «         dS )z¤Send payload to the MySQL server.

        If provided a payload whose length is greater than `MAX_PAYLOAD_LENGTH`, it is
        broken down into packets.
        Nr   ó   ÿÿÿú<Bú<Ié   )rK   rE   Úlenr   ÚrangerU   ÚstructÚpack)r0   r)   r*   r+   r,   r-   ÚoffsetÚ_s           r$   r1   zNetworkBrokerPlain.send·   sA  € ð Ð Ø× Ò Ñ"Ô"Ð"Ð"à'ˆDŒKõ ˆw‰<Œ<Õ-Ò-Ð-ØˆFÝ�3˜w™<œ<Õ+=Ñ=Ñ>Ô>ð 
-ð 
-�à—’ØØØ#Ý”k $¨¬Ñ4Ô4ñ5à˜f vÕ0BÑ'BÐBÔCñDñô ð ð ×$Ò$Ñ&Ô&Ð&ØÕ,Ñ,��Ø˜f˜g˜gÔ&ˆGØ�ŠØØÝŒK˜�c '™lœlÑ+Ô+¨A¨a¨CÔ0ÝŒk˜$ ¤Ñ,Ô,ñ-àññ	
ô 	
ð 	
ð 	
ð 	
r&   c                 ó>  — 	 |                       |t          ¬¦  «        }t          j        d|dd…         dz   ¦  «        d         |d         c}| _        ||                       ||¬¦  «        z   S # t
          $ r&}t          d|t          |¦  «        f¬¦  «        |‚d}~ww xY w)	z+Receive `one` packet from the MySQL server.©rV   r`   r   ra   ó    rN   rO   N)r\   r   rd   ÚunpackrE   rS   r   r%   )r0   r)   r*   ÚheaderÚpayload_lenr   s         r$   r4   zNetworkBrokerPlain.recvã   sÀ   € ð	à×%Ò% dÕ1EÐ%ÑFÔFˆFõ ”˜d F¨1¨Q¨3¤K°'Ñ$9Ñ:Ô:¸1Ô=Ø�q”	ð %ˆK˜œð ˜D×,Ò,¨T¸Ð,ÑDÔDÑDÐDøÝð 	ð 	ð 	Ý"Ø G­[¸Ñ-=Ô-=Ð#>ðñ ô àðøøøøð	øøøs   ‚A)A, Á,
BÁ6!BÂB©r   N)r   r5   )r6   r7   r8   r9   rG   rK   r:   r"   r;   rU   r<   r=   r\   r	   r1   r4   r/   r&   r$   r?   r?   –   s5  € € € € € Ø6Ð6ðð ð ð ð.ð .ð .ð .ð	8˜fœmð 	8°cð 	8Àð 	8È$ð 	8ð 	8ð 	8ð 	8ð
ð 
 ¤ð 
°Sð 
Àð 
ð 
ð 
ð 
ð" (,Ø26ð*
ð *
àŒmð*
ð ð*
ð ð	*
ð
   ”}ð*
ð #+¨3¤-ð*
ð 
ð*
ð *
ð *
ð *
ðX˜œð °ð ¸ð ð ð ð ð ð r&   r?   c                   ó  ‡ — e Zd ZdZdˆ fd„Zedededee         fd„¦   «         Z	dd„Z
d	ej        d
ededdfˆ fd„Z	 	 dd	ej        d
ededee         dee         ddfˆ fd„Zd	ej        dededdfˆ fd„Zd	ej        d
edefˆ fd„Zˆ xZS )ÚNetworkBrokerCompressedr@   r   Nc                 ó|   •— t          ¦   «                              ¦   «          d| _        t          ¦   «         | _        d S rB   )ÚsuperrG   Ú_compressed_pktnrr   Ú_queue_read)r0   Ú	__class__s    €r$   rG   z NetworkBrokerCompressed.__init__ú   s3   ø€ Ý‰Œ×ÒÑÔÐØ!#ˆÔÝ-2©W¬WˆÔÐÐr&   r+   Úpktnrc                 óì  — g }t          | ¦  «        t          k    rƒd}t          t          | ¦  «        t          z  ¦  «        D ]R}|                     dt	          j        d|¦  «        z   | ||t          z   …         z   ¦  «         |dz   dz  }|t          z  }ŒS| |d…         } |                     t	          j        dt          | ¦  «        ¦  «        dd…         t	          j        d|¦  «        z   | z   ¦  «         |S )	z2Prepare a payload for sending to the MySQL server.r   r^   r_   r   rJ   Nr`   ra   )rb   r   rc   Úappendrd   re   )r+   rv   Úpktsrf   rg   s        r$   Ú_prepare_packetsz(NetworkBrokerCompressed._prepare_packetsÿ   s  € ð ˆõ ˆw‰<Œ<Õ-Ò-Ð-ØˆFÝ�3˜w™<œ<Õ+=Ñ=Ñ>Ô>ð -ð -�à—’Ø#Ý”k $¨Ñ.Ô.ñ/à˜f vÕ0BÑ'BÐBÔCñDñô ð ð
  ™ cÑ)�ØÕ,Ñ,��Ø˜f˜g˜gÔ&ˆGØ�ŠÝŒK˜�c '™lœlÑ+Ô+¨A¨a¨CÔ0µ6´;¸tÀUÑ3KÔ3KÑKÈgÑUñ	
ô 	
ð 	
ð ˆr&   c                 ó*   — | j         dz   dz  | _         dS rI   )rs   rF   s    r$   Ú_set_next_compressed_pktnrz2NetworkBrokerCompressed._set_next_compressed_pktnr  s   € à"&Ô"8¸1Ñ"<ÀÑ!CˆÔÐÐr&   r)   r*   rL   c                 óX  •— t          j        |¦  «        }t          j        dt	          |¦  «        ¦  «        dd…         t          j        d| j        ¦  «        z   t          j        dt	          |¦  «        ¦  «        dd…         z   |z   }t          ¦   «                              |||¦  «        S )z1Compress packet and write it to the comm channel.r`   r   ra   r_   )ÚzlibÚcompressrd   re   rb   rs   rr   rU   )r0   r)   r*   rL   Úcompressed_pktru   s        €r$   rU   z!NetworkBrokerCompressed._send_pkt  s™   ø€ åœ sÑ+Ô+ˆåŒK˜�c .Ñ1Ô1Ñ2Ô2°1°Q°3Ô7ÝŒk˜$ Ô 6Ñ7Ô7ñ8åŒk˜$¥ C¡¤Ñ)Ô)¨!¨A¨#Ô.ñ/ð ñð 	õ ‰wŒw× Ò   w°Ñ4Ô4Ð4r&   r,   r-   c           
      óÄ  •— |€|                       ¦   «          n|| _        |€|                      ¦   «          n|| _        t	          d¦  «                             |                      || j        ¦  «        ¦  «        }t          |¦  «        t          t          z
  k    r�d}t          t          |¦  «        t          z  ¦  «        D ]G}|                      |||||t          z   …         ¦  «         |                      ¦   «          |t          z  }ŒH|                      ||||d…         ¦  «         dS t          |¦  «        t          k    r|                      |||¦  «         dS t          ¦   «                              ||t          j        dt          |¦  «        ¦  «        dd…         t          j        d| j        ¦  «        z   t          j        dd¦  «        dd…         z   |z   ¦  «         dS )z¼Send `payload` as compressed packets to the MySQL server.

        If provided a payload whose length is greater than `MAX_PAYLOAD_LENGTH`, it is
        broken down into packets.
        Nr&   r   r`   ra   r_   )rK   rE   r|   rs   r=   Újoinrz   rb   r   r   rc   rU   r   rr   rd   re   )
r0   r)   r*   r+   r,   r-   Úpayload_preprf   rg   ru   s
            €r$   r1   zNetworkBrokerCompressed.send(  së  ø€ ð Ð Ø× Ò Ñ"Ô"Ð"Ð"à'ˆDŒKØ#Ð+Ø×+Ò+Ñ-Ô-Ð-Ð-à%=ˆDÔ"å  ‘~”~×*Ò*¨4×+@Ò+@ÀÈ$Ì+Ñ+VÔ+VÑWÔWˆÝˆw‰<Œ<Õ-Õ0DÑDÒDÐDð ˆFõ �3˜|Ñ,Ô,Õ0BÑBÑCÔCð -ð -�Ø—’Ø˜' <°¸ÕBTÑ9TÐ0TÔ#Uñô ð ð ×/Ò/Ñ1Ô1Ð1ØÕ,Ñ,��Ø�NŠN˜4 ¨,°v°w°wÔ*?Ñ@Ô@Ð@Ð@Ð@õ �7‰|Œ|Õ1Ò1Ð1à—’˜t W¨lÑ;Ô;Ð;Ð;Ð;õ ‘”×!Ò!ØØÝ”K ¥c¨,Ñ&7Ô&7Ñ8Ô8¸¸1¸Ô=Ý”k $¨Ô(>Ñ?Ô?ñ@å”k $¨Ñ*Ô*¨1¨Q¨3Ô/ñ0ð #ñ#ñô ð ð ð r&   Úcompressed_pllÚuncompressed_pllc                 ó”  •— t          ¦   «                              ||¬¦  «        }|dk    r|n t          t          j        |¦  «        ¦  «        }d}|t          |¦  «        k     �rdt          j        d|||t          z   dz
  …         dz   ¦  «        d         }t          |z   t          |¦  «        |z
  k    rÅt          ¦   «                              |t          ¬¦  «        }t          j        d|dd…         dz   ¦  «        d         |d         t          j        d|dd…         dz   ¦  «        d         	 c}| _
        }t          ¦   «                              ||¬¦  «        }||dk    r|nt          j        |¦  «        z  }| j                             |||t          z   |z   …         ¦  «         |t          |z   z  }|t          |¦  «        k     �°bd	S d	S )
z&Handle reading of a compressed packet.ri   r   r`   r   rj   ra   r   r   N)rr   r\   r=   r~   Ú
decompressrb   rd   rk   r   r   rs   rt   rx   )
r0   r)   r„   r…   r€   rL   rf   Úpllrl   ru   s
            €r$   Ú_recv_compressed_pktz,NetworkBrokerCompressed._recv_compressed_pkte  sã  ø€ õ ™œ×,Ò,¨T¸Ð,ÑGÔGˆð   1Ò$Ð$ð ˆNå�4œ?¨>Ñ:Ô:Ñ;Ô;ð 	ð ˆØ•s˜3‘x”xÒÑå”-Ø�c˜& 6Õ,@Ñ#@À1Ñ#DÐDÔEÈÑOñô àôˆCõ $ cÑ)­C°©H¬H°vÑ,=Ò=Ð=õ ™œ×,Ò,¨TÕ8WÐ,ÑXÔX�õ ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAØ˜1”IÝ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAðð	Ø"ØÔ*Ø$õ "'¡¤×!4Ò!4°TÀÐ!4Ñ!OÔ!O�ð à'¨1Ò,Ð,ð #�Nåœ¨Ñ8Ô8ñ�ð Ô×#Ò# C¨°Õ:NÑ1NÐQTÑ1TÐ(TÔ$UÑVÔVÐVØÕ*¨SÑ0Ñ0ˆFð? •s˜3‘x”xÒÑÐÐÐÐr&   c                 ó  •— | j         sÏ	 t          ¦   «                              |t          ¬¦  «        }t	          j        d|dd…         dz   ¦  «        d         |d         t	          j        d|dd…         dz   ¦  «        d         	 c}| _        }|                      |||¦  «         n3# t          $ r&}t          d|t          |¦  «        f¬	¦  «        |‚d
}~ww xY w| j         sd
S | j                              ¦   «         }|d         | _        |S )z{Receive `one` or `several` packets from the MySQL server, enqueue them, and
        return the packet at the head.
        ri   r`   r   ra   rj   r   r   rN   rO   N)rt   rr   r\   r   rd   rk   rs   r‰   rS   r   r%   ÚpopleftrE   )	r0   r)   r*   rl   r„   r…   r   rL   ru   s	           €r$   r4   zNetworkBrokerCompressed.recv•  s2  ø€ ð Ôð 	ðå™œ×,Ò,¨TÕ8WÐ,ÑXÔX�õ ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAØ˜1”IÝ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAðð	Ø"ØÔ*Ø$ð ×)Ò)¨$°Ð@PÑQÔQÐQÐQøÝð ð ð Ý&Ø¨µ¸SÑ1AÔ1AÐ'Bðñ ô àðøøøøðøøøð
 Ôð 	Ø�4àÔ×&Ò&Ñ(Ô(ˆØ˜!”fˆŒàˆ
s   ŠBB% Â%
CÂ/!CÃCrn   r5   )r6   r7   r8   r9   rG   Ústaticmethodr;   r<   r   rz   r|   r:   r"   rU   r	   r1   r‰   r=   r4   Ú__classcell__©ru   s   @r$   rp   rp   ÷   s¶  ø€ € € € € Ø6Ð6ð5ð 5ð 5ð 5ð 5ð 5ð
 ð %ð °ð ¸¸U¼ð ð ð ñ „\ðð2Dð Dð Dð Dð	5˜fœmð 	5°cð 	5Àð 	5È$ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð  (,Ø26ð;ð ;àŒmð;ð ð;ð ð	;ð
   ”}ð;ð #+¨3¤-ð;ð 
ð;ð ;ð ;ð ;ð ;ð ;ðz.1Ø”Mð.1Ø36ð.1ØJMð.1à	ð.1ð .1ð .1ð .1ð .1ð .1ð`˜œð °ð ¸ð ð ð ð ð ð ð ð ð ð r&   rp   c                   ó”  — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zd	e	e
         ddfd
„Zdededdfd„Z	 	 	 	 	 	 	 dde	e         de	e         de	e         de	e         de	e         de	ee                  de	ee                  defd„Z	 	 d dede	e
         de	e
         ddfd„Zdefd„Zedd„¦   «         Zeedefd„¦   «         ¦   «         ZdS )!ÚMySQLSocketz�MySQL socket communication interface.

    Examples:
        Subclasses: network.MySQLTCPSocket and network.MySQLUnixSocket.
    r   Nc                 óV   — d| _         d| _        d| _        t          ¦   «         | _        dS )zsNetwork layer where transactions are made with plain (uncompressed) packets
        is enabled by default.
        N)r)   Ú_connection_timeoutÚserver_hostr?   Ú
_netbrokerrF   s    r$   rG   zMySQLSocket.__init__¾  s,   € ð
 .2ˆŒ	Ø26ˆÔ Ø*.ˆÔÝ);Ñ)=Ô)=ˆŒˆˆr&   c                 ó,   — t          ¦   «         | _        dS )zIEnable network layer where transactions are made with compressed packets.N)rp   r”   rF   s    r$   Úswitch_to_compressed_modez%MySQLSocket.switch_to_compressed_modeÈ  s   € å1Ñ3Ô3ˆŒˆˆr&   c                 ó²   — 	 | j                              t          j        ¦  «         | j                              ¦   «          dS # t
          t          f$ r Y dS w xY w)z'Shut down the socket before closing it.N)r)   Úshutdownr:   Ú	SHUT_RDWRÚcloserT   ÚOSErrorrF   s    r$   r˜   zMySQLSocket.shutdownÌ  s_   € ð	ØŒI×Ò�vÔ/Ñ0Ô0Ð0ØŒI�OŠOÑÔÐÐÐøÝ¥Ð(ð 	ð 	ð 	ØˆDˆDð	øøøs   ‚=A ÁAÁAc                 ój   — 	 | j                              ¦   «          dS # t          t          f$ r Y dS w xY w)zClose the socket.N)r)   rš   rT   r›   rF   s    r$   Úclose_connectionzMySQLSocket.close_connectionÔ  sF   € ð	ØŒI�OŠOÑÔÐÐÐøÝ¥Ð(ð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ �2±2c                 ó.   — |                       ¦   «          d S ©N)r˜   rF   s    r$   Ú__del__zMySQLSocket.__del__Û  s   € Ø�Š‰Œˆˆˆr&   Útimeoutc                 óZ   — || _         | j        r| j                             |¦  «         dS dS )zSet the connection timeout.N)r’   r)   Ú
settimeout)r0   r¡   s     r$   Úset_connection_timeoutz"MySQLSocket.set_connection_timeoutÞ  s:   € à#*ˆÔ ØŒ9ð 	*ØŒI× Ò  Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*r&   Ússl_contextÚhostc                 ó:  — | j         €J ‚| j         j        dk    rt          d¦  «        ‚t          €t	          d¦  «        ‚	 |                     | j         |¬¦  «        | _         dS # t          $ r}t	          d¦  «        |‚d}~wt          j        t          f$ r+}t          d| j
        t          |¦  «        f¬¦  «        |‚d}~wt          j        $ r"}t          t          |¦  «        ¦  «        |‚d}~wt          $ r"}t          t          |¦  «        ¦  «        |‚d}~ww xY w)a�  Upgrade an existing connection to TLS.

        Args:
            ssl_context (ssl.SSLContext): The SSL Context to be used.
            host (str): Server host name.

        Returns:
            None.

        Raises:
            ProgrammingError: If the transport does not expose the socket instance.
            NotSupportedError: If Python installation has no SSL support.
        Nr   z,SSL is not supported when using Unix socketsú&Python installation has no SSL support)Úserver_hostnamerN   rO   )r)   Úfamilyr   Ússlr   Úwrap_socketÚ	NameErrorÚSSLErrorrS   r   r*   r%   ÚCertificateErrorr"   ÚNotImplementedError)r0   r¥   r¦   r   s       r$   Úswitch_to_sslzMySQLSocket.switch_to_sslä  sF  € ð ŒyÐ$Ð$Ð$àŒ9Ô˜qÒ Ð Ý"Ð#QÑRÔRÐRåˆ;Ý#Ð$LÑMÔMÐMð	4Ø#×/Ò/°´	È4Ð/ÑPÔPˆDŒIˆIˆIøÝð 	Wð 	Wð 	WÝ#Ð$LÑMÔMÐSVÐVøøøøÝ”�gÐ&ð 	ð 	ð 	Ý Ø D¤Lµ+¸cÑ2BÔ2BÐ#Cðñ ô àðøøøøõ Ô#ð 	4ð 	4ð 	4Ý ¥ S¡¤Ñ*Ô*°Ð3øøøøÝ"ð 	4ð 	4ð 	4Ý ¥ S¡¤Ñ*Ô*°Ð3øøøøð	4øøøs<   Á !A# Á#
DÁ-A=Á=DÂ&B<Â<DÃC+Ã+DÃ8DÄDFÚssl_caÚssl_certÚssl_keyÚssl_verify_certÚssl_verify_identityÚtls_versionsÚtls_cipher_suitesc                 óÔ  — | j         st          d¬¦  «        ‚t          €t          d¦  «        ‚|€g }|€g }	 |r |                     d¬¦  «         |d         }t
          |         }	t          j        |	¦  «        }
|dk    rZd	|vr|
xj        t          j        z  c_        d
|vr|
xj        t          j	        z  c_        d|vr|
xj        t          j
        z  c_        nt          j        ¦   «         }
||
_        |rt          j        |
_        n%|rt          j        |
_        nt          j        |
_        |
                     ¦   «          |rH	 |
                     |¦  «         n1# t&          t          j        f$ r}t          d|› �¦  «        |‚d}~ww xY w|rI	 |
                     ||¦  «         n1# t&          t          j        f$ r}t          d|› �¦  «        |‚d}~ww xY w|r(|
                     d                     |¦  «        ¦  «         |
S # t0          $ r}t          d¦  «        |‚d}~wt&          t2          t          j        t          j        f$ r"}t          t7          |¦  «        ¦  «        |‚d}~ww xY w)aÊ  Build a SSLContext.

        Args:
            ssl_ca: Certificate authority, opptional.
            ssl_cert: SSL certificate, optional.
            ssl_key: Private key, optional.
            ssl_verify_cert: Verify the SSL certificate if `True`.
            ssl_verify_identity: Verify host identity if `True`.
            tls_versions: TLS protocol versions, optional.
            tls_cipher_suites: Set of steps that helps to establish a secure connection.

        Returns:
            ssl_context (ssl.SSLContext): An SSL Context ready be used.

        Raises:
            NotSupportedError: Python installation has no SSL support.
            InterfaceError: Socket undefined or invalid ssl data.
        i   rQ   Nr¨   T)Úreverser   r   r   r   r   zInvalid CA Certificate: zInvalid Certificate/Key: ú:)r)   r   r«   r   ÚsortÚTLS_VERSIONSÚ
SSLContextÚoptionsÚOP_NO_TLSv1_2ÚOP_NO_TLSv1_1ÚOP_NO_TLSv1Úcreate_default_contextÚcheck_hostnameÚCERT_REQUIREDÚverify_modeÚCERT_OPTIONALÚ	CERT_NONEÚload_default_certsÚload_verify_locationsrS   r®   Úload_cert_chainÚset_ciphersr‚   r­   r°   r¯   r"   )r0   r²   r³   r´   rµ   r¶   r·   r¸   Útls_versionÚssl_protocolÚcontextr   s               r$   Úbuild_ssl_contextzMySQLSocket.build_ssl_context  sÑ  € ð8 Œyð 	-Ý  tÐ,Ñ,Ô,Ð,åˆ;Ý#Ð$LÑMÔMÐMàÐØˆLàÐ$Ø "Ðð4	4Øð 7Ø×!Ò!¨$Ð!Ñ/Ô/Ð/Ø*¨1œo�Ý+¨KÔ8�Ýœ.¨Ñ6Ô6�à )Ò+Ð+Ø ¨Ð4Ð4Ø˜œ­3Ô+<Ñ<˜œØ ¨Ð4Ð4Ø˜œ­3Ô+<Ñ<˜œØ lÐ2Ð2Ø˜œ­3¬?Ñ:˜œøõ Ô4Ñ6Ô6�à%8ˆGÔ"àð 4Ý&)Ô&7�Ô#Ð#Ø$ð 4Ý&)Ô&7�Ô#Ð#å&)¤m�Ô#à×&Ò&Ñ(Ô(Ð(àð TðTØ×1Ò1°&Ñ9Ô9Ð9Ð9øÝ¥¤Ð.ð Tð Tð TÝ(Ð)IÀCÐ)IÐ)IÑJÔJÐPSÐSøøøøðTøøøàð UðUØ×+Ò+¨H°gÑ>Ô>Ð>Ð>øÝ¥¤Ð.ð Uð Uð UÝ(Ð)JÀSÐ)JÐ)JÑKÔKÐQTÐTøøøøðUøøøð !ð AØ×#Ò# C§H¢HÐ->Ñ$?Ô$?Ñ@Ô@Ð@àˆNøÝð 	Wð 	Wð 	WÝ#Ð$LÑMÔMÐSVÐVøøøøåÝÝÔ ÝŒLð	
ð 	4ð 	4ð 	4õ !¥ S¡¤Ñ*Ô*°Ð3øøøøð	4øøøsl   ·DH ÅE ÅH ÅFÅ/FÆFÆH ÆF$ Æ#H Æ$GÆ:GÇGÇ.H È
I'ÈHÈ*I'ÉI"É"I'r+   r,   r-   c                 óT   — | j                              | j        | j        |||¬¦  «        S )z#Send `payload` to the MySQL server.)r,   r-   )r”   r1   r)   r*   )r0   r+   r,   r-   s       r$   r1   zMySQLSocket.sendf  s6   € ð Œ×#Ò#ØŒIØŒLØØ'Ø%=ð $ñ 
ô 
ð 	
r&   c                 óL   — | j                              | j        | j        ¦  «        S )z.Get packet from the MySQL server comm channel.)r”   r4   r)   r*   rF   s    r$   r4   zMySQLSocket.recvu  s   € àŒ×#Ò# D¤I¨t¬|Ñ<Ô<Ð<r&   c                 ó   — dS )zOpen the socket.Nr/   rF   s    r$   Úopen_connectionzMySQLSocket.open_connectiony  r2   r&   c                 ó   — dS )zGet the location of the socket.Nr/   rF   s    r$   r*   zMySQLSocket.address}  r2   r&   rn   )NNNFFNNr5   )r6   r7   r8   r9   rG   r–   r˜   r�   r    r	   r<   r¤   r   r"   r±   Úboolr   rÐ   r;   r1   r=   r4   r   rÔ   Úpropertyr*   r/   r&   r$   r�   r�   ·  s?  € € € € € ðð ð>ð >ð >ð >ð4ð 4ð 4ð 4ðð ð ð ðð ð ð ðð ð ð ð*¨h°s¬mð *Àð *ð *ð *ð *ð"4¨ð "4°Cð "4¸Dð "4ð "4ð "4ð "4ðL !%Ø"&Ø!%Ø*/Ø.3Ø,0Ø15ð\4ð \4à˜”ð\4ð ˜3”-ð\4ð ˜#”ð	\4ð
 " $œð\4ð & dœ^ð\4ð ˜t CœyÔ)ð\4ð $ D¨¤IÔ.ð\4ð 
ð\4ð \4ð \4ð \4ðB (,Ø26ð	
ð 
àð
ð   ”}ð
ð #+¨3¤-ð	
ð
 
ð
ð 
ð 
ð 
ð=�ið =ð =ð =ð =ð ðð ð ñ „^ðð Øð.˜ð .ð .ð .ñ „^ñ „Xð.ð .ð .r&   r�   c                   óf   ‡ — e Zd ZdZddeddfˆ fd„Zedefd„¦   «         Zdd„Zd	e	d
e	ddfd„Z
ˆ xZS )ÚMySQLUnixSocketzpMySQL socket class using UNIX sockets.

    Opens a connection through the UNIX socket of the MySQL Server.
    ú/tmp/mysql.sockÚunix_socketr   Nc                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S rŸ   )rr   rG   rÛ   Ú_address)r0   rÛ   ru   s     €r$   rG   zMySQLUnixSocket.__init__‰  s,   ø€ Ý‰Œ×ÒÑÔÐØ +ˆÔØ(ˆŒˆˆr&   c                 ó   — | j         S rŸ   ©rÝ   rF   s    r$   r*   zMySQLUnixSocket.addressŽ  ó
   € àŒ}Ðr&   c                 ó¤  — 	 t          j         t           j        t           j        ¦  «        | _        | j                             | j        ¦  «         | j                             | j        ¦  «         d S # t          $ r+}t          d| j
        t          |¦  «        f¬¦  «        |‚d }~wt          $ r"}t          t          |¦  «        ¦  «        |‚d }~ww xY w)NiÒ  rO   )r:   ÚAF_UNIXÚSOCK_STREAMr)   r£   r’   ÚconnectrÛ   rS   r   r*   r%   Ú	Exceptionr"   )r0   r   s     r$   rÔ   zMySQLUnixSocket.open_connection’  sÙ   € ð	4ÝœÝ”¥Ô 2ñô ˆDŒIð ŒI× Ò  Ô!9Ñ:Ô:Ð:ØŒI×Ò˜dÔ.Ñ/Ô/Ð/Ð/Ð/øÝð 	ð 	ð 	Ý Ø D¤Lµ+¸cÑ2BÔ2BÐ#Cðñ ô àðøøøøõ ð 	4ð 	4ð 	4Ý ¥ S¡¤Ñ*Ô*°Ð3øøøøð	4øøøs$   ‚A,A0 Á0
CÁ:&B Â CÂ-C
Ã
CÚargsÚkwargsc                 ó:   — t          j        dt          ¦  «         dS )zSwitch the socket to use SSL.z2SSL is disabled when using unix socket connectionsN)ÚwarningsÚwarnÚWarning)r0   ræ   rç   s      r$   r±   zMySQLUnixSocket.switch_to_ssl   s(   € õ 	ŒØ@Ýñ	
ô 	
ð 	
ð 	
ð 	
r&   )rÚ   rn   )r6   r7   r8   r9   r"   rG   r×   r*   rÔ   r   r±   r�   rŽ   s   @r$   rÙ   rÙ   ƒ  sÁ   ø€ € € € € ðð ð
)ð ) Cð )Àð )ð )ð )ð )ð )ð )ð
 ð˜ð ð ð ñ „Xðð4ð 4ð 4ð 4ð
Øð
Ø$'ð
à	ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r&   rÙ   c            	       ó`   ‡ — e Zd ZdZ	 	 	 ddedededd	fˆ fd
„Zedefd„¦   «         Z	dd„Z
ˆ xZS )ÚMySQLTCPSocketzYMySQL socket class using TCP/IP.

    Opens a TCP/IP connection to the MySQL Server.
    ú	127.0.0.1éê  Fr¦   ÚportÚ
force_ipv6r   Nc                 ó˜   •— t          ¦   «                              ¦   «          || _        || _        || _        d| _        |› d|› �| _        d S )Nr   r»   )rr   rG   r“   Úserver_portrñ   Ú_familyrÝ   )r0   r¦   rð   rñ   ru   s       €r$   rG   zMySQLTCPSocket.__init__°  sR   ø€ õ 	‰Œ×ÒÑÔÐØ $ˆÔØ $ˆÔØ *ˆŒØˆŒØ $Ð-Ð- tÐ-Ð-ˆŒˆˆr&   c                 ó   — | j         S rŸ   rß   rF   s    r$   r*   zMySQLTCPSocket.address½  rà   r&   c           	      ót  — d}	 t          j        | j        | j        dt           j        t           j        ¦  «        }|D ]=}| j        r|d         t           j        k    r|} n|d         t           j        k    r|} nŒ>| j        r|d         €t          d| j        › �¦  «        ‚|d         €|d         }n8# t          $ r+}t          d| j        t          |¦  «        f¬¦  «        |‚d}~ww xY w|\  | _        }}}}	 t          j         | j        ||¦  «        | _        | j                             | j        ¦  «         | j                             |¦  «         dS # t          $ r1}t          d| j        | j        t          |¦  «        f¬¦  «        |‚d}~wt$          $ r"}t'          t)          |¦  «        ¦  «        |‚d}~ww xY w)z/Open the TCP/IP connection to the MySQL server.)NNNNNr   NzNo IPv6 address found for iÓ  rO   )r:   Úgetaddrinfor“   ró   rã   ÚSOL_TCPrñ   ÚAF_INET6ÚAF_INETr   rS   r*   r%   rô   r)   r£   r’   rä   rå   r   r"   )	r0   ÚaddrinfoÚ	addrinfosÚinfor   ÚsocktypeÚprotorg   Úsockaddrs	            r$   rÔ   zMySQLTCPSocket.open_connectionÁ  s  € ð +ð 	ð	ÝÔ*ØÔ ØÔ ØÝÔ"Ý”ñô ˆIð "ð ð �Ø”?ð  t¨A¤wµ&´/Ò'AÐ'AØ#�HØ�EØ˜”7�fœnÒ,Ð,Ø#�HØ�Eð -ð Œð V 8¨A¤;Ð#6Ý$Ð%TÀ$ÔBRÐ%TÐ%TÑUÔUÐUØ˜Œ{Ð"Ø$ Qœ<�øøÝð 	ð 	ð 	Ý Ø D¤Lµ+¸cÑ2BÔ2BÐ#Cðñ ô àðøøøøð	øøøð
 8@Ñ4ˆŒ�x ¨¨8ð	6Ýœ d¤l°H¸eÑDÔDˆDŒIØŒI× Ò  Ô!9Ñ:Ô:Ð:ØŒI×Ò˜hÑ'Ô'Ð'Ð'Ð'øÝð 	ð 	ð 	Ý ØàÔ$ØÔ$Ý Ñ$Ô$ððñ ô ð ðøøøøõ ð 	6ð 	6ð 	6Ý"¥3 s¡8¤8Ñ,Ô,°#Ð5øøøøð	6øøøs=   „B,B1 Â1
C&Â;&C!Ã!C&Ã7AE Å
F7Å,FÆF7ÆF2Æ2F7)rî   rï   Frn   )r6   r7   r8   r9   r"   r<   rÖ   rG   r×   r*   rÔ   r�   rŽ   s   @r$   rí   rí   ª  s¸   ø€ € € € € ðð ð  ØØ ð	.ð .àð.ð ð.ð ð	.ð
 
ð.ð .ð .ð .ð .ð .ð ð˜ð ð ð ñ „Xðð86ð 86ð 86ð 86ð 86ð 86ð 86ð 86r&   rí   )/r9   r:   rd   ré   r~   Úabcr   r   Úcollectionsr   Útypingr   r   r   r	   r
   r   r«   ÚPROTOCOL_TLSv1ÚPROTOCOL_TLSv1_1ÚPROTOCOL_TLSv1_2ÚPROTOCOL_TLSr½   Úhasattrr   ÚTLS_V1_3_SUPPORTEDÚImportErrorÚerrorsr   r   r   r   r   r<   Ú__annotations__r   r   r   rS   r"   r%   r(   r?   rp   r�   rÙ   rí   r/   r&   r$   ú<module>r     sð  ðð>ð ð ð €€€Ø €€€Ø €€€Ø €€€à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðØ€J€J€Jð Ô#ØÔ'ØÔ'ØÔ#ð	ð €Lð !˜  mÑ4Ô4ÐH¸¼ÐÐøØð ð ð àÐØ
€C€C€Cðøøøð
ð ð ð ð ð ð ð ð ð ð ð ð Ð �SÐ Ð Ñ Ø#Ð �CÐ #Ð #Ñ #ØÐ �cÐ Ð Ñ Ø'(Ð  Ð (Ð (Ñ (ðH�Wð H ð Hð Hð Hð HðDð Dð Dð Dð D�Cñ Dô Dð DðN^ð ^ð ^ð ^ð ^˜ñ ^ô ^ð ^ðB}ð }ð }ð }ð }Ð0ñ }ô }ð }ð@I.ð I.ð I.ð I.ð I.�#ñ I.ô I.ð I.ðX$
ð $
ð $
ð $
ð $
�kñ $
ô $
ð $
ðNO6ð O6ð O6ð O6ð O6�[ñ O6ô O6ð O6ð O6ð O6s   ³2A& Á&	A2Á1A2