
    .i
L                   |   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 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#m$Z$ ddlm%Z% dZ&e&rd dl	m'Z' d dlm(Z( ddl)m*Z*m+Z+m,Z,  ej-        e.          Z/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?d Z@d!ZAd"ZBd#ZCd$ZDd%ZEd&ZFd'ZGd(ZHd)ZId*ZJd+ZKd,ZLd-ZMd.ZNd/ZOd0ZPd1ZQd2ZRd3ZSd4ZTd5ZUd6ZVd7ZWd8ZXd9ZYd:ZZd;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             Z`i e3d d`dd`dafdbe4d d`dd`dafdbe3d d`d?d`dafdce4d d`d?d`dafdce3dd`dd`dafdde4dd`dd`dafdde3dd`d?d`dafdee4dd`d?d`dafdee3d d`ddfdafdge4d d`ddfdafdge3d d`d?dfdafdhe4d d`d?dfdafdhe3dd`ddfdafdie4dd`ddfdafdie3dd`d?dfdafdje4dd`d?dfdafdje3d d`ddkdafdli e4d d`ddkdafdle3d d`d?dkdafdme4d d`d?dkdafdme3dd`ddkdafdne4dd`ddkdafdne3dd`d?dkdafdoe4dd`d?dkdafdoe3d d`ddpdafdqe4d d`ddpdafdqe3d d`d?dpdafdre4d d`d?dpdafdre3dd`ddpdafdse4dd`ddpdafdse3ddfddpdafdse4ddfddpdafdse3dd`d?dpdafdte4dd`d?dpdafdti e3dd`ddudafdve3d d`ddwdafdxe3dd`ddwdafdxe4dd`ddwdafdye3dd`d?dwdafdze3ddfddwdafd{e4ddfddwdafd|e3d d}dd~dafde4d d}dd~dafde3dd`dd~dafde3ddfdd~dafde4ddfdd~dafde3dd}dd~dafde4dd}dd~dafde3dd`dddffde4dd`dddffde3d?d`dddafdi e4d?d`dddafde3d?d`d?ddafde4d?d`d?ddafde3d?d`dddafde4d?d`dddafde3d?d`dddfde4d?d`dddfde3d?d`dddfde4d?d`dddfde3d?d`dddfde4d?d`dddfde3d?d`ddd`fde4d?d`ddd`fde3d?d`dddfde4d?d`dddfde3d?d`dddfde4d?d`dddfdi e3d?d`dddffde4d?d`dddffde3d?d`dddfde4d?d`dddfde3d?d`dddfde4d?d`dddfde3d?d`dddfde4d?d`dddfde3d?d`dddafde4d?d`dddafde3d?d`dddafde4d?d`dddafde3d?d`dddfde4d?d`dddfde3d?d`ddd`fde4d?d`ddd`fde3d?d`dddffdi e4d?d`dddffde3dAd`dd`dafde4dAd`dd`dafde3dAd`d?d`dafde4dAd`d?d`dafde3dAd`ddfdafde4dAd`ddfdafde3dAd`d?dfdafde4dAd`d?dfdafde3dAd`ddkdafde4dAd`ddkdafde3dAd`d?dkdafde4dAd`d?dkdafde3dAd`ddpdafde4dAd`ddpdafde3dAd`dddfde4dAd`dddfdi e3dAd`dddffde4dAd`dddffde3dAd`d?dpdafde4dAd`d?dpdafde3dEd`dddafde4dEd`dddafde3dEd`dddfde4dEd`dddfde3dEd`dddfde4dEd`dddfde3dEd`dddafde4dEd`dddafde3dGd`ddpdafdse4dGd`ddpdafdse3dGd`dddafde4dGd`dddafde3dKd`dddafde4dKd`dddafdiZa ebd eaD                       Zcg dZdddZed dÄZfddƄZgi Zhi ZiddʄZj G d˄ de          Zke
delemgef         ZnddЄZodd҄ZpddքZqe&reeref         ZsneZs G dׄ des          Ztehet_h        eiet_i         e%j_                    D ]M\  ZuZvevw                    dd٦          Zv exetdev eheu         d                     exetdev eieu                    N[h[i[u[v G d܄ det          ZyeyZz G dބ dej                  Z{i dde3ddd`dfdde3dddpdfdde3dddd?fdde3dAddpdfdde3dAddd?fdde3dd?d~dfdde3dddwdfdde3dddwdfdde3ddAd~dfdde3d?dddfdde3d?ddd fdde3d?ddd?fdde3dEdddfdde3dGdddfdde3dKdddfdde4dddwdfZ|ddZ} G d dej~                  ZddZ ej        e{j        e{ee            ej        e{j        e}            ej        e{j        e            ej        e{j        ddg            ej        e{j        d           dS (      )annotationsN)CallableMutableMapping)Fraction)NumberRational)IOAnycast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32beo8)DeferredErroris_pathTYPESF)Iterator)NoReturn)BufferIntegralLikeStrOrBytesPath   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/analyses/venv/lib/python3.11/site-packages/PIL/TiffImagePlugin.py
<dictcomp>rC      s    BBBA1BBB    r   r>   )1z1;I)rF   z1;IR)rF   rF   )rF   z1;R)r&   )LzL;2I)rG   zL;2IR)rG   zL;2)rG   zL;2R)r*   )rG   zL;4I)rG   zL;4IR)rG   zL;4)rG   zL;4R)r2   )rG   zL;I)rG   zL;IR)rG   rG   )rG   zL;R)   )I;16zI;12)   )rI   rI   )I;16BrK   )rI   zI;16R)IzI;16S)rL   zI;16BS)r(   )    )FF;32F)rN   zF;32BF)rL   zI;32N)rL   I;32S)rL   zI;32BS)r2   r2   )LArQ   )r2   r2   r2   )RGBrR   )rR   zRGB;R)r2   r2   r2   r2   )RGBArS   r   )rR   RGBX)r2   r2   r2   r2   r2   r   r   )rR   RGBXX)r2   r2   r2   r2   r2   r2   )r   r   r   )rR   RGBXXX)rS   RGBa)r   r   )rS   RGBaX)r   r   r   )rS   RGBaXX)r&   r   )rS   RGBAX)r&   r   r   )rS   RGBAXX)i  )rJ   rJ   rJ   )rR   zRGB;16L)rR   zRGB;16B)rJ   rJ   rJ   rJ   )rS   zRGBA;16L)rS   zRGBA;16B)rR   zRGBX;16L)rR   zRGBX;16B)rS   zRGBa;16L)rS   zRGBa;16B)PzP;1)r^   zP;1R)r^   zP;2)r^   zP;2R)r^   zP;4)r^   zP;4R)r^   r^   )r^   PX)PAr`   )r^   zP;R)CMYKra   )ra   CMYKX)ra   CMYKXX)ra   zCMYK;16L)ra   zCMYK;16B)LABrd   c              #  @   K   | ]}t          |d                    V  dS )r*   N)len)r?   key_tps     rB   	<genexpr>rh     s,      AAV#fQi..AAAAAArD   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ prefixbytesreturnboolc                P    |                      t          t                              S N)
startswithtuplePREFIXESri   s    rB   _acceptrs   "  s    U8__---rD   valfloat | Fraction | IFDRationalmax_valint!tuple[IntegralLike, IntegralLike]c                    t          |           dk    }t          |rd| z  n|                               |          }|r|d d d         n|S )Nr   )absIFDRationallimit_rational)rt   rv   invn_ds       rB   _limit_rationalr   &  sT     c((Q,C
-a#gg#
.
.
=
=g
F
FC$3ttt99$rD   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 rn   floatr?   is     rB   rh   z)_limit_signed_rational.<locals>.<genexpr>4  s(      
!
!588
!
!
!
!
!
!rD   c              3  4   K   | ]}t          |          V  d S rn   r   r   s     rB   rh   z)_limit_signed_rational.<locals>.<genexpr>7  s(      ,,1eAhh,,,,,,rD   r   r   )r   	numeratordenominatorminr   r{   rp   max)rt   rv   r   fracr   	n_d_floats         rB   _limit_signed_rationalr   .  s     C==D-1^T=M-MC

