
    Rf+             #         d dl m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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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.ZDd/ZEd0ZFd1ZGd2ZHd3ZId4ZJd5ZKd6ZLd7ZMd8ZNi dd9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYZOdZ eOP                                D             ZQi e%d d[dd[d\fd]e&d d[dd[d\fd]e%d d[d:d[d\fd^e&d d[d:d[d\fd^e%dd[dd[d\fd_e&dd[dd[d\fd_e%dd[d:d[d\fd`e&dd[d:d[d\fd`e%d d[ddad\fdbe&d d[ddad\fdbe%d d[d:dad\fdce&d d[d:dad\fdce%dd[ddad\fdde&dd[ddad\fdde%dd[d:dad\fdee&dd[d:dad\fdee%d d[ddfd\fdgi e&d d[ddfd\fdge%d d[d:dfd\fdhe&d d[d:dfd\fdhe%dd[ddfd\fdie&dd[ddfd\fdie%dd[d:dfd\fdje&dd[d:dfd\fdje%d d[ddkd\fdle&d d[ddkd\fdle%d d[d:dkd\fdme&d d[d:dkd\fdme%dd[ddkd\fdne&dd[ddkd\fdne%ddaddkd\fdne&ddaddkd\fdne%dd[d:dkd\fdoe&dd[d:dkd\fdoi e%dd[ddpd\fdqe%d d[ddrd\fdse%dd[ddrd\fdse&dd[ddrd\fdte%dd[d:drd\fdue%ddaddrd\fdve&ddaddrd\fdwe%d dxddyd\fdze&d dxddyd\fd{e%dd[ddyd\fd|e%ddaddyd\fd}e&ddaddyd\fd~e%ddxddyd\fdze&ddxddyd\fd{e%dd[dddafde&dd[dddafde%d:d[ddd\fdi e&d:d[ddd\fde%d:d[d:dd\fde&d:d[d:dd\fde%d:d[ddd\fde&d:d[ddd\fde%d:d[dddfde&d:d[dddfde%d:d[dddfde&d:d[dddfde%d:d[dddfde&d:d[dddfde%d:d[ddd[fde&d:d[ddd[fde%d:d[dddfde&d:d[dddfde%d:d[dddfde&d:d[dddfdi e%d:d[dddafde&d:d[dddafde%d:d[dddfde&d:d[dddfde%d:d[dddfde&d:d[dddfde%d:d[dddfde&d:d[dddfde%d:d[ddd\fde&d:d[ddd\fde%d:d[ddd\fde&d:d[ddd\fde%d:d[dddfde&d:d[dddfde%d:d[ddd[fde&d:d[ddd[fde%d:d[dddafdi e&d:d[dddafde%d<d[dd[d\fde&d<d[dd[d\fde%d<d[d:d[d\fde&d<d[d:d[d\fde%d<d[ddad\fde&d<d[ddad\fde%d<d[d:dad\fde&d<d[d:dad\fde%d<d[ddfd\fde&d<d[ddfd\fde%d<d[d:dfd\fde&d<d[d:dfd\fde%d<d[ddkd\fde&d<d[ddkd\fde%d<d[dddafde&d<d[dddafde%d<d[d:dkd\fde&d<d[d:dkd\fde%d@d[ddd\fde&d@d[ddd\fde%d@d[dddfde&d@d[dddfde%d@d[dddfde&d@d[dddfde%d@d[ddd\fde%dBd[ddkd\fdne&dBd[ddkd\fdne%dBd[ddd\fde&dBd[ddd\fde%dFd[ddd\fde&dFd[ddd\fdiZR eSd eRD                       ZTg dZUd ZVd ZWd ZXi ZYi ZZ G d de          Z[ G d de
          Z\eYe\_Y        eZe\_Z         ejP                    D ]M\  Z]Z^e^_                    dd          Z^ e`e\de^z   eYe]         d                     e`e\de^z   eZe]                    N[Y[Z[][^ G d de\          ZaeaZb G d dej                  Zci dde%ddd[dfdde%dddkdfdde%dddd:fdde%d<ddkdfdde%d<ddd:fdde%dd:dydfdde%dddrdfdde%dd:drdfdde%dd<dydfdde%d:dddfdde%d:ddd fdde%d:ddd:fdde%d@dddfdde%dBdddfdde%dFdddfdde&dd:dydfdde&dddrdfde&dd:drdfde&dd<dydfdלZdd؄ Ze G dل dڦ          Zfdۄ Zg ejh        ecji        eceV            ejj        ecji        ee            ejk        ecji        eg            ejl        ecji        ddg            ejm        ecji        dަ           dS )    )annotationsN)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  r2   ).0kvs      E/var/www/html/env/lib/python3.11/site-packages/PIL/TiffImagePlugin.py
