
    th,                    T   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ  ej        e          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+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d Z5d!Z6d"Z7d#Z8d$Z9d%Z:d&Z;d'Z<d(Z=d)Z>d*Z?d+Z@d,ZAd-ZBd.ZCd/ZDd0ZEd1ZFd2ZGd3ZHd4ZId5ZJd6ZKd7ZLi dd8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXZMdY eMN                                D             ZOi e#d dZddZd[fd\e$d dZddZd[fd\e#d dZd9dZd[fd]e$d dZd9dZd[fd]e#ddZddZd[fd^e$ddZddZd[fd^e#ddZd9dZd[fd_e$ddZd9dZd[fd_e#d dZdd`d[fdae$d dZdd`d[fdae#d dZd9d`d[fdbe$d dZd9d`d[fdbe#ddZdd`d[fdce$ddZdd`d[fdce#ddZd9d`d[fdde$ddZd9d`d[fdde#d dZdded[fdfi e$d dZdded[fdfe#d dZd9ded[fdge$d dZd9ded[fdge#ddZdded[fdhe$ddZdded[fdhe#ddZd9ded[fdie$ddZd9ded[fdie#d dZddjd[fdke$d dZddjd[fdke#d dZd9djd[fdle$d dZd9djd[fdle#ddZddjd[fdme$ddZddjd[fdme#dd`ddjd[fdme$dd`ddjd[fdme#ddZd9djd[fdne$ddZd9djd[fdni e#ddZddod[fdpe#d dZddqd[fdre#ddZddqd[fdre$ddZddqd[fdse#ddZd9dqd[fdte#dd`ddqd[fdue$dd`ddqd[fdve#d dwddxd[fdye$d dwddxd[fdze#ddZddxd[fd{e#dd`ddxd[fd|e$dd`ddxd[fd}e#ddwddxd[fdye$ddwddxd[fdze#ddZdd~d`fde$ddZdd~d`fde#d9dZddd[fdi e$d9dZddd[fde#d9dZd9dd[fde$d9dZd9dd[fde#d9dZddd[fde$d9dZddd[fde#d9dZdddfde$d9dZdddfde#d9dZdddfde$d9dZdddfde#d9dZdddfde$d9dZdddfde#d9dZdddZfde$d9dZdddZfde#d9dZdddfde$d9dZdddfde#d9dZdddfde$d9dZdddfdi e#d9dZddd`fde$d9dZddd`fde#d9dZdddfde$d9dZdddfde#d9dZdddfde$d9dZdddfde#d9dZdddfde$d9dZdddfde#d9dZddd[fde$d9dZddd[fde#d9dZddd[fde$d9dZddd[fde#d9dZdddfde$d9dZdddfde#d9dZdddZfde$d9dZdddZfde#d9dZddd`fdi e$d9dZddd`fde#d;dZddZd[fde$d;dZddZd[fde#d;dZd9dZd[fde$d;dZd9dZd[fde#d;dZdd`d[fde$d;dZdd`d[fde#d;dZd9d`d[fde$d;dZd9d`d[fde#d;dZdded[fde$d;dZdded[fde#d;dZd9ded[fde$d;dZd9ded[fde#d;dZddjd[fde$d;dZddjd[fde#d;dZdd~d`fde$d;dZdd~d`fde#d;dZd9djd[fde$d;dZd9djd[fde#d?dZddd[fde$d?dZddd[fde#d?dZdddfde$d?dZdddfde#d?dZdddfde$d?dZdddfde#d?dZddd[fde#dAdZddd[fde$dAdZddd[fde#dEdZddd[fde$dEdZddd[fdiZP eQd ePD                       ZRg dZSd ZTd ZUd ZVi ZWi ZX G d de          ZY G d de          ZZeWeZ_W        eXeZ_X         ejN                    D ]M\  Z[Z\e\]                    dd          Z\ e^eZde\z   eWe[         d                     e^eZde\z   eXe[                    N[W[X[[[\ G d deZ          Z_e_Z` G d dej                  Zai dde#dddZdfdde#dddjdfdde#ddd~d9fdde#d;ddjdfdde#d;dd~d9fdde#dd9dxdfdde#dddqdfdde#dd9dqdfdde#dd;dxdfdde#d9dddfdde#d9ddd fdde#d9ddd9fdde#d?dddfdde#dAdddfdde#dEdddfdde$dd9dxdfdde$dddqdfde$dd9dqdfde$dd;dxdfd֜Zbdׄ Zc G d؄ d٦          Zddڄ Ze ejf        eajg        eaeT            ejh        eajg        ec            eji        eajg        ee            ejj        eajg        ddg            ejk        eajg        dݦ           dS )    N)MutableMapping)Fraction)NumberRational   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32beo8TYPESFT   s   IIs   MM   i  i  i  i  i
  i    i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  D  iE  iJ  iR  iS  i[  i  i  i  i  iI  is  ii  i  i  i  i  raw   
tiff_ccitt   group3   group4   tiff_lzw   	tiff_jpeg   jpeg   tiff_adobe_deflatei  tiff_raw_16i  packbitsi)  tiff_thunderscani  tiff_deflateit  tiff_sgilogiu  tiff_sgilog24im  lzmaiP  zstdiQ  webpc                     i | ]\  }}||	S  r1   ).0kvs      g/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/PIL/TiffImagePlugin.py
<dictcomp>r6      s    BBBA1BBB    r   r1   )1z1;I)r9   z1;IR)r9   r9   )r9   z1;R)r   )LzL;2I)r:   zL;2IR)r:   zL;2)r:   zL;2R)r   )r:   zL;4I)r:   zL;4IR)r:   zL;4)r:   zL;4R)r%   )r:   zL;I)r:   zL;IR)r:   r:   )r:   zL;R)   )I;16zI;12)   )r<   r<   )I;16Br>   )r<   zI;16R)II;16S)r?   I;16BS)r   )    )FF;32F)rC   F;32BF)r?   zI;32N)r?   I;32S)r?   I;32BS)r%   r%   )LArH   )r%   r%   r%   )RGBrI   )rI   zRGB;R)r%   r%   r%   r%   )RGBArJ   r   )RGBXrL   )r%   r%   r%   r%   r%   r   r   )rL   RGBXX)r%   r%   r%   r%   r%   r%   )r   r   r   )rL   RGBXXX)rJ   RGBa)r   r   )rJ   RGBaX)r   r   r   )rJ   RGBaXX)r   r   )rJ   RGBAX)r   r   r   )rJ   RGBAXX)i  )r=   r=   r=   )rI   zRGB;16L)rI   zRGB;16B)r=   r=   r=   r=   )rJ   zRGBA;16L)rJ   zRGBA;16B)rL   zRGBX;16L)rL   zRGBX;16B)rJ   zRGBa;16L)rJ   zRGBa;16B)PzP;1)rU   zP;1R)rU   zP;2)rU   zP;2R)rU   zP;4)rU   zP;4R)rU   rU   )PArV   )rU   zP;R)CMYKrW   )rW   CMYKX)rW   CMYKXX)rW   zCMYK;16L)rI   rL   )LABrZ   c              #   @   K   | ]}t          |d                    V  dS )r   N)len)r2   key_tps     r5   	<genexpr>r^     s,      AAV#fQi..AAAAAAr7   )   MM *   II* s   MM* s   II *s   MM +s   II+ c                 $    | d d         t           v S Nr   )PREFIXESprefixs    r5   _acceptrf     s    "1":!!r7   c                     t          |           dk    }t          |rd| z  n|                               |          }|r|d d d         n|S )Nr   )absIFDRationallimit_rational)valmax_valinvn_ds       r5   _limit_rationalrp     sR    
c((Q,C
-a#gg#
.
.
=
=g
F
FC$3ttt99$r7   c                     t          |           }|j        |j        f}t          |          |k     rt	          | t          |                    }t          |          |k    rt          | } t	          | |          }|S N)r   	numeratordenominatorminrp   ri   max)rl   rm   min_valfracro   s        r5   _limit_signed_rationalry     sp    C==D
.$*
*C
3xx'c3w<<00
3xx'nc7++Jr7   c                      e Zd ZdZ	 dZd*dZed             Zed             Zd Z	d Z
d	 Zd
 Zd Zd Zd Z	  ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z  ed          Z! ed           Z" ed!          Z# ed"          Z$ ed#          Z% ed$          Z& ed%          Z' ed&          Z( ed'          Z) e*e+d(          r ed(          Z,d)S d)S )+rj   zImplements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    )
