
    g@                      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
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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& ddl'm(Z( ddl)m*Z* ddlm+Z+ erddl'm,Z,m-Z-  ej.        e/          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$ZEd%ZFd&ZGd'ZHd(ZId)ZJd*ZKd+ZLd,ZMd-ZNd.ZOd/ZPd0ZQd1ZRd2ZSd3ZTd4ZUd5ZVd6ZWd7ZXd8ZYd9ZZd:Z[d;Z\d<Z]d=Z^i dd>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^Z_d_ e_`                                D             Zai e4d d`dd`dafdbe5d d`dd`dafdbe4d d`d?d`dafdce5d d`d?d`dafdce4dd`dd`dafdde5dd`dd`dafdde4dd`d?d`dafdee5dd`d?d`dafdee4d d`ddfdafdge5d d`ddfdafdge4d d`d?dfdafdhe5d d`d?dfdafdhe4dd`ddfdafdie5dd`ddfdafdie4dd`d?dfdafdje5dd`d?dfdafdje4d d`ddkdafdli e5d d`ddkdafdle4d d`d?dkdafdme5d d`d?dkdafdme4dd`ddkdafdne5dd`ddkdafdne4dd`d?dkdafdoe5dd`d?dkdafdoe4d d`ddpdafdqe5d d`ddpdafdqe4d d`d?dpdafdre5d d`d?dpdafdre4dd`ddpdafdse5dd`ddpdafdse4ddfddpdafdse5ddfddpdafdse4dd`d?dpdafdte5dd`d?dpdafdti e4dd`ddudafdve4d d`ddwdafdxe4dd`ddwdafdxe5dd`ddwdafdye4dd`d?dwdafdze4ddfddwdafd{e5ddfddwdafd|e4d d}dd~dafde5d d}dd~dafde4dd`dd~dafde4ddfdd~dafde5ddfdd~dafde4dd}dd~dafde5dd}dd~dafde4dd`dddffde5dd`dddffde4d?d`dddafdi e5d?d`dddafde4d?d`d?ddafde5d?d`d?ddafde4d?d`dddafde5d?d`dddafde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`ddd`fde5d?d`ddd`fde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfdi e4d?d`dddffde5d?d`dddffde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`dddafde5d?d`dddafde4d?d`dddafde5d?d`dddafde4d?d`dddfde5d?d`dddfde4d?d`ddd`fde5d?d`ddd`fde4d?d`dddffdi e5d?d`dddffde4dAd`dd`dafde5dAd`dd`dafde4dAd`d?d`dafde5dAd`d?d`dafde4dAd`ddfdafde5dAd`ddfdafde4dAd`d?dfdafde5dAd`d?dfdafde4dAd`ddkdafde5dAd`ddkdafde4dAd`d?dkdafde5dAd`d?dkdafde4dAd`ddpdafde5dAd`ddpdafde4dAd`dddfde4dAd`dddffdi e5dAd`dddffde4dAd`d?dpdafde5dAd`d?dpdafde4dEd`dddafde5dEd`dddafde4dEd`dddfde5dEd`dddfde4dEd`dddfde5dEd`dddfde4dEd`dddafde5dEd`dddafde4dGd`ddpdafdse5dGd`ddpdafdse4dGd`dddafde5dGd`dddafde4dKd`dddafde5dKd`dddafdZb ecd ebD                       Zdg dZe efejg        dd          s e&dd           ddZhddǄZid	dʄZji Zki Zld
d΄Zm G dτ de          Znedeoepgef         ZqddԄZrddքZsddڄZtereeuef         ZvneZv G dۄ dev          Zwekew_k        elew_l         e+j`                    D ]M\  ZxZyeyz                    ddݦ          Zy e{ewdey ekex         d                     e{ewdey elex                    N[k[l[x[y G d dew          Z|e|Z} G d dej                  Z~i dde4ddd`dfdde4dddpdfdde4dddd?fdde4dAddpdfdde4dAddd?fdde4dd?d~dfdde4dddwdfdde4dd?dwdfdde4ddAd~dfdde4d?dddfdde4d?ddd fdde4d?ddd?fdde4dEdddfdde4dGdddfdde4dKdddfdde5dd?d~dfdde5dddwdfde5dd?dwdfde5ddAd~dfdZdd Z G d dej                  ZddZ ej        e~j        e~eh            ej        e~j        e            ej        e~j        e            ej        e~j        ddg            ej        e~j        d           dS (      )annotationsN)IteratorMutableMapping)Fraction)NumberRational)IOTYPE_CHECKINGAnyCallableNoReturncast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32beo8)	deprecate)StrOrBytesPath)is_pathTYPES)BufferIntegralLikeF   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  r?   ).0kvs      O/var/www/html/ai-engine/env/lib/python3.11/site-packages/PIL/TiffImagePlugin.py
<dictcomp>rD      s    BBBA1BBB    r   r?   )1z1;I)rG   z1;IR)rG   rG   )rG   z1;R)r'   )LzL;2I)rH   zL;2IR)rH   zL;2)rH   zL;2R)r+   )rH   zL;4I)rH   zL;4IR)rH   zL;4)rH   zL;4R)r3   )rH   zL;I)rH   zL;IR)rH   rH   )rH   zL;R)   )I;16zI;12)   )rJ   rJ   )I;16BrL   )rJ   zI;16R)II;16S)rM   I;16BS)r)   )    )FF;32F)rQ   F;32BF)rM   zI;32N)rM   I;32S)rM   I;32BS)r3   r3   )LArV   )r3   r3   r3   )RGBrW   )rW   zRGB;R)r3   r3   r3   r3   )RGBArX   r   )rW   RGBX)r3   r3   r3   r3   r3   r   r   )rW   RGBXX)r3   r3   r3   r3   r3   r3   )r   r   r   )rW   RGBXXX)rX   RGBa)r   r   )rX   RGBaX)r   r   r   )rX   RGBaXX)r'   r   )rX   RGBAX)r'   r   r   )rX   RGBAXX)i  )rK   rK   rK   )rW   zRGB;16L)rW   zRGB;16B)rK   rK   rK   rK   )rX   zRGBA;16L)rX   zRGBA;16B)rW   zRGBX;16L)rW   zRGBX;16B)rX   zRGBa;16L)rX   zRGBa;16B)PzP;1)rc   zP;1R)rc   zP;2)rc   zP;2R)rc   zP;4)rc   zP;4R)rc   rc   )rc   PX)PAre   )rc   zP;R)CMYKrf   )rf   CMYKX)rf   CMYKXX)rf   zCMYK;16L)rf   zCMYK;16B)LABri   c              #  @   K   | ]}t          |d                    V  dS )r+   N)len)r@   key_tps     rC   	<genexpr>rm     s,      AAV#fQi..AAAAAArE   )   MM *   II* s   MM* s   II *s   MM +s   II+ libtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rI   prefixbytesreturnboolc                $    | d d         t           v S Nr+   )PREFIXESrq   s    rC   _acceptry   "  s    "1":!!rE   valfloat | Fraction | IFDRationalmax_valint!tuple[IntegralLike, IntegralLike]c                    t          t          |                     dk    }t          |rd| z  n|                               |          }|r|d d d         n|S )Nr   )absfloatIFDRationallimit_rational)rz   r|   invn_ds       rC   _limit_rationalr   &  s[     eCjj//A
C
-a#gg#
.
.
=
=g
F
FC$3ttt99$rE   r   min_valc                J   t          |           }|j        |j        f}t          d |D                       |k     rt	          | t          |                    }t          d |D                       }t          |          |k    rt	          |d         |d         z  |          }|S )Nc              3  4   K   | ]}t          |          V  d S Nr   r@   is     rC   rm   z)_limit_signed_rational.<locals>.<genexpr>4  s(      
!
!588
!
!
!
!
!
!rE   c              3  4   K   | ]}t          |          V  d S r   r   r   s     rC   rm   z)_limit_signed_rational.<locals>.<genexpr>7  s(      ,,1eAhh,,,,,,rE   r   r   )r   	numeratordenominatorminr   r   tuplemax)rz   r|   r   fracr   	n_d_floats         rC   _limit_signed_rationalr   .  s     C==D-1^T=M-MC

