+
    Ki^9  c                   s   R t RtRt^ RIt^ RIt^ RIHt ^ RIHt	 ]
t]tRtR tRR	R
RRRRRRRRRRRRRRRRRRR/t]P#                  4        U Uu/ uF  w  rWbK	  	  upp tR tR tR  tR! t]R"R"3R# ltR$ tR% tRDR' ltRDR( ltRER) lt ! R* R+]4      t ! R, R-]4      t ! R. R/]4      t  ! R0 R1]4      t! ! R2 R3]4      t"R4t#R5t$R6t%R7t&R8t'R9t(R:t)R;t*R<t+R=t,R>t-]R"R&3R? lt.RFR@ lt/RGRA lt0]R"3RB lt1RC t2R# u upp i )Hzg
Module for deserializing/serializing to and from VDF

https://github.com/ValvePython/vdf

MIT License
z3.2zRossen GeorgievN)crc32)StringIOu   ￾﻿c                 s,    V P                  \        4      # N)lstripBOMS)line   &C/usr/lib/python3.14/site-packages/lutris/util/steam/vdf/__init__.py	strip_bomr      s    ;;t    z\nZ
z\t	z\vZz\bZz\rZz\fZz\aZz\\Z\z\?Z?z\""z\'Z'c                 8    \         V P                  4       ,          # r   )_escape_char_mapgroupZmr   r   _re_escape_matchr   ,   s    AGGI&&r	   c                 r   r   )_unescape_char_mapr   r   r   r   _re_unescape_matchr   0   s    aggi((r	   c                 :    \         P                  ! R \        V 4      # )z[\n\t\v\b\r\f\a\\\?\"'])resubr   Ztextr   r   _escaper   4   s    66,.>EEr	   c                 r   )z0(\\n|\\t|\\v|\\b|\\r|\\f|\\a|\\\\|\\\?|\\\"|\\'))r   r   r   r   r   r   	_unescaper   8   s    66EGY[_``r	   Tc                s|   \        V\        4      '       g   \        R\        V4      ,          4      h\	        V R4      '       g   \        R4      h^ pV! 4       .pRp\
        P                  ! R\
        P                  R7      p\        V ^4       EFL  w  rHV^8X  d   \        V4      pVP                  4       pVR8X  g   V^ ,          R8X  d   K?  V^ ,          R	8X  d   RpKQ  V'       d7   \        R
\        V RRV P                  P                  ,          4      V^V34      hV^ ,          R8X  dY   \        V4      ^8  d   VP!                  4        K  \        R\        V RRV P                  P                  ,          4      V^ V34      h VP#                  V4      p	V	'       g    V\%        V 4      ,          pK/  V	P)                  R4      f   V	P)                  R4      MV	P)                  R4      p
V	P)                  R4      f   V	P)                  R4      MV	P)                  R4      pV'       d   \+        V
4      p
VfM   V'       d   WR,          9   d   VR,          V
,          pMV! 4       pWR,          V
&   VP-                  V4       RpM[V	P)                  R4      f*   V	P)                  R4      e    V\%        V 4      ,          pEK8  V'       d   \+        V4      MTVR,          V
&   EKO  	  \        V4      ^8w  d7   \        R\        V RRV P                  P                  ,          4      V^ X34      hVP!                  4       #   \&         d8    \        R\        T RRT P                  P                  ,          4      T^ T34      hi ; i  \&         d8    \        R\        T RRT P                  P                  ,          4      T^ T34      hi ; i)a  
Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a VDF)
to a Python object.