!
!S
!
!
!!!G++c3w<<00,,,,,,,I
9~~ilYq\97CCJrD   opstrr
   c                     d fd}|S )	Nselfr|   argstuple[float, ...]rk   bool | float | Fractionc                4     t          | j                  | S rn   )getattr_val)r   r   r   s     rB   delegatez_delegate.<locals>.delegateF  s     &wty"%%t,,rD   )r   r|   r   r   rk   r   r>   )r   r   s   ` rB   	_delegater   E  s(    - - - - - -
 OrD   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   valueru   r   rw   rk   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   TYPE_CHECKINGr   r   r   rw   )r   r   r   s      rB   __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5DIIIrD   r   c                    | j         S rn   )r   r   s    rB   r   zIFDRational.numerator~  s
    rD   c                    | j         S rn   )r   r   s    rB   r   zIFDRational.denominator  s      rD   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      rB   r}   zIFDRational.limit_rational  s^     q  >4#333$)X.....I''88{AM))rD   r   c                D    t          t          | j                            S rn   )r   r   r   r   s    rB   __repr__zIFDRational.__repr__  s    5##$$$rD   c                4    | j                                         S rn   )r   __hash__r   s    rB   r   zIFDRational.__hash__  s    y!!###rD   otherobjectrl   c                    | j         }t          |t                    r|j         }t          |t                    rt          |          }||k    S rn   )r   r   r|   r   )r   r   rt   s      rB   __eq__zIFDRational.__eq__  sI    ie[)) 	JEeU## 	**Ce|rD   %list[float | Fraction | IntegralLike]c                *    | j         | j        | j        gS rn   )r   r   r   r   s    rB   __getstate__zIFDRational.__getstate__  s    	4?D,=>>rD   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   rw   r   )r   r   r   r   r   s        rB   __setstate__zIFDRational.__setstate__  s    T1%%%).&j,$ 122222	 	)"<<<DOO(DO,,,,,,(rD   __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__NrE   )r   ru   r   rw   rk   r   )rk   r   rk   rw   )r   rw   rk   r   rk   r   )r   r   rk   rl   )rk   r   )r   r   rk   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>   rD   rB   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&&' 'rD   ImageFileDirectory_v2idxsize$Callable[[_LoaderFunc], _LoaderFunc]c                     d fd}|S )Nfunc_LoaderFuncrk   c                    ddl m} | j                            d          r&| j        dd                              dd          |<   | ft
          <   | S )Nr   r   load_r,   _ )r   r   r   ro   replace_load_dispatch)r   r   r   r   s     rB   	decoratorz#_register_loader.<locals>.decorator  sd    ######=##G,, 	=qrr*223<<E#J"DjsrD   )r   r   rk   r   r>   )r   r   r   s   `` rB   _register_loaderr     s/           rD   2Callable[[Callable[..., Any]], Callable[..., Any]]c                     d fd}|S )Nr   Callable[..., Any]rk   c                    | t           <   | S rn   )_write_dispatch)r   r   s    rB   r   z#_register_writer.<locals>.decorator  s    #rD   )r   r   rk   r   r>   )r   r   s   ` rB   _register_writerr     s)          rD   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   datarj   
legacy_apirl   rk   tuple[Any, ...]c                X    |                      t          |          z    |          S rn   )_unpackrf   )r   r   r   fmtr   s      rB   basic_handlerz&_register_basic.<locals>.basic_handler  s/     ||s4yyD07#77>>>rD   c                J     d                      fd|D                       S )NrD   c              3  D   K   | ]}                     |          V  d S rn   )_pack)r?   r   r   r   s     rB   rh   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s1      <<EC''<<<<<<rD   join)r   valuesr   s   ` rB   <lambda>z!_register_basic.<locals>.<lambda>  s0    <<<<<V<<<<< rD   T)r   r   r   rj   r   rl   rk   r   )r   r   structcalcsizer   r   )r   r   r   namer   r   r   s        @@rB   _register_basicr    s    !NCdE#J?9s99%%D FJ? ? ? ? ? ? ? ?
 -N3   OCrD   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dad            Zej        dbd            ZdcdZdddZdedZdfdZdgd!Zdhd#Zdid$Zdjd&Zdkd'Zdld)Zdmd-Zdnd/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@          dodpdB            Z' e(d@          dqdD            Z) e&dEd@          dodrdF            Z* e(dE          dsdH            Z+ e&dIdJ          	 dodtdL            Z, e(dI          dudN            Z- e&dOd@          dodpdP            Z. e(dO          dvdQ            Z/ e&dRdJ          	 dodtdS            Z0 e(dR          dudT            Z1dwdXZ2dxdYZ3dydZZ4dzd{d]Z5d|d^Z6d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ifhrj   ri   bytes | Nonegroup
int | Nonerk   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+   Qr2   r   rG   r*   F)rs   reprSyntaxError_prefixMM_endianII_bigtiffr  tagtyperesetr   next_legacy_api)r   r  ri   r  msgs        rB   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. 		
 !rD   c                    | j         S rn   )r  r   s    rB   r  zImageFileDirectory_v2.<lambda>n      4< rD   c                    | j         S rn   )_offsetr   s    rB   r  zImageFileDirectory_v2.<lambda>o  r%  rD   rl   c                    | j         S rn   )r"  r   s    rB   r   z ImageFileDirectory_v2.legacy_apiq  s    rD   r   r   c                $    d}t          |          )Nz"Not allowing setting of legacy api)	Exception)r   r   r#  s      rB   r   z ImageFileDirectory_v2.legacy_apiu  s    2nnrD   c                Z    i | _         i | _        i | _        i | _        d | _        d | _        d S rn   )_tags_v1_tags_v2_tagdatar  _nextr'  r   s    rB   r   zImageFileDirectory_v2.resetz  s0    (*(**,