<dictcomp>r7      s    BBBA1BBB    r   r2   )1z1;I)r:   z1;IR)r:   r:   )r:   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)rD   F;32BF)r@   zI;32N)r@   I;32S)r@   I;32BS)r&   r&   )LArI   )r&   r&   r&   )RGBrJ   )rJ   zRGB;R)r&   r&   r&   r&   )RGBArK   r   )RGBXrM   )r&   r&   r&   r&   r&   r   r   )rM   RGBXX)r&   r&   r&   r&   r&   r&   )r   r   r   )rM   RGBXXX)rK   RGBa)r   r   )rK   RGBaX)r   r   r   )rK   RGBaXX)r   r   )rK   RGBAX)r   r   r   )rK   RGBAXX)i  )r>   r>   r>   )rJ   zRGB;16L)rJ   zRGB;16B)r>   r>   r>   r>   )rK   zRGBA;16L)rK   zRGBA;16B)rM   zRGBX;16L)rM   zRGBX;16B)rK   zRGBa;16L)rK   zRGBa;16B)PzP;1)rV   zP;1R)rV   zP;2)rV   zP;2R)rV   zP;4)rV   zP;4R)rV   rV   )PArW   )rV   zP;R)CMYKrX   )rX   CMYKX)rX   CMYKXX)rX   zCMYK;16L)rJ   rM   )LABr[   c              #  @   K   | ]}t          |d                    V  dS )r   N)len)r3   key_tps     r6   	<genexpr>r_   
  s,      AAV#fQi..AAAAAAr8   )   MM *   II* s   MM* s   II *s   MM +s   II+ c                $    | d d         t           v S Nr   )PREFIXESprefixs    r6   _acceptrg     s    "1":!!r8   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       r6   _limit_rationalrq     sR    
c((Q,C
-a#gg#
.
.
=
=g
F
FC$3ttt99$r8   c                    t          |           }|j        |j        f}t          |          |k     rt	          | t          |                    }t          |          |k    rt          | } t	          | |          }|S N)r   	numeratordenominatorminrq   rj   max)rm   rn   min_valfracrp   s        r6   _limit_signed_rationalrz      sp    C==D
.$*
*C
3xx'c3w<<00
3xx'nc7++Jr8   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 )+rk   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   )	
isinstancerk   rt   r|   ru   r}   r~   r   float)selfvalueru   s      r6   __init__zIFDRational.__init__C  s     e[)) 	#oDO % 1D
DIFeX&& 	,#oDO % 1D#DO +D!eDIIIA DIII 44DIIIr8   c                    | j         S rs   )r|   r   s    r6   rt   zIFDRational.numerator]  s
    r8   c                    | j         S rs   )r}   r   s    r6   ru   zIFDRational.denominatora  s      r8   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   )ru   rt   r~   limit_denominator)r   max_denominatorfs      r6   rl   zIFDRational.limit_rationale  sF     q  >4#333I''88{AM))r8   c                D    t          t          | j                            S rs   )strr   r~   r   s    r6   __repr__zIFDRational.__repr__r  s    5##$$$r8   c                4    | j                                         S rs   )r~   __hash__r   s    r6   r   zIFDRational.__hash__u  s    y!!###r8   c                    | j         }t          |t                    r|j         }t          |t                    rt          |          }||k    S rs   )r~   r   rk   r   )r   otherrm   s      r6   __eq__zIFDRational.__eq__x  sI    ie[)) 	JEeU## 	**Ce|r8   c                *    | j         | j        | j        gS rs   )r~   r|   r}   r   s    r6   __getstate__zIFDRational.__getstate__  s    	4?D,=>>r8   c                r    t                               | d           |\  }}}|| _        || _        || _        d S )Nr   )rk   r   r~   r|   r}   )r   stater~   r|   r}   s        r6   __setstate__zIFDRational.__setstate__  s@    T1%%%).&j,	$(r8   c                      fd}|S )Nc                4     t          | j                  | S rs   )getattrr~   )r   argsops     r6   delegatez'IFDRational._delegate.<locals>.delegate  s    )749b))400r8   r2   )r   r   s   ` r6   	_delegatezIFDRational._delegate  s#    	1 	1 	1 	1 	1 r8   __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__Nr9   )-__name__
