Ë
    S"“j~  ã                   óÌ   — d Z ddlZddlZddlmZmZmZ ddlmZ ddlm	Z	 ddl
mZ  e ej                  d«      dd Ž Zej                  ej                  ¬	«      Z G d
„ d«      Zy)z6
This module contains the BinaryReader utility class.
é    N)ÚdatetimeÚ	timedeltaÚtimezoneé   )ÚTypeNotFoundError)Ú	tlobjects)Úcore_objectsé   )Útzinfoc                   ó–   — e Zd ZdZd„ Zd„ Zdd„Zdd„Zd„ Zd„ Z	dd„Z
dd	„Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚBinaryReaderz2
    Small utility class to read binary data.
    c                 ó6   — |xs d| _         d| _        d | _        y )Nó    r   )ÚstreamÚpositionÚ_last)ÚselfÚdatas     úa/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/telethon/extensions/binaryreader.pyÚ__init__zBinaryReader.__init__   s   € Ø’k˜cˆŒØˆŒØˆ�
r   c                 óŠ   — t        j                  d| j                  | j                  «      \  }| xj                  dz  c_        |S )zReads a single byte value.z<Bé   ©ÚstructÚunpack_fromr   r   ©r   Úvalues     r   Ú	read_bytezBinaryReader.read_byte   ó3   € ä×#Ñ# D¨$¯+©+°t·}±}ÓE‰ˆØ�Š˜Ñ�Øˆr   c                 ó–   — |rdnd}t        j                  || j                  | j                  «      \  }| xj                  dz  c_        |S )z!Reads an integer (4 bytes) value.z<iz<Ié   r   ©r   ÚsignedÚfmtr   s       r   Úread_intzBinaryReader.read_int$   ó<   € á‰d $ˆÜ×#Ñ# C¨¯©°d·m±mÓD‰ˆØ�Š˜Ñ�Øˆr   c                 ó–   — |rdnd}t        j                  || j                  | j                  «      \  }| xj                  dz  c_        |S )z%Reads a long integer (8 bytes) value.z<qz<Qé   r   r"   s       r   Ú	read_longzBinaryReader.read_long+   r&   r   c                 óŠ   — t        j                  d| j                  | j                  «      \  }| xj                  dz  c_        |S )z,Reads a real floating point (4 bytes) value.z<fr!   r   r   s     r   Ú
read_floatzBinaryReader.read_float2   r   r   c                 óŠ   — t        j                  d| j                  | j                  «      \  }| xj                  dz  c_        |S )z,Reads a real floating point (8 bytes) value.z<dr(   r   r   s     r   Úread_doublezBinaryReader.read_double8   r   r   c                 óV   — t         j                  | j                  |dz  «      d|¬«      S )z"Reads a n-bits long integer value.r(   Úlittle)Ú	byteorderr#   )ÚintÚ
from_bytesÚread)r   Úbitsr#   s      r   Úread_large_intzBinaryReader.read_large_int>   s.   € ä�~‰~Ø�I‰I�d˜a‘iÓ ¨H¸Vð ó Eð 	Er   c           
      ó®  — |dk\  r<| j                   | j                  | j                  |z    }| xj                  |z  c_        n7| j                   | j                  d }| xj                  t        |«      z  c_        |dk\  rPt        |«      |k7  rBt        dj	                  |t        |«      t        |«      t        | j                  «      «      «      ‚|| _        |S )z<Read the given amount of bytes, or -1 to read all remaining.r   Nz=No more data left to read (need {}, got {}: {}); last read {})r   r   ÚlenÚBufferErrorÚformatÚreprr   )r   ÚlengthÚresults      r   r3   zBinaryReader.readC   s«   € à�QŠ;Ø—[‘[ §¡¨t¯}©}¸vÑ/EÐFˆFØ�MŠM˜VÑ#ŽMà—[‘[ §¡ Ð0ˆFØ�MŠMœS ›[Ñ(�MØ�aŠKœc &›k¨VÒ3ÜØOß‘˜¤ F£¬T°&«\¼4ÀÇ
Á
Ó;KÓLóð ð
 ˆŒ
Øˆr   c                 ó   — | j                   S )z?Gets the byte array representing the current buffer as a whole.©r   ©r   s    r   Ú	get_byteszBinaryReader.get_bytesT   s   € à�{‰{Ðr   c                 ó  — | j                  «       }|dk(  r>| j                  «       | j                  «       dz  z  | j                  «       dz  z  }|dz  }n
|}|dz   dz  }| j                  |«      }|dkD  rd|z
  }| j                  |«       |S )zi
        Reads a Telegram-encoded byte array, without the need of
        specifying its length.
        éþ   r(   é   r!   r   r   )r   r3   )r   Ú
first_byter;   Úpaddingr   s        r   Útgread_byteszBinaryReader.tgread_bytes\   s”   € ð
 —^‘^Ó%ˆ