``mapper`` specifies the Python object used after deserializetion. ``dict` is
used by default. Alternatively, ``collections.OrderedDict`` can be used if you
wish to preserve key order. Or any object that acts like a ``dict``.

``merge_duplicate_keys`` when ``True`` will merge multiple KeyValue lists with the
same key into one instead of overwriting. You can se this to ``False`` if you are
using ``VDFDict`` and need to preserve the duplicates.
.Expected mapper to be subclass of dict, got %sZreadlinez>Expected fp to be a file-like object supporting line iterationFz^("(?P<qkey>(?:\\.|[^\\"])+)"|(?P<key>#?[a-z0-9\-\_\\\?]+))([ \t]*("(?P<qval>(?:\\.|[^\\"])*)(?P<vq_end>")?|(?P<val>[a-z0-9\-\_\\\?\*\.]+)))?)Zflags Z/Z{z$vdf.parse: expected openning bracketZnamez<%s>Z}z+vdf.parse: one too many closing parenthasisTz+vdf.parse: unexpected EOF (open key quote?)ZqkeykeyZqvalvalZvq_endz1vdf.parse: unexpected EOF (open quote for value?)z/vdf.parse: unclosed parenthasis or quotes (EOF))
issubclassdict	TypeErrortypehasattrr   ZcompileZIZ	enumerater   r   SyntaxErrorZgetattr	__class____name__lenpopmatchZnextZStopIterationr   r   append)fpmappermerge_duplicate_keysescapedZlinenostackZexpect_bracketZre_keyvaluer   r(   r   r   _ms   &&&&         r   parser0   ?   s[    fd##H4PV<WXX2z""XYYFXJEN**	
 ddK ""a(Q;T?D{{} 2:aC 7c>"N6VVbll.C.C%CDfaQUV  7c>5zA~		=VVbll.C.C%CDfaQUV  %%d+EDH$D ).F(;(C%++e$U[I\C(-F(;(C%++e$U[I\Cn {'C9,<r3BB%'"IcNR !% ;;x(0U[[5H5TR(  4;3b	# a )d 5zQ=R",,*?*?!?@&!TR
 	

 99;a % %E VVbll6K6K-KLfVWY]^ > ) )O$R",,:O:O1OPRXZ[]ab s   L4%M94AM69AN;c                s    \        V \        4      '       g   \        R\        V 4      ,          4      h\	        V 4      p\        V3/ VB # )zf
Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
document) to a Python object.
zExpected s to be a str, got %s)
isinstancestring_typer    r!   	unicodeIOr0   )skwargsr*   s   &, r   loadsr6      s?    
 a%%847BCC	1Bvr	   c                s    \        V 3/ VB # )zs
Deserialize ``fp`` (a ``.readline()``-supporting file-like object containing
a JSON document) to a Python object.
)r0   )r*   r5   s   &,r   loadr7      s    
 vr	   Fc                s    \        V \        4      '       g   \        R4      h\        V\        4      '       g   \        R4      h\        V\        4      '       g   \        R4      hRP	                  \        WV4      4      # )z/
Serialize ``obj`` to a VDF formatted ``str``.
*Expected data to be an instance of``dict``"Expected pretty to be of type bool#Expected escaped to be of type boolr   )r1   r   r    booljoin	_dump_gen)objprettyr-   s   &&&r   dumpsr@      se     c4  DEEfd##<==gt$$=>>779S'233r	   c                sN   \        V \        4      '       g   \        R4      h\        VR4      '       g   \        R4      h\        V\        4      '       g   \        R4      h\        V\        4      '       g   \        R4      h\        WV4       F  pVP                  V4       K  	  R# )ze
Serialize ``obj`` as a VDF formatted stream to ``fp`` (a
``.write()``-supporting file-like object).
r8   writez"Expected fp to have write() methodr9   r:   N)r1   r   r    r"   r;   r=   rA   )r>   r*   r?   r-   chunks   &&&& r   dumprC      s    
 c4  DEE2w<==fd##<==gt$$=>>30
 1r	   c              #   s  "   R pRpV'       d	   WC,          pV P                  4        F  w  rgV'       d"   \        V\        4      '       d   \        V4      p\        V\        4      '       d<   V: RV: RV: R2x  \        WqW#^,           4       F  pVx  K	  	  RV,          x  K  V'       d"   \        V\        4      '       d   \        V4      pV: RV: RV: R2x  K  	  R# 5i)r
   r   r   z"
z{
z%s}
z" "N)itemsr1   r2   r   r   r=   )	datar?   r-   levelZindentZline_indentr   valuerB   s	   &&&&     r   r=   r=      s     FKnjjl
z#{33#,CeT""%0#{CC"5'19E FK'':e[99%0#u== #s   B+C%.7C%c                   s&   a  ] tR tRt o R tRtV tR# )BASE_INTi  c                s>    V P                   P                  : R V : R2# )Z(Z))r$   r%   )Zselfr   r   __repr__ZBASE_INT.__repr__  s    >>22D99r	    N)r%   
__module____qualname____firstlineno__rI   __static_attributes__Z__classdictcell__)Z__classdict__s   @r   rH   rH     s     : :r	   rH   c                       ] tR tRtRtR# )UINT_64i	  rJ   Nr%   rK   rL   rM   rN   rJ   r	   r   rP   rP   	      r	   rP   c                   rO   )INT_64i  rJ   NrQ   rJ   r	   r   rS   rS     rR   r	   rS   c                   rO   )POINTERi  rJ   NrQ   rJ   r	   r   rT   rT     rR   r	   rT   c                   rO   )COLORi  rJ   NrQ   rJ   r	   r   rU   rU     rR   r	   rU       s   s   s   s   s   s   s   s   s   
s   c                s.   \        V \        4      '       g   \        R\        V 4      ,          4      h\	        V\
        4      '       g   \        R\        V4      ,          4      h\        P                  ! R4      p\        P                  ! R4      p\        P                  ! R4      p\        P                  ! R4      pRR lpV! 4       .p	^ p
V'       g   \        M\        p\        V 4      V
8  Ed\   W
V
^,            pV
^,          p
W8X  d%   \        V	4      ^8  d   V	P                  4        KM  EMV! W
4      w  rV\        8X  dL   V'       d   WR,          9   d   V	R,          V,          pMV! 4       pWR,          V&   V	P                  V4       K  V\        8X  d   V! W
4      w  V	R,          V&   p
K  V\        8X  d   V! W
RR	7      w  V	R,          V&   p
K  V\         \"        \$        39   df   VP'                  W
4      ^ ,          pV\"        8X  d   \)        V4      pMV\$        8X  d   \+        V4      pWR,          V&   WP,                  ,          p
EKp  V\.        8X  dA   \1        VP'                  W
4      ^ ,          4      V	R,          V&   WP,                  ,          p
EK  V\2        8X  dA   \5        VP'                  W
4      ^ ,          4      V	R,          V&   WP,                  ,          p
EK  V\6        8X  d8   VP'                  W
4      ^ ,          V	R,          V&   WP,                  ,          p
EKH  \9        R
V
^,
          \;        V4      3,          4      h\        V 4      V
8w  g   \        V	4      ^8w  d   \9        RV
\        V 4      3,          4      hV	P                  4       # )a  
Deserialize ``s`` (``bytes`` containing a VDF in "binary form")
to a Python object.

``mapper`` specifies the Python object used after deserializetion. ``dict` is
used by default. Alternatively, ``collections.OrderedDict`` can be used if you
wish to preserve key order. Or any object that acts like a ``dict``.