__module____qualname____doc__	__slots__r   propertyrt   ru   rl   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   r2   r8   r6   rk   rk   5  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&&' 'r8   rk   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)rg   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtypereset_unpacknext_legacy_api)r   ifhrf   r   msgs        r6   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 	 !r8   c                    | j         S rs   )r   r   s    r6   <lambda>zImageFileDirectory_v2.<lambda>      4< r8   c                    | j         S rs   )_offsetr   s    r6   r   zImageFileDirectory_v2.<lambda>  r   r8   c                    | j         S rs   )r   r   s    r6   r   zImageFileDirectory_v2.<lambda>  s	    t'7 r8   c                $    d}t          |          )Nz"Not allowing setting of legacy api)	Exception)r   r   r   s      r6   
legacy_apiz ImageFileDirectory_v2.legacy_api  s    2nnr8   c                Z    i | _         i | _        i | _        i | _        d | _        d | _        d S rs   )_tags_v1_tags_v2_tagdatar   _nextr   r   s    r6   r   zImageFileDirectory_v2.reset  s0    
r8   c                :    t          t          |                     S rs   )r   dictr   s    r6   __str__zImageFileDirectory_v2.__str__%  s    4::r8   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 r2   )r   lookupr   name)r3   coder   r   s      r6   r7   z/ImageFileDirectory_v2.named.<locals>.<dictcomp>.  s@     
 
 
e OD$*--2E
 
 
r8   )itemsr   s   `r6   namedzImageFileDirectory_v2.named(  s6    
 
 
 
#zz||
 
 
 	
r8   c                n    t          t          | j                  t          | j                  z            S rs   )r]   setr   r   r   s    r6   __len__zImageFileDirectory_v2.__len__3  )    3t}%%DM(:(::;;;r8   c                    || j         vr?| j        |         }| j        |         }| j        |         \  }} || || j                  | |<   | j         |         }| j        rt          |t          t          f          s|f}|S rs   )r   r   r   _load_dispatchr   r   tuplebytes)r   tagdatatypsizehandlerrm   s          r6   __getitem__z!ImageFileDirectory_v2.__getitem__6  s    dm##=%D,s#C /4MD'dDO<<DImC ? 	:cE5>#B#B 	&C
r8   c                &    || j         v p|| j        v S rs   )r   r   r   r   s     r6   __contains__z"ImageFileDirectory_v2.__contains__A      dm#;sdm';;r8   c                >    |                      ||| j                   d S rs   )_setitemr   )r   r   r   s      r6   __setitem__z!ImageFileDirectory_v2.__setitem__D  s     c5$/22222r8   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 rs   )r   rk   r3   r5   s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>R  s,      BBaz![11BBBBBBr8   c              3  "   K   | ]
}|d k    V  dS r   Nr2   r	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>U  s&      66!qAv666666r8   c              3  @   K   | ]}t          |t                    V  d S rs   )r   intr	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>X  ,      <<As++<<<<<<r8   c              3  6   K   | ]}d |cxk    odk     nc V  dS )r   r   Nr2   r	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>Y  s6      ::a1>>>>E>>>>::::::r8   c              3  6   K   | ]}d |cxk     odk     nc V  dS )i i   Nr2   r	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>[  s>      BBaX1111E1111BBBBBBr8   c              3  "   K   | ]
}|d k    V  dS r  r2   r	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>`  s&      ":":a16":":":":":":r8   c              3  @   K   | ]}t          |t                    V  d S rs   )r   r   r	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>c  ,      >>!Au-->>>>>>r8   c              3  @   K   | ]}t          |t                    V  d S rs   )r   r   r	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>e  r  r8   c              3  @   K   | ]}t          |t                    V  d S rs   )r   r   r	  s     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>g  r  r8   c                h    g | ]/}t          |t                    r|                    d d          n|0S )asciireplace)r   r   encoder	  s     r6   
<listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>k  sJ        1;1c0B0BI),,,  r8   c                Z    g | ](}t          |t                    rt          |          n|)S r2   )r   r  r   r	  s     r6   r  z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>p  s1    LLL*Q"4"4;eAhhh!LLLr8   c              3  B   K   | ]}                     |          V  d S rs   )cvt_enum)r3   r   infos     r6   r_   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>t  s/      DDE4==//DDDDDDr8   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	           @r6   r  zImageFileDirectory_v2._setitemG  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 rs   )r   popr   r   r  s     r6   __delitem__z!ImageFileDirectory_v2.__delitem__  sP    #t$$$#t$$$#t$$$$$r8   c                n    t          t          | j                  t          | j                  z            S rs   )iterr   r   r   r   s    r6   __iter__zImageFileDirectory_v2.__iter__  )    C&&T]););;<<<r8   c                <    t          j        | j        |z   |          S rs   )structunpackr   )r   fmtr   s      r6   r   zImageFileDirectory_v2._unpack  s    }T\C/666r8   c                6    t          j        | j        |z   g|R  S rs   )r;  packr   )r   r=  r0  s      r6   _packzImageFileDirectory_v2._pack  s!    {4<#-77777r8   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     r6   	decoratorz9ImageFileDirectory_v2._register_loader.<locals>.decorator  se    ''''''}''00 A!]122.66sC@@c
"&*N3Kr8   r2   )rH  r   rI  s   `` r6   _register_loaderz&ImageFileDirectory_v2._register_loader  s*    	 	 	 	 	 	 r8   c                      fd}|S )Nc                    | t           <   | S rs   )_write_dispatch)rG  rH  s    r6   rI  z9ImageFileDirectory_v2._register_writer.<locals>.decorator  s    #'OC Kr8   r2   )rH  rI  s   ` r6   _register_writerz&ImageFileDirectory_v2._register_writer  s$    	 	 	 	 	 r8   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 rs   )r   r]   )r   r   r   r=  r   s      r6   r   z7ImageFileDirectory_v2._register_basic.<locals>.<lambda>  s/    D		T 18388$?? r8   c                J     d                      fd|D                       S )Nr8   c              3  D   K   | ]}                     |          V  d S rs   )r@  )r3   r   r=  r   s     r6   r_   zJImageFileDirectory_v2._register_basic.<locals>.<lambda>.<locals>.<genexpr>  s1      @@TZZU++@@@@@@r8   join)r   r0  r=  s   ` r6   r   z7ImageFileDirectory_v2._register_basic.<locals>.<lambda>  s0    HH@@@@@@@@@@ r8   T)r   r   r;  calcsizer   rM  )idx_fmt_namer   rH  r   r=  r   s       @@r6   _register_basicz%ImageFileDirectory_v2._register_basic  s    ######%S$c
sSy))     
s 
  
  
  