_numerator_denominator_valr   c                    t          |t                    r&|j        | _        |j        | _        |j        | _        dS t          |t                    r|j        | _        |j        | _        n|| _        || _        |dk    rt          d          | _        dS |dk    rt          |          | _        dS t          ||          | _        dS )z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )	
isinstancerj   rs   r{   rt   r|   r}   r   float)selfvaluert   s      r5   __init__zIFDRational.__init__?  s     e[)) 	#oDO % 1D
DIFeX&& 	,#oDO % 1D#DO +D!eDIIIA DIII 44DIIIr7   c                     | j         S rr   )r{   r   s    r5   rs   zIFDRational.numeratorY  s
    r7   c                     | j         S rr   )r|   r   s    r5   rt   zIFDRational.denominator]  s      r7   c                     | j         dk    r| j        | j         fS | j                            |          }|j        |j         fS )z

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )rt   rs   r}   limit_denominator)r   max_denominatorfs      r5   rk   zIFDRational.limit_rationala  sF     q  >4#333I''88{AM))r7   c                 D    t          t          | j                            S rr   )strr   r}   r   s    r5   __repr__zIFDRational.__repr__n  s    5##$$$r7   c                 4    | j                                         S rr   )r}   __hash__r   s    r5   r   zIFDRational.__hash__q  s    y!!###r7   c                     | j         }t          |t                    r|j         }t          |t                    rt          |          }||k    S rr   )r}   r   rj   r   )r   otherrl   s      r5   __eq__zIFDRational.__eq__t  sI    ie[)) 	JEeU## 	**Ce|r7   c                 *    | j         | j        | j        gS rr   )r}   r{   r|   r   s    r5   __getstate__zIFDRational.__getstate__|  s    	4?D,=>>r7   c                 r    t                               | d           |\  }}}|| _        || _        || _        d S )Nr   )rj   r   r}   r{   r|   )r   stater}   r{   r|   s        r5   __setstate__zIFDRational.__setstate__  s@    T1%%%).&j,	$(r7   c                       fd}|S )Nc                 4     t          | j                  | S rr   )getattrr}   )r   argsops     r5   delegatez'IFDRational._delegate.<locals>.delegate  s    )749b))400r7   r1   )r   r   s   ` r5   	_delegatezIFDRational._delegate  s#    	1 	1 	1 	1 	1 r7   __add____radd____sub____rsub____mul____rmul____truediv____rtruediv____floordiv____rfloordiv____mod____rmod____pow____rpow____pos____neg____abs__	__trunc____lt____gt____le____ge____bool____ceil__	__floor__	__round____int__Nr8   )-__name__
__module____qualname____doc__	__slots__r   propertyrs   rt   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   hasattrr   r   r1   r7   r5   rj   rj   1  s        
 7I5 5 5 54   X ! ! X!* * *% % %$ $ $  ? ? ?) ) )   i	""Gy$$Hi	""Gy$$Hi	""Gy$$H)M**K9^,,L9^,,LIo..Mi	""Gy$$Hi	""Gy$$Hi	""Gi	""Gi	""G	+&&IYx  FYx  FYx  FYx  Fy$$Hy$$H	+&&I	+&&Iwx## ')I&&' 'r7   rj   c                   f   e Zd ZdZd>dZ ed           Z ed           Z ed           Zej	        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d Zd Z e eeej        ddfej        ddfej        ddfej        ddfej         d d!fej!        d"d#fej"        d$d%fej#        ddfej$        d&d'fg	                      ed(d(          d?d*            Z% ed(          d+             Z& ed,d(          d?d-            Z' ed,          d.             Z( ed/d0          d?d1            Z) ed/          d2             Z* ed3d(          d?d4            Z+ ed3          d5             Z, ed6d0          d?d7            Z- ed6          d8             Z.d9 Z/d: Z0d@d<Z1d= Z2dS )AImageFileDirectory_v2a  This class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v2()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        'Some Data'

    Individual values are returned as the strings or numbers, sequences are
    returned as tuples of the values.

    The tiff metadata type of each item is stored in a dictionary of
    tag types in
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types
    are read from a tiff file, guessed from the type added, or added
    manually.

    Data Structures:

        * ``self.tagtype = {}``

          * Key: numerical TIFF tag number
          * Value: integer corresponding to the data type from
            :py:data:`.TiffTags.TYPES`

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data, as tuple for multiple values

        * ``self._tagdata = {}``

          * Key: numerical TIFF tag number
          * Value: undecoded byte string from file

        * ``self._tags_v1 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data in the v1 format

    Tags will be found in the private attributes ``self._tagdata``, and in
    ``self._tags_v2`` once decoded.

    ``self.legacy_api`` is a value for internal use, and shouldn't be changed
    from outside code. In cooperation with
    :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api``
    is true, then decoded tags will be populated into both ``_tags_v1`` and
    ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF
    save routine. Tags should be read from ``_tags_v1`` if
    ``legacy_api == true``.

       II*     Nc                    t          |          s"dt          |           d}t          |          ||n	|dd         | _        | j        t          k    rd| _        n)| j        t          k    rd| _        nd}t          |          |d         dk    | _        || _        i | _	        	 | 
                                 | j        r|                     d	|d
d                   n|                     d|dd                   \  | _        d| _        dS )a  Initialize an ImageFileDirectory.

        To construct an ImageFileDirectory from a real file, pass the 8-byte
        magic header to the constructor.  To only set the endianness, pass it
        as the 'prefix' keyword argument.

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        znot a TIFF file (header z not valid)Nr   ><znot a TIFF IFD+   Qr%   r:   r   F)rf   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtypereset_unpacknext_legacy_api)r   ifhre   r   msgs        r5   r   zImageFileDirectory_v2.__init__  s    s|| 	#CT#YYCCCCc"""!'!3vvRaR<2DLL\RDLL"Cc"""A"
'