``merge_duplicate_keys`` when ``True`` will merge multiple KeyValue lists with the
same key into one instead of overwriting. You can se this to ``False`` if you are
using ``VDFDict`` and need to preserve the duplicates.
zExpected s to be bytes, got %sr   <i<Q<q<fc                 s   V'       d1   V P                  R V4      pW1,
          ^,          ^ 8w  d
   V^,          pMV P                  RV4      pVR8X  d   \        RV,          4      hWV pV'       d   VP                  R4      pM3\        \        Jd   VP                  RR4      pM VP                  R4       YCV'       d
   ^,           3# ^,           3#    TP                  RR4      p L1; i)s     rV   z!Unterminated cstring (offset: %d)utf-16utf-8ZreplaceZasciir   )Zfindr#   Zdecodebytesstr)r4   idxwideZendZresults   &&&  r   read_stringZ!binary_loads.<locals>.read_string>  s    &&c*C	Q!#q&&#&C"9ACGHHs]]8,F#]]7I6F;g& 4a///Q///;w	:s   $C C&T)r`   z"Unknown data type at offset %d: %sz/Binary VDF ended at offset %d, but length is %dFr   )r1   r]   r    r!   r   r   structStructBIN_ENDBIN_END_ALTr&   r'   BIN_NONEr)   
