
    ^h+                     t   S SK J r   S SKrS SKrS SKrS SKrS SKJr  S SKJr  \R                  S    S:  r
\
(       a  S rOS r " S S	\5      rS
SSS.rSSSS.r0 r0 rS HG  r\ " \5      R&                  r\R+                  5       \\'    \\\\   '   \R+                  5       \\\   '   MI      " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      r " S$ S%\5      r  " S& S'\5      r! " S( S)\5      r"\"r# " S* S+\5      r$ " S, S-\$5      r% " S. S/\$5      r& " S0 S1\$5      r' " S2 S3\$5      r( " S4 S5\$5      r) " S6 S7\$5      r* " S8 S9\*5      r+ " S: S;\+5      r, " S< S=\+5      r- " S> S?\+5      r. " S@ SA\+5      r/ " SB SC\+5      r0 " SD SE\+5      r1 " SF SG\+5      r2 " SH SI\+5      r3 " SJ SK\$5      r4 " SL SM\$5      r5 " SN SO\55      r6 " SP SQ\$5      r7 " SR SS\$5      r8 " ST SU\$5      r9 " SV SW\$5      r: " SX SY\:5      r; " SZ S[\$5      r< " S\ S]\$5      r= " S^ S_\=5      r> " S` Sa\5      r? " Sb Sc\$5      r@ " Sd Se\$5      rA " Sf Sg\$5      rB " Sh Si5      rC\C" S5      rD\C" S5      rE\C" S5      rF " Sj Sk5      rG\G" Sl5      rH\G" Sm5      rI " Sn So5      rJ\J" 5       rK " Sp Sq5      rL " Sr Ss\$5      rM " St Su\M5      rN " Sv Sw\O5      rP " Sx Sy\P5      rQ " Sz S{5      rR " S| S}\P5      rS " S~ S\P5      rTS rUg! \ a     GM  f = f)    )arrayN)X)lock3c                     U $ N xs    B/var/www/html/env/lib/python3.13/site-packages/Xlib/protocol/rq.py_bytes_itemr   #   s        c                     [        U 5      $ r   )ordr
   s    r   r   r   &   s    1vr   c                       \ rS rSrSrg)BadDataError)   r	   N__name__
__module____qualname____firstlineno____static_attributes__r	   r   r   r   r   )   s    tr   r   bhl)         BHLbhilc                   @    \ rS rSrSrSrSrSrSrSr	Sr
SrS rS rSrg)FieldH   a  Field objects represent the data fields of a Struct.

Field objects must have the following attributes:

   name         -- the field name, or None
   structcode   -- the struct codes representing this field
   structvalues -- the number of values encodes by structcode

Additionally, these attributes should either be None or real methods:

   check_value  -- check a value before it is converted to binary
   parse_value  -- parse a value after it has been converted from binary

If one of these attributes are None, no check or additional
parsings will be done one values when converting to or from binary
form.  Otherwise, the methods should have the following behaviour:

   newval = check_value(val)
     Check that VAL is legal when converting to binary form.  The
     value can also be converted to another Python value.  In any
     case, return the possibly new value.  NEWVAL should be a
     single Python value if structvalues is 1, a tuple of
     structvalues elements otherwise.

   newval = parse_value(val, display)
     VAL is an unpacked Python value, which now can be further
     refined.  DISPLAY is the current Display object.  Return the
     new value.  VAL will be a single value if structvalues is 1,
     a tuple of structvalues elements otherwise.

If `structcode' is None the Field must have the method
f.parse_binary_value() instead.  See its documentation string for
details.

Nr   c                     g r   r	   selfs    r   __init__Field.__init__x   s    r   c                     [        SU -  5      e)a  value, remaindata = f.parse_binary_value(data, display, length, format)

Decode a value for this field from the binary string DATA.
If there are a LengthField and/or a FormatField connected to this
field, their values will be LENGTH and FORMAT, respectively.  If
there are no such fields the parameters will be None.

DISPLAY is the display involved, which is really only used by
the Resource fields.

The decoded value is returned as VALUE, and the remaining part
of DATA shold be returned as REMAINDATA.
z8Neither structcode or parse_binary_value provided for %s)RuntimeErrorr)   datadisplaylengthformats        r   parse_binary_valueField.parse_binary_value{   s     U!" # 	#r   r	   )r   r   r   r   __doc__namedefault
structcodestructvaluescheck_valueparse_valuekeyword_argsr*   r3   r   r	   r   r   r%   r%   H   s7    "H DGJLKKL#r   r%   c                       \ rS rSrS rSrg)Pad   c                 F    Xl         SU-  U l        SU-  U l        SU l        g )N    z%dxr   )sizevaluer8   r9   )r)   rB   s     r   r*   Pad.__init__   s%    	T\
$,r   )rB   r8   r9   rC   Nr   r   r   r   r*   r   r	   r   r   r>   r>      s    r   r>   c                       \ rS rSrS rSrg)ConstantField   c                     Xl         g r   rC   r)   rC   s     r   r*   ConstantField.__init__   s    
r   rJ   NrE   r	   r   r   rG   rG      s    r   rG   c                       \ rS rSrSrSrSrg)Opcode   r    r   r	   Nr   r   r   r   r8   r9   r   r	   r   r   rN   rN          JLr   rN   c                   "    \ rS rSrSrSrS rSrg)	ReplyCode   r    r   c                     SU l         g Nr   rJ   r(   s    r   r*   ReplyCode.__init__   s	    
r   rJ   N)r   r   r   r   r8   r9   r*   r   r	   r   r   rS   rS      s    JLr   rS   c                   &    \ rS rSrSrSrSrS rSrg)LengthField   a  A LengthField stores the length of some other Field whose size
may vary, e.g. List and String8.

Its name should be the same as the name of the field whose size
it stores.

The lf.get_binary_value() method of LengthFields is not used, instead
a lf.get_binary_length() should be provided.

Unless LengthField.get_binary_length() is overridden in child classes,
there should also be a lf.calc_length().
r"   r   c                     U$ )zZnewlen = lf.calc_length(length)