#'rD   r   c                :    t          t          |                     S rn   )r   dictr   s    rB   __str__zImageFileDirectory_v2.__str__  s    4::rD   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      rB   rC   z/ImageFileDirectory_v2.named.<locals>.<dictcomp>  s@     
 
 
e OD$*--2E
 
 
rD   )itemsr   s   `rB   namedzImageFileDirectory_v2.named  s6    
 
 
 
#zz||
 
 
 	
rD   rw   c                n    t          t          | j                  t          | j                  z            S rn   )rf   setr.  r-  r   s    rB   __len__zImageFileDirectory_v2.__len__  )    3t}%%DM(:(::;;;rD   tagr
   c                    || j         vr?| j        |         }| j        |         }| j        |         \  }} || || j                  | |<   | j         |         }| j        rt          |t          t          f          s|f}|S rn   )r-  r.  r  r   r   r   rp   rj   )r   r>  r   typr   handlerrt   s          rB   __getitem__z!ImageFileDirectory_v2.__getitem__  s    dm##=%D,s#C /4MD'dDO<<DImC ? 	:cE5>#B#B 	&C
rD   r   c                &    || j         v p|| j        v S rn   )r-  r.  r   r>  s     rB   __contains__z"ImageFileDirectory_v2.__contains__      dm#;sdm';;rD   c                >    |                      ||| j                   d S rn   )_setitemr   )r   r>  r   s      rB   __setitem__z!ImageFileDirectory_v2.__setitem__  s     c5$/22222rD   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                       rN|D ]5}t          |t                    sJ |dk     rt          j        | j        |<    n6t          j        | j        |<   nNt          d |D                       rd}d}d}	|D ]I}t          |t                    sJ |rd|cxk    rdk     sn d}|rd|cxk     rdk     sn d}|	r|dk     rd}	J|rt          j        | j        |<   n|rt          j        | j        |<   n|	rt          j        | j        |<   nt          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        t7          |          dk    rz|sx|r(| j        |         t          j        t          j        fv r|f}	 |\  ||<   d S # t8          $ r7 t;          j        d| dt7          |           d           |d         ||<   Y d S w xY w|||<   d S )Nc              3  @   K   | ]}t          |t                    V  d S rn   )r   r|   r?   rA   s     rB   rh   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s,      BBaz![11BBBBBBrD   r   c              3  @   K   | ]}t          |t                    V  d S rn   )r   rw   rL  s     rB   rh   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      <<As++<<<<<<rD   Tr    Fi i   c              3  @   K   | ]}t          |t                    V  d S rn   )r   r   rL  s     rB   rh   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      >>!Au-->>>>>>rD   c              3  @   K   | ]}t          |t                    V  d S rn   )r   r   rL  s     rB   rh   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rN  rD   c              3  @   K   | ]}t          |t                    V  d S rn   )r   rj   rL  s     rB   rh   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rP  rD   c                h    g | ]/}t          |t                    r|                    d d          n|0S )asciir   )r   r   encoderL  s     rB   
<listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  sJ        1;1c0B0BI),,,  rD   c                Z    g | ](}t          |t                    rt          |          n|)S r>   )r   rw   r   rL  s     rB   rV  z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  s1    LLL*Q"4"4;eAhhh!LLLrD   c              3  p   K   | ]0}t          |t                    r                    |          n|V  1d S rn   )r   r   cvt_enum)r?   r   infos     rB   rh   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  sW         )35#(>(>Ie$$$E     rD   r   zMetadata Warning, tag z had too many entries: z, expected 1)r   rj   r   r   r6  r  r   r  type	UNDEFINEDallr|   SIGNED_RATIONALRATIONALrw   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEr1  rp   r,  r-  lengthrf   
ValueErrorwarningswarn)r   r>  r   r   	basetypesr  rA   shortsigned_shortlongis_ifddestrZ  s               @rB   rH  zImageFileDirectory_v2._setitem  sq   UC(	sDJ//&ui88C%edl""y %6$(IS!!$,$6S!BB6BBBBB !6# > >)![99999q55080HDL-!E ! -5,=S)<<V<<<<< 6 E#'LD# ) ))!S11111  *!q....5....$)E' 1A1E1E1E1E1E1E1E1E+0L )AEE#(D A,4NS))% A,4,AS)) A,4MS)),4,@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 	    #    F
 !+=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   M =NNc                    | j                             |d            | j                            |d            | j                            |d            d S rn   )r-  popr,  r.  rD  s     rB   __delitem__z!ImageFileDirectory_v2.__delitem__  sP    #t$$$#t$$$#t$$$$$rD   Iterator[int]c                n    t          t          | j                  t          | j                  z            S rn   )iterr;  r.  r-  r   s    rB   __iter__zImageFileDirectory_v2.__iter__  )    C&&T]););;<<<rD   r   r   r   c                <    t          j        | j        |z   |          S rn   )r	  unpackr  )r   r   r   s      rB   r   zImageFileDirectory_v2._unpack
  s    }T\C/666rD   r  c                6    t          j        | j        |z   g|R  S rn   )r	  packr  )r   r   r  s      rB   r  zImageFileDirectory_v2._pack  s!    {4<#-77777rD   Hrl  rG   rn  bzsigned bytehzsigned shortlzsigned longr   r   ddoubler  long8r   Tc                    |S rn   r>   r   r   r   s      rB   	load_bytezImageFileDirectory_v2.load_byte!      rD   bytes | int | IFDRationalc                    t          |t                    rt          |          }t          |t                    rt          |f          }|S rn   )r   r|   rw   rj   r   r   s     rB   
write_bytez ImageFileDirectory_v2.write_byte%  sC    dK(( 	t99DdC   	"$>>DrD   r&   c                l    |                     d          r
|d d         }|                    dd          S )N    rz   zlatin-1r   )endswithdecoder  s      rB   load_stringz!ImageFileDirectory_v2.load_string-  s7    == 	9D{{9i000rD   str | bytes | intc                    t          |t                    rt          |          }t          |t                    s|                    dd          }|dz   S )NrT  r   r  )r   rw   r   rj   rU  r   r   s     rB   write_stringz"ImageFileDirectory_v2.write_string3  sP     eS!! 	JJE%'' 	5LL)44Eu}rD   r,   r2   )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*   rG   arw   r~  rk   tuple[int, int] | IFDRationalc                0    r| |fnt          | |          S rn   r|   r  r~  r   s     rB   combinez4ImageFileDirectory_v2.load_rational.<locals>.combineB       '>Aq66[A->->>rD   c              3  6   K   | ]\  }} ||          V  d S rn   r>   r?   numdenomr  s      rB   rh   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>E  3      VVZS%WWS%((VVVVVVrD   r&   r   r  rw   r~  rw   rk   r  r   rf   rp   zipr   r   r   valsr  s     ` @rB   load_rationalz#ImageFileDirectory_v2.load_rational<       ||s4yyA~000$77	? 	? 	? 	? 	? 	? VVVV3tCCaCy$qtRSt*;U;UVVVVVVrD   r|   c                F     d                      fd|D                       S )NrD   c              3  P   K   | ] } j         d gt          |d          R  V  !dS )2Ll    N)r  r   r?   r   r   s     rB   rh   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>I  sR       
 
DHJDJt?odI>>???
 
 
 
 
 
rD   r  r   r  s   ` rB   write_rationalz$ImageFileDirectory_v2.write_rationalG  s?    xx 
 
 
 
LR
 
 
 
 
 	
rD   r0   c                    |S rn   r>   r  s      rB   load_undefinedz$ImageFileDirectory_v2.load_undefinedM  r  rD   c                    t          |t                    rt          |          }t          |t                    r#t          |                              dd          }|S )NrT  r   )r   r|   rw   r   rU  r  s     rB   write_undefinedz%ImageFileDirectory_v2.write_undefinedQ  sQ    e[)) 	JJEeS!! 	:JJ%%gy99ErD   
   c           
         |                      t          |          dz   d|          }dfdt          fd	t          |d d d
         |dd d
                   D                       S )Nr*   r  r  rw   r~  rk   r  c                0    r| |fnt          | |          S rn   r  r  s     rB   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine_  r  rD   c              3  6   K   | ]\  }} ||          V  d S rn   r>   r  s      rB   rh   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>b  r  rD   r&   r   r  r  r  s     ` @rB   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalY  r  rD   c                F     d                      fd|D                       S )NrD   c           	   3  R   K   | ]!} j         d gt          |dd          R  V  "dS )2lii   N)r  r   r  s     rB   rh   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>f  sX       
 
 DJtP4T9hOOPPP
 
 
 
 
 