r8   Hshortr;   longbzsigned bytehzsigned shortlzsigned longr   r   ddoubler   long8r   Tc                    |S rs   r2   r   r   r   s      r6   	load_bytezImageFileDirectory_v2.load_byte      r8   c                    t          |t                    rt          |          }t          |t                    rt          |f          }|S rs   )r   rk   r  r   r   r   s     r6   
write_bytez ImageFileDirectory_v2.write_byte  sC    dK(( 	t99DdC   	"$>>Dr8   r   c                l    |                     d          r
|d d         }|                    dd          S )N    ri   zlatin-1r  )endswithdecoderd  s      r6   load_stringz!ImageFileDirectory_v2.load_string  s7    == 	9D{{9i000r8   c                    t          |t                    rt          |          }t          |t                    s|                    dd          }|dz   S )Nr  r  rk  )r   r  r   r   r  r   r   s     r6   write_stringz"ImageFileDirectory_v2.write_string  sP     eS!! 	JJE%'' 	5LL)44Eu}r8   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 rs   rk   ar]  r   s     r6   combinez4ImageFileDirectory_v2.load_rational.<locals>.combine       '>Aq66[A->->>r8   c              3  6   K   | ]\  }} ||          V  d S rs   r2   r3   numdenomrw  s      r6   r_   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>  3      VVZS%WWS%((VVVVVVr8   r   r   r   r]   r   zipr   r   r   valsrw  s     ` @r6   load_rationalz#ImageFileDirectory_v2.load_rational      ||s4yyA~000$77	? 	? 	? 	? 	? VVVV3tCCaCy$qtRSt*;U;UVVVVVVr8   c                F     d                      fd|D                       S )Nr8   c              3  P   K   | ] } j         d gt          |d          R  V  !dS )2Ll    N)r@  rq   r3   ry   r   s     r6   r_   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>  sR       
 
DHJDJt?odI>>???
 
 
 
 
 
r8   rT  r   r0  s   ` r6   write_rationalz$ImageFileDirectory_v2.write_rational  s?    xx 
 
 
 
LR
 
 
 
 
 	
r8   r$   c                    |S rs   r2   rd  s      r6   load_undefinedz$ImageFileDirectory_v2.load_undefined  rf  r8   c                v    t          |t                    r#t          |                              dd          }|S )Nr  r  )r   r  r   r  rp  s     r6   write_undefinedz%ImageFileDirectory_v2.write_undefined  s4    eS!! 	:JJ%%gy99Er8   
   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 rs   rt  ru  s     r6   rw  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine  rx  r8   c              3  6   K   | ]\  }} ||          V  d S rs   r2   rz  s      r6   r_   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>  r}  r8   r   r   r~  r  s     ` @r6   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rational  r  r8   c                F     d                      fd|D                       S )Nr8   c           	   3  R   K   | ]!} j         d gt          |dd          R  V  "dS )2lii   N)r@  rz   r  s     r6   r_   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>  sX       
 
 DJtP4T9hOOPPP
 
 
 
 
 