*.-WDLLc!""g&&&T\\#sSTSUSUw=W=W 	 !r7   c                     | j         S rr   )r   r   s    r5   <lambda>zImageFileDirectory_v2.<lambda>      4< r7   c                     | j         S rr   )_offsetr   s    r5   r   zImageFileDirectory_v2.<lambda>  r   r7   c                     | j         S rr   )r   r   s    r5   r   zImageFileDirectory_v2.<lambda>  s	    t'7 r7   c                 $    d}t          |          )Nz"Not allowing setting of legacy api)	Exception)r   r   r   s      r5   
legacy_apiz ImageFileDirectory_v2.legacy_api  s    2nnr7   c                 Z    i | _         i | _        i | _        i | _        d | _        d | _        d S rr   )_tags_v1_tags_v2_tagdatar   _nextr   r   s    r5   r   zImageFileDirectory_v2.reset  s0    
r7   c                 :    t          t          |                     S rr   )r   dictr   s    r5   __str__zImageFileDirectory_v2.__str__!  s    4::r7   c                 D      fd                                  D             S )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                 V    i | ]%\  }}t          j        |j                  j        |&S r1   )r   lookupr   name)r2   coder   r   s      r5   r6   z/ImageFileDirectory_v2.named.<locals>.<dictcomp>*  s@     
 
 
e OD$*--2E
 
 
r7   )itemsr   s   `r5   namedzImageFileDirectory_v2.named$  s6    
 
 
 
#zz||
 
 
 	
r7   c                 n    t          t          | j                  t          | j                  z            S rr   )r\   setr   r   r   s    r5   __len__zImageFileDirectory_v2.__len__/  )    3t}%%DM(:(::;;;r7   c                     || j         vr?| j        |         }| j        |         }| j        |         \  }} || || j                  | |<   | j         |         }| j        rt          |t          t          f          s|f}|S rr   )r   r   r   _load_dispatchr   r   tuplebytes)r   tagdatatypsizehandlerrl   s          r5   __getitem__z!ImageFileDirectory_v2.__getitem__2  s    dm##=%D,s#C /4MD'dDO<<DImC ? 	:cE5>#B#B 	&C
r7   c                 &    || j         v p|| j        v S rr   )r   r   r   r   s     r5   __contains__z"ImageFileDirectory_v2.__contains__=      dm#;sdm';;r7   c                 >    |                      ||| j                   d S rr   )_setitemr   )r   r   r   s      r5   __setitem__z!ImageFileDirectory_v2.__setitem__@  s     c5$/22222r7   c           	         t           t          t          f}t          j        || j                  t          ||          r|gn|}|| j        vrj        rj        | j        |<   nt          j	        | j        |<   t          d |D                       r;t          d |D                       rt          j        nt          j        | j        |<   n8t          d |D                       rt          d |D                       rt          j        | j        |<   nt          d |D                       rt          j        | j        |<   nt          d |D                       rt          j        nt          j        | j        |<   nt          d |D                       rt          j        | j        |<   n[t          d |D                       rt          j        | j        |<   n-t          d	 |D                       rt          j        | j        |<   | j        |         t          j	        k    rd
 |D             }n'| j        |         t          j        k    rd |D             }| j        |         t          j        k    ot          |t(                    }|st+          fd|D                       }|r| j        n| j        }|sj        dk    s7| j        |         t          j        k    sj        t3          |          dk    rz|sx|r(| j        |         t          j        t          j        fv r|f}	 |\  ||<   d S # t4          $ r7 t7          j        d| dt3          |           d           |d         ||<   Y d S w xY w|||<   d S )Nc              3   @   K   | ]}t          |t                    V  d S rr   )r   rj   r2   r4   s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>N  s,      BBaz![11BBBBBBr7   c              3   "   K   | ]
}|d k    V  dS r   Nr1   r  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>Q  s&      66!qAv666666r7   c              3   @   K   | ]}t          |t                    V  d S rr   )r   intr  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>T  ,      <<As++<<<<<<r7   c              3   6   K   | ]}d |cxk    odk     nc V  dS )r   r   Nr1   r  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>U  s6      ::a1>>>>E>>>>::::::r7   c              3   6   K   | ]}d |cxk     odk     nc V  dS )i i   Nr1   r  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>W  s>      BBaX1111E1111BBBBBBr7   c              3   "   K   | ]
}|d k    V  dS r
  r1   r  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>\  s&      ":":a16":":":":":":r7   c              3   @   K   | ]}t          |t                    V  d S rr   )r   r   r  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>_  ,      >>!Au-->>>>>>r7   c              3   @   K   | ]}t          |t                    V  d S rr   )r   r   r  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>a  r  r7   c              3   @   K   | ]}t          |t                    V  d S rr   )r   r   r  s     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>c  r  r7   c                 h    g | ]/}t          |t                    r|                    d d          n|0S )asciireplace)r   r   encoder  s     r5   
<listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>g  sJ        1;1c0B0BI),,,  r7   c                 Z    g | ](}t          |t                    rt          |          n|)S r1   )r   r  r   r  s     r5   r  z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>l  s1    LLL*Q"4"4;eAhhh!LLLr7   c              3   B   K   | ]}                     |          V  d S rr   )cvt_enum)r2   r   infos     r5   r^   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>p  s/      DDE4==//DDDDDDr7   r   zMetadata Warning, tag z had too many entries: z, expected 1r   )r   r   r   r   r   r   r   r   type	UNDEFINEDallRATIONALSIGNED_RATIONALSHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEr   r   r   r   lengthr\   
ValueErrorwarningswarn)	r   r   r   r   	basetypesvaluesis_ifddestr  s	           @r5   r  zImageFileDirectory_v2._setitemC  s   UC(	sDJ//&ui88C%edl""y 6$(IS!!$,$6S!BB6BBBBB 6 66v666666))%5 L%%
 <<V<<<<< 6::6::::: 	,4NS))BB6BBBBB ,4,AS))  #":":6":":":::6HMM!)!5 S))
 >>v>>>>> 6(0DL%%<<V<<<<< 6(0DL%%>>v>>>>> 6(0DL%< 222   FF \#("333LLVLLLFc"hm3P
648P8P 	EDDDDVDDDDDF *=t}}  	[A|C HM11#Fq(8(8(8  #dl3/!(4   !&%c & & &1S 1 16{{1 1 1   #1IS				& DIIIs   "L+ +=M,+M,c                     | j                             |d            | j                            |d            | j                            |d            d S rr   )r   popr   r   r   s     r5   __delitem__z!ImageFileDirectory_v2.__delitem__  sP    #t$$$#t$$$#t$$$$$r7   c                 n    t          t          | j                  t          | j                  z            S rr   )iterr   r   r   r   s    r5   __iter__zImageFileDirectory_v2.__iter__  )    C&&T]););;<<<r7   c                 <    t          j        | j        |z   |          S rr   )structunpackr   )r   fmtr   s      r5   r   zImageFileDirectory_v2._unpack  s    }T\C/666r7   c                 6    t          j        | j        |z   g|R  S rr   )r:  packr   )r   r<  r/  s      r5   _packzImageFileDirectory_v2._pack  s!    {4<#-77777r7   c                       fd}|S )Nc                     ddl m} | j                            d          r&| j        dd                              dd          |<   | ft
          <   | S )Nr   r   load_r   _ )r   r   r   
startswithr  r   )funcr   idxr   s     r5   	decoratorz9ImageFileDirectory_v2._register_loader.<locals>.decorator  se    ''''''}''00 A!]122.66sC@@c
"&*N3Kr7   r1   )rG  r   rH  s   `` r5   _register_loaderz&ImageFileDirectory_v2._register_loader  s*    	 	 	 	 	 	 r7   c                       fd}|S )Nc                     | t           <   | S rr   )_write_dispatch)rF  rG  s    r5   rH  z9ImageFileDirectory_v2._register_writer.<locals>.decorator  s    #'OC Kr7   r1   )rG  rH  s   ` r5   _register_writerz&ImageFileDirectory_v2._register_writer  s$    	 	 	 	 	 r7   c                     ddl m} | \  }}|||<   t          j        dz             dfd	ft          |<   fdt
          |<   d S )Nr   r   =Tc                 X    |                      t          |          z    |          S rr   )r   r\   )r   r   r   r<  r   s      r5   r   z7ImageFileDirectory_v2._register_basic.<locals>.<lambda>  s/    D		T 18388$?? r7   c                 J     d                      fd|D                       S )Nr7   c              3   D   K   | ]}                     |          V  d S rr   )r?  )r2   r   r<  r   s     r5   r^   zJImageFileDirectory_v2._register_basic.<locals>.<lambda>.<locals>.<genexpr>  s1      @@TZZU++@@@@@@r7   join)r   r/  r<  s   ` r5   r   z7ImageFileDirectory_v2._register_basic.<locals>.<lambda>  s0    HH@@@@@@@@@@ r7   T)r   r   r:  calcsizer   rL  )idx_fmt_namer   rG  r   r<  r   s       @@r5   _register_basicz%ImageFileDirectory_v2._register_basic  s    ######%S$c
sSy))     
s 
  
  
  
r7   Hshortr:   longbzsigned bytehzsigned shortlzsigned longr   r   ddoubler   long8r   Tc                     |S rr   r1   r   r   r   s      r5   	load_bytezImageFileDirectory_v2.load_byte      r7   c                     t          |t                    rt          |          }t          |t                    rt          |f          }|S rr   )r   rj   r  r   r   r   s     r5   
write_bytez ImageFileDirectory_v2.write_byte  sC    dK(( 	t99DdC   	"$>>Dr7   r   c                 l    |                     d          r
|d d         }|                    dd          S )N    rh   zlatin-1r  )endswithdecoderc  s      r5   load_stringz!ImageFileDirectory_v2.load_string  s7    == 	9D{{9i000r7   c                     t          |t                    rt          |          }t          |t                    s|                    dd          }|dz   S )Nr  r  rj  )r   r  r   r   r  r   r   s     r5   write_stringz"ImageFileDirectory_v2.write_string  sP     eS!! 	JJE%'' 	5LL)44Eu}r7   r   r%   c           
          |                      t          |          dz   d|          }fdt          fdt          |d d d         |dd d                   D                       S )Nr   r:   c                 0    r| |fnt          | |          S rr   rj   ar\  r   s     r5   combinez4ImageFileDirectory_v2.load_rational.<locals>.combine       '>Aq66[A->->>r7   c              3   6   K   | ]\  }} ||          V  d S rr   r1   r2   numdenomrv  s      r5   r^   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>  3      VVZS%WWS%((VVVVVVr7   r   r   r   r\   r   zipr   r   r   valsrv  s     ` @r5   load_rationalz#ImageFileDirectory_v2.load_rational      ||s4yyA~000$77	? 	? 	? 	? 	? VVVV3tCCaCy$qtRSt*;U;UVVVVVVr7   c                 F     d                      fd|D                       S )Nr7   c              3   P   K   | ] } j         d gt          |d          R  V  !dS )2Ll    N)r?  rp   r2   rx   r   s     r5   r^   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>  sR       
 
DHJDJt?odI>>???
 
 
 
 
 