Ø˜ÒØ—^‘^Ó%¨¯©Ó)9¸QÑ)>Ñ?Ø—‘Ó  BÑ&ñ(ˆFà˜q‘j‰GàˆFØ ‘z QÑ&ˆGà�y‰y˜Ó ˆØ�QŠ;Ø˜'‘kˆGØ�I‰I�gÔàˆr   c                 ó:   — t        | j                  «       dd¬«      S )z Reads a Telegram-encoded string.zutf-8Úreplace)ÚencodingÚerrors)ÚstrrF   r?   s    r   Útgread_stringzBinaryReader.tgread_stringq   s   € ä�4×$Ñ$Ó&°ÀÔKÐKr   c                 ó„   — | j                  d¬«      }|dk(  ry|dk(  ryt        dj                  t        |«      «      «      ‚)zReads a Telegram boolean value.F©r#   ì   µuä2 Tì   7óx zInvalid boolean code {})r%   ÚRuntimeErrorr9   Úhexr   s     r   Útgread_boolzBinaryReader.tgread_boolu   sC   € à—‘ U�Ó+ˆØ�JÒØØ�jÒ ØäÐ8×?Ñ?ÄÀEÃ
ÓKÓLÐLr   c                 óH   — | j                  «       }t        t        |¬«      z   S )zbReads and converts Unix time (used by Telegram)
           into a Python datetime object.
        )Úseconds)r%   Ú_EPOCHr   r   s     r   Útgread_datezBinaryReader.tgread_date   s   € ð —‘“ˆÜœ	¨%Ô0Ñ0Ð0r   c                 óÞ  — | j                  d¬«      }t        j                  |d«      }|€®|}|dk(  ry|dk(  ry|dk(  r5t        | j                  «       «      D �cg c]  }| j	                  «       ‘Œ c}S t        j                  |d«      }|€N| j                  d«       | j                  «       }t        || j                  «       «      }| j                  |«       |‚|j                  | «      S c c}w )	zReads a Telegram object.FrN   NrO   TrP   éÄµéüÿÿÿ)r%   r   ÚgetÚrangeÚtgread_objectr	   ÚseekÚtell_positionr   r3   Úset_positionÚfrom_reader)r   Úconstructor_idÚclazzr   Ú_ÚposÚerrors          r   r]   zBinaryReader.tgread_object†   sÝ   € àŸ™¨e˜Ó4ˆÜ—‘˜n¨dÓ3ˆØˆ=ð #ˆEØ˜
Ò"ØØ˜*Ò$ØØ˜*Ò$Ü6;¸D¿M¹M»OÓ6LÖM°˜×*Ñ*Õ,ÒMÐMä ×$Ñ$ ^°TÓ:ˆEØˆ}à—	‘	˜"”Ø×(Ñ(Ó*�Ü)¨.¸$¿)¹)»+ÓF�Ø×!Ñ! #Ô&Ø�à× Ñ  Ó&Ð&ùò Ns   ÁC*c                 óº   — d| j                  d¬«      k7  rt        d«      ‚| j                  «       }t        |«      D �cg c]  }| j                  «       ‘Œ c}S c c}w )z,Reads a vector (a list) of Telegram objects.rY   FrN   z-Invalid constructor code, vector was expected)r%   rQ   r\   r]   )r   Úcountrd   s      r   Útgread_vectorzBinaryReader.tgread_vector    sM   € à˜Ÿ™¨e˜Ó4Ò4ÜÐNÓOÐOà—‘“ˆÜ.3°E«lÖ;¨�×"Ñ"Õ$Ò;Ð;ùÒ;s   ¾Ac                 ó   — d| _         y)z.Closes the reader, freeing the BytesIO stream.r   Nr>   r?   s    r   ÚclosezBinaryReader.closeª   s	   € àˆ�r   c                 ó   — | j                   S )z)Tells the current position on the stream.©r   r?   s    r   r_   zBinaryReader.tell_position°   s   € à�}‰}Ðr   c                 ó   — || _         y)z(Sets the current position on the stream.Nrm   )r   r   s     r   r`   zBinaryReader.set_position´   s	   € à ˆ�r   c                 ó.   — | xj                   |z  c_         y)zz
        Seeks the stream position given an offset from the current position.
        The offset may be negative.
        Nrm   )r   Úoffsets     r   r^   zBinaryReader.seek¸   s   € ð
 	�Š˜ÑŽr   c                 ó   — | S ©N© r?   s    r   Ú	__enter__zBinaryReader.__enter__Ã   s   € Øˆr   c                 ó$   — | j                  «        y rr   )rk   )r   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zBinaryReader.__exit__Æ   s   € Ø�
‰
�r   N)T)éÿÿÿÿ)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   r)   r+   r-   r5   r3   r@   rF   rL   rS   rW   r]   ri   rk   r_   r`   r^   rt   ry   rs   r   r   r   r      ss   „ ñòòóóòòóEó
ò"òò*LòMò1ò'ò4<òòò!ò òór   r   )r~   r   Útimer   r   r   rJ   r   Útl.alltlobjectsr   Útl.corer	   ÚgmtimeÚ_EPOCH_NAIVErH   ÚutcrV   r   rs   r   r   ú<module>r…      s_   ðñó Û ß 2Ñ 2å &Ý 'Ý "á˜˜Ÿ™ Q›¨¨Ð+Ð,€Ø	×	Ñ	 X§\¡\Ð	Ó	2€÷wò wr   