r8   rT  r  s   ` r6   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rational  s?    xx 
 
 
 

 
 
 
 
 	
r8   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        r6   _ensure_readz"ImageFileDirectory_v2._ensure_read  sj    ggdmms88tL%)L L?B3xxL L L  #,,
r8   c           
     
   |                                   |                                | _        	 | j        r*|                     d|                     |d                    n)|                     d|                     |d                    d         }t          |          D ]G}| j        r*|                     d|                     |d                    n)|                     d|                     |d	                    \  }}}}t          j        || j	                  j
        }t          j        |d
          }	d| d| d|	 d| d	}
	 | j        |         \  }}n,# t          $ r t                              d|
|           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                              |
           I| 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&   rZ  r   r   HHQ8s   HHL4sr<   unknownztag:  (
) - type: )z%s - unsupported type %sr   r;   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag 
 - value: rC   <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                   r6   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!;S#FFF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!M==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||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           C|                    ||||                      d|          |f           |t          |          dz   dz  dz  z  }|^||         \  }}}}}|rd}t=          |          |                      d|                     d|          d         |z             }|||||f||<   |D ]]\  }}}}}t          	                    d|||t          |          t          |                     ||                      d||||          z  }^|dz  }|D ]$\  }}}}}||z  }t          |          dz  r|dz  }%|S )NrZ  r<   r   zTag %s, Type: %s, Value: %sr   s   II*    s   MM *   )r   ifdr  zsave: r  r  r  r  r>   r  r   rk  r8   r;   r   z&multistrip support not yet implementedr   z%s %s %s %s %sr  s       ) r@  r]   r   sortedr   STRIPOFFSETSr   r  r  r  r   r   r&  r   r   r   r   tobytesr   rM  r   r   r   r   r   r*  r)  r   appendljustNotImplementedErrorr   )r   r  resultentriesstripoffsetsr   r   r   r1  r   r  r0  ifd_tag	ifd_valuer   r  r  r   r  s                      r6   r  zImageFileDirectory_v2.tobytesi  s5   CT]!3!344#f++%DM(:(:R(??!C !!4!4!6!677 (	3 (	3JCl"""7||,""3''CLL6S$u++NNN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LL)3UDKKdTTTdjj#sE5AAAFF 	+ -4 	  	 (CeUDdNF4yy1}  %r8   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       r6   savezImageFileDirectory_v2.save  s}    7799>>HHT\DJJtR$;$;;<<<f%%
F##r8   )r   NNrV  rL   )3r   r   r   r   r   r   rf   r  r   setterr   r   r   r   r   r  r  r  r5  r8  r   r@  rJ  rN  rY  listmapr   r$  r&  SIGNED_BYTEr%  r'  FLOATr(  IFDLONG8re  ri  rn  rq  r  r  r  r  r  r  r  r  r  r  r2   r8   r6   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$ $ $ $ $r8   r   rE  rD  rC  write_c                       e Zd ZU dZ fdZ ed           Z ed           Zd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      r6   r   zImageFileDirectory_v1.__init__  s-    $)&)))r8   c                    | j         S rs   )r   r   s    r6   r   zImageFileDirectory_v1.<lambda>  s     r8   c                    | j         S rs   )r   r   s    r6   r   zImageFileDirectory_v1.<lambda>  s    DM r8   r   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`

        re   )rf   r   r   r   )clsoriginalr  s      r6   from_v2zImageFileDirectory_v1.from_v2  s:     c)))(&=
r8   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`

        re   )r   rf   r   r   r   r   )r   r  s     r6   to_v2zImageFileDirectory_v1.to_v2  sN     $4;777DM**4<((DM**
r8   c                &    || j         v p|| j        v S rs   )r   r   r  s     r6   r  z"ImageFileDirectory_v1.__contains__  r  r8   c                n    t          t          | j                  t          | j                  z            S rs   )r]   r   r   r   r   s    r6   r   zImageFileDirectory_v1.__len__  r   r8   c                n    t          t          | j                  t          | j                  z            S rs   )r7  r   r   r   r   s    r6   r8  zImageFileDirectory_v1.__iter__  r9  r8   c                >    dD ]}|                      |||           d S N)FT)r  )r   r   r   r   s       r6   r  z!ImageFileDirectory_v1.__setitem__  s4    ' 	2 	2JMM#uj1111	2 	2r8   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   legacyrm   s           r6   r   z!ImageFileDirectory_v1.__getitem__  s    dm##=%D,s#C /4MD'' H Hc774v#>#>GGGGmC #u~.. 	&C
r8   )r   r   r   r   r   r   tagstagdata__annotations__classmethodr  r  r  r   r8  r  r   __classcell__r  s   @r6   r  r    s          $          8..//Dh1122G MMM!  ["  "< < << < <= = =2 2 2
 
 
 
 
 
 
r8   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 rs   )tag_v2r   r  r   )r   r  filenamer  s      r6   r   zTiffImageFile.__init__3  s7    5"X&&&&&r8   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   Nri   z*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r  r  r   r  r  r   _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r   _seek)r   r   s     r6   _openzTiffImageFile._open<  s     gll1ooq6R<<47<<??"C+C00  &*[%55t{72333_dl333[$s)),,, 	

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

499;;?+++ .(IIg~r8   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     r6   r  zTiffImageFile.seeka  sc    && 	F

5 	'	222*..DI66r8   c                   | j         | _        | j                                         t          | j                  |k    rx| j        sd}t          |          t                              d|| j	        | j        | j                                                   | j        
                    | j                   | j                            | j                   t                              d| j                                                   | 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    x| j        
                    | j        |                    | j                            | j                   |                                  t$                              | j                  x| _        | _        || _	        |                                  d S )Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sz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      r6   r  zTiffImageFile._seekl  s   ( 	$/""e++; $3smm#LLK   GLL%%%O""4;///LL5tw||~~FFFKTW%%%{4?22  "k.{a!&4?##q((#';!#3 LLALL3 $/""e++4 	T_U+,,,!!!3;;DKHHH48r8   c                    | j         S )zReturn the current frame number)r  r   s    r6   r  zTiffImageFile.tell  s
    |r8   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    r6   getxmpzTiffImageFile.getxmp  s.     251C1Ct||DK,---Kr8   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   blocksrm   idnr   r   s          r6   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$$ r8   c                    | j         r| j        r|                                 S t                                                      S rs   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    r6   r  zTiffImageFile.load  s;    9 	(. 	(%%'''ww||~~r8   c                \   | j         s]d| _        | j                                         |                                 }t
          j        D ]}||vr|                    |           t          j	        | d           t          j        j        | j        v r| j        t          j        j        = d S d S )NT)in_place)r
  !_close_exclusive_fp_after_loadingr  r  getexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer	   r  Orientationr  )r   exifkeys      r6   load_endzTiffImageFile.load_end  s      	"59D2 GLLNNN <<>>D. " "d??S!!!!t4444=$33HM5666 43r8   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  r-  r.  _getdecoderr  r   decoderconfigsetimager  r,  _exclusive_fpr
  r  r  rm  r0  r  r  readonlyr+  close)
r   r   extentsr   r  decodereclose_self_fpr  errs
             r6   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                             tF          d          }| j                             tH          d          }|rt|rr| j                             tJ                    }|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 | _&        tN          p
| j        d#k    | _(        | j(        r|dk    rH|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           ntX          | j         v stZ          | j         v rqtX          | j         v r@| j         tX                   }| j                             t\          |          }| j        d         }nP| j         tZ                   }| j                             t^                    }| j                             t`                    }|D ]}||z   |k    r|tc          |          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          |          td          | j         v r| j         td                   | j"        d/<   | j!        d0v rKd1 | j         tf                   D             }ti          j5        d2d36                    |                    | _7        dS 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: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %sz
- size: %sr9   r2   )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: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr   dpigRQ@
resolutionr   r=   I;16Nz;16Bz;16Nz;16Lr%   rJ   Fr/  r&   z- unsupported data organizationicc_profilerV   rW   c                2    g | ]}t          |d z            S r   r   )r3   r]  s     r6   r  z(TiffImageFile._setup.<locals>.<listcomp>  s"    CCCr!s(||CCCr8   RGB;Lr8   )8r  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  r   YCBCRSUBSAMPLINGr  
IMAGEWIDTHIMAGELENGTH_sizer   SAMPLEFORMATr]   rw   rv   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr   rf   	OPEN_INFO_moder  r  r  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr  READ_LIBTIFFr  r  r  r  r  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   rU  palette)r   r   photo	fillorderxsizeysizesample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelr*  rawmoder:  xresyresresunitxylayerrv  offsetsr^  wr  stridetile_rawmodere  s                                r6   r  zTiffImageFile._setup&  sO    T[  ?C#,, -T[__[!-L-LM%)[__5I1%M%M"  :A>> ++EKOOIq11	&'''($*;<<<7???143MNNN'333.=M0N0NOOO DKOOJ//00DKOOK0011E\
\49---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
 	%s+++	*"+C.DJ 	* 	* 	*LL/000&Cc"")	*
 	%w///%ty111#'#4	- {|Q//{|Q// 	5D 	5kooo66G!||$($<	%  A$(4K#=	%  $($<	%  +/*	,''*.*	,' A	 , J0AU0J  Y	# A~~"1"gns122w.-s333 '0n#
G
 &  !  !//&&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GDLLL $#s   4O
 

P,P  P)NN)r   r   r   formatformat_descriptionr#  r   r  r   r  r  r  r  r  r  r  r+  r   r  r  r  s   @r6   r  r  .  s       F%(-%' ' ' ' ' '  6   X	7 	7 	7' ' 'R  L L L  *    
7 7 7*S& S& S&j^H ^H ^H ^H ^H ^H ^Hr8   r  r:   r;   rI   rV   rW   r@   rG   r=   rA   rD   rE   rJ   rM   rK   rX   YCbCrr[   rH   r?   rB   rF   )rB   rF   c                2   	 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-          |                     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                   |t                   }}t[          |          ||d         z  d&z   d'z  z  } tv          |vrl|rV|                    d(tx                    }!| dk    rd
nt{          |!| z  |          }"|dk    rt{          |"d&z   d'z  d'z  |          }"n|}"|"dk    rd
}"|"|tv          <   | dk    rd
n| |tv                   z  }#||tv                   z   d
z
  |tv                   z  }$|#d)k    rt2          j>        |j        t~          <   |#f|$d