r7   rS  r   r/  s   ` r5   write_rationalz$ImageFileDirectory_v2.write_rational  s?    xx 
 
 
 
LR
 
 
 
 
 	
r7   r#   c                     |S rr   r1   rc  s      r5   load_undefinedz$ImageFileDirectory_v2.load_undefined  re  r7   c                 v    t          |t                    r#t          |                              dd          }|S )Nr  r  )r   r  r   r  ro  s     r5   write_undefinedz%ImageFileDirectory_v2.write_undefined  s4    eS!! 	:JJ%%gy99Er7   
   c           
          |                      t          |          dz   d|          }fdt          fdt          |d d d         |dd d                   D                       S )Nr   r^  c                 0    r| |fnt          | |          S rr   rs  rt  s     r5   rv  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine  rw  r7   c              3   6   K   | ]\  }} ||          V  d S rr   r1   ry  s      r5   r^   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>  r|  r7   r   r   r}  r  s     ` @r5   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rational  r  r7   c                 F     d                      fd|D                       S )Nr7   c           	   3   R   K   | ]!} j         d gt          |dd          R  V  "dS )2lii   N)r?  ry   r  s     r5   r^   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>  sX       
 
 DJtP4T9hOOPPP
 
 
 
 
 
r7   rS  r  s   ` r5   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rational  s?    xx 
 
 
 

 
 
 
 
 	
r7   c                     |                     |          }t          |          |k    r%d| dt          |           d}t          |          |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readr\   OSError)r   fpr   retr   s        r5   _ensure_readz"ImageFileDirectory_v2._ensure_read  sj    ggdmms88tL%)L L?B3xxL L L  #,,
r7   c           
         |                                   |                                | _        	 | j        r*|                     d|                     |d                    n)|                     d|                     |d                    d         }t          |          D ]K}| j        r*|                     d|                     |d                    n)|                     d|                     |d	                    \  }}}}t          j        || j	                  j
        }t          j        |d
          }	d| d| d|	 d| d	}
	 | j        |         \  }}n0# t          $ r# t                              |
d| z              Y w xY w||z  }|| j        rdndk    r|                                }|                     | j        rdnd|          \  }|
d| d| z  }
|                    |           t%          j        ||          }|                    |           n
|d |         }t)          |          |k    rFt+          j        d| dt)          |           d|            t                              |
           |st                              |
           || j        |<   || j        |<   |
d|dk    rd|z  nt3          |          z   z  }
t                              |
           M| j        r*|                     d|                     |d                    n)|                     d|                     |d                    \  | _        d S # t6          $ r,}
t+          j        t9          |
                     Y d }
~
d S d }
~
ww xY w)Nr   r%   rY  r   r   HHQ8s   HHL4sr;   unknownztag:  (
) - type: )z - unsupported type r   r:   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag 
 - value: rB   <table: %d bytes>)r   tellr   r   r   r  ranger   r   r   r   r   getr   KeyErrorloggerdebugseekr
   
_safe_readr\   r,  r-  r   r   r   r   r  r   )r   r  	tag_countir   r   countr   tagnametypnamer   	unit_sizer   r   hereoffsets                   r5   loadzImageFileDirectory_v2.load"  s   

wwyy=	 =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@	I
 9%% ." ." }JDLL$*;*;B*C*CDDDgt/@/@R/H/HII &S% #/#tz::?)C33IgIIIIII3III)-)<S)A&Iww   LL'Cc'C'C!CDDDH y(4111557799D $DM-JSSsD Q QIVMTMMVMMMCGGFOOO$/D99DGGDMMMM;Dt99$$M/-1/ /GJ4yy/ /),/ /  
 LL%%% LL%%%%)c"$'S!|26))'$..d  S!!!! =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@ TYYY
  	 	 	M#c((###FFFFF	s=   DM EM *FM FG
M 
N!NNr   c                    |                      dt          | j                            }g }|t          |          z   t          | j                  dz  z   dz   }d }t          | j                                                  D ]\  }}|t
          k    rt          |          }| j                            |          }t          	                    d| d| dt          |                      |t          j        k    ot          |t                    }|rc| j        dk    rd}	nd	}	t!          |	|
          }
| j        |         }|                                D ]
\  }}||
|<   |
                    |          }n.t          |t$                    r|n|f} | j        |         | g|R  }t          j        || j                  j        }|rdnt/          j        |d          }d| d| d| d| d	}|dt          |          dk    rdt          |          z  nt1          |          z   z  }t          	                    |           |rd}nD|t          j        t          j        t          j        fv rt          |          }nt          |          }t          |          dk    r0|                    ||||                    dd          df           I|                    ||||                      d|          |f           |t          |          dz   dz  dz  z  }|^||         \  }}}}}|rd}t=          |          |                      d|                     d|          d         |z             }|||||f||<   |D ]f\  }}}}}t          	                    | d| d| dt          |           dt          |           	           ||                      d||||          z  }g|dz  }|D ]$\  }}}}}||z  }t          |          dz  r|dz  }%|S )NrY  r;   r   zTag z, Type: z	, Value: r   s   II*    s   MM *   )r   ifdr  zsave: r  r  r  r  r=   r  r   rj  r7   r:   r   z&multistrip support not yet implementedr   rD  r  s       ) r?  r\   r   sortedr   STRIPOFFSETSr   r  r  r  r   r   r%  r   r   r   r   tobytesr   rL  r   r   r   r   r   r)  r(  r  appendljustNotImplementedErrorr   )r   r  resultentriesstripoffsetsr   r   r   r0  r   r  r/  ifd_tag	ifd_valuer   r  r  r   r  s                      r5   r  zImageFileDirectory_v2.tobytese  sb   CT]!3!344#f++%DM(:(:R(??!C !!4!4!6!677 (	3 (	3JCl"""7||,""3''CLLHHHSHH4;;HHIIIHM)Ej.E.EF @<3&&7CC7C+Cs;;;s+*0,,.. - -&GY#,CLL{{6**",UE":":H0t+C0????oc4:66;G%Dee59S)+D+DGF7FFcFFWFFFFFC<36t99??#c$ii//F C LL  $8JKKKD		F4yyA~~S%Au1E1EsKLLLLS%C1H1H$OPPP3t99q=Q.22 #+2<+@(CeUD />)#...JJsDLLe$<$<Q$?&$HIIE$'eUD$@GL! -4 	B 	B(CeUDLLCJJ#JJJJUJJd4jjJJKKKdjj#sE5AAAFF 	+ -4 	  	 (CeUDdNF4yy1}  %r7   c                 6   |                                 dk    r2|                    | j        |                     ddd          z              |                                 }|                     |          }|                    |           |t          |          z   S )Nr   HL*   r%   )r  writer   r?  r  r\   )r   r  r  r  s       r5   savezImageFileDirectory_v2.save  s}    7799>>HHT\DJJtR$;$;;<<<f%%
F##r7   )r   NNrU  rK   )3r   r   r   r   r   r   re   r  r   setterr   r   r   r   r   r  r  r  r4  r7  r   r?  rI  rM  rX  listmapr   r#  r%  SIGNED_BYTEr$  r&  FLOATr'  IFDLONG8rd  rh  rm  rp  r  r  r  r  r  r  r  r  r  r  r1   r7   r5   r   r     s       : :x! ! ! !@ X//00FX//00F7788J      	
 	
 	
< < <	 	 	< < <3 3 3N N N`% % %
= = =7 7 78 8 8	 	 	  
 
 
  	Dg.V,%sM:&^<%sM:g.#x0sF+g.
	
 	
  " a    a   a1 1 1 1
 a   aW W W W a
 
 

 a    a  
 b!W W W W b
 
 
  A A AFK K K KZ$ $ $ $ $r7   r   rD  rC  rB  write_c                        e Zd ZU dZ fdZ ed           Z ed           Zee	d<   	 e