!
!S
!
!
!!!G++c3w<<00,,,,,,,I
9~~ilYq\97CCJrE   opstrr   c                     d fd}|S )	Nselfr   argstuple[float, ...]rs   bool | float | Fractionc                4     t          | j                  | S r   )getattr_val)r   r   r   s     rC   delegatez_delegate.<locals>.delegateF  s     &wty"%%t,,rE   )r   r   r   r   rs   r   r?   )r   r   s   ` rC   	_delegater   E  s(    - - - - - -
 OrE   c                     e Zd ZdZ	 dZ	 d8d9d
Zed:d            Zed;d            Zd<dZ	d=dZ
d;dZd>dZd?dZd@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d0          Z$ ed1          Z% ed2          Z& ed3          Z' ed4          Z( ed5          Z) e*e+d6          r ed6          Z,d7S d7S )Ar   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_denominatorr   r   valuer{   r   r}   rs   Nonec                H   |  t          |t                    r&|j        | _        |j        | _        |j        | _        dS t          |t                    r|j        | _        |j        | _        n0t          rt          t          |          | _        n|| _        || _        |dk    rt          d          | _        dS |dk    rt          |          | _        dS t          |          |k    r$t          t          |          |          | _        dS t          ||z            | _        dS )z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )
isinstancer   r   r   r   r   r   r   r
   r   r    r   r}   )r   r   r   s      rC   __init__zIFDRational.__init__\  s    	#e[)) 	#oDO % 1D
DIFeX&& 	,#oDO % 1D ("&|U";";"' +D!eDIIIA DIIIZZ5   U[99DIII !455DIIIrE   r    c                    | j         S r   )r   r   s    rC   r   zIFDRational.numerator~  s
    rE   c                    | j         S r   )r   r   s    rC   r   zIFDRational.denominator  s      rE   max_denominatortuple[IntegralLike, int]c                    | j         dk    r| j        | j         fS t          | j        t                    sJ | j                            |          }|j        |j         fS )z

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )r   r   r   r   r   limit_denominator)r   r   fs      rC   r   zIFDRational.limit_rational  s^     q  >4#333$)X.....I''88{AM))rE   r   c                D    t          t          | j                            S r   )r   r   r   r   s    rC   __repr__zIFDRational.__repr__  s    5##$$$rE   c                4    | j                                         S r   )r   __hash__r   s    rC   r   zIFDRational.__hash__  s    y!!###rE   otherobjectrt   c                    | j         }t          |t                    r|j         }t          |t                    rt          |          }||k    S r   )r   r   r   r   )r   r   rz   s      rC   __eq__zIFDRational.__eq__  sI    ie[)) 	JEeU## 	**Ce|rE   %list[float | Fraction | IntegralLike]c                *    | j         | j        | j        gS r   )r   r   r   r   s    rC   __getstate__zIFDRational.__getstate__  s    	4?D,=>>rE   statec                    t                               | d           |\  }}}t          |t          t          f          sJ || _        t          rt          t          |          | _	        n|| _	        t          |t                    sJ || _        d S )Nr   )r   r   r   r   r   r   r
   r   r    r   r}   r   )r   r   r   r   r   s        rC   __setstate__zIFDRational.__setstate__  s    T1%%%).&j,$ 122222	 	)"<<<DOO(DO,,,,,,(rE   __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__NrF   )r   r{   r   r}   rs   r   )rs   r    rs   r}   )r   r}   rs   r   rs   r   )r   r   rs   rt   )rs   r   )r   r   rs   r   )-__name__
__module____qualname____doc__	__slots__r   propertyr   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   r   r   hasattrr   r   r?   rE   rC   r   r   N  s        
 7I IJ 6  6  6  6  6D    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&&' 'rE   ImageFileDirectory_v2idxsize$Callable[[_LoaderFunc], _LoaderFunc]c                     d fd}|S )Nfunc_LoaderFuncrs   c                    ddl m} | j                            d          r&| j        dd                              dd          |<   | ft
          <   | S )Nr   r   load_r-   _ )r   r   r   
startswithreplace_load_dispatch)r   r   r   r   s     rC   	decoratorz#_register_loader.<locals>.decorator  sd    ######=##G,, 	=qrr*223<<E#J"DjsrE   )r   r   rs   r   r?   )r   r   r   s   `` rC   _register_loaderr     s/           rE   2Callable[[Callable[..., Any]], Callable[..., Any]]c                     d fd}|S )Nr   Callable[..., Any]rs   c                    | t           <   | S r   )_write_dispatch)r   r   s    rC   r   z#_register_writer.<locals>.decorator  s    #rE   )r   r   rs   r   r?   )r   r   s   ` rC   _register_writerr     s)          rE   idx_fmt_nametuple[int, str, str]r   c                    ddl m} | \  }}|||<   t          j        d           	 ddfd}|ft          |<   fdt
          |<   d S )Nr   r   =Tr   r   datarr   
legacy_apirt   rs   tuple[Any, ...]c                X    |                      t          |          z    |          S r   )_unpackrk   )r   r  r  fmtr   s      rC   basic_handlerz&_register_basic.<locals>.basic_handler  s/     ||s4yyD07#77>>>rE   c                J     d                      fd|D                       S )NrE   c              3  D   K   | ]}                     |          V  d S r   )_pack)r@   r   r  r   s     rC   rm   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s1      <<EC''<<<<<<rE   join)r   valuesr  s   ` rC   <lambda>z!_register_basic.<locals>.<lambda>  s0    <<<<<V<<<<< rE   T)r   r   r  rr   r  rt   rs   r  )r   r   structcalcsizer   r   )r   r   r   namer  r  r   s        @@rC   _register_basicr    s    !NCdE#J?9s99%%D FJ? ? ? ? ? ? ? ?
 -N3   OCrE   c                     e Zd ZU dZi Zded<   i Zded<   	 	 	 d^d_dZ ed           Z	 ed           Z