Return a new length NEWLEN based on the provided LENGTH.
r	   r)   r1   s     r   calc_lengthLengthField.calc_length   s	     r   r	   N)	r   r   r   r   r5   r8   r9   r]   r   r	   r   r   rY   rY      s     JLr   rY   c                       \ rS rSrSrg)TotalLengthField   r	   Nr   r	   r   r   r`   r`      s    r   r`   c                   "    \ rS rSrSrSrS rSrg)RequestLength   r!   r   c                     US-  $ )Nr   r	   r\   s     r   r]   RequestLength.calc_length   s    {r   r	   Nr   r   r   r   r8   r9   r]   r   r	   r   r   rc   rc      s    JLr   rc   c                   "    \ rS rSrSrSrS rSrg)ReplyLength   r"   r   c                     US-
  S-  $ )N    r   r	   r\   s     r   r]   ReplyLength.calc_length   s    !!r   r	   Nrg   r	   r   r   ri   ri      s    JL"r   ri   c                       \ rS rSrS rSrg)LengthOf   c                 ,    Xl         [        U   U l        g r   r6   unsigned_codesr8   r)   r6   rB   s      r   r*   LengthOf.__init__       	(.r   r6   r8   NrE   r	   r   r   ro   ro      s    /r   ro   c                   .    \ rS rSrSrSrS rS rS rSr	g)		OddLength   r    r   c                     Xl         g r   r6   r)   r6   s     r   r*   OddLength.__init__   s    	r   c                     US-  $ )Nr   r	   r\   s     r   r]   OddLength.calc_length   s    zr   c                     US:X  a  gg)Nr   evenoddr	   )r)   rC   r0   s      r   r;   OddLength.parse_value   s    A:r   r|   N)
r   r   r   r   r8   r9   r*   r]   r;   r   r	   r   r   ry   ry      s    JLr   ry   c                   "    \ rS rSrSrSrS rSrg)FormatField   zA FormatField encodes the format of some other field, in a manner
similar to LengthFields.

The ff.get_binary_value() method is not used, replaced by
ff.get_binary_format().
r   c                 ,    Xl         [        U   U l        g r   rr   rt   s      r   r*   FormatField.__init__   rv   r   rw   N)r   r   r   r   r5   r9   r*   r   r	   r   r   r   r      s     L/r   r   c                       \ rS rSrSS jrSrg)
ValueField   Nc                     Xl         X l        g r   )r6   r7   )r)   r6   r7   s      r   r*   ValueField.__init__   s    	r   )r7   r6   r   rE   r	   r   r   r   r      s    r   r   c                       \ rS rSrSrSrSrg)Int8   r   r   r	   NrP   r	   r   r   r   r      rQ   r   r   c                       \ rS rSrSrSrSrg)Int16i  r   r   r	   NrP   r	   r   r   r   r     rQ   r   r   c                       \ rS rSrSrSrSrg)Int32i  r   r   r	   NrP   r	   r   r   r   r     rQ   r   r   c                       \ rS rSrSrSrSrg)Card8i  r    r   r	   NrP   r	   r   r   r   r     rQ   r   r   c                       \ rS rSrSrSrSrg)Card16i  r!   r   r	   NrP   r	   r   r   r   r     rQ   r   r   c                       \ rS rSrSrSrSrg)Card32i  r"   r   r	   NrP   r	   r   r   r   r     rQ   r   r   c                   2    \ rS rSrSrSrS	S jrS rS rSr	g)
Resourcei  __resource__resourceNc                 <    [         R                  XU5        X l        g r   )r   r*   codes)r)   r6   r   r7   s       r   r*   Resource.__init__  s    G,
r   c                 \     [        XR                  5      " 5       $ ! [         a    Us $ f = fr   )getattrcast_functionAttributeErrorrK   s     r   r:   Resource.check_value!  s/    	5"4"4577 	L	s    ++c                 |    XR                   ;   a  U$ UR                  U R                  5      nU(       a  U" X!5      $ U$ r   )r   get_resource_class
class_namer)   rC   r0   cs       r   r;   Resource.parse_value'  s:     JJL&&t7W$$Lr   )r   )r	   N)
r   r   r   r   r   r   r*   r:   r;   r   r	   r   r   r   r     s    "MJ
r   r   c                       \ rS rSrSrSrSrg)Windowi3  
__window__windowr	   Nr   r   r   r   r   r   r   r	   r   r   r   r   3       MJr   r   c                       \ rS rSrSrSrSrg)Pixmapi7  
__pixmap__pixmapr	   Nr   r	   r   r   r   r   7  r   r   r   c                       \ rS rSrSrSrSrg)Drawablei;  __drawable__drawabler	   Nr   r	   r   r   r   r   ;      "MJr   r   c                       \ rS rSrSrSrSrg)Fontablei?  __fontable__fontabler	   Nr   r	   r   r   r   r   ?  r   r   r   c                       \ rS rSrSrSrSrg)FontiC  __font__fontr	   Nr   r	   r   r   r   r   C  s    MJr   r   c                       \ rS rSrSrSrSrg)GCiG  __gc__gcr	   Nr   r	   r   r   r   r   G  s    MJr   r   c                       \ rS rSrSrSrSrg)ColormapiK  __colormap__colormapr	   Nr   r	   r   r   r   r   K  r   r   r   c                       \ rS rSrSrSrSrg)CursoriO  
__cursor__cursorr	   Nr   r	   r   r   r   r   O  r   r   r   c                   "    \ rS rSrSrSrS rSrg)BooliT  r   r    c                     U(       $ r   r	   rK   s     r   r:   Bool.check_valueX  s
    9r   r	   N)r   r   r   r   r9   r8   r:   r   r	   r   r   r   r   T  s    LJr   r   c                   (    \ rS rSrSrSS jrS rSrg)Seti[  r   Nc                 X    [         R                  XU5        [        U   U l        X0l        g r   )r   r*   rs   r8   values)r)   r6   rB   r   r7   s        r   r*   Set.__init__^  s#    D0(.r   c                 z    XR                   ;  a+  [        SU R                  < SU< SU R                   < 35      eU$ )Nzfield z: argument z not in )r   
ValueErrorr6   r)   vals     r   r:   Set.check_valuec  s4    kk! $		3= > > 
r   )r8   r   r   )r   r   r   r   r9   r*   r:   r   r	   r   r   r   r   [  s    L
r   r   c                       \ rS rSrS rSrg)Gravityij  c                 |   [         R                  XS[        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  45        g rV   )r   r*   r   ForgetGravityStaticGravityNorthWestGravityNorthGravityNorthEastGravityWestGravityCenterGravityEastGravitySouthWestGravitySouthGravitySouthEastGravityr}   s     r   r*   Gravity.__init__k  sf    TQ__aoo$%$6$6$%$6$6$%OOQ]]$%$6$6$%$6$6%8 	9r   r	   NrE   r	   r   r   r   r   j  s    9r   r   c                       \ rS rSrSrS rSrg)FixedStringit  r   c                 B    [         R                  X5        SU-  U l        g )Nz%ds)r   r*   r8   rt   s      r   r*   FixedString.__init__w  s    D'$,r   )r8   N)r   r   r   r   r9   r*   r   r	   r   r   r   r   t  s    L'r   r   c                   .    \ rS rSrSrSS jrS rS rSrg)String8i|  Nc                 :    [         R                  X5        X l        g r   r   r*   padr)   r6   r   s      r   r*   String8.__init__      D'r   c                     [        U5      n[        (       a#  [        U5      [        L a  UR	                  S5      nU R
                  (       a  USSUS-  -
  S-  -  -   US 4$ XS 4$ )NUTF-8rA   r   )len_PY3typestrencoder   )r)   r   slens      r   
pack_valueString8.pack_value  s^    3x4DI$**W%C881tax<1"455tTAAd?"r   c                     Uc   UR                  S5      S4$ U R                  (       a  USUS-  -
  S-  -   nOUnUS U n UR                  S5      nXaUS  4$ ! [         a    US4s $ f = f! [         a     N&f = f)Nr   r   r   )decodeUnicodeDecodeErrorr   )r)   r/   r0   r1   r2   r  ss          r   r3   String8.parse_binary_value  s    >!{{7+S00 88a&1*n12DD&M	!A tu+~ & !Sy ! " 		s#   A  A+ A('A(+
A87A8r   r   	r   r   r   r   r8   r*   r  r3   r   r	   r   r   r   r   |  s    J	#r   r   c                   .    \ rS rSrSrSS jrS rS rSrg)String16i  Nc                 :    [         R                  X5        X l        g r   r   r   s      r   r*   String16.__init__  r   r   c                    [        U5      [        L a  U Vs/ s H  n[        U5      PM     nn[        U5      nU R                  (       a	  SUS-  -  nOSn[
        R                  " SSU-  -   4[        U5      -   6 U-   US 4$ s  snf )Ns     r   r   >r!   )r   r   r   r   r   structpacktuple)r)   r   r   r  r   s        r   r  String16.pack_value  s    9#&'3a3q63C'3x88TAX&CCcC$J.1E#J>?#Ed 	 (s   Bc                     US:X  a  [        U5      S-  S-
  nOUS:X  a  [        U5      S-  nU R                  (       a  X3S-  -   nOUn[        R                  " SSU-  -   US US-   5      XS-  S  4$ )Nr   r   r   r   r  r!   )r   r   r  unpack)r)   r/   r0   r1   r2   r  s         r   r3   String16.parse_binary_value  s    U?Y!^a'FvY!^F88aZ(DDcC&L0${
2CDAXY! 	!r   r	  r
  r  r	   r   r   r  r    s    J!r   r  c                   2    \ rS rSrSrSrSS jrS rS rSr	g)	Listi  zThe List, FixedList and Object fields store compound data objects.
The type of data objects must be provided as an object with the
following attributes and methods:

...

Nc                 F    [         R                  X5        X l        X0l        g r   )r   r*   r   r   )r)   r6   r   r   s       r   r*   List.__init__  s    D'	r   c                 4   UGcE  / nU R                   R                  c@  U(       a7  U R                   R                  X5      u  paUR                  U5        U(       a  M7  GOSU R                   R                  -   n[        R
                  " U5      nSn	X-   [        U5      ::  a  [        R                  " XqXU-    5      n
U R                   R                  S:X  a  U
S   n
U R                   R                  c  UR                  U
5        O*UR                  U R                   R                  X5      5        X-   n	X-   [        U5      ::  a  M  XS  nGOS /[        U5      -  nU R                   R                  c3  [        U5       H#  nU R                   R                  X5      u  X['   nM%     OSU R                   R                  -   n[        R
                  " U5      nSn	[        SU5       H{  n [        R                  " XqXU-    5      n
U R                   R                  S:X  a  U
S   n
U R                   R                  c  XU'   OU R                   R                  X5      X['   X-   n	M}     XS  nU R                  (       a  U[        U5      S-  S  nXQ4$ ! [         a    Sn
 Nf = f)N=r   r   s       r   )r   r8   parse_binaryappendr  calcsizer   r  r9   r;   intrange	Exceptionr   )r)   r/   r0   r1   r2   retr   scoder  posvis               r   r3   List.parse_binary_value  s>   >Cyy##+ $		 6 6t EICJJsO d dii222u-jCI-e#Tz-BCAyy--2aDyy,,4

1

499#8#8#DE*C jCI- Dz &3v;&Cyy##+vA#'99#9#9$#HLCFD ' dii222u-q&)A0"MM%c:1FG yy--2aDyy,,4!"A!%!6!6q!B*C *" Dz88D	A'Dy% % 0/0s   $JJJc                    U R                   R                  (       aY  [        U R                   R                  5      S:X  a6  [        [        U R                   R                     U5      R                  5       nOF/ nU H-  nUR                  U R                   R                  U5      5        M/     SR                  U5      nU R                  (       a  [        U5      nUSSUS-  -
  S-  -  -   nU[        U5      S 4$ )Nr   r   rA   r   )
r   r8   r   r   struct_to_array_codestobytesr   r  joinr   )r)   r   r/   r(  dlens        r   r  List.pack_value  s    99C		(<(<$=$B.tyy/C/CD"$$+GI  DDII0034  88D>D88t9D%AqLA#566DSXt##r   )r   r   r
  )
r   r   r   r   r5   r8   r*   r3   r  r   r	   r   r   r  r    s     J
:x$r   r  c                   *    \ rS rSrSS jrS rS rSrg)	FixedListi'  c                 <    [         R                  XX45        X l        g r   )r  r*   rB   )r)   r6   rB   r   r   s        r   r*   FixedList.__init__(  s    d$,	r   c                 D    [         R                  XX R                  U5      $ r   )r  r3   rB   r.   s        r   r3   FixedList.parse_binary_value,  s    &&t7IIvNNr   c                     [        U5      U R                  :w  a  [        SU R                  -  5      e[        R                  X5      $ )Nz length mismatch for FixedList %s)r   rB   r   r6   r  r  r   s     r   r  FixedList.pack_value/  s6    s8tyy ADIIMNNt))r   rB   Nr
  r   r   r   r   r*   r3   r  r   r	   r   r   r2  r2  '  s    O*r   r2  c                   :    \ rS rSrSrS	S jrS rS rS rS r	Sr
g)
Objecti5  Nc                     [         R                  XU5        X l        U R                  R                  U l        U R                  R                  U l        g r   )r   r*   r   r8   r9   )r)   r6   r   r7   s       r   r*   Object.__init__8  s:    D0	)).. II22r   c                    U R                   R                  c  U R                   R                  X5      $ SU R                   R                  -   n[        R                  " U5      n[        R
                  " XQS U 5      nU R                   R                  S:X  a  US   nU R                   R                  b  U R                   R                  Xr5      nXqUS  4$ )Nr  r   r   )r   r8   r  r  r!  r  r9   r;   )r)   r/   r0   r1   r2   r&  r  r(  s           r   r3   Object.parse_binary_value>  s    99'99))$88 $))...E??5)De%4[1Ayy%%*aDyy$$0II))!545k>!r   c                 j    U R                   R                  c  U$ U R                   R                  X5      $ r   )r   r;   )r)   r   r0   s      r   r;   Object.parse_valueO  s,    99  (J99((66r   c                    U R                   R                  (       aT  [        U R                   R                  5      S:X  a1  [        R                  " SU R                   R                  -   U5      S S 4$ U R                   R                  U5      $ )Nr   r  )r   r8   r   r  r  r  r   s     r   r  Object.pack_valueU  sa    99C		(<(<$=$B;;sTYY%9%993?tKK99'',,r   c                    U R                   R                  c  U$ [        U5      [        L a  U$ [        U5      [        L a  UnO0[	        U[
        5      (       a  UR                  nO[        SU-  5      e/ nU R                   R                   H3  nUR                  (       d  M  UR                  X$R                     5        M5     U$ )Nz9Object value must be tuple, dictionary or DictWrapper: %s)r   r8   r  dict
isinstanceDictWrapper_data	TypeErrorfieldsr6   r   )r)   r   r/   valsfs        r   r:   Object.check_value\  s    99'J9J9D[))99DWZ]]^^!!AvvvDL) " r   )r8   r9   r   r   )r   r   r   r   r8   r*   r3   r;   r  r:   r   r	   r   r   r<  r<  5  s     J3""7-r   r<  c                   $    \ rS rSrSrS rS rSrg)PropertyDatair  Nc                    Uc  [        U5      US-  -  nO[        U5      nUS:X  a  S nXQ4$ US:X  a  SUS U 4nXSUS-  -
  S-  -   S  nOXUS:X  a)  S[        [        S   US SU-   5      4nUSX3S-  -   -  S  nO)US:X  a#  S[        [        S   US SU-   5      4nUSU-  S  n[	        WS   5      [
        L a   US   US   R                  S5      4nXQ4$ XQ4$ ! [         a     XQ4$ f = f)	N   r   r      r   rl   r   r   )r   r"  r   array_unsigned_codesr   bytesr  r  )r)   r/   r0   r1   r2   r%  s         r   r3   PropertyData.parse_binary_valueu  sB   >Y6Q;/F[FQ;C9q[d7Fm$C1vz>Q"6789Dr\u1!4d;AJ6GHICVqj0123Dr\u1!4d;AJ6GHICF
$DA<5 1vs1v}}W56 ysy & ys   8C 
C&%C&c                    Uu  p#US;  a  [        SU-  5      e[        (       a#  [        U5      [        L a  UR	                  S5      n[        U5      [
        L a-  US-  n[        U5      nXT-  (       a  XUU-  -
  nUS U nOUnXT-  nON[        U5      [        L a  [        U5      nUS-  n[        [        U   U5      R                  5       n[        U5      n[        U5      nUSSUS-  -
  S-  -  -   nXgU4$ )N)rR  rS  rl   zInvalid property data format %dr   rR  rA   r   )r   r   r   r   r   rU  r   r  listr   rT  r-  )	r)   rC   fmtr   rB   vlenr/   r/  dls	            r   r  PropertyData.pack_value  s    k!@3FGG4DI$**W%C9!8Ds8D{Tk)5Dz<D CyE!3i!8D.t4c:BBDDs8DYeBF
a/003r   r	   r   r   r   r   r8   r3   r  r   r	   r   r   rP  rP  r  s    J<r   rP  c                   &    \ rS rSrS rS rS rSrg)FixedPropertyDatai  c                 :    [         R                  X5        X l        g r   )rP  r*   rB   rt   s      r   r*   FixedPropertyData.__init__  s    d)	r   c                 R    [         R                  XUU R                  US-  -  U5      $ )NrR  )rP  r3   rB   r.   s        r   r3   $FixedPropertyData.parse_binary_value  s-    ..t7/3yyVq[/I6S 	Sr   c                     [         R                  X5      u  p#n[        U5      U R                  :w  a  [	        SU< 35      eX#U4$ )Nz)Wrong data length for FixedPropertyData: )rP  r  r   rB   r   )r)   rC   r/   r/  rY  s        r   r  FixedPropertyData.pack_value  sG    &11$>Ct9		!"' + , , 3r   r9  Nr:  r	   r   r   r_  r_    s    Sr   r_  c                   2    \ rS rSrSrSrSrS rS rS r	Sr
g)		ValueListi  Nr   usekeywordsc                    Xl         S[        U   U4-  U l        [        R                  " U R                  5      U l        / U l        SnU H7  nUR                   (       d  M  U R                  R                  Xe45        US-  nM9     g )Nz=%s%dxr   )r6   rs   maskcoder  r!  maskcodelenrK  r   )r)   r6   maskr   rK  flagrM  s          r   r*   ValueList.__init__  sn    	 N4$8##>>!??4==9Avvv""A9-qy r   c                    SnSnXR                   :X  a  UnU R                   H  u  pVUR                  U;   d  M  X6-  nXR                     nUR                  b  UR                  U5      n[        R
                  " SUR                  -   U5      nXH-   SS[        U5      -
  -  -   nM     [        R
                  " U R                  U5      U-   S S 4$ )Nr   r   r  rA   r   )	r7   rK  r6   r:   r  r  r8   r   rj  )	r)   argkeysrl  r/   fieldrm  r   ds	            r   r  ValueList.pack_value  s    ,,C;;KEzzS {**o$$0++C0CKKe&6&6 6<x%1s1v:"66 ' {{4==$/$6dBBr   c           
      b   0 n[        [        R                  " U R                  US U R                   5      S   5      nXR                  S  nU R
                   H  u  pxXh-  (       d  M  UR                  (       a|  [        R                  " SUR                  -   US [        R                  " SUR                  -   5       5      n	UR                  S:X  a  U	S   n	UR                  b  UR                  X5      n	OUR                  US S US S 5      u  pXUR                  '   USS  nM     [        U5      U4$ )Nr   r  r   r   )r"  r  r  rj  rk  rK  r8   r!  r9   r;   r3   r6   rH  )r)   r/   r0   r1   r2   rrl  rr  rm  rL  rs  s              r   r3   ValueList.parse_binary_value  s   6==5Fd6F6F0GHKL$$%&;;KE{{##!==u/?/?)?)-.VvsUEUEU?U/V)WYD))Q.#Aw((4$00? $66tBQx$PTUGD $%**ABx '" 1~t##r   )rK  rj  rk  r6   )r   r   r   r   r8   r<   r7   r*   r  r3   r   r	   r   r   rg  rg    s!    JLG
!C($r   rg  c                   $    \ rS rSrSrS rS rSrg)KeyboardMappingi  Nc                     Uc  [        U5      nOSU-  U-  n[        [        S   US U 5      n/ n[        S[        U5      U5       H  nUR	                  XhX-    5        M     XqUS  4$ )Nr   r   )r   r   rT  r#  r   )	r)   r/   r0   r1   r2   r/  ar%  r)  s	            r   r3   "KeyboardMapping.parse_binary_value
  sv    >t9Dv:&D&q)4;7q#a&&)AJJqQZ() * Kr   c                 Z   SnU H  n[        U[        U5      5      nM     [        [        S   5      nU HX  nU H  nUR	                  U5        M     [        [        U5      U5       H"  nUR	                  [        R                  5        M$     MZ     UR                  5       [        U5      U4$ )Nr   r   )	maxr   r   rT  r   r#  r   NoSymbolr-  r)   rC   keycodesr(  r{  kr)  s          r   r  KeyboardMapping.pack_value  s    A8SV,H  &q)*A 3q68,$ -  yy{CJ00r   r	   r]  r	   r   r   ry  ry    s    J 1r   ry  c                   $    \ rS rSrSrS rS rSrg)ModifierMappingi(  Nc                     [        [        S   US SU-   5      n/ n[        SS5       H  nUR                  XWU-  US-   U-   5        M!     XaSU-  S  4$ )Nr   rR  r   )r   rT  r#  r   )r)   r/   r0   r1   r2   r{  r%  r)  s           r   r3   "ModifierMapping.parse_binary_value+  sh    &q)4V+<=q!AJJqVq1u&678  V%%%r   c                 r   [        U5      S:w  a  [        S5      eSnU H  n[        U[        U5      5      nM     [        [        S   5      nU HJ  nU H  nUR                  U5        M     [        [        U5      U5       H  nUR                  S5        M     ML     UR                  5       [        U5      U4$ )NrR  z/ModifierMapping list should have eight elementsr   r   )r   r   r~  r   rT  r   r#  r-  r  s          r   r  ModifierMapping.pack_value4  s    u:?PQQA8SV,H  &q)*A 3q68, -  yy{CJ00r   r	   r]  r	   r   r   r  r  (  s    J&1r   r  c                   $    \ rS rSrSrS rS rSrg)
EventFieldiF  Nc                     [        U[        5      (       d  [        U< SU R                  < 35      eUR                  S S 4$ )Nz is not an Event for field )rG  Eventr   r6   _binaryrK   s     r   r  EventField.pack_valueI  s4    %''E499UVV}}dD((r   c                     SSK Jn  UR                  R                  [	        US   5      S-  UR
                  5      nU" X!S S S9USS  4$ )Nr   )event   rl   )r0   
binarydata)Xlib.protocolr  event_classesgetr   AnyEvent)r)   r/   r0   r1   r2   r  estructs          r   r3   EventField.parse_binary_valueO  sK    '''++KQ,@4,GXCRyA49LLr   r	   )r   r   r   r   r8   r  r3   r   r	   r   r   r  r  F  s    J)Mr   r  c                       \ rS rSrS rSrg)	ScalarObji\  c                 ,    Xl         SU l        S U l        g rV   )r8   r9   r;   )r)   codes     r   r*   ScalarObj.__init__]  s    r   )r;   r8   r9   NrE   r	   r   r   r  r  \  s     r   r  c                   (    \ rS rSrSrSrS rS rSrg)ResourceObjif  r"   r   c                     Xl         g r   r   )r)   r   s     r   r*   ResourceObj.__init__j  s    $r   c                 Z    UR                  U R                  5      nU(       a  U" X!5      $ U$ r   )r   r   r   s       r   r;   ResourceObj.parse_valuem  s+     &&t7W$$Lr   r  N)	r   r   r   r   r8   r9   r*   r;   r   r	   r   r   r  r  f  s    JL%r   r  r   r   c                   $    \ rS rSrSrS rS rSrg)StrClassiy  Nc                     [        U5      [        La  UR                  S5      n[        (       a  [        [	        U5      /5      U-   nU$ [        [	        U5      5      U-   nU$ )Nr   )r   rU  r   r   r   chrr   s     r   r  StrClass.pack_value|  sV    9E!**W%C4S
#c)C 
 c#h-#%C
r   c                 ~    [        US   5      S-   nUSU n UR                  S5      nXAUS  4$ ! [         a     Nf = f)Nr   r   r   )r   r  r  )r)   r/   r0   r  r  s        r   r  StrClass.parse_binary  sW    47#a'4L	!A tu+~ " 		s   / 
<<r	   )r   r   r   r   r8   r  r  r   r	   r   r   r  r  y  s    Jr   r  c                   >    \ rS rSrSrS rS rS rS
S jrS
S jr	Sr
g	)Structi  a  Struct objects represents a binary data structure.  It can
contain both fields with static and dynamic sizes.  However, all
static fields must appear before all dynamic fields.

Fields are represented by various subclasses of the abstract base
class Field.  The fields of a structure are given as arguments
when instantiating a Struct object.

Struct objects have two public methods:

  to_binary()    -- build a binary representation of the structure
                    with the values given as arguments
  parse_binary() -- convert a binary (string) representation into
                    a Python dictionary or object.

These functions will be generated dynamically for each Struct
object to make conversion as fast as possible.  They are
generated the first time the methods are called.

c                    Xl         SU l        SU l        / U l        S U l        / U l        U R                    H  nUR                  b~  U R
                  (       a   eU R                  UR                  -   U l        UR                  S:  a;  U R                  R                  U5        U R                  UR                  -   U l        M  M  U R
                  R                  U5        M     [        R                  " U R                  5      U l        U R
                  (       a  S U l        SU l        g U R                  SS  U l        U R                  U l        g )Nr  r   r   )rK  static_codesstatic_valuesstatic_fieldsstatic_size
var_fieldsr8   r9   r   r  r!  )r)   rK  rM  s      r   r*   Struct.__init__  s     A ||'??**$($5$5$D! >>A%&&--a0)-););ann)LD& & &&q)! $ "??4+<+<=??"DO !D"//3DO $ 2 2Dr   c                 ,	   Sn[        U R                  5      n/ n/ n/ nSnSn	U R                   Hf  n
U
R                  (       a  SnSnOSnUSU
R                  U	US.-  -   nUSU
R                  -  -   nUR                  SU
R                  -  5        U	S-   n	Mh     S	U R                  -  /nSn	U R                   GH  n
[        U
[        5      (       a  [        U
[        5      (       a]  U R                  (       a  UR                  S
X4-  5        GO(UR                  [        U
R                  U R                  5      5      5        GOUR                  SXR                  4-  5        GO[        U
[        5      (       a   UR                  SU
R                  -  5        GO[        U
[        5      (       a&  UR                  [        U
R                  5      5        GObU
R                  S:X  aI  U
R                   b   UR                  SXR                  4-  5        OUR                  U
R                  5        O/ n[#        U
R                  5       H#  nUR                  SU
R                  U4-  5        M%     U
R                   b$  USSR%                  U5      XR                  4-  -   nO'USSR%                  U5      < SU
R                  < S3-   nX-   nU
R                  (       a^  U
R&                  c  UR                  U
R                  5        O5UR                  U
R                  < S[)        U
R&                  5      < 35        U	S-   n	GM     SSR%                  U5      -  nU R                  (       a  USU< SSR%                  U5      < S3-   nOUSU-  -   nU R                   Hu  n
U
R                  (       d  M  U
R&                  c  UR                  U
R                  5        M@  UR                  U
R                  < S[)        U
R&                  5      < 35        Mw     Xg-   nU(       a  UR                  S5        SSR%                  U5      -  U-   n[+        5       R-                  5       n[/        UU5        [0        R2                  " US   U 5      U l        U R4                  " U0 UD6$ )a8  data = s.to_binary(...)

Convert Python values into the binary representation.  The
arguments will be all value fields with names, in the order
given when the Struct object was instantiated.  With one
exception: fields with default arguments will be last.

Returns the binary representation as the string DATA.

 r   r   z, _keyword_argszf  _%(name)s, _%(name)s_length, _%(name)s_format = self.var_fields[%(fno)d].pack_value(%(name)s%(kw)s)
)r6   fnokwz + len(_%s)z_%sz"%s"z&self.static_fields[%d].calc_length(%s)z.self.static_fields[%d].calc_length(_%s_length)z
_%s_formatz&self.static_fields[%d].check_value(%s)z_%s_%dz.  %s = self.static_fields[%d].check_value(%s)
, z   = 
zstruct.pack(%s)z	  return z + z  return %s
z**_keyword_argszdef to_binary(self, %s):
	to_binary)r   r  r  r<   r6   r   r  r  rG  rY   r`   r]   r   rG   rC   r9   r:   r#  r.  r7   reprglobalscopyexectypes