d             Zd Zd Zd	 Zd
 Zd Zd Z xZS )ImageFileDirectory_v1a  This class represents the **legacy** interface to a TIFF tag directory.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v1()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        ('Some Data',)

    Also contains a dictionary of tag types as read from the tiff image file,
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`.

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    c                 H     t                      j        |i | d| _        d S )NT)superr   r   )r   r   kwargs	__class__s      r5   r   zImageFileDirectory_v1.__init__  s-    $)&)))r7   c                     | j         S rr   )r   r   s    r5   r   zImageFileDirectory_v1.<lambda>  s     r7   c                     | j         S rr   )r   r   s    r5   r   zImageFileDirectory_v1.<lambda>  s    DM r7   r   c                 p     | |j                   }|j        |_        |j        |_        |j        |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`

        rd   )re   r   r   r   )clsoriginalr  s      r5   from_v2zImageFileDirectory_v1.from_v2  s:     c)))(&=
r7   c                     t          | j                  }t          | j                  |_        t          | j                  |_        t          | j                  |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`

        rd   )r   re   r   r   r   r   )r   r  s     r5   to_v2zImageFileDirectory_v1.to_v2  sN     $4;777DM**4<((DM**
r7   c                 &    || j         v p|| j        v S rr   )r   r   r   s     r5   r  z"ImageFileDirectory_v1.__contains__  r  r7   c                 n    t          t          | j                  t          | j                  z            S rr   )r\   r   r   r   r   s    r5   r   zImageFileDirectory_v1.__len__  r   r7   c                 n    t          t          | j                  t          | j                  z            S rr   )r6  r   r   r   r   s    r5   r7  zImageFileDirectory_v1.__iter__  r8  r7   c                 >    dD ]}|                      |||           d S N)FT)r  )r   r   r   r   s       r5   r  z!ImageFileDirectory_v1.__setitem__  s4    ' 	2 	2JMM#uj1111	2 	2r7   c           	         || j         vrQ| j        |         }| j        |         }| j        |         \  }}dD ]$}|                     | || ||          |           %| j         |         }t          |t          t          f          s|f}|S r  )r   r   r   r   r  r   r   r   )r   r   r   r   r   r   legacyrl   s           r5   r   z!ImageFileDirectory_v1.__getitem__  s    dm##=%D,s#C /4MD'' H Hc774v#>#>GGGGmC #u~.. 	&C
r7   )r   r   r   r   r   r   tagstagdatar   __annotations__classmethodr  r  r  r   r7  r  r   __classcell__r  s   @r5   r  r    s          $          8..//Dh1122G MMM!  ["  "< < << < <= = =2 2 2
 
 
 
 
 
 
r7   r  c                        e Zd ZdZdZdZd fd	Zd Zed             Z	d Z
d	 Zd
 Zd Zd Z fdZd Zd Zd Z xZS )TiffImageFileTIFFz
Adobe TIFFFNc                 l    d | _         	 d | _        	 t                                          ||           d S rr   )tag_v2r   r  r   )r   r  filenamer  s      r5   r   zTiffImageFile.__init__/  s7    5"X&&&&&r7   c                 *   | j                             d          }|d         dk    r|| j                             d          z  }t          |          | _        d| _        | j        j        x| _        | _        d| _        | j         | _	        g | _
        d| _        t                              d           t                              d| j                    t                              dt          |                      |                     d	           dS )
z#Open the first image in a TIFF filer%   r   r   Nrh   z*** TiffImageFile._open ***z- __first: z- ifh: r   )r  r  r   r  r  r   _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r   _seek)r   r   s     r5   _openzTiffImageFile._open8  s     gll1ooq6R<<47<<??"C+C00  &*[%55t{7233314<11222*tCyy**+++ 	

1r7   c                 .   | j         |                                 }|                     t          | j                             | j         1|                     |                                 dz              | j         1|                     |           | j         S )Nr   )r  r  r  r\   r  r  )r   currents     r5   n_frameszTiffImageFile.n_framesS  s}    >!iikkGJJs4?++,,,.(

499;;?+++ .(IIg~r7   c                     |                      |          sdS |                     |           t          j        | j                   t          j                            | j        | j                  | _        dS )z%Select a given frame as current imageN)	_seek_checkr  r	   _decompression_bomb_checkr   corenewmodeim)r   frames     r5   r  zTiffImageFile.seek]  sc    && 	F

5 	'	222*..DI66r7   c                    | j         | _        | j                                         t          | j                  |k    r| j        sd}t          |          t                              d| d| j	         d| j         d| j                                                    | j        
                    | j                   | j                            | j                   t                              d| j                                        z             | j                            | j                   | j        j        | j        v rd| _        n| j        j        | _        | j        dk    r
|dz   | _        t          | j                  dk    r| j        dk    | _        | xj	        dz  c_	        t          | j                  |k    | j        
                    | j        |                    | j                            | j                   |                                  t$                              | j                  x| _        | _        || _	        |                                  d S )	Nzno more images in TIFF filezSeeking to frame z, on frame z	, __next z, location: zLoading tags, location: %sr   r   )r  r  r  r\   r  r  EOFErrorr  r  r  r  r  r  r  r   r  is_animated_reload_exifr  r  r   r  _setup)r   r  r   s      r5   r  zTiffImageFile._seekh  s#   ( 	$/""e++; $3smm#LLDE D Ddl D D+D D377<<>>D D   GLL%%%O""4;///LL5FGGGKTW%%%{4?22  "k.{a!&4?##q((#';!#3 LLALL- $/""e++. 	T_U+,,,!!!3;;DKHHH48r7   c                     | j         S )zReturn the current frame number)r  r   s    r5   r  zTiffImageFile.tell  s
    |r7   c                 l    t           | j        v r%|                     | j        t                              ni S )z
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        )XMPr  _getxmpr   s    r5   getxmpzTiffImageFile.getxmp  s.     251C1Ct||DK,---Kr7   c                    i }| j                             t          j        j                  }|r|dd         dk    rt          |dd                   }t          j        |d         dz   dz            dz  }t          |d|z   d|z                      }|d|z   d|z   |z            }d|i||<   |t          j        d|z   |z   dz            dz  d         }|dd         dk    |S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr   s   8BIMr!   r   r   r  r   )	r  r  r   BaseImageResourcesi16mathceili32)r   blocksrl   idnr   r   s          r5   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s     koohm:;; 	@bqb'W$$QqS]]Is1vzQ.//!33q1urAv~.//26BFTM12$d^r
$)R!Vd]a$7881<>>? bqb'W$$ r7   c                     | j         r| j        r|                                 S t                                                      S rr   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    r5   r  zTiffImageFile.load  s;    9 	(. 	(%%'''ww||~~r7   c                 Z   | j         rt          j        j        t          j        j        t          j        j        t          j        j        t          j        j        t          j        j        t          j        j	        d
                    | j                   }|0| j                            |          | _        | j        j        | _        | j        s]d| _        | j                                         |                                 }t(          j        D ]}||vr|                    |           d S d S )N)r   r   r   r   r!   r#   r%   T)_tile_orientationr	   	TransposeFLIP_LEFT_RIGHT
ROTATE_180FLIP_TOP_BOTTOM	TRANSPOSE
ROTATE_270
TRANSVERSE	ROTATE_90r  r  	transposer   _sizer	  !_close_exclusive_fp_after_loadingr  r  getexifr   TAGS_V2_GROUPSget_ifd)r   methodexifkeys       r5   load_endzTiffImageFile.load_end  s   ! 	*?2?-?2?,?-?-?,  c$())  !'++F33!W\
  	"59D2 GLLNNN <<>>D. " "d??S!!!!	" 	"" "r7   c                     t           j                             |            |                                  t          | j                  dk    sd}t          |          | j        d         d         }t          | j        d         d                   }	 t          | j        d          o| j        	                                }t          | j        d          r| j        
                                 n# t
          $ r d}Y nw xY w|r||d<   t          j        | j        d	t          |          | j                  }	 |                    | j        |           n$# t"          $ r}d
}t          |          |d}~ww xY w| j        o| j         }t          | j        d          rJt(                              d           |                    | j                                                  \  }}	n|rOt(                              d           |s| j                            d           |                    d          \  }}	nct(                              d           | j                            d           |                    | j                                                  \  }}	g | _        d| _        |                                  |r | j                                         d| _        |	dk     rt          |	          t           j                             |           S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r   filenoflushFr   libtiffzCouldn't set the imageNgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just reading)r	   r  load_preparer\   r  r  r  r   r  r5  r6  _getdecoderr  r   decoderconfigsetimager  r+  _exclusive_fpr	  r  r  rl  r8  r  r  readonlyr3  close)
r   r   extentsr   r  decodereclose_self_fpr  errs
             r5   r  zTiffImageFile._load_libtiff  s    	49~~""(C#,, )A,q/DIaLO$$

	(++@0@0@B tw((   	 	 	 BBB	
  	DG#Iy%++t/A
 
	&TWg.... 	& 	& 	&*C#,,A%	& *C43C/C47J'' 	4 LLPQQQ^^DG$4$4$6$677FAss 	4LLNOOO   Q^^G,,FAss LLFGGGGLLOOO^^DGLLNN33FAs	 	GMMOOODG77#,,{%%%s+   AC. .C=<C=6E 
E3E..E3c                    d| j         v rd}t          |          t          | j                             t          d                   | _        | j                             t          d          | _        | j                             t          d          }| j        dk    rd}| j                             t          d          }t                              d           t                              d| j                    t                              d	|            t                              d
| j                    t                              d|            t                              d| j                            t                                t          | j                             t                              }t          | j                             t                               }||f| _        t                              d| j                    | j                             t&          d          }t)          |          dk    r,t+          |          t-          |          cxk    rdk    rn nd}| j                             t.          d          }| j                             t0          d          }|dv rd}	n|dk    rd}	nd}	|	t)          |          z  }	t)          |          }
| j                             t2          | j        dk    r|dv rdnd          }|t4          k    r,t                              d|           d}t9          |          ||
k     r|d|         }n||
k    r|
dk    r||z  }t)          |          |k    rd}t9          |          | j         j        |||||f}t                              d|            	 t<          |         \  | _        }n># t@          $ r1}t                              d           d}t9          |          |d}~ww xY wt                              d|            t                              d| j                    | j        | j!        d<   | j                             tD          d          }| j                             tF          d          }|rt|rr| j                             tH                    }|dk    r||f| j!        d <   n@|dk    r|d!z  |d!z  f| j!        d <   n'|||f| j!        d <   ||f| j!        d"<   n||f| j!        d"<   dx}x}}g | _%        tL          p
| j        d#k    | _'        | j'        r|dk    rJ|dd         dz   |dd         z   }t                              d|            t<          |         \  | _        }|d$k    rd%}d&|v r|(                    d&d'          }d(|v r|(                    d(d'          }|dk    r| j        d)k    r| j        dk    rd*}|| j        d+| j         j)        f}| j%        *                    d,dd||fd|f           ntV          | j         v stX          | j         v rqtV          | j         v r@| j         tV                   }| j                             tZ          |          }| j        d         }nP| j         tX                   }| j                             t\                    }| j                             t^                    }|D ]}||z   |k    r|ta          |          z  d-z  }nd}|}| j        dk    r||         }||	z  }|t          |          df}| j%        *                    | j        ||t-          ||z   |          t-          ||z   |          f||f           ||z   }|| j        d         k    r!d||z   }}|| j        d         k    r	dx}}|dz  }n+t                              d.           d}t9          |          tb          | j         v r| j         tb                   | j!        d/<   | j        d0v rId1 | j         td                   D             }tg          j4        d2d35                    |                    | _6        | j                             tn          j8        j9                  | _:        dS )4z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r"   r!   z*** Summary ***z- compression: z- photometric_interpretation: z- planar_configuration: z- fill_order: z- YCbCr subsampling: z- size: r8   r1   )r   r!   r%   r   r   r   )r   r!   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelNzunknown data organizationzformat key: z- unsupported formatzunknown pixel modez- raw mode: z- pil mode: compressionr   dpigRQ@
resolutionr   r<   I;16Nz;16Bz;16Nz;16Lr$   rI   Fr7  r%   z- unsupported data organizationicc_profilerU   rV   c                 2    g | ]}t          |d z            S r   r   )r2   r\  s     r5   r  z(TiffImageFile._setup.<locals>.<listcomp>  s"    CCCr!s(||CCCr7   RGB;Lr7   );r  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  r   YCBCRSUBSAMPLINGr  
IMAGEWIDTHIMAGELENGTHr+  r   SAMPLEFORMATr\   rv   ru   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr   re   	OPEN_INFOr  r  r  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr  READ_LIBTIFFr  r  r  r  r  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   rT  paletter   r  Orientationr!  )r   r   photo	fillorderxsizeysizesample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelr2  rawmoderB  xresyresresunitxylayerru  offsetsr]  wr  stridetile_rawmoderk  s                                r5   r  zTiffImageFile._setup)  s    T[  ?C#,, -T[__[!-L-LM%)[__5I1%M%M"  :A>> ++EKOOIq11	&''':t'8::;;;=e==>>>L0JLLMMM1i11222MTX\\:J-K-KMMNNN DKOOJ//00DKOOK0011E\
+	++,,,d;;}!!c-&8&8C<N<N&S&S&S&SRS&S&S&S&S&S !MKOOM488	koolB77IIIaZZIIIS%%%	y>> KOO"k11evooAA1
 

 222LL@BS   8Cc"""/// ""4#4"45II!1116F!6K6K "$55Iy>>...-Cc""" K
 	)C))***	*!*3DIww 	* 	* 	*LL/000&Cc"")	*
 	-G--.../DI//000#'#4	- {|Q//{|Q// 	5D 	5kooo66G!||$($<	%  A$(4K#=	%  $($<	%  +/*	,''*.*	,' A	 , J0AU0J  Y	# A~~"1"gns122w.1C11222 &/s^"	7
 &  !  !//&&99  !//&&99
 

%//.!33 $+UDK4FGAIi!Qu)=q!DEEEET[((K4;,F,Ft{**+l3KOOL%88IaL +k2KOOI..KOOJ//! # #q55==Y/!3FFF&-22#*5>Li'F!3v;;2	  )As1q5%00#a!eU2C2CD	   E	!$$a!eqADIaL(( !	A
7#: LL:;;;-Cc""" $$'+{:'>DIm$ 9##CCT[-BCCCG'+GSXXg5F5FGGDL!%1J!K!Ks   O 
P",PP)NN)r   r   r   formatformat_descriptionr,  r   r  r   r  r  r  r  r  r  r  r3  r  r  r  r  s   @r5   r  r  *  s       F%(-%' ' ' ' ' '  6   X	7 	7 	7$ $ $L  L L L  *    
" " ">S& S& S&j`L `L `L `L `L `L `Lr7   r  r9   r:   rH   rU   rV   r?   rF   r<   r@   rC   rD   rI   rL   rJ   rW   YCbCrrZ   rG   r>   rA   rE   )rA   rE   c                 :   	 t           | j                 \  }}}}}}n-# t          $ r }	d| j         d}
t          |
          |	d }	~	ww xY wt	          |          }| j        }| j        }	 |d         }nA# t          $ r4 | j                            d          }t          |t                    rd }Y nw xY w|d}n|dk    rd}n|dk    rd	}t          p|dk    }d