rD   r  r  s   ` rB   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationald  s?    xx 
 
 
 

 
 
 
 
 	
rD   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. )readrf   OSError)r   r  r   retr#  s        rB   _ensure_readz"ImageFileDirectory_v2._ensure_readk  sj    ggdmms88tL%)L L?B3xxL L L  #,,
rD   c           
        |                                   |                                | _        	 | j        r*|                     d|                     |d                    n)|                     d|                     |d                    d         }t          |          D ]J}| 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z  }
|
|dk    rd| dnt3          |          z  }
t                              |
           L| 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  r2   r}  r&   r   HHQ8s   HHL4srH   unknownztag:  (
) - type: )z%s - unsupported type %sr*   rG   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag z
 - value: rM   <table:  bytes>)r   tellr'  r  r   r  ranger   r6  r  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readrf   ri  rj  r.  r  r  r!  r  r   )r   r  	tag_countr   r>  r@  countr   tagnametypnamer#  	unit_sizerA  r   hereoffsets                   rB   loadzImageFileDirectory_v2.loadu  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!|#4"99/$////$t**LS!!!! =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@ TYYY
  	 	 	M#c((###FFFFF	s=   DM EM &F =M ?F  GM 
N!N  Nc                   | j         |                     d| j        rdnd          z   }| j        r||                     ddd          z  }|| j        r|                     dd          n|                     d	d          z  }|S )
Nr}  r  *   HHr2   r   r  rJ   rG   )r  r  r  r   r  s     rB   _get_ifhzImageFileDirectory_v2._get_ifh  s    lTZZ4=-HRRbIII= 	*4::dAq)))CdmKtzz#r"""C9K9KK
rD   r   r  c                   |                      | j        rdndt          | j                            }g }| j        rdnd}| j        rdnd}t          |          t          | j                  | j        rdndz  z   |z   z  d }t	          | j                                                  D ]\  }}|t          k    rt          |          }| j        |         }	t          	                    d||	t          |                     |	t          j        k    ot          |t                    }
|
ret          |                                 |	          }| 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	}|t          |          dk    rdt          |           dnt3          |          z  }t          	                    |           |
rd}nD|	t          j        t          j        t          j        fv rt          |          }nt          |          }t          |          |k    r0|                    ||	||                    |d          df           6|                    ||	||                      |          |f           t          |          dz   dz  dz  z  |||         \  }}	}}}|rC| j        |	         \  }}fd || || j                   D             } | j        |	         | g|R  }n3|                      || !                    ||          d         z             }||	|||f||<   |D ]f\  }}	}}}t          	                    d||	|t          |          t          |                     ||                      | j        rdnd||	||          z  }g||                      |d          z  }|D ]$\  }}	}}}||z  }t          |          dz  r|dz  }%|S )Nr  r}  rG   r2   r*   r  rH   zTag %s, Type: %s, Value: %s)r  ifdr  zsave: r  r  z) - value: rJ   r  r  r   r  rD   r&   c                    g | ]}|z   S r>   r>   )r?   rt   r  s     rB   rV  z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>  s    WWW3#,WWWrD   r   z%s %s %s %s %sr  r  )"r  r  rf   r-  sortedr8  STRIPOFFSETSr  r  r  r  r   rb  r   r1  r   r  tobytesrp   r   r6  r  r  r   r  r   rf  re  r\  appendljustr   r   r   )r   r  resultentriesr   fmt_sizestripoffsetsr>  r   r@  ro  r  r  ifd_tag	ifd_valuer   r  r  r#  r  r   rA  s    `                    rB   r  zImageFileDirectory_v2.tobytes  s   4=9CCc3t};M;MNN<>]+cc,111KK#dm,,dm0KLLxW	
  !!4!4!6!677 "	3 "	3JCl"""7||,s#CLL6S$u++NNNHM)Ej.E.EF @+DMMOO3GGGs+*0,,.. - -&GY#,CLL{{6**",UE":":H0t+C0????oc4:66;G%Dee59S)+D+DGP7PPcPPWPPPPPCCIIOO0c$ii0000VTCLL  $8JKKKD		F4yyH$$S%He1L1LcRSSSS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 	 	(CeUDLL)3UDKKdTTTdjj=5gsC  FF
 	$**S!$$$ -4 	  	 (CeUDdNF4yy1}  %rD   c                    |                                 dk    r'|                    |                                            |                                 }|                     |          }|                    |           |t	          |          z   S r   )r  writer  r  rf   )r   r  r  r  s       rB   savezImageFileDirectory_v2.save  sn    7799>>HHT]]__%%%f%%
F##rD   )r  NN)r  rj   ri   r  r  r  rk   r   )rk   rl   )r   rl   rk   r   rk   r   r   )rk   r3  r   r>  rw   rk   r
   r>  r   rk   rl   r>  rw   r   r
   rk   r   )r>  rw   r   r
   r   rl   rk   r   )r>  rw   rk   r   rk   rt  )r   r   r   rj   rk   r   )r   r   r  r
   rk   rj   r  )r   rj   r   rl   rk   rj   )r   r  rk   rj   )r   rj   r   rl   rk   r   )r   r  rk   rj   )r   rj   r   rl   rk   r  )r  r|   rk   rj   )r   r  rk   rj   )r  r  r   rw   rk   rj   )r  r  rk   r   )rk   rj   rT   )r  rw   rk   rj   )r  r  rk   rw   )7r   r   r   r   r   __annotations__r   r   r   ri   r  r   setterr   r2  r9  r<  rB  rE  rI  rH  rs  rw  r   r  listmapr  r   r`  rb  SIGNED_BYTEra  rc  FLOATrd  IFDLONG8r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r>   rD   rB   r   r     s        : :x :<N;;;;57O7777 3# 	%! %! %! %! %!N X//00FX//00F      X     ( ( ( (   	
 	
 	
 	
< < < <	 	 	 	< < < <3 3 3 3\ \ \ \|% % % %
= = = =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   N N N N N`$ $ $ $ $ $rD   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
   kwargsrk   r   c                H     t                      j        |i | d| _        d S )NT)superr   r"  )r   r   r  	__class__s      rB   r   zImageFileDirectory_v1.__init__7  s-    $)&)))rD   c                    | j         S rn   )r,  r   s    rB   r  zImageFileDirectory_v1.<lambda>;  s     rD   c                    | j         S rn   )r.  r   s    rB   r  zImageFileDirectory_v1.<lambda><  s    DM rD   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`

        rr   )ri   r.  r  r!  )clsr  r  s      rB   from_v2zImageFileDirectory_v1.from_v2B  s:     c)))(&=
rD   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`

        rr   )r   ri   r1  r.  r  r-  )r   r  s     rB   to_v2zImageFileDirectory_v1.to_v2T  sN     $4;777DM**4<((DM**
rD   r>  r   rl   c                &    || j         v p|| j        v S rn   )r,  r.  rD  s     rB   rE  z"ImageFileDirectory_v1.__contains__e  rF  rD   rw   c                n    t          t          | j                  t          | j                  z            S rn   )rf   r;  r.  r,  r   s    rB   r<  zImageFileDirectory_v1.__len__h  r=  rD   rt  c                n    t          t          | j                  t          | j                  z            S rn   )rv  r;  r.  r,  r   s    rB   rw  zImageFileDirectory_v1.__iter__k  rx  rD   r   c                >    dD ]}|                      |||           d S N)FT)rH  )r   r>  r   r   s       rB   rI  z!ImageFileDirectory_v1.__setitem__n  s4    ' 	2 	2JMM#uj1111	2 	2rD   c           	        || j         vrQ| j        |         }| j        |         }| j        |         \  }}dD ]$}|                     | || ||          |           %| j         |         }t          |t          t          f          s|f}|S r  )r,  r.  r  r   rH  r   rp   rj   )r   r>  r   r@  r   rA  legacyrt   s           rB   rB  z!ImageFileDirectory_v1.__getitem__r  s    dm##=%D,s#C /4MD'' H Hc774v#>#>GGGGmC #u~.. 	&C
rD   )r   r
   r  r
   rk   r   )r  r   rk   r  )rk   r   r  r   r  r  r  )r   r   r   r   r   r   tagstagdatar  classmethodr  r  rE  r<  rw  rI  rB  __classcell__r  s   @rB   r  r  $  s         $            8..//Dh1122G !   ["   "< < < << < < <= = = =2 2 2 2
 
 
 
 
 
 
 
rD   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 | Nonerk   r   c                X    |  	 |  	 t                                          ||           d S rn   )r  r   )r   r  r!  r  s      rB   r   zTiffImageFile.__init__  s7    
 	*5'"X&&&&&rD   c                &   | j         J | 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 fileNr2   r&   r  rz   z*** 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  _seekr  s     rB   _openzTiffImageFile._open  s     w"""gll1ooq6R<<47<<??"C+C00 &*[%55t{7%'%)2333_dl333[$s)),,, 	

