+
    Ki	  c                   sR    ^ RI t ^ RIHt ^ RIHt  ! R R]4      t ! R R]4      tR# )i    N)OrderedDict)RawConfigParserc                   s   a  ] tR t^t o RtRtRtRt]P                  ! ]P                  RR7      ]P                  4      t]P                  ! ]P                  RR7      ]P                  4      tR
R ltRtV tR	# )EvilConfigParserz=ConfigParser with support for evil INIs using duplicate keys.z
        \[                                 # [
        (?P<header>[^]]+)                  # very permissive!
        \]                                 # ]
        a  
        (?P<option>.*?)                    # very permissive!
        \s*(?P<vi>{delim})\s*              # any number of space/tab,
                                           # followed by any of the
                                           # allowed delimiters,
                                           # followed by any space/tab
        (?P<value>.*)$                     # everything up to eol
        a  
        (?P<option>.*?)                    # very permissive!
        \s*(?:                             # any number of space/tab,
        (?P<vi>{delim})\s*                 # optionally followed by
                                           # any of the allowed
                                           # delimiters, followed by any
                                           # space/tab
        (?P<value>.*))?$                   # everything up to eol
        =)Zdelimc           
     sH   V P                    EF  pVP                  R P                  V4      P                  R4      4       \	        V P                   V,          P                  4       4       F  w  rEVR8X  d   K  Vf   V P                  V P                  8X  d4   RP                  V\        V4      P                  RRV,          4      34      pVP                  RP                  V4      P                  R4      4       K  	  VP                  RP                  R4      4       EK  	  R# )z[{}]
zutf-8__name__Nr   Z
z
%s=z{}
)Z	_sectionswriteformatZencodelistZitemsZ_optcreOPTCREZjoinZstrZreplace)selfZfpZspace_around_delimitersZsectionkeyvalues   &&&   7/usr/lib/python3.14/site-packages/lutris/util/fileio.pyr   ZEvilConfigParser.write%   s    ~~GHHX__W-44W=>"4>>'#:#@#@#BC
*$%4<<4;;+F((CU););D'C-)P#QRCs+227;< D HHT[[)* &     N)T)r   
__module____qualname____firstlineno____doc__Z
_SECT_TMPLZ	_OPT_TMPLZ_OPT_NV_TMPLreZcompiler   ZVERBOSEr   Z	OPTCRE_NVr   __static_attributes____classdictcell__)__classdict__s   @r   r   r      sm     GJ
IL ZZ	((s(3RZZ@F

<..S.92::FI
+ 
+r   r   c                   s6   a a ] tR t^2t oRtV 3R ltRtVtV ;t# )MultiOrderedDictz3dict_type to use with an EvilConfigParser instance.c                s   < \        V\        4      '       d    W9   d   W,          P                  V4       R # \        SV `  W4       R # )N)Z
isinstancer   ZextendZsuper__setitem__)r	   r
   r   	__class__s   &&&r   r   ZMultiOrderedDict.__setitem__5   s1    eT""s{IU#G+r   r   )	r   r   r   r   r   r   r   r   Z__classcell__)r   r   s   @@r   r   r   2   s     =, ,r   r   )r   Zcollectionsr    Zconfigparserr   r   r   r   r   r   <module>r      s'    	 # ((+ (+V,{ ,r   