z
  z  | |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}'|rRd-|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                                                     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                                                     | j        d;v rd<}t-          |+F                                          }/|/c                                 |||)||/|*f}0t#          jd        | j        d=|0|          }	|	e                    | j8        d>| j        z              	 |	a                    d@          d
d          \  }1}2|)s|f                    |2           |1rn;|)r&	 t          jg        |)           n# t          $ r Y nw xY w|1dk     rdA|1 dB}
t          |
          nC|'D ]}%||%= |h                    |          }3t          jj        | |dd>| j        z   |3|| d
ffg           dC|v r	|| _k        d S d S )DNzcannot write mode z as TIFFre   r>  r   r#   r%   r+   r'   r   r   tiffinfor)  zTiffinfo Keys: %sr  rB  descriptionr@  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr?  r   r9   )r:   r;   r:      rC  rJ   rF  r   c                    g | ]}|d z  S rE  r2   r	  s     r6   r  z_save.<locals>.<listcomp>  s    MMMQSMMMr8   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: %sr-  r   libtiff_support_custom_tagsFr  r  rk  zConverted items: %s)r?   r=   rA  r/  rN   Ti @  zencoder error z when writing image file_debug_multipage)l	SAVE_INFOr  r  r  r   encoderinfoencoderconfigr  r  r   r  WRITE_LIBTIFFrJ  r   rO  rP  r   r
   Exifr  r  r  r  r  r  r   r%  r&  r   r   r   r\  rZ  r[  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr  r  rc  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTrS  r]   rU  rT  rR  rL  copyr  heightwidthr   invertr  