1rD   rw   c                D   | j         }||                                 }|                     t          | j                             | j         1|                     |                                 dz              | j         1|                     |           | j         J | j         S )Nr   )r+  r  r,  rf   r*  r  )r   current_n_framescurrents      rB   n_frameszTiffImageFile.n_frames  s    >#iikkGJJs4?++,,,.(

499;;?+++ .(IIg~)))~rD   framec                    |                      |          sdS |                     |           | j        :| j        j        | j        k    s| j        j        | j        k    s| j        rd| _        dS dS dS )z%Select a given frame as current imageN)_seek_checkr,  _imimr   
_tile_sizemodereadonly)r   r2  s     rB   r  zTiffImageFile.seek  s~    && 	F

58GLDO++w|ty((} ) DHHH  ((rD   c                   t          | j        t                    r| j        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 rM| j        t*                   }t          |t,                    rt          |          dk    r|d         }|| j        d<   nd| j        v r| j        d= |                                  t2                              | 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)r   r)  r   exr  rf   r*  r'  EOFErrorr  r  r(  r  rh  r  r  r%  r  r!  r+  is_animatedXMPrp   rZ  _reload_exifr  r  r>  r  _setup)r   r2  r#  r;  s       rB   r,  zTiffImageFile._seek  s   dh.. 	(+($/""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+,,,!!!$++c"C#u%% #c((a--!f"DIedi	% 3;;DKHHH48rD   c                    | j         S )zReturn the current frame number)r(  r   s    rB   r  zTiffImageFile.tell  s
    |rD   dict[int, dict[str, bytes]]c                   i }| j                             t          j        j                  }|r|                    d          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          |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.
        s   8BIMr*   r.   r   r&   r  r   N)
