
    ?jA                    \    d Z ddlmZ ddlZddlmZ dZdZdZdZ	dZ
d	Z G d
 d      ZddZy)u   Minimal protobuf wire-format decoder for Google Play FDFE responses.

No external dependencies — decodes varint, fixed32/64, length-delimited,
and proto2 GROUP wire types directly from raw bytes.
    )annotationsN)Any               c                  \    e Zd ZddZddZddZddZddddZddZdd	Z	e
dd
       Zy)ProtoDecoderc                @    || _         d| _        t        |      | _        y )Nr   )dataposlenend)selfr   s     D/home/ubuntu/.local/lib/python3.12/site-packages/gplaydl/protobuf.py__init__zProtoDecoder.__init__   s    	t9    c                   d}d}	 | j                   | j                  k\  rt        d      | j                  | j                      }| xj                   dz  c_         ||dz  |z  z  }|dz  dk(  r|S |dz  }|dk\  rt	        d      })	Nr   z+Unexpected end of data while reading varintr            @   zVarint too long)r   r   EOFErrorr   
ValueError)r   resultshiftbs       r   _read_varintzProtoDecoder._read_varint   s    xx488#LMM		$((#AHHMHq4xE))FDQQJE{ !233 r   c                j    | j                   | j                  k\  ry| j                         }|dz	  |dz  fS )N)NNr   r   )r   r   r   )r   tags     r   read_tagzProtoDecoder.read_tag*   s6    88txx!qC#I&&r   c                B   | j                   }| j                   | j                  k  rp| j                   }| j                         }|dz	  }|dz  }|t        k(  r||k(  r| j                  || S | j                  ||       | j                   | j                  k  rpt        d      )Nr   r   field_number_for_groupz"Unexpected end while reading group)r   r   r   WIRETYPE_END_GROUPr   _skip_valuer   )r   field_number	start_pos	tag_startr!   fnwts          r   _read_groupzProtoDecoder._read_group0   s    HH	hh!I##%CBsB''B,,>yy955R; hh! ;<<r   Nr$   c                  |t         k(  r| j                          y |t        k(  r| xj                  dz  c_        y |t        k(  r$| xj                  | j                         z  c_        y |t
        k(  r| xj                  dz  c_        y |t        k(  r|t        d      | j                  |       y |t        k(  ry t        d|       )N   r   zMissing field number for groupUnknown wire type: )
WIRETYPE_VARINTr   WIRETYPE_FIXED64r   WIRETYPE_LENGTH_DELIMITEDWIRETYPE_FIXED32WIRETYPE_START_GROUPr   r-   r&   )r   	wire_typer%   s      r   r'   zProtoDecoder._skip_value<   s    '**HHMH33HH))++H**HHMH..%- !ABB34,,29+>??r   c                   | j                         \  }}|y|t        k(  r| j                         }n|t        k(  r{| j                  dz   | j
                  kD  rt        d      t        j                  d| j                  | j                  | j                  dz          d   }| xj                  dz  c_        n(|t        k(  rs| j                         }| j                  |z   | j
                  kD  rt        d      | j                  | j                  | j                  |z    }| xj                  |z  c_        n|t        k(  rz| j                  dz   | j
                  kD  rt        d      t        j                  d| j                  | j                  | j                  dz          d   }| xj                  dz  c_        n)|t        k(  r| j                  |      }nt        d|       |||fS )	N)NNNr/   zUnexpected endz<Qr   r   z<Ir0   )r"   r1   r   r2   r   r   r   structunpackr   r3   r4   r5   r-   r   )r   r+   r,   vlns        r   
read_fieldzProtoDecoder.read_fieldN   s   B:# !!#A##xx!|dhh&/00dDIIdhhA$FGJAHHMH,,""$Bxx"}txx'/00		$((TXX]3AHHNH##xx!|dhh&/00dDIIdhhA$FGJAHHMH''  $A22$7882qyr   c                    g }| j                   | j                  k  rG| j                         \  }}}|	 |S |j                  |||f       | j                   | j                  k  rG|S )N)r   r   r<   append)r   outr+   r,   r:   s        r   read_all_orderedzProtoDecoder.read_all_orderedl   sc    *,hh!)IBAz
 JJB{#	 hh!
 
r   c                j    	 | j                  d      S # t        $ r | j                  dd      cY S w xY w)Nutf-8zlatin-1replace)errors)decode	Exception)r   s    r   decode_stringzProtoDecoder.decode_stringu   s8    	988G$$ 	988Ii888	9s    22)r   bytes)returnint)rI   ztuple[int | None, int | None])r(   rJ   rI   rH   )r6   rJ   r%   z
int | NonerI   None)rI   z"tuple[int | None, int | None, Any])rI   zlist[tuple[int, int, Any]])r   rH   rI   str)__name__
__module____qualname__r   r   r"   r-   r'   r<   r@   staticmethodrG    r   r   r   r      sA    
4'
= SW @$< 9 9r   r   c                t   g }	 t        |       j                         D ]^  \  }}}|t        k(  st        |t        t
        f      s(	 |j                  d      }|j                         sd|v r|j                  |       ` 	 |S # t        $ r |j                  t        |             Y w xY w# t        $ r Y |S w xY w)zBPull all UTF-8 strings from a protobuf blob (non-recursive, fast).rB   
)r   r@   r3   
isinstancerH   	bytearrayrE   isprintabler>   UnicodeDecodeErrorextendextract_stringsrF   )r   r?   _fnr,   r:   ss         r   rY   rY   }   s    C
&t,==? 	3JCQ..:a%AS3T3)A}}$!)

1	3 J	 * 3JJq123 Js:   )B* B* 6B<B* #B'$B* &B''B* *	B76B7)r   rH   rI   z	list[str])__doc__
__future__r   r8   typingr   r1   r2   r3   r5   r&   r4   r   rY   rQ   r   r   <module>r_      sJ    #       f9 f9Rr   