|t          <   | j        d         |t          <   | j        d
         |t          <   d|v r	|d         }nNd|v rH|d         }t          |t                     r*t#          j                    }|                    |           |}ni }t(                              dt-          |          z             t          |t.                    r|                                }|D ]}t          |t"          j                  r'|t2          j        v r|                    |          ||<   n|                    |          ||<   	 |j        |         |j        |<   r# t:          $ r Y ~w xY wt=          | d          r\t>          t@          tB          tD          tF          tH          fD ]5}|| j%        v r*| j%        |         ||<   | j%        j        |         |j        |<   6|                    d| j                            d                    }|r
||tL          <   tN          dft@          dftB          dft@          dftB          dft>          dftP          dftR          dftT          dftV          dff
D ]\  }}||v r||         ||<   |                    d          }|r*d|t>          <   |d         |t@          <   |d
         |tB          <   |dk    r4||tX          <   t[          |          d
k    rt[          |          |t\          <   |
||t^          <   |d
k    r
||t`          <   tb          |vr||tb          <   n| j        dv r|tb                   dk    r| j        dk    rp| 2                                }|                                }tg          |j4                  D ]0}tg          |j5                  D ]}|||f         dk    rdnd|||f<   1|} ntm          j7        |           } | j        d v rw| j8        9                    d!d"          }g }t[          |          d#z  }tg          d#          D ].}|d$ |||z  ||d
z   z           D             z  }|dgd%|z
  z  z  }/||tt          <   t[          |          | j        d         |d         z  d&z   d'z  z  }|rl|                    d(tv                    }|dk    rd
nty          ||z  | j        d
                   } |dk    r$ty          | d&z   d'z  d'z  | j        d
                   } n| j        d
         } | dk    rd
} |dk    rd
n|| z  }!| j        d
         | z   d
z
  | z  }"| |tz          <   |!d)k    rt2          j>        |j        t~          <   |!f|"d
z
  z  || j        d
         z  |!|"d
z
  z  z
  fz   |t~          <   t          tg          d|!|"z  |!                    |t          <   t                              |d
          |t          <   | j        d*k    r>t          d+t          d,iF                                D ]\  }#}$|G                    |#|$           t          t          t          t          g}%|rVd-|v r[|d-         }&t          |&t                    r|&dk     s|&d.k    rd/}
t          |
          |dk    rd0}
t          |
          |&|t          <   t(                              d1           t(                              d2t          |F                                          z             d}'t=          |d3          rR	 |O                    d           t          jQ        |R                                          }'n# t          jT        $ r Y nw xY wi }(|%t          t~          t          t          t          gz  }%tX          |d         i})i }*t=          | d4          r| jW                                        }*i t          | di           |*}+t`          |+v r|+t`          = t          jZ        |F                                |+F                                          D ]\  }#}$|#t2          j[        vrt          t"          j\        d5d6          s/|#|j        v r|j        |#         |(|#<   nIt          |$t          t          t          t           f          srt3          j_        |#          j`        },|,r|,|(|#<   |#|)vrc|#|%vr_t          |$t                    r|$a                    d7d8          d9z   |)|#<   t          |$t                    rt          |$          |)|#<   |$|)|#<   t`          |)v r9t[          |)t`                             d
k    r|)t`                   d         |)t`          <   t(                              d:t          |)F                                          z             | j        d;v rd<}t-          |)F                                          }-|-c                                 |||'||-|(f}.t#          jd        | j        d=|.|          }	|	e                    | j8        d>| j        z              	 |	a                    d@          d
d          \  }/}0|'s|f                    |0           |/rn;|'r&	 t          jg        |'           n# t          $ r Y nw xY w|/dk     rdA|/ dB}
t          |
          nC|%D ]}#||#= |h                    |          }1t          jj        | |dd>| j        z   |1||d