r%  r  r   BaseImageResourcesro   i16mathceili32)r   blocksrt   idnr   r   s          rB   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s    koohm:;; 	@..)) @QqS]]Is1vzQ.//!33q1urAv~.//26BFTM12$d^r
$)R!Vd]a$7881<>>? ..)) @ rD   Image.core.PixelAccess | Nonec                    | j         r| j        r|                                 S t                                                      S rn   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    rB   r  zTiffImageFile.load  s;    9 	(. 	(%%'''ww||~~rD   c                    | j         Ht          j        | j                   t          j                            | j        | j                  | _        t          j        	                    |            d S rn   )
r5  r   _decompression_bomb_checkr7  corenewr8  r6  r   load_preparer   s    rB   rX  zTiffImageFile.load_prepare  sU    8+DO<<<jnnTY@@DG((.....rD   c                *   | j         sDd| _        |                                 }t          j        D ]}||vr|                    |           t          j        | d           t          j	        j
        | j        v r| j        t          j	        j
        = d S d S )NT)in_place)r>  !_close_exclusive_fp_after_loadinggetexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   rE  Orientationr%  )r   exifkeys      rB   load_endzTiffImageFile.load_end  s      	"59D2 <<>>D. " "d??S!!!!t4444=$33HM5666 43rD   c                   t           j                             |            |                                  t          | j                  dk    sd}t          |          | j        d         d         }| j        d         d         }| j        J 	 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|rt*                              d           |s| j                            d           t5          j        |dt4          j                  }|                    d          \  }	}
t5          j        ||t4          j                   nct*                              d           | j                            d           |                    | j                                                  \  }	}
g | _        d| _        |                                   |r | j        !                                 d| _        |
dk     rd|
 }t          |          t           j                             |           S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r(   NfilenoflushFr&   libtiffzCouldn't set the image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 readingzdecoder error )"r   r  rX  rf   rQ  r  r  r   re  rf  r   rp   r  _getdecoderr8  decoderconfigsetimager6  rh  _exclusive_fpr>  r  r  r  rh  r  oslseekSEEK_CURSEEK_SETr  r9  rc  close)r   r#  extentsr   r  	args_listdecodereclose_self_fprM  errposs               rB   rS  zTiffImageFile._load_libtiff0  s3    	49~~""(C#,, )A,q/y|A
 w"""
	(++@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 (2q"+..C^^G,,FAsHRbk**** LLFGGGGLLOOO^^DGLLNN33FAs	 	GMMOOODG77(3((C#,,{%%%s+   AC* *C98C9E6 6
F 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                   }n$# t          $ r}d}t!          |          |d}~ww xY wt#          |t$                    rt#          |t$                    sd}t'          |          ||f| _        | j                             t*          j        j                  }|dv r
||f| _        n	||f| _        t                              d| j                   | j                             t4          d          }t7          |          dk    r,t9          |          t;          |          cxk    rdk    rn nd}| j                             t<          d          }	| j                             t>          d          }
|dv rd}n|dk    rd}nd}|t7          |
          z  }t7          |	          }| j                             t@          | j        dk    r|dv rdnd          }|tB          k    r,t          "                    d|           d}tG          |          ||k     r|	d|         }	n||k    r|dk    r|	|z  }	t7          |	          |k    rd}tG          |          | j         j$        ||||	|
f}t                              d|           	 tJ          |         \  | _&        }n># t          $ r1}t                              d           d}tG          |          |d}~ww xY wt                              d|           t                              d | j'                   | j        | j(        d!<   | j                             tR          d          }| j                             tT          d          }|rt|rr| j                             tV                    }|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 | _,        tZ          p
| j        d&k    | _.        | j.        r|d"k    rH|dd         dz   |dd         z   }t                              d|           tJ          |         \  | _&        }|dk    r| j        d'k    r| j        dk    rd(}n+|d)k    rd*}n"|/                    d+          r|dd,         d-z   }|| j        d.| j         j0        f}| j,        1                    te          j3        d/dd||fd|                     nth          | j         v stj          | j         v rth          | j         v r5| j         th                   }| j                             tl          |          }|}n| j         tj                   }| j                             tn                    }| j                             tp                    }t#          |t$                    rt#          |t$                    sd0}t'          |          |}||k    r||k    r| j        d"k    r
|d,d         }|D ]}||z   |k    r|ts          |	          z  d1z  }nd}|}| j        d"k    r||         }||z  }|t%          |          df}| j,        1                    te          j3        | j        ||t;          ||z   |          t;          ||z   |          f||                     ||z  }||k    rd||z   }}||k    rd}|dz  }n+t                              d2           d}tG          |          tt          | j         v r| j         tt                   | j(        d3<   | j'        d4v rKd5 | j         tv                   D             }ty          j=        d6d7>                    |                    | _?        dS dS )8z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r/   r.   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r,   r.   r0   r2   z
- size: %srE   r>   )r&   r.   r2   r(   r,   r*   )r&   r.   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr&   dpigRQ@
resolutionr%   r1   rR   rI   I;16N)z;16Bz;16Lrz   NFrg  zInvalid tile dimensionsr2   z- unsupported data organizationicc_profiler^   r`   c                2    g | ]}t          |d z            S r"   r   )r?   r~  s     rB   rV  z(TiffImageFile._setup.<locals>.<listcomp>  s"    CCCr!s(||CCCrD   RGB;LrD   )@r%  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   rw   rh  r7  r   rE  r`  _sizer   SAMPLEFORMATrf   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr  ri   	OPEN_INFO_moder8  rZ  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITrQ  READ_LIBTIFFrR  r  r  r  r   _Tiler  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r%   r  palette) r   r#  photo	fillorderxsizeysizeru  orientationsample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelrb  rawmodexresyresresunitxylayerr  offsetsr  w	tilewidthr  stridetile_rawmoder   r  s                                    rB   rA  zTiffImageFile._setup  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	(K
+EK,EE 	( 	( 	(&CC..a'	( %%% 	"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 

%//.!33
 F""!!!"233 -!#2#,, $+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//)Ezza5jjT-G1-L-L!"##,! # #q55==Y/!3FFF&-22#*5>Li'F$c&kk15	  O)As1q5%00#a!eU2C2CD	    Q::a!eqAEzz
7#: LL:;;;-Cc""" $$'+{:'>DIm$ 9##CCT[-BCCCG'+GSXXg5F5FGGDLLL $#s0   $F+ +
G5GG!P7 7
Q2,Q--Q2rn   )r  r   r!  r"  rk   r   r  r   )r2  rw   rk   r   )rk   rC  )rk   rO  )r   r   r   formatformat_descriptionr[  r   r-  r   r1  r  r,  r  rN  r  rX  rc  rS  rA  r  r  s   @rB   r  r    s`       F%(-%
 (,' ' ' ' ' ' '   2 	 	 	 X	
 
 
 
/ / / /b      *     
/ / / /7 7 7 7"_& _& _& _&BoH oH oH oH oH oH oH oHrD   r  rF   rG   rQ   r^   r`   rL   rP   rI   I;16LrN   rO   rR   rU   rS   ra   YCbCrrd   rK   r6  Image.Imager  r  r!  str | bytesc                4   	 t           | j                 \  }}}}}}n-# t          $ r }	d| j         d}
t          |
          |	d }	~	ww xY w| j        }| j        }t          |          }|                    d          rd|_        	 |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          |t0                    r|                                }|D ]}t          |t$          j                  r'|t4          j        v r|                    |          ||<   n|                    |          ||<   	 |j        |         |j        |<   r# t<          $ r Y ~w xY wi }t?          | d          r| j                                         }i |tC          | di           }tD          tF          fD ]	}||v r||= 
t?          | d          rtH          tJ          tL          tN          tP          tR          fD ]n}|| j*        v rc|tN          k    r.| j*        j        |         t4          j+        t4          j,        fvr||= D| j*        |         ||<   | j*        j        |         |j        |<   o|                    d| j	                            d                    }|r
||tZ          <   t\          dftJ          dftL          dftJ          dftL          dftH          dft^          dft`          dftb          dftd          dff
D ]\  }}||v r||         ||<   |                    d          }|r*d|tH          <   |d         |tJ          <   |d         |tL          <   |dk    r4||tf          <   ti          |          dk    rti          |          |tj          <   |
||tl          <   |dk    r
||tF          <   tn          |vr||tn          <   n| j        d v r|tn                   dk    r| j        d!k    rr| 8                                }|                                }|Gts          |j:                  D ]0}ts          |j;                  D ]}|||f         d"k    rdnd"|||f<   1|} nty          j=        |           } | j        d#v rw| j>        ?                    d$d%          }g }ti          |          d&z  }ts          d&          D ].} |d' ||| z  || dz   z           D             z  }|dgd(|z
  z  z  }/||t          <   |t                   |t                    }"}!ti          |          |!|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t4          jD        |j        t          <   |&f|'dz
  z  |#|"z  |&|'dz
  z  z
  fz   |t          <   t          ts          d|&|'z  |&                    |t          <   t                              |d          |t          <   | j        d-k    r>t          d.t          d/iL                                D ]\  }}(|M                    ||(           t          t          t          t          g})|r	d0|v r[|d0         }*t          |*t                    r|*dk     s|*d1k    rd2}
t          |
          |d	k    rd3}
t          |
          |*|t          <   t*                              d4           t*                              d5t          |L                                                     d}+t?          |d6          r@	 |U                    d           |V                                }+n# t          jX        $ r Y nw xY wi },|)t          t          t          t          t          t          gz  })tf          |d         i}-t          j]        |L                                |L                                          D ]*\  }}.|t4          j^        vr|t4          j        v rt4          j_        |,|<   n||j        v r|j        |         |,|<   nvt          |.t          t          t          t"          f          s.t          |.t                    r9t          d7 |.D                       r t5          jc        |          jd        }/|/r|/|,|<   ||-vrd||)vr`t          |.t                    r|.e                    d8d9          d:z   |-|<   t          |.t                    rt          |.          |-|<   %|.|-|<   ,tF          |-v r9ti          |-tF                             dk    r|-tF                   d         |-tF          <   t*                              d;t          |-L                                                     | j        d<v rd=}t/          |-L                                          }0|0g                                 |||+||0|,f}1t%          jh        | j        d>|1|          }2|2i                    | j>        d?| j        z              	 |2e                    t          jk                  dd          \  }3}4|+s|l                    |4           |3rnE|3dk     rd@|3 dA}
t          |
          nT|)D ]}||= |m                    |          }5t          jn        | |t          jo        dd?| j        z   |5||#df          g           dB|v rt          | dB|           d S d S )CNzcannot write mode z as TIFFrr   big_tiffTrz  r%   r/   r1   r7   r3   r   r   tiffinfora  zTiffinfo Keys: %sr>  r%  r  descriptionr|  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr{  r&   rE   )rF   rG   rF   r!   r  rR   r  r(   c                    g | ]}|d z  S r  r>   rL  s     rB   rV  z_save.<locals>.<listcomp>8  s    MMMQSMMMrD   r"   r0   r2   
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: %sre  c              3  Z   K   | ]&}t          |t          t          t          f          V  'd S rn   )r   rw   r   r|   rL  s     rB   rh   z_save.<locals>.<genexpr>  s3      TTJq3{*CDDTTTTTTrD   rT  r   r  zConverted items: %s)rI   rK   r  r}  rg  rV   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOr8  r  r  encoderinfoencoderconfigr   r  r  rZ  r   rw   WRITE_LIBTIFFr  r   r  r  rj   r   Exifr  r  r  r  r  r  r   r]  r^  r  r*  r   r>  r   EXIFIFDr  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr?  r%  rf  r\  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTr  rf   r  r  r  copyr  heightwidthr   invertr6  
getpaletter  r  
STRIP_SIZEr   rb  STRIPBYTECOUNTSrp   r  COMPRESSION_INFO_REVr  r  REFERENCEBLACKWHITEr8  
setdefaultr  r  r  TILEBYTECOUNTSrh  JPEGQUALITYr  r  re  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr  r   r   r]  r6  r[  rU  r|   sort_getencoderrk  r   MAXBLOCKr  r  _saver  setattr)6r6  r  r!  r  ri   r  r  bitsextraru  r#  r  r  r  rz  rg  rZ  ra  rb  
legacy_ifdsupplied_tagsr>  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  r)  typesattsr   r[  r  r  encodererrcoder   r  s6                                                         rB   r  r    s   "6?6H3ee " " "427444cll!" .K$M
v
.
.
.Cz"" !-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
 (///(111!)E#JJCK''!$S!1E#JJUC'?@@ *ue,,*TTeTTTTT* $?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000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B ;C
C/I
II*)b b&%b&c                  &   e Zd Zg dZh dZd:d;d
Zd<dZd<dZd<dZd=dZ	d>dZ
d?dZej        fd@dZd<dZdAdZd<dZdBdZdCd ZdDd!Zd?d"Zd?d#ZedEd'            Z	 dFdGd+ZdHd,ZdHd-ZdHd.ZdId/ZdHd0ZdHd1Zd<d2Z d<d3Z!dJd5Z"	 dKdLd8Z#d9S )MAppendingTiffWriter)r   r   r   r&   r*   r2   r   r   r&   r*   r2   r*   r2   r*   r&   r*   r2   >       	     r#   r$   Ffnr   rW  rl   rk   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	   rj   r  	beginningsetup)r   r  rW  s      rB   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| _        }d|v | _	        |s	d| _
        d S d| _
        |t          vrd}t          |          |                     |                    t                    rdnd           | j	        r%| j                             dt          j                   |                                  |                                  d S )	Nr   r*      +TFzInvalid TIFF file headerr  r  )r   r  r  rm  rp  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMr  isFirstrq   RuntimeError	setEndianro   r  ro  skipIFDsgoToEnd)r   iimmr#  s      rB   r  zAppendingTiffWriter.setup  s    DNBK00048% 6;;q>>)	D4 	DLFx,Cs###doob11:sss;;;= 	(FKK2;'''rD   c                \   | j         rd S | j                            | j                   | j                            d          }|sd S || j        k    rd}t          |          | j        r%| j                            dt          j	                   | 
                    | j        rdnd          }|| j        z  }| j        J | j                            | j                   |                     || j        rdnd           | j                            |           |                                  d S )Nr*   z1IIMM of new page doesn't match IIMM of first pager2   )r  r   r  r  r  r  r   r  rm  ro  _readr  _writefixIFD)r   r$  r#  