getpaletterd  r_  
STRIP_SIZErv   r&  STRIPBYTECOUNTSr   r  COMPRESSION_INFO_REVrH  rN  REFERENCEBLACKWHITEr   
setdefaultr`  ra  r^  TILEBYTECOUNTSr,  JPEGQUALITYr  r  osdupr-  ioUnsupportedOperationTRANSFERFUNCTIONSUBIFDr   r   	itertoolschainLIBTIFF_COREr  r   r   r   r  r  rk   sort_getencoderr4  r  r7  r  r   _saver  )4r  r  r  rp  rf   rf  r{  bitsextrar:  r   r  r  r  r>  r/  r  r)  r*  iccr   r?  inverted_impxru  rt  lutcolormapcolorsr  rx  r^  ry  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imager   r   	blocklistr  r  typesatts
legacy_ifdsupplied_tagsr  r  rv  errcoder   r  s4                                                       r6   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$d4jj111$-.. 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z?C,qAYY1tAw;?q01F3 	'OOL*EEM"(A++QQ3}7NPQ3R3RNf$$!$~'9a&?1%Da!H!HNQN*L#q[[fs<7H.HC--1c,6GGE!!'/}O$-/3Ca3GH
&*:Q*>??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[&"5"5666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*F4::<<,@,@AAA 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))
H65H6;;_7 7`	`	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      r6   r   zAppendingTiffWriter.__init__m  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   TFra   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      r6   r  zAppendingTiffWriter.setup{  s    DNBK000(,% 6;;q>>)	D 	DLF=  NN3]""NN3,Cs###r8   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       r6   finalizezAppendingTiffWriter.finalize  s    < 	F 	D()))v{{1~~ 	F49ECs###]]__
d**
D1222z"""Jr8   c                V    |                                   |                                  d S rs   )r  r  r   s    r6   newFramezAppendingTiffWriter.newFrame  s     

r8   c                    | S rs   r2   r   s    r6   	__enter__zAppendingTiffWriter.__enter__  s    r8   c                <    | j         r|                                  dS )NF)r  r7  )r   exc_type	exc_value	tracebacks       r6   __exit__zAppendingTiffWriter.__exit__  s    = 	JJLLLur8   c                D    | j                                         | j        z
  S rs   )r   r  r  r   s    r6   r  zAppendingTiffWriter.tell  s    v{{}}t333r8   c                    |t           j        k    r
|| j        z  }| j                            ||           |                                 S rs   )r  r  r  r   r  r  )r   r  whences      r6   r  zAppendingTiffWriter.seek  s@    R[  d**FFF###yy{{r8   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      r6   r  zAppendingTiffWriter.goToEnd  s    Ar{###fkkmm rM	y2FLLy))***#v{{}}r8   c                n    || _         | j         dz   | _        | j         dz   | _        | j         dz   | _        d S )Nr;   rZ  HHL)endianlongFmtshortFmt	tagFormat)r   r  s     r6   r  zAppendingTiffWriter.setEndian  s7    {S(c)u,r8   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      r6   r  zAppendingTiffWriter.skipIFDs  s}    	4JQ040A-FKK
###~~''HFKK2r{333	4r8   c                6    | j                             |          S rs   )r   r  rh  s     r6   r  zAppendingTiffWriter.write  s    v||D!!!r8   c                n    t          j        | j        | j                            d                    \  }|S )Nr   )r;  r<  r  r   r  rp  s     r6   r  zAppendingTiffWriter.readShort  s(    =A??r8   c                n    t          j        | j        | j                            d                    \  }|S rc   )r;  r<  r  r   r  rp  s     r6   r  zAppendingTiffWriter.readLong  s(    =tv{{1~~>>r8   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       r6   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  w    B$$$V[u%E%EFF$!););BBBBCs### %$););r8   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       r6   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort  sw    B$$$V[%F%FGG$!););BBBBCs### %$););r8   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       r6   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r  r8   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       r6   
writeShortzAppendingTiffWriter.writeShort  s_    V[%F%FGG$!););BBBBCs### %$););r8   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       r6   r  zAppendingTiffWriter.writeLong  s_    V[u%E%EFF$!););BBBBCs### %$););r8   c                `    |                                   | j                                         d S rs   )r  r   r7  r   s    r6   r7  zAppendingTiffWriter.close	  s"    r8   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              r6   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{+++=	, 	,r8   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          r6   r  zAppendingTiffWriter.fixOffsets0  s0    	$v 	$4Cs###u 	- 	-A)0ET^^%%%dmmooFd**F -6U??A::+C&s+++ ++F333C---...Ar{++++ -%%f----$$V,,,,%	- 	-r8   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  r7  r  r  r2   r8   r6   r  r  O  s         J(  D     2  .  
    