ed`d            Zej        dad            ZdbdZdcdZdddZdedZdfd!Zdgd#Zdhd$Zdid&Zdjd'Zdkd)Zdld-Zdmd/Z e eeej        d0d1fej        d2d3fej        d4d5fej         d6d7fej!        d8d9fej"        d:d;fej#        d<d=fej$        d2d3fej%        d>d?fg	                      e&d@d@          dndodB            Z' e(d@          dpdD            Z) e&dEd@          dndqdF            Z* e(dE          drdH            Z+ e&dIdJ          	 dndsdL            Z, e(dI          dtdN            Z- e&dOd@          dndodP            Z. e(dO          dudQ            Z/ e&dRdJ          	 dndsdS            Z0 e(dR          dtdT            Z1dvdXZ2dwdYZ3dxdyd\Z4dzd]Z5dS ){r   a  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``.

    z"dict[int, tuple[int, _LoaderFunc]]r   zdict[int, Callable[..., Any]]r      II*     Nifhrr   rq   bytes | Nonegroup
int | Noners   r   c                .   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                   d         n#|                     d|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+   Qr3   r   rH   r+   F)ry   reprSyntaxError_prefixMM_endianII_bigtiffr  tagtyperesetr  next_legacy_api)r   r  rq   r  msgs        rC   r   zImageFileDirectory_v2.__init__G  s     s|| 	#CT#YYCCCCc"""!'!3vvRaR<2DLL\RDLL"Cc"""A"
')'

 }/DLLc!""g&&q))c3qrr7++A. 		
 !rE   c                    | j         S r   )r!  r   s    rC   r  zImageFileDirectory_v2.<lambda>n      4< rE   c                    | j         S r   )_offsetr   s    rC   r  zImageFileDirectory_v2.<lambda>o  r,  rE   rt   c                    | j         S r   )r)  r   s    rC   r  z ImageFileDirectory_v2.legacy_apiq  s    rE   r   r   c                $    d}t          |          )Nz"Not allowing setting of legacy api)	Exception)r   r   r*  s      rC   r  z ImageFileDirectory_v2.legacy_apiu  s    2nnrE   c                Z    i | _         i | _        i | _        i | _        d | _        d | _        d S r   )_tags_v1_tags_v2_tagdatar&  _nextr.  r   s    rC   r'  zImageFileDirectory_v2.resetz  s0    (*(**,
#'rE   r   c                :    t          t          |                     S r   )r   dictr   s    rC   __str__zImageFileDirectory_v2.__str__  s    4::rE   dict[str, Any]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 r?   )r   lookupr  r  )r@   coder   r   s      rC   rD   z/ImageFileDirectory_v2.named.<locals>.<dictcomp>  s@     
 
 
e OD$*--2E
 
 
rE   )itemsr   s   `rC   namedzImageFileDirectory_v2.named  s6    
 
 
 
#zz||
 
 
 	
rE   r}   c                n    t          t          | j                  t          | j                  z            S r   )rk   setr5  r4  r   s    rC   __len__zImageFileDirectory_v2.__len__  )    3t}%%DM(:(::;;;rE   tagr   c                    || j         vr?| j        |         }| j        |         }| j        |         \  }} || || j                  | |<   | j         |         }| j        rt          |t          t          f          s|f}|S r   )r4  r5  r&  r   r  r   r   rr   )r   rE  r  typr   handlerrz   s          rC   __getitem__z!ImageFileDirectory_v2.__getitem__  s    dm##=%D,s#C /4MD'dDO<<DImC ? 	:cE5>#B#B 	&C
rE   r   c                &    || j         v p|| j        v S r   )r4  r5  r   rE  s     rC   __contains__z"ImageFileDirectory_v2.__contains__      dm#;sdm';;rE   c                >    |                      ||| j                   d S r   )_setitemr  )r   rE  r   s      rC   __setitem__z!ImageFileDirectory_v2.__setitem__  s     c5$/22222rE   r  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 r   )r   r   r@   rB   s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s,      BBaz![11BBBBBBrE   c              3  "   K   | ]
}|d k    V  dS r   Nr?   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s&      66!qAv666666rE   c              3  @   K   | ]}t          |t                    V  d S r   )r   r}   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      <<As++<<<<<<rE   c              3  6   K   | ]}d |cxk    odk     nc V  dS )r   r!   Nr?   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s6      ::a1>>>>E>>>>::::::rE   c              3  6   K   | ]}d |cxk     odk     nc V  dS )i i   Nr?   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s>      BBaX1111E1111BBBBBBrE   c              3  "   K   | ]
}|d k    V  dS rU  r?   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s&      ":":a16":":":":":":rE   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      >>!Au-->>>>>>rE   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rW  rE   c              3  @   K   | ]}t          |t                    V  d S r   )r   rr   rS  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  r\  rE   c                h    g | ]/}t          |t                    r|                    d d          n|0S )asciir   )r   r   encoderS  s     rC   
<listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  sJ        1;1c0B0BI),,,  rE   c                Z    g | ](}t          |t                    rt          |          n|)S r?   )r   r}   r   rS  s     rC   rb  z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  s1    LLL*Q"4"4;eAhhh!LLLrE   c              3  B   K   | ]}                     |          V  d S r   )cvt_enum)r@   r   infos     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s/      DDE4==//DDDDDDrE   r   zMetadata Warning, tag z had too many entries: z, expected 1r   )r   rr   r   r   r=  r  r   r&  type	UNDEFINEDallRATIONALSIGNED_RATIONALSHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEr8  r   r3  r4  lengthrk   
ValueErrorwarningswarn)	r   rE  r   r  	basetypesr  is_ifddestrf  s	           @rC   rO  zImageFileDirectory_v2._setitem  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 r   )r4  popr3  r5  rK  s     rC   __delitem__z!ImageFileDirectory_v2.__delitem__  sP    #t$$$#t$$$#t$$$$$rE   Iterator[int]c                n    t          t          | j                  t          | j                  z            S r   )iterrB  r5  r4  r   s    rC   __iter__zImageFileDirectory_v2.__iter__  )    C&&T]););;<<<rE   r  r  r  c                <    t          j        | j        |z   |          S r   )r  unpackr#  )r   r  r  s      rC   r  zImageFileDirectory_v2._unpack  s    }T\C/666rE   r  c                6    t          j        | j        |z   g|R  S r   )r  packr#  )r   r  r  s      rC   r
  zImageFileDirectory_v2._pack  s!    {4<#-77777rE   HshortrH   longbzsigned bytehzsigned shortlzsigned longr   r   ddoubler  long8r   Tc                    |S r   r?   r   r  r  s      rC   	load_bytezImageFileDirectory_v2.load_byte      rE   bytes | int | IFDRationalc                    t          |t                    rt          |          }t          |t                    rt          |f          }|S r   )r   r   r}   rr   r   r  s     rC   
write_bytez ImageFileDirectory_v2.write_byte  sC    dK(( 	t99DdC   	"$>>DrE   r'   c                l    |                     d          r
|d d         }|                    dd          S )N    r   zlatin-1r   )endswithdecoder  s      rC   load_stringz!ImageFileDirectory_v2.load_string  s7    == 	9D{{9i000rE   str | bytes | intc                    t          |t                    rt          |          }t          |t                    s|                    dd          }|dz   S )Nr`  r   r  )r   r}   r   rr   ra  r   r   s     rC   write_stringz"ImageFileDirectory_v2.write_string%  sP     eS!! 	JJE%'' 	5LL)44Eu}rE   r-   r3   )tuple[tuple[int, int] | IFDRational, ...]c           
         |                      t          |          dz   d|          }dfdt          fd	t          |d d d
         |dd d
                   D                       S )Nr+   rH   ar}   r  rs   tuple[int, int] | IFDRationalc                0    r| |fnt          | |          S r   r   r  r  r  s     rC   combinez4ImageFileDirectory_v2.load_rational.<locals>.combine4       '>Aq66[A->->>rE   c              3  6   K   | ]\  }} ||          V  d S r   r?   r@   numdenomr  s      rC   rm   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>7  3      VVZS%WWS%((VVVVVVrE   r'   r   r  r}   r  r}   rs   r  r  rk   r   zipr   r  r  valsr  s     ` @rC   load_rationalz#ImageFileDirectory_v2.load_rational.       ||s4yyA~000$77	? 	? 	? 	? 	? 	? VVVV3tCCaCy$qtRSt*;U;UVVVVVVrE   r   c                F     d                      fd|D                       S )NrE   c              3  P   K   | ] } j         d gt          |d          R  V  !dS )2Ll    N)r
  r   r@   r   r   s     rC   rm   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>;  sR       
 