ffg           dC|v r	|| _k        d S d S )DNzcannot write mode z as TIFFrd   rF  r   r"   r$   r*   r&   r   r   tiffinfor1  zTiffinfo Keys: %sr  rJ  descriptionrH  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightrG  r   r8   )r9   r:   r9      rK  rI   rN  r   c                     g | ]}|d z  S rM  r1   r  s     r5   r  z_save.<locals>.<listcomp>  s    MMMQSMMMr7   r   r#   r%   
strip_sizer   r  )r   r   )r   r     r  r  r  qualityd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr5  r   libtiff_support_custom_tagsFr  r  rj  zConverted items: %s)r>   r<   rI  r7  rM   Ti @  zencoder error z when writing image file_debug_multipage)l	SAVE_INFOr  r  r  r   encoderinfoencoderconfigr  r  r   r  WRITE_LIBTIFFrR  r   rW  rX  r   r	   Exifr  r  r  r  r  r  r   r.  r/  r   r   r   rb  r`  ra  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr  r  ri  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTrZ  r\   r\  r[  rY  rT  copyr  heightwidthr   invertr  
getpaletterj  
STRIP_SIZEru   re  r%  STRIPBYTECOUNTSr   r  COMPRESSION_INFO_REVrP  rV  REFERENCEBLACKWHITEr   
setdefaultrf  rg  rd  TILEBYTECOUNTSr+  JPEGQUALITYr  r  osdupr5  ioUnsupportedOperationTRANSFERFUNCTIONSUBIFDr   r   	itertoolschainLIBTIFF_COREr  r   r   r   r  r  rj   sort_getencoderr<  r  r?  r  r
   _saver  )2r  r  r  rw  re   rm  r  bitsextrarB  r   r  r  r  rF  r7  r  r1  r2  iccr   rG  inverted_impxr|  r{  lutcolormapcolorsr  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imager   r   	blocklistr  r  typesatts
legacy_ifdsupplied_tagsr  r  ru  errcoder   r  s2                                                     r5   r  r  ,  s   "6?6H3ee " " "427444cll!"  v
.
.
.C.K$M!-0   gkk-00k3'' 	K	
 		#	#		&	&*3{e3G !"CgajC
OwqzC [  :&	;		6"dE"" 	:<<DIIdOOOD
LL$tDzz1222$-.. zz||  dEJ'' 	%C83J,J,J||C((CHHxx}}CH	#|C0CK 	 	 	D	
 r8 : 
 
	: 
	:C bi9S>C#%9#4S#9C  //-])C)C
D
DC
 J 
=)	|$	|$	~&	~&	+,	:	K 		K  ) )	T ;"4(CH
//%
 
 C
 # OFLFLt||!Mt99>>#&t99C !L{{"L!,,*/&''	J		3'A#Ba#G#G7c>>''))K!!##B;-.. = ={011 = =A$&q!tHOOqqBq!tHH=BB$$B	w+eug..SQq 	- 	-AMM#fqj6QU;K.K*LMMMMHsV|,,HH HYY271:Q/!39:F $#jAA$kks=F3JBGTUJ/W/W&   >A#5!";q!@"'!*MMN#q[[f~.E
^3a7NJ&CE!!'/}O$-/3Ca3GH/3Ca3GHHL C a"%557HII C ,//Q??C	w'f!=
 %''	' 	'JC NN3&&&&J^DI x
##!),Ggs++ &w{{gmm/ oo%f$$M oo%&C3444[6#))++#6#667772x   	


fRYY[[))*     	
 	
	 tAw' 
2u 	(J D72x44C
C=((l+#/#))++}7J7J7L7LMM 	& 	&JC
 (///uz+H%PP #+%%!$S!1E#JJ$US%e,DEE *#?3//4D *%)c
$3i#7#7eS)) & %Wi @ @5 HDII{33 & %eDII %DI4C\(:$;$;q$@$@!%l!3A!6D*VDJJLL-A-AABBB 7'''G
 DJJLL!!		k3$>bgy!]CC	

25&27*+++	HHY//3MGT  	  	   Q;;D7DDDC#,, 
  	 	CC"eVbg-v7KLM	
 	
 	

 [((! )(s\    
AAA(A1 1;B/.B/H++
H87H8=;_9 9`
`
l 
l,+l,c                       e Zd Zg dZh dZddZd Zd Zd Zd Z	d	 Z
d
 Zej        f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ddZdS )AppendingTiffWriter)r   r   r   r   r   r%   r   r   r   r   r%   r   r%   r   r   r   r%   >       	     r   r   Fc                 D   t          |d          r|| _        d| _        nN|| _        d| _        	 t	          ||rdnd          | _        n%# t
          $ r t	          |d          | _        Y nw xY w| j                                        | _        |                                  d S )Nr  FTzw+bzr+b)	r   r   close_fpr   openr  r  	beginningsetup)r   fnr  s      r5   r   zAppendingTiffWriter.__init__o  s    2v 		)DF!DMMDI DM)b3"9%%E:: ) ) )b%)

s   A	 	A+*A+c                    | j                             | j        t          j                   d | _        d| _        | j                             d          x| _        }|s	d| _	        d S d| _	        |dk    r| 
                    d           n-|dk    r| 
                    d           nd	}t          |          |                                  |                                  d S )
Nr   r   TFr`   r   r_   r   zInvalid TIFF file header)r   r  r  r  SEEK_SETwhereToWriteNewIFDOffsetoffsetOfNewPager  IIMMisFirst	setEndianRuntimeErrorskipIFDsgoToEnd)r   iimmr   s      r5   r  zAppendingTiffWriter.setup}  s    DNBK000(,% 6;;q>>)	D 	DLF=  NN3]""NN3,Cs###r7   c                    | j         rd S | j                            | j                   | j                            d          }|sd S || j        k    rd}t          |          |                                 }|| j        z  }| j                            | j                   | 	                    |           | j                            |           | 
                                 d S )Nr   z1IIMM of new page doesn't match IIMM of first page)r  r   r  r  r  r  r  readLongr  	writeLongfixIFD)r   r  r   