4 4 4 #%+    - - -- - -	4 	4 	4" " "    $ $ $$ $ $$ $ $$ $ $$ $ $  !, !, !,F- - - - - -r8   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nfrrH  s              r6   	_save_allr%  J  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)n
__future__r   r  r  loggingr  r  r;  r-  collections.abcr   	fractionsr   numbersr   r    r	   r
   r   r   r   r   _binaryr   r  r   r  r   r   	getLoggerr   r  r]  r  IFD_LEGACY_APIr  r   r   rO  rP  rS  rH  rL  rM  r  r  rU  r_  r  rZ  r[  rJ  r\  r  r  r  r  	PREDICTORrd  r`  ra  r^  r  r  rT  rR  
JPEGTABLESrN  r  r  r  r  rc  EXIFIFDr  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArG  r   r  rX  rw   rV  rd   rg   rq   rz   r   rM  rk   r   rH  r   r  setattrr  ImageFileDirectoryr  r  r  r  r%  register_openr{  register_saveregister_save_allregister_extensionsregister_mimer2   r8   r6   <module>r;     s7  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 z D!T2z D!T2	z
 D!T2z D!T2z D!T2
z D!T2
z D!T2z D!T2z D!T2z D!T2z D!T2z D!T2z D!T2z  D!T2!z" D!T2#z$ D!T2%z& D!T2'z z( D!T2)z* D!T2+z, D!T2-z. D!T2/z0 D!T21z2 D!T23z4 D!T25z6 D!T27z8 D!T29z: D!T2;z< D!T2=z> D!T2
?z@ D!T2
AzB D!T2
CzD D!T2
EzF D!T2GzH D!T2Iz z zJ D!UB!1KzL D!UB!1MzN D!UB!1OzP D!UB!3QzR D!UB!2SzT D!UBUzV D!UBWzX D!UBYzZ D!UB[z\ D!UB]z^ D!UB_z` D!UBazb D!UBczd D!UBezf D!VT"Lgzh D!VT"Lizj D!Y#^kz z zl D!Y#^mzn D!Y#%5ozp D!Y#%5qzr D!\2&(8szt D!\2&(8uzv D!\4(*:wzx D!\4(*:yzz D!_f-/@{z| D!_f-/@}z~ D!'35Gz@ D!'35GAzB D!\4(*:CzD D!\4(*:EzF D!_f-/@GzH D!_f-/@IzJ D!'35GKzL D!'35GMz z zN D!\4(*:OzP D!\4(*:QzR D!_f-/@SzT D!_f-/@UzV D!'35GWzX D!'35GYzZ D!\6*,<[z\ D!\6*,<]z^ D!\2&(:_z` D!\2&(:azb D!%r*,@czd D!%r*,@ezf D!%t,.Bgzh D!%t,.Bizj D!%t,.Bkzl D!%t,.Bmzn D!%t,.Boz z zp D!%t,.Bqzr D!T2szt D!T2uzv D!T2wzx D!T2yzz D!T2{z| D!T2}z~ D!T2z@ D!T2AzB D!T2CzD D!T2EzF D!T2GzH D!T2IzJ D!T2
KzL D!T2
MzN D!VT"LOzP D!VT"LQz zR D!T2D!T2D!\2&(8D!\2&(8D!_d+->D!_d+->D!'02DD!'02DD!%r*,@D!T2
D!T2
 D!Y#_D!Y#_D!Y#^D!Y#^sz z	x 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 + VH VH VH VH VHI' VH VH VH@ #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$/+  	2e" e" e"P	x- x- x- x- x- x- x- x-v  >  M(- A A A  M(% 0 0 0  ,i 8 8 8  -.0A B B B  M(, 7 7 7 7 7r8   