DHJDJt?odI>>???
 
 
 
 
 
rE   r  r   r  s   ` rC   write_rationalz$ImageFileDirectory_v2.write_rational9  s?    xx 
 
 
 
LR
 
 
 
 
 	
rE   r1   c                    |S r   r?   r  s      rC   load_undefinedz$ImageFileDirectory_v2.load_undefined?  r  rE   c                    t          |t                    rt          |          }t          |t                    r#t          |                              dd          }|S )Nr`  r   )r   r   r}   r   ra  r  s     rC   write_undefinedz%ImageFileDirectory_v2.write_undefinedC  sQ    e[)) 	JJEeS!! 	:JJ%%gy99ErE   
   c           
         |                      t          |          dz   d|          }dfdt          fd	t          |d d d
         |dd d
                   D                       S )Nr+   r  r  r}   r  rs   r  c                0    r| |fnt          | |          S r   r  r  s     rC   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combineQ  r  rE   c              3  6   K   | ]\  }} ||          V  d S r   r?   r  s      rC   rm   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>T  r  rE   r'   r   r  r  r  s     ` @rC   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalK  r  rE   c                F     d                      fd|D                       S )NrE   c           	   3  R   K   | ]!} j         d gt          |dd          R  V  "dS )2lii   N)r
  r   r  s     rC   rm   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>X  sX       
 
 DJtP4T9hOOPPP
 
 
 
 
 
rE   r  r  s   ` rC   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationalV  s?    xx 
 
 
 

 
 
 
 
 	
rE   fp	IO[bytes]r   c                    |                     |          }t          |          |k    r%d| dt          |           d}t          |          |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readrk   OSError)r   r  r   retr*  s        rC   _ensure_readz"ImageFileDirectory_v2._ensure_read]  sj    ggdmms88tL%)L L?B3xxL L L  #,,
rE   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  r3   r  r'   r   HHQ8s   HHL4srI   unknownztag:  (
) - type: )z%s - unsupported type %sr+   rH   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag 
 - value: rP   <table: %d bytes>)r'  tellr.  r%  r  r  ranger   r=  r  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readrk   ru  rv  r5  r&  r  r(  r  r   )r   r  	tag_countr   rE  rG  countr  tagnametypnamer*  	unit_sizerH  r   hereoffsets                   rC   loadzImageFileDirectory_v2.loadg  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   r  c                D   |                      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           6|                    ||||                      d          |f           t          |          dz   dz  dz  z  |||         \  }}}}}|rC| j        |         \  }}fd || || j                  D             } | j        |         | g|R  }n3|                      d|                      d|          d         z             }|||||f||<   |D ]]\  }}}}}t                              d|||t          |          t          |                     ||                      d||||          z  }^|dz  }|D ]$\  }}}}}||z  }t          |          dz  r|dz  }%|S )Nr  rI   r+   zTag %s, Type: %s, Value: %sr  s   II*    s   MM *   )r  ifdr  zsave: r  r  r  r  rK   r  r   r  rE   rH   r'   c                    g | ]}|z   S r?   r?   )r@   rz   r  s     rC   rb  z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>  s    WWW3#,WWWrE   r   z%s %s %s %s %sr  s       )!r
  rk   r4  sortedr?  STRIPOFFSETSr&  r  r  r  r   rn  r   r8  r#  r   tobytesr   r   r=  r  r  r   r  r   rr  rq  rh  appendljustr   r  r  )r   r  resultentriesstripoffsetsrE  r   rG  rx  r  r  r  ifd_tag	ifd_valuer  r  r  r*  r  r   rH  s    `                   rC   r  zImageFileDirectory_v2.tobytes  sv   CT]!3!344<>#f++%DM(:(:R(??!C !!4!4!6!677 (	3 (	3JCl"""7||,s#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 N $ 3C 8gWWWW''$do2V2VWWW0t+C0????