MethodTyper  )r)   varargsrq  r  total_lengthjoinsargsdefargskwargr)  rM  r  	pack_argsr{  jr  gs                    r   r  Struct.to_binary  s    4++, A~~&  V'(vv&'%'** +D (-!&&*@@LLL(AA% !4 d///0	##A![)) a!122!(()Q,-+<*= > "((Q]]4;K;K-L)MN$$%U*+VV&5 6 A{++  !67 A}--  QWW. >>Q& }}0!(()Q./[*9 :
 "((0 A"1>>2QVVQK!78 3 }}0#'X*.))A,66)B(C  D  $tyy|QVV&LL )I 66yy(AFF+AFFDO'LMAAw $| !499Y#77 ??$

58IJJD /D00D Avvv99$KK'NNQYY#HI ! ~KK)* ,diio=D$ INNT1))!K.$? ~~w/$//r   c                    [        U5      [        L a  U R                  " U0 0 D6$ [        U5      [        L a  U R                  " S0 UD6$ [	        U[
        5      (       a  U R                  " S0 UR                  D6$ [        SU-  5      e)zThis function allows Struct objects to be used in List and
Object fields.  Each item represents the arguments to pass to
to_binary, either a tuple, a dictionary or a DictWrapper.

r	   z%s is not a tuple or a list)r   r  r  rF  rG  rH  rI  r   rK   s     r   r  Struct.pack_valuex  sz     ;%>>5/B//%[D >>2///{++>>2555<FGGr   c                 d   SnSnSnU R                    H  nUR                  (       d  O[        U[        5      (       a  O[        U[        5      (       a  OiUR
                  S:X  a  [        U5      nOSXUUR
                  -   4-  nUR                  c  USUR                  < SU< S3-   nOUSUR                  Xh4-  -   nUS-   nXWR
                  -   nM     US	-   nUS
-   n[        5       R                  5       n	[        XI5        [        R                  " U	S   U 5      U l        U R                  XU5      $ )zrThis function is used by List and Object fields to convert
Struct objects with no var_fields into Python values.

z=def parse_value(self, val, display, rawdict = 0):
  ret = {}
r   r   %d:%d  ret["	"] = val[]
C  ret["%s"] = self.static_fields[%d].parse_value(val[%s], display)
z*  if not rawdict: return DictWrapper(ret)
z  return ret
r;   )r  r6   rG  rY   r   r9   r   r;   r  r  r  r  r  )
r)   r   r0   rawdictr  vnor  rM  vranger  s
             r   r;   Struct.parse_value  s5    ##A 66A{++A{++ >>Q& XF$1>>-A'BBF
 ==(qvvv"NND $E&'ffc%:$; <D 'C&CK $N CC&& INNT ++Am,<dC g66r   c           
         SU R                   U R                  4-  n0 n0 nSnSnU R                   GH   n	U	R                  (       d  O[	        U	[
        5      (       a2  U	R                  c  SU-  XYR                  '   OSX4-  XYR                  '   O[	        U	[        5      (       a  SU-  XiR                  '   OiU	R                  S:X  a  [        U5      n
OSXwU	R                  -   4-  n
U	R                  c  USU	R                  < SU
< S	3-   nOUS
U	R                  X4-  -   nUS-   nXyR                  -   nGM     USU R                  -  -   nSnU R                   HR  n	USU	R                  UUR                  U	R                  S5      UR                  U	R                  S5      4-  -   nUS-   nMT     US-   nUS-   n[        5       R                  5       n[        XK5        [        R                   " US   U 5      U l        U R#                  XU5      $ )a  values, remdata = s.parse_binary(data, display, rawdict = 0)

Convert a binary representation of the structure into Python values.

DATA is a string or a buffer containing the binary data.
DISPLAY should be a Xlib.protocol.display.Display object if
there are any Resource fields or Lists with ResourceObjs.

The Python values are returned as VALUES.  If RAWDICT is true,
a Python dictionary is returned, where the keys are field
names and the values are the corresponding Python value.  If
RAWDICT is false, a DictWrapper will be returned where all
fields are available as attributes.

REMDATA are the remaining binary data, unused by the Struct object.

zfdef parse_binary(self, data, display, rawdict = 0):
  ret = {}
  val = struct.unpack("%s", data[:%d])
r   zval[%d]z4self.static_fields[%d].parse_value(val[%d], display)r   r  r  r  r  r  z  data = data[%d:]
zR  ret["%s"], data = self.var_fields[%d].parse_binary_value(data, display, %s, %s)
Nonez)  if not rawdict: ret = DictWrapper(ret)
z  return ret, data
r  )r  r  r  r6   rG  rY   r;   r   r9   r   r  r  r  r  r  r  r  r  )r)   r/   r0   r  r  lengthsformatsr  r  rM  r  r  s               r   r  Struct.parse_binary  s   (; $$d&6&678
 ##A
 66
 A{++==(&/#oGFFO(G*-(4GFFO A{++"+c/ >>Q& XF$1>>-A'BBF==(qvvv"NND $E&'ffc%:$; <D 'C&CK $N ,t/?/???
 A 7  ffc%kk!&&&9%kk!&&&9;; <D 'C ! BB,, INNT!,,Q~->E   88r   )rK  r  r;   r  r  r  r  r8   r9   r  r  Nr   )r   r   r   r   r5   r*   r  r  r;   r  r   r	   r   r   r  r    s'    *"3Rd0NH$A7Hb9r   r  c            	       X    \ rS rSr\" \" SS5      \" S5      \" SSS95      rS r	S r
S	rg
)TextElements8i3  stringr   deltar   r	  c                    Sn0 nU GH(  n[         (       a#  [        U5      [        L a  UR                  S5      n[        U5      [        L a  SU4n[        U5      [
        [        4;   d  [        U[        5      (       av  [        U5      [
        L a  Uu  pVO
US   nUS   nU(       d  U(       aE  XSS'   US S US'   X R                  R                  " S0 UD6-   nSnUSS  nU(       a  M:  U(       a  MC  M  M  [        US5      (       a  UR                  5       nU[        R                  " S	S
U5      -   nGM+     [        U5      nUSSUS-  -
  S-  -  -   S S 4$ )Nr   r   r   r  r     r	   r   z>BL   rA   r   )r   r   r   r   rU  r  rF  rG  rH  string_textitemr  hasattrr   r  r  r   )r)   rC   r/   r  r(  r  r  r/  s           r   r  TextElements8.pack_value8  sE   AtQ3HHW%Aw%F
 Aw5$-'![))7e# HE1gJE(Aq$)M%&tWDN"6"6"@"@""M"MMDE#$A eqq 1n--(Afkk%a88G L 4yeD1H122D$>>r   c                 l   / n [        U5      S:  a   US4$ [        US   5      S:X  a2  UR                  [        R                  " SUSS 5      S   5        USS  nOX[        US   5      S:X  a  [        US   5      S:X  a  USS  nO.U R
                  R                  X5      u  paUR                  U5        M  )Nr   r   r   r  z>L   r   )r   r   r   r  r  r  r  )r)   r/   r0   r1   r2   r   r(  s          r   r3    TextElements8.parse_binary_valuee  s    4y1}  s{ 47#s*fmmD$q)<Q?@ABx T!W%*{47/Cq/HABx ..;;DJa ! r   r	   N)r   r   r   r   r  ro   r   r   r  r  r3   r   r	   r   r   r  r  3  s1    hx3"7m%ha8;O+?Zr   r  c            	       L    \ rS rSr\" \" SS5      \" S5      \" SSS95      rSr	g)	TextElements16i}  r  r   r  r   r	  r	   N)
r   r   r   r   r  ro   r   r  r  r   r	   r   r   r  r  }  s&    hx3"7m&xq9<Or   r  c                       \ rS rSrS rSrg)GetAttrDatai  c                      U R                   (       a  U R                   U   $ [        U5      e! [         a    [        U5      ef = fr   )rI  r   KeyError)r)   attrs     r   __getattr__GetAttrData.__getattr__  sB    	'zzzz$''$T** 	' &&	's   - - Ar	   N)r   r   r   r   r  r   r	   r   r   r  r    s    'r   r  c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)rH  i  c                      XR                   S'   g )NrI  )__dict__)r)   rF  s     r   r*   DictWrapper.__init__  s    !%gr   c                      U R                   U   $ r   rI  r)   keys     r   __getitem__DictWrapper.__getitem__  s    zz#r   c                      X R                   U'   g r   r  r)   r  rC   s      r   __setitem__DictWrapper.__setitem__      

3r   c                     U R                   U	 g r   r  r  s     r   __delitem__DictWrapper.__delitem__      JJsOr   c                      X R                   U'   g r   r  r  s      r   __setattr__DictWrapper.__setattr__  r  r   c                     U R                   U	 g r   r  r  s     r   __delattr__DictWrapper.__delattr__  r  r   c                 ,    [        U R                  5      $ r   )r   rI  r(   s    r   __str__DictWrapper.__str__  s    4::r   c                 P    U R                   < S[        U R                  5      < S3$ )N())	__class__r  rI  r(   s    r   __repr__DictWrapper.__repr__  s    >>4

+;<<r   c                 |    [        U[        5      (       a  U R                  UR                  :H  $ U R                  U:H  $ r   )rG  rH  rI  r)   others     r   __eq__DictWrapper.__eq__  s1    e[))::,,::&&r   c                 .    U R                  U5      (       + $ r   )r  r  s     r   __ne__DictWrapper.__ne__  s    ;;u%%%r   r	   N)r   r   r   r   r*   r  r  r  r
  r  r  r  r  r  r   r	   r   r   rH  rH    s4    &  ='&r   rH  c                   $    \ rS rSrSS jrS rSrg)Requesti  Nc                     X l         U R                  R                  " U0 UD6U l        S U l        UR                  XS L5        g r   )_errorhandler_requestr  r  _serialsend_request)r)   r0   onerrorr  rq  s        r   r*   Request.__init__  s=    $}}..==T$#67r   c                 J    U R                   b  [        U R                   X5      $ g)Nr   )r#  call_error_handlerr)   errors     r   
_set_errorRequest._set_error  s$    )%d&8&8%FFr   )r  r#  r%  r   )r   r   r   r   r*   r-  r   r	   r   r   r!  r!    s    8r   r!  c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
ReplyRequesti  c                    Xl         U R                  R                  " U0 UD6U l        S U l        S U l        S U l        [        R                  " 5       U l	        U R                   R                  U S5        U(       d  U R                  5         g g rV   )_displayr$  r  r  r%  rI  _errorr   allocate_lock_response_lockr&  reply)r)   r0   deferr  rq  s        r   r*   ReplyRequest.__init__  sm    }}..==
"002""4+JJL r   c                    U R                   R                  5         U R                  c  U R                  c  U R                  R
                  R                  5         U R                   R                  5         U R                  R                  U R                  S9  U R                   R                  5         U R                  c  U R                  c  M  U R                   R                  5         S U l        U R                  (       a  U R                  eg )N)request)	r5  acquirerI  r3  r2  send_recv_lockreleasesend_and_recvr%  r(   s    r   r6  ReplyRequest.reply  s    
 	##%jj T[[%8MM((002'')MM''$,,'?'') jj T[[%8 	##% ;;++ r   c                     U R                   R                  5         U R                  R                  XR                  SS9u  U l        nU R                   R                  5         g )Nr   r  )r5  r;  _replyr  r2  rI  r=  )r)   r/   rs  s      r   _parse_responseReplyRequest._parse_response  sJ    ##%00}}PQ0R
A##%r   c                 x    U R                   R                  5         Xl        U R                   R                  5         grV   )r5  r;  r3  r=  r+  s     r   r-  ReplyRequest._set_error  s.    ##%##%r   c           	      x    SU R                   < SU R                  < SU R                  < SU R                  < S3	$ )N<z
 serial = z	, data = z
, error = r  )r  r%  rI  r3  r(   s    r   r  ReplyRequest.__repr__  s'    <@NNDLLZ^ZdZdfjfqfqrrr   )r  rI  r2  r3  r5  r%  Nr  )
r   r   r   r   r*   r6  rC  r-  r  r   r	   r   r   r0  r0    s    (&
sr   r0  c                   *    \ rS rSrSS jrS rS rSrg)r  i  Nc                    U(       ak  Xl         U R                  R                  XSS9u  U l        nU R                  S   S-  (       U R                  S'   U R                  S   S-  U R                  S'   g U R                  (       a  U R                  US'   SUS'   U R                  R
                  " S	0 UD6U l         SUS'   X0l        g )
Nr   rA  r      
send_eventr  r   sequence_numberr	   )r  _fieldsr  rI  _coder  )r)   r  r0   rq  r/   s        r   r*   Event.__init__  s    %L#||88CD  9  FDJ 04zz&/AD/H+HDJJ|$!%F!3d!:DJJvzz#zzV&'D"#<<112>>DL!"DJr   c                 &   / nU R                   R                  5        HM  u  p#US:X  a  M  US:X  a  U R                   S   (       a  US-  nUR                  U< S[        U5      < 35        MO     SR	                  U5      nU R
                  < SU< S3$ )NrM  r   rL  r  r  r  r  )rI  itemsr   r  r.  r  )r)   kwlistr  r   kwss        r   r  Event.__repr__  sz    zz'')GB\!V|

< 8DjMMr4956 * ii>>3//r   c                     [        U[        5      (       a  U R                  UR                  :H  $ [        U R                  U5      $ r   )rG  r  rI  cmpr  s     r   r  Event.__eq__  s3    eU##::,,tzz5))r   )r  rI  )NN)r   r   r   r   r*   r  r  r   r	   r   r   r  r    s    (
0*r   r  c                      U " X5      $ !   [         R                  R                  S5        [        R                  " 5          g= f)Nz#Exception raised by error handler.
r   )sysstderrwrite	traceback	print_exc)handlerr,  r:  s      r   r*  r*    s;    u&&

?@s	   
 6A)Vr   r  r[  r^  r  Xlibr   Xlib.supportr   versionr   r   r$  r   signed_codesrs   rT  r,  r   itemsizerB   upperr  r%   r>   rG   rN   rS   rY   r`   rc   ri   ro   ry   r   Formatr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r2  r<  rP  r_  rg  ry  r  r  r  Card8Obj	Card16Obj	Card32Objr  	WindowObjColormapObjr  Strr  r  r  objectr  rH  r!  r0  r  r*  r	   r   r   <module>ro     s  &   
     {{1~  $9 # CC)cc+   	A8D!"45l40167gginT23 
C# C#L% E 
]  % 4	{ 	$ "" "/{ / "/% / 
 : J J J Z Z 
v 4X X x x 8  x X 
: * 9c 9'* '#j #L"!z "!L\$: \$~* *:Z :z@: @F &<$ <$~1j 1B1j 1<M M,    cNcN	cN	   !	*% * j_9 _9DFJ FT<] <'& ' &+  &D .s; .sb%*K %*Ng.  s   	L,,L76L7