BIN_STRINGBIN_WIDESTRING	BIN_INT32BIN_POINTER	BIN_COLORZunpack_fromrT   rU   Zsize
BIN_UINT64rP   	BIN_INT64rS   BIN_FLOAT32r#   Zrepr)r4   r+   r,   
alt_formatint32uint64int64float32ra   r.   r_   ZCURRENT_BIN_ENDZtr   r/   r   s   &&&&            r   binary_loadsru   &  s    a847BCCfd##H4PV<WXX MM$E]]4 FMM$EmmD!G0, XJE
C%/g[O
a&3,C!Gq5zA~		q&=#Ry(82Ys^X!#b	#LL*_"-a"5E"IcNC. "-a4"@E"IcNC9k955##A+A.CKcliCj "IcN::C*_$V%7%7%?%BCE"IcN;;C)^#E$5$5a$=a$@AE"IcN::C+$008;E"IcN<<CBcAgtTUwEWWXX
1v}E
aKsTWXYTZm[\\99;r	   c                s8    RP                  \        WR7      4      # )z8
Serialize ``obj`` to a binary VDF formatted ``bytes``.
r	   rp   )r<   _binary_dump_gen)r>   rp   s   &&r   binary_dumpsrx     s     88$S@AAr	   c              #   s  "   V^ 8X  d   \        V 4      ^ 8X  d   R# \        P                  ! R4      p\        P                  ! R4      p\        P                  ! R4      p\        P                  ! R4      pV P                  4        EFq  w  rx\	        V\
        4      '       d   VP                  R4      pM\        R\        V4      ,          4      h\	        V\        4      '       d<   \        V,           \        ,           x  \        W^,           VR7       F  p	V	x  K	  	  K  \	        V\        4      '       d3   \        V,           \        ,           VP                  V4      ,           x  K  \	        V\        4      '       d4   \         V,           \        ,           VP                  V4      ,           x  EK+  \	        V\
        4      '       d?    VP                  R4      \        ,           p\"        x  T\        ,           T,           x  EK  \	        V\&        4      '       d4   \(        V,           \        ,           VP                  V4      ,           x  EK  \	        V\*        \,        \.        \0        34      '       dl   \	        V\*        4      '       d
   \2        x  M'\	        V\,        4      '       d
   \4        x  M\6        x  V\        ,           x  VP                  V4      x  EKY  \        R
\        V4      ,          4      h	  V'       g   \8        M\:        x  R#    TP                  R	4      \        ^,          ,           p\$        x   ELX; i5i)    NrW   rX   rY   rZ   r\   z%dict keys must be of type str, got %srv   r[   zUnsupported type: %s)r&   rc   rd   rD   r1   r2   Zencoder    r!   r   rg   rw   rP   rm   packrS   rn   rh   ri   Zfloatro   rU   rT   intint_typerl   rk   rj   re   rf   )
r>   rF   rp   rq   rr   rs   rt   r   rG   rB   s
   &&&       r   rw   rw     s%    zc#h!mMM$E]]4 FMM$EmmD!Giik
c;''**W%CCd3iOPPeT""S.8++)%zR Sw''s"X-E0BBBv&&c/H,uzz%/@@@{++%W-8   .5((u%%#h.e1DDDwX>??%''E7++!!. **U##2T%[@AAE "H $'4%%X.A=$$s%   GM$L*DMM-M?Mc                s    V R,          R8w  d   \        R4      h\        P                  ! RV R,          4      w  pV\        V R,          4      8w  d   \        R4      h\	        V R,          WRR	7      # )
a  
Deserialize ``s`` (``bytes`` containing a VBKV to a Python object.

``mapper`` specifies the Python object used after deserializetion. ``dict` is
used by default. Alternatively, ``collections.OrderedDict`` can be used if you
wish to preserve key order. Or any object that acts like a ``dict``.

``merge_duplicate_keys`` when ``True`` will merge multiple KeyValue lists with the
same key into one instead of overwriting. You can se this to ``False`` if you are
using ``VDFDict`` and need to preserve the duplicates.
:N   N   VBKVzInvalid headerrW   :r}      N:r   NNzInvalid checksumTrv   )Z
ValueErrorrc   Zunpackr    ru   )r4   r+   r,   checksums   &&& r   
vbkv_loadsr     sa     	u)**--af-KX52<+,,"vMMr	   c                s    RP                  \        V RR7      4      p\        V4      pR\        P                  ! RV4      ,           V,           # )z2
Serialize ``obj`` to a VBKV formatted ``bytes``.
r	   Trv   r~   rW   )r<   rw   r    rc   rz   )r>   rE   r   s   &  r   
vbkv_dumpsr     s>     88$ST:;DT{HV[[x00477r	   )FT)FTry   rb   )ry   F)3Z__doc__Z__version__Z
__author__r   rc   Zbinasciir    Zior   r3   r^   r2   r{   r|   r   r   r   rD   r   r   r   r   r   r   r0   r6   r7   r@   rC   r=   rH   rP   rS   rT   rU   rg   rh   rj   ro   rk   ri   rl   rm   re   rn   rf   ru   rx   rw   r   r   )ZkZvs   00r   <module>r      s   
 	   $ 
4	4	4	4	4	4	4	4	3	3	3  &8%=%=%?@%?TQAD%?@ ')Fa d wt4$>0:x :
	h 		X 		h 		H 	 
		

	  du bJB-5` D N.8a As   C4