3S%(@(@(Cf(LMM$'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}  %rE   c                6   |                                 dk    r2|                    | j        |                     ddd          z              |                                 }|                     |          }|                    |           |t          |          z   S )Nr   HL*   r3   )r  writer!  r
  r  rk   )r   r  r  r  s       rC   savezImageFileDirectory_v2.save  s}    7799>>HHT\DJJtR$;$;;<<<f%%
F##rE   )r  NN)r  rr   rq   r  r  r  rs   r   )rs   rt   )r   rt   rs   r   rs   r   r   )rs   r:  r   rE  r}   rs   r   rE  r   rs   rt   rE  r}   r   r   rs   r   )rE  r}   r   r   r  rt   rs   r   )rE  r}   rs   r   rs   r}  )r  r   r  rr   rs   r  )r  r   r  r   rs   rr   r  )r  rr   r  rt   rs   rr   )r  r  rs   rr   )r  rr   r  rt   rs   r   )r   r  rs   rr   )r  rr   r  rt   rs   r  )r  r   rs   rr   )r   r  rs   rr   )r  r  r   r}   rs   rr   )r  r  rs   r   rY   )r  r}   rs   rr   )r  r  rs   r}   )6r   r   r   r   r   __annotations__r   r   r   rq   r  r  setterr'  r9  r@  rC  rI  rL  rP  rO  r|  r  r  r
  listmapr  r   rl  rn  SIGNED_BYTErm  ro  FLOATrp  IFDLONG8r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r?   rE   rC   r   r     s        : :x :<N;;;;57O7777 )# 	%! %! %! %! %!N X//00FX//00F      X     ( ( ( (   	
 	
 	
 	
< < < <	 	 	 	< < < <3 3 3 3N N N N`% % % %
= = = =7 7 7 78 8 8 8 	Dg.V,%sM:&^<%sM:g.#x0sF+g.
	
 	
  " a     a    a1 1 1 1 1
 a    a.2W W W W W a
 
 
 

 a     a    b!.2W W W W W b
 
 
 
   A A A AFM M M M M^$ $ $ $ $ $rE   r   r   r   write_c                       e Zd ZU dZd fdZ ed           Z ed	           Zd
ed<   	 e	dd            Z
ddZddZddZd dZd!dZd"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
    r   r   kwargsrs   r   c                H     t                      j        |i | d| _        d S )NT)superr   r)  )r   r   r  	__class__s      rC   r   zImageFileDirectory_v1.__init__!  s-    $)&)))rE   c                    | j         S r   )r3  r   s    rC   r  zImageFileDirectory_v1.<lambda>%  s     rE   c                    | j         S r   )r5  r   s    rC   r  zImageFileDirectory_v1.<lambda>&  s    DM rE   zdict[int, int]r&  originalr   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`

        rx   )rq   r5  r&  r(  )clsr  r  s      rC   from_v2zImageFileDirectory_v1.from_v2,  s:     c)))(&=
rE   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`

        rx   )r   rq   r8  r5  r&  r4  )r   r  s     rC   to_v2zImageFileDirectory_v1.to_v2>  sN     $4;777DM**4<((DM**
rE   rE  r   rt   c                &    || j         v p|| j        v S r   )r3  r5  rK  s     rC   rL  z"ImageFileDirectory_v1.__contains__O  rM  rE   r}   c                n    t          t          | j                  t          | j                  z            S r   )rk   rB  r5  r3  r   s    rC   rC  zImageFileDirectory_v1.__len__R  rD  rE   r}  c                n    t          t          | j                  t          | j                  z            S r   )r  rB  r5  r3  r   s    rC   r  zImageFileDirectory_v1.__iter__U  r  rE   r   c                >    dD ]}|                      |||           d S N)FT)rO  )r   rE  r   r  s       rC   rP  z!ImageFileDirectory_v1.__setitem__X  s4    ' 	2 	2JMM#uj1111	2 	2rE   c           	        || j         vrQ| j        |         }| j        |         }| j        |         \  }}dD ]$}|                     | || ||          |           %| j         |         }t          |t          t          f          s|f}|S r  )r3  r5  r&  r   rO  r   r   rr   )r   rE  r  rG  r   rH  legacyrz   s           rC   rI  z!ImageFileDirectory_v1.__getitem__\  s    dm##=%D,s#C /4MD'' H Hc774v#>#>GGGGmC #u~.. 	&C
rE   )r   r   r  r   rs   r   )r  r   rs   r  )rs   r   r  r   r   r  r  )r   r   r   r   r   r   tagstagdatar  classmethodr  r  rL  rC  r  rP  rI  __classcell__r  s   @rC   r  r    s         $            8..//Dh1122G !   ["   "< < < << < < <= = = =2 2 2 2
 
 
 
 
 
 
 
rE   r  c                       e Zd ZdZdZdZ	 dd fdZddZedd            Z	ddZ
ddZddZd dZd! fdZddZddZd!dZddZ xZS )"TiffImageFileTIFFz
Adobe TIFFFNr  StrOrBytesPath | IO[bytes]filenamestr | bytes | Noners   r   c                X    |  	 |  	 t                                          ||           d S r   )r  r   )r   r  r(  r  s      rC   r   zTiffImageFile.__init__v  s7    
 	*5'"X&&&&&rE   c                   | j                             d          }|d         dk    r|| j                             d          z  }t          |          | _        | 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 filer3   r'   r  r   Nz*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r  r  r   tag_v2r(  _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r  _seek)r   r  s     rC   _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rE   r}   c                D   | j         }||                                 }|                     t          | j                             | j         1|                     |                                 dz              | j         1|                     |           | j         J | j         S )Nr   )r2  r  r3  rk   r1  r  )r   current_n_framescurrents      rC   n_frameszTiffImageFile.n_frames  s    >#iikkGJJs4?++,,,.(

499;;?+++ .(IIg~)))~rE   framec                    |                      |          sdS |                     |           | j        3| j        j        | j        k    s| j        j        | j        k    rd| _        dS dS dS )z%Select a given frame as current imageN)_seek_checkr3  _imimr   
_tile_sizemode)r   r9  s     rC   r  zTiffImageFile.seek  ss    && 	F

58GLDO++tw|ty/H/H DHHH	  /H/HrE   c                Z   | j         | _        | j                                         t          | j                  |k    r| j        sd}t          |          t                              d|| j	        | j        | j                                                   | j        dk    rd}t          |          | 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    | j                            | j        |                    | j                            | j                   t$          | j        v r| j        t$                   | j        d<   nd| j        v r| j        d= |                                  t*                              | j                  x| _        | _        || _	        |                                  d S )	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sl            zUnable to seek to framezLoading tags, location: %sr   r   xmp)r0  r  r  rk   r1  r.  EOFErrorr  r  r/  rt  r  r  r,  r  r(  r2  is_animatedXMPrf  _reload_exifr  r  rE  r  _setup)r   r9  r*  s      rC   r3  zTiffImageFile._seek  sG   ( 	$/""e++; $3smm#LLK   {e##/ oo%GLL%%%O""4;///LL5tw||~~FFFKTW%%%{4?22  "k.{a!&4?##q((#';!#3 LLALL9 $/""e++: 	T_U+,,,!!!$+#{3/DIedi	% 3;;DKHHH48rE   c                    | j         S )zReturn the current frame number)r/  r   s    rC   r  zTiffImageFile.tell  s
    |rE   dict[int, dict[str, bytes]]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   blocksrz   idnr   r  s          rC   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$$ rE   Image.core.PixelAccess | Nonec                    | j         r| j        r|                                 S t                                                      S r   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    rC   r  zTiffImageFile.load  s;    9 	(. 	(%%'''ww||~~rE   c                    | j         Ht          j        | j                   t          j                            | j        | j                  | _        t          j        	                    |            d S r   )
r<  r   _decompression_bomb_checkr>  corenewr?  r=  r   load_preparer   s    rC   r]  zTiffImageFile.load_prepare   sU    8+DO<<<jnnTY@@DG((.....rE   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)rC  !_close_exclusive_fp_after_loadingr  r  getexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   rJ  Orientationr,  )r   exifkeys      rC   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3rE   c                V   t           j                             |            |                                  t          | j                  dk    sd}t          |          | j        d         d         }| j        d         d         }	 t          | j        d          o| j                                        }t          | j        d          r| j        	                                 n# t
          $ r d}Y nw xY w|r:t          |t                    sJ t          |          }||d<   t          |          }t          j        | j        d	|| 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  r]  rk   rV  r  r   r  rj  rk  r   r   r  _getdecoderr?  decoderconfigsetimager=  rt  _exclusive_fprC  r  r  r  rm  r  r  readonlyrh  close)r   r*  extentsr   r  	args_listdecodereclose_self_fprR  errs              rC   rX  zTiffImageFile._load_libtiff  s    	49~~""(C#,, )A,q/y|A

	(++@0@0@B tw((   	 	 	 BBB	
  	$dE*****T

IIaL##D#DIy$@RSS	&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! !C0/C0E- -
F7F		F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                               | j                             t                    }| j                             t                    }t          |t                     rt          |t                     sd}t#          |          ||f| _        | j                             t&          j        j                  }|dv r
||f| _        n	||f| _        t                              d| j                   | j                             t0          d          }t3          |          dk    r,t5          |          t7          |          cxk    rdk    rn nd}| j                             t8          d          }| j                             t:          d          }	|dv rd}
n|dk    rd}
nd}
|
t3          |	          z  }
t3          |          }| j                             t<          | j        dk    r|dv rdnd          }|t>          k    r,t                               d|           d}tC          |          ||k     r|d|         }n||k    r|dk    r||z  }t3          |          |k    rd}tC          |          | j         j"        |||||	f}t                              d|           	 tF          |         \  | _$        }n># tJ          $ r1}t                              d           d}tC          |          |d}~ww xY wt                              d|           t                              d| j&                   | j        | j'        d <   | j                             tP          d          }| j                             tR          d          }|rt|rr| j                             tT                    }|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 | _+        tX          p
| j        d%k    | _-        | j-        r|d!k    rH|dd         dz   |dd         z   }t                              d|           tF          |         \  | _$        }|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+        0                    tc          j2        d.dd||fd|                     ntf          | j         v sth          | j         v rtf          | j         v r5| j         tf                   }| j                             tj          |          }|}n| j         th                   }| j                             tl                    }| j                             tn                    }t          |t                     rt          |t                     sd/}t#          |          |}|D ]}||z   |k    r|tq          |          z  d0z  }nd}|}| j        d!k    r||         }||
z  }|t!          |          df}| j+        0                    tc          j2        | j        ||t7          ||z   |          t7          ||z   |          f||                     ||z   }||k    rd||z   }}||k    r	dx}}|dz  }n+t                              d1           d}tC          |          tr          | j         v r| j         tr                   | j'        d2<   | j&        d3v rKd4 | j         tt                   D             }tw          j<        d5d6=                    |                    | _>        dS dS )7z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r0   r/   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szInvalid dimensions)r-   r/   r1   r3   z
- size: %srF   r?   )r'   r/   r3   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&   rJ   I;16Nz;16Bz;16Nz;16Lr2   rW   Frl  zInvalid tile dimensionsr3   z- unsupported data organizationicc_profilerc   re   c                2    g | ]}t          |d z            S r#   r   )r@   r  s     rC   rb  z(TiffImageFile._setup.<locals>.<listcomp>Z  s"    CCCr!s(||CCCrE   RGB;LrE   )?r,  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr   r}   rt  r>  r   rJ  re  _sizer   SAMPLEFORMATrk   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr   rq   	OPEN_INFO_moder  r?  rf  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITrV  READ_LIBTIFFrW  r   r  r  r   _Tiler  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r&   r  palette) r   r*  photo	fillorderxsizeysizeorientationsample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelrg  rawmoderw  xresyresresunitxylayerr  offsetsr  w	tilewidthr  stridetile_rawmoder   r  s                                    rC   rF  zTiffImageFile._setupq  s    T[  ?C#,, -T[__[!-L-LM%)[__5I1%M%M"  :A>> ++EKOOIq11	&'''($*;<<<7???143MNNN'333.@P0Q0QRRR 
++,,%%% 	"Zs-C-C 	"&CS//!,koohm&?@@,&&DJJDJ\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  ]	# A~~"1"gns122w.-s333 '0n#
G
 &  !  !//&&99  !//&&99
 

%//.!33 $+UDK4FGAIY_YAue8LaQRSSTTTTT[((K4;,F,Ft{**+l3KOOL%88 +k2 KOOI66	KOOJ//!)S11 *As9K9K *3C$S//)! # #q55==Y/!3FFF&-22#*5>Li'F$c&kk15	  O)As1q5%00#a!eU2C2CD	    E::a!eqAEzz !	A
7#: LL:;;;-Cc""" $$'+{:'>DIm$ 9##CCT[-BCCCG'+GSXXg5F5FGGDLLL $#s   P+ +
Q&5,Q!!Q&r   )r  r'  r(  r)  rs   r   r  r   )r9  r}   rs   r   )rs   rH  )rs   rT  )r   r   r   formatformat_descriptionr`  r   r4  r   r8  r  r3  r  rS  r  r]  rh  rX  rF  r"  r#  s   @rC   r%  r%  q  s`       F%(-%
 (,' ' ' ' ' ' '   0 	 	 	 X		 	 	 	. . . .`      *     
/ / / /7 7 7 7*T& T& T& T&ljH jH jH jH jH jH jH jHrE   r%  rG   rH   rV   rc   re   rM   rT   rJ   rN   rQ   rR   rW   rZ   rX   rf   YCbCrri   rU   rL   rO   rS   )rO   rS   r=  Image.Imager  r  r(  str | bytesc                   	 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i }t=          | d          r| j                                        }i |tA          | di           }tB          tD          fD ]	}||v r||= 
t=          | d          rtF          tH          tJ          tL          tN          tP          fD ]n}|| j)        v rc|tL          k    r.| j)        j        |         t2          j*        t2          j+        fvr||= D| j)        |         ||<   | j)        j        |         |j        |<   o|                    d| j                            d                    }|r
||tX          <   tZ          dftH          dftJ          dftH          dftJ          dftF          dft\          dft^          dft`          dftb          dff
D ]\  }}||v r||         ||<   |                    d          }|r*d|tF          <   |d         |tH          <   |d
         |tJ          <   |dk    r4||td          <   tg          |          d
k    rtg          |          |th          <   |
||tj          <   |d
k    r
||tD          <   tl          |vr||tl          <   n| j        dv r|tl                   dk    r| j        dk    rr| 7                                }|                                }|Gtq          |j9                  D ]0}tq          |j:                  D ]}|||f         d k    rdnd |||f<   1|} ntw          j<        |           } | j        d!v rw| j=        >                    d"d#          }g }tg          |          d$z  }tq          d$          D ].} |d% ||| z  || d
z   z           D             z  }|dgd&|z
  z  z  }/||t~          <   |t                   |t                   }"}!tg          |          |!|d         z  d'z   d(z  z  }#t          |vrl|rV|                    d)t                    }$|#dk    rd
nt          |$|#z  |"          }%|dk    rt          |%d'z   d(z  d(z  |"          }%n|"}%|%dk    rd
}%|%|t          <   |#dk    rd
n|#|t                   z  }&|"|t                   z   d
z
  |t                   z  }'|&d*k    rt2          jC        |j        t          <   |&f|'d
z
  z  |#|"z  |&|'d
z
  z  z
  fz   |t          <   t          tq          d|&|'z  |&                    |t          <   t                              |d
          |t          <   | j        d+k    r>t          d,t          d-iK                                D ]\  }}(|L                    ||(           t          t          t          t          g})|rd.|v r[|d.         }*t          |*t                    r|*dk     s|*d/k    rd0}
t          |
          |dk    rd1}
t          |
          |*|t          <   t(                              d2           t(                              d3t          |K                                                     d}+t=          |d4          r@	 |T                    d           |U                                }+n# t          jW        $ r Y nw xY wi },|)t          t          t          t          t          t          gz  })td          |d         i}-t          j\        |K                                |K                                          D ]\  }}.|t2          j]        vrtA          t"          j^        d5d6          s/||j        v r|j        |         |,|<   nIt          |.t          t          t          t           f          srt3          ja        |          jb        }/|/r|/|,|<   ||-vrc||)vr_t          |.t                    r|.c                    d7d8          d9z   |-|<   t          |.t                    rt          |.          |-|<   |.|-|<   tD          |-v r9tg          |-tD                             d
k    r|-tD                   d         |-tD          <   t(                              d:t          |-K                                                     | j        d;v rd<}t-          |-K                                          }0|0e                                 |||+||0|,f}1t#          jf        | j        d=|1|          }2|2g                    | j=        d>| j        z              	 |2c                    t          ji                  d
d          \  }3}4|+s|j                    |4           |3rnE|3dk     rd@|3 dA}
t          |
          nT|)D ]}||= |k                    |          }5t          jl        | |t          jm        dd>| j        z   |5||#d
f          g           dB|v rt          | dB|           d S d S )CNzcannot write mode z as TIFFrx   r{  r&   r0   r2   r8   r4   r   r   tiffinforf  zTiffinfo Keys: %srE  r,  r  descriptionr}  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr|  r'   rF   )rG   rH   rG   r"   r  rW   r  r)   c                    g | ]}|d z  S r  r?   rS  s     rC   rb  z_save.<locals>.<listcomp>  s    MMMQSMMMrE   r#   r1   r3   
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: %srj  rp   Fr`  r   r  zConverted items: %s)rL   rJ   r~  rl  r[   Tzencoder error z when writing image file_debug_multipage)o	SAVE_INFOr?  r  r  r   encoderinfoencoderconfigrf  r  r   r}   WRITE_LIBTIFFr  r   r  r  rr   r   Exifr  r  r  r  r  r  r   rb  rc  r&  r1  r   rE  r   EXIFIFDr  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKrD  r,  rr  rh  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTr  rk   r  r  r  copyr  heightwidthr   invertr=  
getpaletter  r  
STRIP_SIZEr   rn  STRIPBYTECOUNTSr   r  COMPRESSION_INFO_REVr  r  REFERENCEBLACKWHITEr?  
setdefaultr  r  r  TILEBYTECOUNTSrt  JPEGQUALITYr  r  rj  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr[  r   r   r=  rg  ra  r   sort_getencoderrp  r   MAXBLOCKr  r  _saver  setattr)6r=  r  r(  r  rq   r  r  bitsextrarw  r*  r  r  r  r{  rl  rf  rf  rg  
legacy_ifdsupplied_tagsrE  iccr  r|  inverted_impxr  r  lutcolormapcolorsr   r  r  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr  r0  typesattsr   rg  r  r  encodererrcoder  r  s6                                                         rC   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	 Jr5 $V\\^^
?z?WR2%>%>?M 		 # # -c" r8 > 
 	> 	>C bi.((RY->s-CM&L . . &c**!y~CH')y'8'=CK$ //-])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~{122 A AA";#455 A A(*1a4C11S1a4A $$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!=#
 %''	/ 	/C NN3....J^DI l
##!),Ggs++ &w{{gmm/ oo%f$$M oo%&C3444[&"5"56662x   	


iikk*     	
 	
	 !.tAw7 $/#))++}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=II 0111	#NN9+=>>qrrBMGT  	 Q;;D7DDDC#,, 
  	 	CC"_UFRW$4fwPQ>RSST	
 	
 	
 [((&,,,,, )(sJ    
AAA(A1 1;B/.B/H))
H65H6)a8 8b
	b
c                     e Zd Zg dZh dZd7d8d
Zd9dZd9dZd9dZd:dZ	d;dZ
d<dZej        fd=dZd9dZd>dZd9dZd?dZd@d ZdAd!Zd<d"Zd<d#ZedBd'            ZdCd)ZdDd*ZdCd+ZdCd,ZdCd-ZdCd.Zd9d/Zd9d0Z dEd2Z!	 dFdGd5Z"d6S )HAppendingTiffWriter)r   r   r   r'   r+   r3   r   r   r'   r+   r3   r+   r3   r+   r'   r+   r3   >       	     r$   r%   Ffnr'  r\  rt   rs   r   c                   |  t          |          rN|| _        d| _        	 t          ||rdnd          | _        nQ# t
          $ r t          |d          | _        Y n0w xY wt          t          t                   |          | _        d| _        | j        	                                | _
        |                                  d S )NTzw+bzr+bF)r   r  close_fpopenr   r  r   r	   rr   r  	beginningsetup)r   r  r\  s      rC   r   zAppendingTiffWriter.__init__  s    2;; 		"DI DM)b3"9%%E:: ) ) )b%) "U)R((DF!DM