ifd_offsets       rB   finalizezAppendingTiffWriter.finalize  s   < 	F 	D()))v{{1~~ 	F49ECs###= 	(FKK2;'''ZZT] 9::
d**
,888D1222JT] 9:::JrD   c                V    |                                   |                                  d S rn   )r*  r  r   s    rB   newFramezAppendingTiffWriter.newFrame5  s     

rD   c                    | S rn   r>   r   s    rB   	__enter__zAppendingTiffWriter.__enter__:  s    rD   r   r   c                @    | j         r|                                  d S d S rn   )r  rq  )r   r   s     rB   __exit__zAppendingTiffWriter.__exit__=  s'    = 	JJLLLLL	 	rD   rw   c                D    | j                                         | j        z
  S rn   )r   r  r  r   s    rB   r  zAppendingTiffWriter.tellA  s    v{{}}t333rD   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.
        )rm  rp  r  r   r  r  )r   r  r2  s      rB   r  zAppendingTiffWriter.seekD  sB     R[  d**FFF###yy{{rD   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   rJ   )r   r  rm  SEEK_ENDr  r  rj   r  )r   rx  	pad_bytess      rB   r#  zAppendingTiffWriter.goToEndQ  s    Ar{###fkkmm rM	y2FLLy))***#v{{}}rD   endianr   c                    || _         | j          d| _        | j          d| _        | j          d| j        rdndz   | _        d S )NrG   r}  r  r  )r7  longFmtshortFmtr  	tagFormat)r   r7  s     rB   r!  zAppendingTiffWriter.setEndian[  sS    +(((;))) K+++dm/LssMrD   c                x   	 |                      | j        rdnd          }|dk    r,| j                                        | j        rdndz
  | _        d S | j                            |           |                      | j        rdnd          }| j                            || j        rdndz  t          j                   )NTr2   r*   r   r&   r  rH   )r&  r  r   r  r  r  rm  ro  )r   r)  num_tagss      rB   r"  zAppendingTiffWriter.skipIFDsa  s    
	O$=AAA>>JQ04-AAA1- FKK
###zzt}";!!!<<HFKK$-$?BBR@"+NNN
	OrD   r   r   c               6    | j                             |          S rn   )r   r  r  s     rB   r  zAppendingTiffWriter.writen  s    v||D!!!rD   
field_sizec                Z    	 dddd|         S # t           $ r d}t          |          w xY w)Nr}  rG   r  )r&   r*   r2   zoffset is not supported)r  r   )r   r?  r#  s      rB   _fmtzAppendingTiffWriter._fmtq  sJ    	$ss++J77 	$ 	$ 	$+Cs###	$s    *c                    t          j        | j        |                     |          z   | j                            |                    \  }|S rn   )r	  rz  r7  rA  r   r  )r   r?  r   s      rB   r&  zAppendingTiffWriter._readx  sB    =K$))J///Z1H1H
 
 rD   c                ,    |                      d          S Nr&   r&  r   s    rB   	readShortzAppendingTiffWriter.readShort~      zz!}}rD   c                ,    |                      d          S Nr*   rE  r   s    rB   readLongzAppendingTiffWriter.readLong  rG  rD   bytes_writtenr  expectedc                H    | | |k    rd|  d| }t          |          d S d S )Nzwrote only z bytes but wanted )r   )rK  rL  r#  s      rB   _verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_written  sC    $()B)BKKKKKCs### %$)B)BrD   r   r   new_field_sizec                   | j                             | t          j                   |s|}| j                             t          j        | j        |                     |          z   |                    }| 	                    ||           d S rn   )