ifd_offsets       r5   finalizezAppendingTiffWriter.finalize  s    < 	F 	D()))v{{1~~ 	 F49ECs###]]__
d**
D1222z"""Jr7   c                 V    |                                   |                                  d S rr   )r  r  r   s    r5   newFramezAppendingTiffWriter.newFrame  s     

r7   c                     | S rr   r1   r   s    r5   	__enter__zAppendingTiffWriter.__enter__  s    r7   c                 <    | j         r|                                  dS )NF)r  r?  )r   exc_type	exc_value	tracebacks       r5   __exit__zAppendingTiffWriter.__exit__  s    = 	JJLLLur7   c                 D    | j                                         | j        z
  S rr   )r   r  r  r   s    r5   r  zAppendingTiffWriter.tell  s    v{{}}t333r7   c                     |t           j        k    r
|| j        z  }| j                            ||           |                                 S rr   )r  r  r  r   r  r  )r   r  whences      r5   r  zAppendingTiffWriter.seek  s@    R[  d**FFF###yy{{r7   c                 <   | j                             dt          j                   | j                                         }d|dz  z
  }d|cxk     rdk     r*n n'| j                             t          |                     | j                                         | _        d S )Nr   r=   )r   r  r  SEEK_ENDr  r  r   r  )r   pos	pad_bytess      r5   r  zAppendingTiffWriter.goToEnd  s    Ar{###fkkmm rM	y2FLLy))***#v{{}}r7   c                 n    || _         | j         dz   | _        | j         dz   | _        | j         dz   | _        d S )Nr:   rY  HHL)endianlongFmtshortFmt	tagFormat)r   r  s     r5   r  zAppendingTiffWriter.setEndian  s7    {S(c)u,r7   c                 ,   	 |                                  }|dk    r#| j                                        dz
  | _        d S | j                            |           |                                 }| j                            |dz  t          j                   )NTr   r   r;   )r  r   r  r  r  	readShortr  SEEK_CUR)r   r  num_tagss      r5   r  zAppendingTiffWriter.skipIFDs  s}    	4JQ040A-FKK
###~~''HFKK2r{333	4r7   c                 6    | j                             |          S rr   )r   r  rg  s     r5   r  zAppendingTiffWriter.write  s    v||D!!!r7   c                 n    t          j        | j        | j                            d                    \  }|S )Nr   )r:  r;  r  r   r  ro  s     r5   r  zAppendingTiffWriter.readShort  s(    =A??r7   c                 n    t          j        | j        | j                            d                    \  }|S rb   )r:  r;  r  r   r  ro  s     r5   r  zAppendingTiffWriter.readLong  s(    =tv{{1~~>>r7   c                     | j                             dt          j                   | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr   wrote only  bytes but wanted 4	r   r  r  r  r  r:  r>  r  r  r   r   bytes_writtenr   s       r5   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  w    B$$$V[u%E%EFF$!););BBBBCs### %$););r7   c                     | j                             dt          j                   | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr  r   r	   bytes but wanted 2)	r   r  r  r  r  r:  r>  r  r  r  s       r5   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort  sw    B$$$V[%F%FGG$!););BBBBCs### %$););r7   c                     | j                             dt          j                   | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr   r	  r
  r  r  s       r5   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r  r7   c                     | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr   r	  r  )r   r  r:  r>  r  r  r  s       r5   
writeShortzAppendingTiffWriter.writeShort  s_    V[%F%FGG$!););BBBBCs### %$););r7   c                     | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr   r	  r
  )r   r  r:  r>  r  r  r  s       r5   r  zAppendingTiffWriter.writeLong  s_    V[u%E%EFF$!););BBBBCs### %$););r7   c                 `    |                                   | j                                         d S rr   )r  r   r?  r   s    r5   r?  zAppendingTiffWriter.close  s"    r7   c                 "   |                                  }t          |          D ]i}t          j        | j        | j                            d                    \  }}}| j        |         }||z  }|dk    }|s3|                                 }	|	| j	        z  }	| 
                    |	           || j        v r| j                                        }
|r>|                     ||dk    |dk               | j                            |
dz              nT| j                            |	           |                     ||dk    |dk               | j                            |
           d x}	}
B|r%| j                            dt          j                   kd S )Nr%   r   r   )isShortisLong)r  r  r:  r;  r  r   r  
fieldSizesr  r  r  Tagsr  
fixOffsetsr  r  r  )r   r  r  r   
field_typer  
field_size
total_sizeis_localr  cur_poss              r5   r  zAppendingTiffWriter.fixIFD  s   >>##x 	, 	,A%+]4>46;;q>>%R%R"CU4J#e+J!QH -$..$$V,,,di&++-- 
)OO
a*PQ/ $    FKK!,,,,FKK'''OO
a*PQ/ $    FKK(((#'' ,Ar{+++=	, 	,r7   c                 V   |s|sd}t          |          t          |          D ]}|r|                                 n|                                 }|| j        z  }|r|dk    r|dk    rd}t          |          |                     |           | j                            dt          j	                   | 
                    t          j                   | j                            dt          j	                   |r|                     |           |                     |           d S )Nz offset is neither short nor longr   r   znot implementedir%   )r  r  r  r  r  r  r   r  r  r  r  r   r%  r  r  )r   r  r  r  r   r  r  s          r5   r  zAppendingTiffWriter.fixOffsets4  s0    	$v 	$4Cs###u 	- 	-A)0ET^^%%%dmmooFd**F -6U??A::+C&s+++ ++F333C---...Ar{++++ -%%f----$$V,,,,%	- 	-r7   N)F)FF)r   r   r   r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?  r  r  r1   r7   r5   r  r  R  s         J4 *))D     2  2  
    
4 4 4 #%+    - - -- - -	4 	4 	4" " "    $ $ $$ $ $$ $ $$ $ $$ $ $  !, !, !,F- - - - - -r7   r  c                    | j                                         }| j        }t          |                    dg                     }t          | d          s|st          | ||          S |                                 }	 t          |          5 }| g|z   D ]}||_         ||_        t          |d          sd}	n|j	        }	t          |	          D ]P}
|                    |
           |                                 t          |||           |                                 Q	 d d d            n# 1 swxY w Y   |                     |           d S # |                     |           w xY w)Nappend_imagesr  r   )r  r  r  r  r  r   r  r  r  r  r  r  r  r  )r  r  r  r  r  r'  cur_idxtfimsnfrrG  s              r5   	_save_allr,  N  s   .%%''K$M"==>>M2z"" '= 'RX&&&ggiiG $$ 	"tm+ " ""-$1!sJ// 'CC,C :: " "CHHSMMMHHJJJ#r8,,,KKMMMM	""	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	s1   <E BD*E *D..E 1D.2E E#z.tifz.tiffz
image/tiff)lr  r  loggingr  r  r:  r,  collections.abcr   	fractionsr   numbersr   r    r   r	   r
   r   r   r   _binaryr   r  r   r  r   r   	getLoggerr   r  rc  r  IFD_LEGACY_APIr  r   r   rW  rX  rZ  rP  rT  rU  r  r  r\  re  r  r`  ra  rR  rb  r  r  r  r  	PREDICTORrj  rf  rg  rd  r  r  r[  rY  
JPEGTABLESrV  r  r  r  r  ri  EXIFIFDr  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArO  r   r  r_  rv   r]  rc   rf   rp   ry   r   rL  rj   r   rG  r   r  setattrr  ImageFileDirectoryr  r  r  r  r,  register_openr  register_saveregister_save_allregister_extensionsregister_mimer1   r7   r5   <module>rA     s  R 
			       				   * * * * * *       $ $ $ $ $ $ $ $ J J J J J J J J J J J J J J J J ! ! ! ! ! ! ! ! ! ! ! !            		8	$	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * CB)9)?)?)A)ABBB x D!T2x D!T2	x
 D!T2x D!T2x D!T2
x D!T2
x D!T2x D!T2x D!T2x D!T2x D!T2x D!T2x D!T2x  D!T2!x" D!T2#x$ D!T2%x& D!T2'x x( D!T2)x* D!T2+x, D!T2-x. D!T2/x0 D!T21x2 D!T23x4 D!T25x6 D!T27x8 D!T29x: D!T2;x< D!T2=x> D!T2
?x@ D!T2
AxB D!T2
CxD D!T2
ExF D!T2GxH D!T2Ix x xJ D!UB!1KxL D!UB!1MxN D!UB!1OxP D!UB!3QxR D!UB!2SxT D!UBUxV D!UBWxX D!UBYxZ D!UB[x\ D!UB]x^ D!UB_x` D!UBaxb D!UBcxd D!UBexf D!VT"Lgxh D!VT"Lixj D!Y#^kx x xl D!Y#^mxn D!Y#%5oxp D!Y#%5qxr D!\2&(8sxt D!\2&(8uxv D!\4(*:wxx D!\4(*:yxz D!_f-/@{x| D!_f-/@}x~ D!'35Gx@ D!'35GAxB D!\4(*:CxD D!\4(*:ExF D!_f-/@GxH D!_f-/@IxJ D!'35GKxL D!'35GMx x xN D!\4(*:OxP D!\4(*:QxR D!_f-/@SxT D!_f-/@UxV D!'35GWxX D!'35GYxZ D!\6*,<[x\ D!\6*,<]x^ D!\2&(:_x` D!\2&(:axb D!%r*,@cxd D!%r*,@exf D!%t,.Bgxh D!%t,.Bixj D!%t,.Bkxl D!%t,.Bmxn D!%t,.Box x xp D!%t,.Bqxr D!T2sxt D!T2uxv D!T2wxx D!T2yxz D!T2{x| D!T2}x~ D!T2x@ D!T2AxB D!T2CxD D!T2ExF D!T2GxH D!T2IxJ D!T2
KxL D!T2
MxN D!VT"LOxP D!VT"LQx xR D!T2D!T2D!\2&(8D!\2&(8D!_d+->D!_d+->D!'02DD!'02DD!%r*,@ D!Y#_D!Y#_D!Y#^D!Y#^ox x	t cAAyAAAAA   " " "% % %  " ' ' ' ' '( ' ' 'DG$ G$ G$ G$ G$N G$ G$ G$T (6  $(7  % J JIC<<S!!DG!7T>>#3Fq3IJJJG!8d?OC4HIIIIOS$X X X X X1 X X Xx + _L _L _L _L _LI' _L _L _LR #r1at	$ #r1at	$	
 	4Q61
% #r1at	$ 	4Q61
% '2q!UD	) VRAud+ gr1a- '2q!UD	) 
E2q!Y- VRA|Q/ VRA|Q/ VRA|T2  gr1aD1!" 
E2q!Y-#$ xQ5$/%& gr1a-'( Q5$/Q5$/+  	2c" c" c"L	y- y- y- y- y- y- y- y-x  >  M(- A A A  M(% 0 0 0  ,i 8 8 8  -.0A B B B  M(, 7 7 7 7 7r7   