s   ; 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+   TFro   r  rn   r  zInvalid TIFF file header)r   r  r  osSEEK_SETwhereToWriteNewIFDOffsetoffsetOfNewPager  IIMMisFirst	setEndianRuntimeErrorskipIFDsgoToEnd)r   iimmr*  s      rC   r  zAppendingTiffWriter.setup  s    DNBK00048% 6;;q>>)	D 	DLF=  NN3]""NN3,Cs###rE   c                   | j         rd S | j                            | j                   | j                            d          }|sd S || j        k    rd}t          |          |                                 }|| j        z  }| j        J | 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       rC   finalizezAppendingTiffWriter.finalize  s    < 	F 	D()))v{{1~~ 	F49ECs###]]__
d**
,888D1222z"""JrE   c                V    |                                   |                                  d S r   )r'  r  r   s    rC   newFramezAppendingTiffWriter.newFrame  s     

rE   c                    | S r   r?   r   s    rC   	__enter__zAppendingTiffWriter.__enter__  s    rE   r   r   c                @    | j         r|                                  d S d S r   )r  rs  )r   r   s     rC   __exit__zAppendingTiffWriter.__exit__  s'    = 	JJLLLLL	 	rE   r}   c                D    | j                                         | j        z
  S r   )r   r  r  r   s    rC   r  zAppendingTiffWriter.tell  s    v{{}}t333rE   r  whencec                    |t           j        k    r
|| j        z  }| j                            ||           |                                 S )z
        :param offset: Distance to seek.
        :param whence: Whether the distance is relative to the start,
                       end or current position.
        :returns: The resulting position, relative to the start.
        )r  r  r  r   r  r  )r   r  r/  s      rC   r  zAppendingTiffWriter.seek  sB     R[  d**FFF###yy{{rE   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   rK   )r   r  r  SEEK_ENDr  r  rr   r  )r   pos	pad_bytess      rC   r   zAppendingTiffWriter.goToEnd)  s    Ar{###fkkmm rM	y2FLLy))***#v{{}}rE   endianr   c                n    || _         | j          d| _        | j          d| _        | j          d| _        d S )NrH   r  HHL)r5  longFmtshortFmt	tagFormat)r   r5  s     rC   r  zAppendingTiffWriter.setEndian3  sC    +(((;))) K,,,rE   c                ,   	 |                                  }|dk    r#| j                                        dz
  | _        d S | j                            |           |                                 }| j                            |dz  t          j                   )NTr   r+   rI   )r#  r   r  r  r  	readShortr  SEEK_CUR)r   r&  num_tagss      rC   r  zAppendingTiffWriter.skipIFDs9  s}    	4JQ040A-FKK
###~~''HFKK2r{333	4rE   r  r   c               6    | j                             |          S r   )r   r  r  s     rC   r  zAppendingTiffWriter.writeD  s    v||D!!!rE   
field_sizec                Z    	 dddd|         S # t           $ r d}t          |          w xY w)Nr  rH   r  )r'   r+   r3   zoffset is not supported)r  r  )r   r@  r*  s      rC   _fmtzAppendingTiffWriter._fmtG  sJ    	$ss++J77 	$ 	$ 	$+Cs###	$s    *c                    t          j        | j        |                     |          z   | j                            |                    \  }|S r   )r  r  r5  rB  r   r  )r   r@  r   s      rC   _readzAppendingTiffWriter._readN  sB    =K$))J///Z1H1H
 
 rE   c                ,    |                      d          S Nr'   rD  r   s    rC   r<  zAppendingTiffWriter.readShortT      zz!}}rE   c                ,    |                      d          S rv   rG  r   s    rC   r#  zAppendingTiffWriter.readLongW  rH  rE   bytes_writtenr  expectedc                H    | | |k    rd|  d| }t          |          d S d S )Nzwrote only z bytes but wanted )r  )rJ  rK  r*  s      rC   _verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_writtenZ  sC    $()B)BKKKKKCs### %$)B)BrE   r   c                    | j                             dt          j                   | j                             t          j        | j        |                    }|                     |d           d S )Nr+   )	r   r  r  r=  r  r  r  r8  rM  r   r   rJ  s      rC   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong`  sW    B$$$V[u%E%EFF""=!44444rE   c                   | j                             | t          j                   | j                             t          j        | j        |                     |          z   |                    }| 	                    ||           d S r   )
r   r  r  r=  r  r  r  r5  rB  rM  )r   r   r@  rJ  s       rC   _rewriteLastz AppendingTiffWriter._rewriteLaste  sq    ZK---Kdii
&;&;;UCC
 
 	""=*=====rE   c                .    |                      |d          S rF  rS  r  s     rC   rewriteLastShortz$AppendingTiffWriter.rewriteLastShortl        ***rE   c                .    |                      |d          S rv   rU  r  s     rC   rewriteLastLongz#AppendingTiffWriter.rewriteLastLongo  rW  rE   c                    | j                             t          j        | j        |                    }|                     |d           d S rF  )r   r  r  r  r9  rM  rP  s      rC   
writeShortzAppendingTiffWriter.writeShortr  s?    V[%F%FGG""=!44444rE   c                    | j                             t          j        | j        |                    }|                     |d           d S rv   )r   r  r  r  r8  rM  rP  s      rC   r$  zAppendingTiffWriter.writeLongv  s?    V[u%E%EFF""=!44444rE   c                r    |                                   | j        r| j                                         d S d S r   )r'  r  r   rs  r   s    rC   rs  zAppendingTiffWriter.closez  s6    = 	FLLNNNNN	 	rE   c                   |                                  }t          |          D ]O}t          j        | j        | j                            d                    \  }}}| j        |         }||z  }|dk    }|s1|                                 | j	        z   }	| 
                    |	           || j        v r| j                                        }
|r4|                     ||           | j                            |
dz              | j                            |	           |                     ||           | j                            |
           (|r%| j                            dt          j                   Qd S )Nr3   r+   )r<  r  r  r  r:  r   r  
fieldSizesr#  r  rY  Tagsr  _fixOffsetsr  r  r=  )r   r>  r   rE  
field_typer  r@  
total_sizeis_localr  cur_poss              rC   r%  zAppendingTiffWriter.fixIFD  s]   >>##x 	, 	,A%+]4>46;;q>>%R%R"CU4J#e+J!QH -4+??$$V,,,di&++-- )$$UJ777FKK!,,,,FKK'''$$UJ777FKK(((( ,Ar{+++/	, 	,rE   r  c                   t          |          D ]}|                     |          }|| j        z  }|dk    r|dk    r|dk    rd}t          |          |                     |           | j                            dt          j                   | 	                    t          j                   | j                            dt          j                   |                     ||           d S )Nr'   r!   r   znot implementedir3   )r  rD  r  r  rQ  r   r  r  r=  r[  r   rn  rS  )r   r  r@  r   r  r*  s         rC   ra  zAppendingTiffWriter._fixOffsets  s    u 	6 	6AZZ
++Fd**FQ6U??A::+C&s+++ ++F333C---...Ar{++++!!&*5555!	6 	6rE   isShortisLongc                F    |rd}n|rd}nd}|                      ||          S )Nr'   r+   r   )ra  )r   r  rg  rh  r@  s        rC   
fixOffsetszAppendingTiffWriter.fixOffsets  s=      	JJ 	JJJz222rE   N)F)r  r'  r\  rt   rs   r   r  )rs   r  )r   r   rs   r   r   )r  r}   r/  r}   rs   r}   )r5  r   rs   r   )r  r   rs   r}   )r@  r}   rs   r   )r@  r}   rs   r}   )rJ  r  rK  r}   rs   r   )r   r}   rs   r   )r   r}   r@  r}   rs   r   )r  r}   r@  r}   rs   r   )FF)r  r}   rg  rt   rh  rt   rs   r   )#r   r   r   r_  r`  r   r  r'  r)  r+  r-  r  r  r  r  r   r  r  r  rB  rD  r<  r#  staticmethodrM  rQ  rS  rV  rY  r[  r$  rs  r%  ra  rj  r?   rE   rC   r  r    s{         J(  D       2   0   
      4 4 4 4 /1k     - - - -- - - -	4 	4 	4 	4" " " "$ $ $ $          $ $ $ \$
5 5 5 5
> > > >+ + + ++ + + +5 5 5 55 5 5 5   
, , , ,86 6 6 6( AF	3 	3 	3 	3 	3 	3 	3rE   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_imagesr8  r   )r  r  r  r  r  r   r  r  r  r8  r  r  r  r)  )r=  r  r(  r  r  rm  cur_idxtfimsnfrr   s              rC   	_save_allrr    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)rq   rr   rs   rt   )rz   r{   r|   r}   rs   r~   )rz   r   r|   r}   r   r}   rs   r~   )r   r   rs   r   )r   r}   r   r}   rs   r   )r   r}   rs   r   )r   r   rs   r   )r=  r  r  r  r(  r  rs   r   )
__future__r   r  r  loggingrM  r  r  ru  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r   r   r   r    r   r   r   r   r   r   _binaryr   rL  r   rO  r   
_deprecater   _typingr   _utilr   r   r   r    	getLoggerr   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  	PREDICTORr  r  r  r  r  r  r  r  
JPEGTABLESr  r  r  r  r  r  r  rD  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATAr  r?  r  r  r   r  rw   r   r[  ry   r   r   r   r   r   r   rr   rt   r   r   r   r  r}   
_IFDv2Baser   r   r  r   r  r  ImageFileDirectoryr%  r  r  BytesIOr  rr  register_openr  register_saveregister_save_allregister_extensionsregister_mimer?   rE   rC   <module>r     sd  R # " " " " " 				       				   4 4 4 4 4 4 4 4       $ $ $ $ $ $ $ $ C C C C C C C C C C C C C C C C 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 | D!T2| D!T2	|
 D!T2| D!T2| D!T2
| D!T2
| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2|  D!T2!|" D!T2#|$ D!T2%|& D!T2'| |( D!T2)|* D!T2+|, D!T2-|. D!T2/|0 D!T21|2 D!T23|4 D!T25|6 D!T27|8 D!T29|: D!T2;|< D!T2=|> D!T2
?|@ D!T2
A|B D!T2
C|D D!T2
E|F D!T2G|H D!T2I| | |J D!UB!1K|L D!UB!1M|N D!UB!1O|P D!UB!3Q|R D!UB!2S|T D!UBU|V D!UBW|X D!UBY|Z D!UB[|\ D!UB]|^ D!UB_|` D!UBa|b D!UBc|d D!UBe|f D!VT"Lg|h D!VT"Li|j D!Y#^k| | |l D!Y#^m|n D!Y#%5o|p D!Y#%5q|r D!\2&(8s|t D!\2&(8u|v D!\4(/w|x D!\4(/y|z D!_f-/?{|| D!_f-/?}|~ D!'35F|@ D!'35FA|B D!\4(*:C|D D!\4(*:E|F D!_f-/@G|H D!_f-/@I|J D!'35GK|L D!'35GM| | |N D!\4(*:O|P D!\4(*:Q|R D!_f-/@S|T D!_f-/@U|V D!'35GW|X D!'35GY|Z D!\6*,<[|\ D!\6*,<]|^ D!\2&(:_|` D!\2&(:a|b D!%r*,@c|d D!%r*,@e|f D!%t,.Ag|h D!%t,.Ai|j D!%t,.Bk|l D!%t,.Bm|n D!%t,.Bo| | |p D!%t,.Bq|r D!T2s|t D!T2u|v D!T2w|x D!T2y|z D!T2{|| D!T2}|~ D!T2|@ D!T2A|B D!T2C|D D!T2E|F D!T2G|H D!T2I|J D!T2
K|L D!T2
M|N D!VT"KO|P D!VT"LQ| | |R D!VT"LS|T D!T2U|V D!T2W|X D!\2&(8Y|Z D!\2&(8[|\ D!_d+->]|^ D!_d+->_|` D!'02Da|b D!'02Dc|d D!%r*,@e|f D!%r*,@g|h D!T2
i|j D!T2
k|p D!Y#_q|r D!Y#_s|t D!Y#^u|v D!Y#^w| |	| cAAyAAAAA    wuz8$?? @I:B???" " " "% % % %   &    G' G' G' G' G'( G' G' G'T /=sBC	 	 	 	      $   S)JJJz$ z$ z$ z$ z$J z$ z$ z$z (6  $(7  % J JIC<<S!!DG!>4>>>#3Fq3IJJJG!?D??OC4HIIIIOS$X X X X X1 X X Xx + jH jH jH jH jHI' jH jH jH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$/+  	2n- n- n- n-b	H3 H3 H3 H3 H3"* H3 H3 H3V   >  M(- A A A  M(% 0 0 0  ,i 8 8 8  -.0A B B B  M(, 7 7 7 7 7rE   