r   r  rm  ro  r  r	  r|  r7  rA  rN  )r   r   r?  rO  rK  s        rB   _rewriteLastz AppendingTiffWriter._rewriteLast  s     	ZK--- 	('NKdii&?&??GG
 
 	""=.AAAAArD   c                4    |                      |dd           d S )Nr&   r*   rQ  r  s     rB   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  s     %A&&&&&rD   c                .    |                      |d          S rD  rS  r  s     rB   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort        ***rD   c                .    |                      |d          S rI  rS  r  s     rB   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  rW  rD   c                    | j                             t          j        | j        |                     |          z   |                    }|                     ||           d S rn   )r   r  r	  r|  r7  rA  rN  )r   r   r?  rK  s       rB   r'  zAppendingTiffWriter._write  sW    Kdii
&;&;;UCC
 
 	""=*=====rD   c                2    |                      |d           d S rD  r'  r  s     rB   
writeShortzAppendingTiffWriter.writeShort      E1rD   c                2    |                      |d           d S rI  r\  r  s     rB   	writeLongzAppendingTiffWriter.writeLong  r^  rD   c                r    |                                   | j        r| j                                         d S d S rn   )r*  r  r   rq  r   s    rB   rq  zAppendingTiffWriter.close  s6    = 	FLLNNNNN	 	rD   c           
        |                      | j        rdnd          }t          |          D ]}t          j        | j        | j                            | j        rdnd                    \  }}}| j        |         }||z  }| j        rdnd}||k    }	|	s3|                      |          | j	        z   }
| 
                    |
|           || j        v r| j                                        }t                              dt          j        |          j        |t%          j        |d          |||           |	r5|                     ||           | j                            ||z              =| j                            |
           |                     ||           | j                            |           |	r%| j                            |t,          j                   d S )Nr2   r&   rH   r*   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr  )r&  r  r  r	  rz  r;  r   r  
fieldSizesr  rQ  Tagsr  r  r  r   r6  r  r   r  _fixOffsetsr  rm  ro  )r   r=  r   r>  
field_typer  r?  
total_sizer  is_localr  cur_poss               rB   r(  zAppendingTiffWriter.fixIFD  s   ::4=7aaa88x $	3 $	3A%+]$-,FBBQ G G& &"CU 4J#e+J M0qqqH!X-H 4H--0DD!!&(333di&++--QOC((-Ij)44    )$$UJ777FKK( 23333FKK'''$$UJ777FKK(((( 3Hbk222I$	3 $	3rD   r  c                   t          |          D ]}|                     |          }|| j        z  }d}| j        r|dv r	|dk    rd}n|dk    r|dk    rd}|r|dk    rd	}t	          |          |                     |||           | dz
  dz
  }| j                            |t          j	                   | 
                    |           | j                            d|z
  t          j	                   |                     ||           d S )
Nr   )r&   r*   l        r2   r&   r    r*   r   znot implemented)r  r&  r  r  r   rQ  r   r  rm  ro  r]  )r   r  r?  r   r  rO  r#  rewinds           rB   re  zAppendingTiffWriter._fixOffsets  s.   u 	6 	6AZZ
++Fd**FN} #v!5!5&E//!"qVu__!" 6A::+C&s+++ !!&*nEEE(1,q0FBK000///AJ4444!!&*55553	6 	6rD   isShortisLongc                F    |rd}n|rd}nd}|                      ||          S )Nr&   r*   r   )re  )r   r  rl  rm  r?  s        rB   
fixOffsetszAppendingTiffWriter.fixOffsets  s=      	JJ 	JJJz222rD   N)F)r  r   rW  rl   rk   r   r  )rk   r  )r   r   rk   r   r   )r  rw   r2  rw   rk   rw   )r7  r   rk   r   )r   r   rk   rw   )r?  rw   rk   r   )r?  rw   rk   rw   )rK  r  rL  rw   rk   r   rT   )r   rw   r?  rw   rO  rw   rk   r   )r   rw   rk   r   )r   rw   r?  rw   rk   r   )r  rw   r?  rw   rk   r   )FF)r  rw   rl  rl   rm  rl   rk   r   )$r   r   r   rc  rd  r   r  r*  r,  r.  r0  r  r  rp  r  r#  r!  r"  r  rA  r&  rF  rJ  staticmethodrN  rQ  rT  rV  rY  r'  r]  r`  rq  r(  re  ro  r>   rD   rB   r  r    s         J(  D       4   4   
      4 4 4 4 /1k     - - - -N N N NO O O O" " " "$ $ $ $          $ $ $ \$ BC	B 	B 	B 	B 	B' ' ' '+ + + ++ + + +> > > >         
'3 '3 '3 '3R6 6 6 6: AF	3 	3 	3 	3 	3 	3 	3rD   r  c                   t          | j                            dg                     }t          | d          s|st	          | ||          S |                                 }	 t          |          5 }| g|z   D ]}|                    |           }t          |d          sd|_        t          |dd          }t          |          D ]P}	|                    |	           |                                 t	          |||           |                                 Q||_        	 d d d            n# 1 swxY w Y   |                     |           d S # |                     |           w xY w)Nappend_imagesr1  r  r>   r   )r  r  r  r   r  r  r  _attach_default_encoderinfor  r   r  r  r  r,  )
r6  r  r!  rr  cur_idxtfimsr  nfrr   s
             rB   	_save_allrx   	  s   ++OR@@AAM2z"" '= 'RX&&&ggiiG $$ 	.tm+ . .!==bAAsO44 +(*C%c:q11 :: " "CHHSMMMHHJJJ#r8,,,KKMMMM"-.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	s1   !E 0B.D+E +D//E 2D/3E E$z.tifz.tiffz
image/tiff)ri   rj   rk   rl   )rt   ru   rv   rw   rk   rx   )rt   r|   rv   rw   r   rw   rk   rx   )r   r   rk   r
   )r   rw   r   rw   rk   r   )r   rw   rk   r   )r   r   rk   r   )r6  r  r  r  r!  r  rk   r   )
__future__r   r  r  loggingrH  rm  r	  ri  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r    r   r   r   r   r   r   _binaryr   rG  r   rJ  r   _utilr   r   r   r   r   r   _typingr   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  r?  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATAr  r8  r  r  r   r  rq   rs   r   r   r   r   r   r|   rj   rl   r   r   r   r  rw   
_IFDv2Baser   r   r  r   r  r  ImageFileDirectoryr  r  r  BytesIOr  rx  register_openr  register_saveregister_save_allregister_extensionsregister_mimer>   rD   rB   <module>r     s  R # " " " " " 				       				   4 4 4 4 4 4 4 4       $ $ $ $ $ $ $ $                     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"KQ} } }R D!VT"LS}T D!VT"LU}V D!T2W}X D!T2Y}Z D!\2&(8[}\ D!\2&(8]}^ D!_d+->_}` D!_d+->a}b D!'02Dc}d D!'02De}f D!%r*,@g}h D!%r*,@i}j D!T2
k}l D!T2
m}r D!Y#_s}t D!Y#_u}v D!Y#^w} }x D!Y#^y} }	~ cAAyAAAAA   . . . .% % % %   &    G' G' G' G' G'( G' G' G'T /=sBC	 	 	 	      $   S)JJJP$ P$ P$ P$ P$J P$ P$ P$f (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 + yH yH yH yH yHI' yH yH yHF #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-#$ gr1a-%	,q- q- q- q-h	i3 i3 i3 i3 i3"* i3 i3 i3X	   8  M(- A A A  M(% 0 0 0  ,i 8 8 8  -.0A B B B  M(, 7 7 7 7 7rD   