o
    6>âgÆE ã                   @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZmZmZmZmZ ddlmZmZmZmZmZmZ dd	lm Z! dd
lm"Z# ddlm$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddlm+Z+ erŒddl'm,Z,m-Z- e .e/¡Z0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@d ZAd!ZBd"ZCd#ZDd$ZEd%ZFd&ZGd'ZHd(ZId)ZJd*ZKd+ZLd,ZMd-ZNd.ZOd/ZPd0ZQd1ZRd2ZSd3ZTd4ZUd5ZVd6ZWd7ZXd8ZYd9ZZd:Z[d;Z\d<Z]d=Z^i dd>“d?d@“dAdB“dCdD“dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“Z_d_d`„ e_ `¡ D ƒZai e4d daddadbfdc“e5d daddadbfdc“e4d dad?dadbfdd“e5d dad?dadbfdd“e4ddaddadbfde“e5ddaddadbfde“e4ddad?dadbfdf“e5ddad?dadbfdf“e4d daddgdbfdh“e5d daddgdbfdh“e4d dad?dgdbfdi“e5d dad?dgdbfdi“e4ddaddgdbfdj“e5ddaddgdbfdj“e4ddad?dgdbfdk“e5ddad?dgdbfdk“e4d daddldbfdm“i e5d daddldbfdm“e4d dad?dldbfdn“e5d dad?dldbfdn“e4ddaddldbfdo“e5ddaddldbfdo“e4ddad?dldbfdp“e5ddad?dldbfdp“e4d daddqdbfdr“e5d daddqdbfdr“e4d dad?dqdbfds“e5d dad?dqdbfds“e4ddaddqdbfdt“e5ddaddqdbfdt“e4ddgddqdbfdt“e5ddgddqdbfdt“e4ddad?dqdbfdu“e5ddad?dqdbfdu“¥i e4ddaddvdbfdw“e4d daddxdbfdy“e4ddaddxdbfdy“e5ddaddxdbfdz“e4ddad?dxdbfd{“e4ddgddxdbfd|“e5ddgddxdbfd}“e4d d~dddbfd€“e5d d~dddbfd“e4ddadddbfd‚“e4ddgdddbfdƒ“e5ddgdddbfd„“e4dd~dddbfd€“e5dd~dddbfd“e4ddadd…dgfd†“e5ddadd…dgfd†“e4d?dadd‡dbfdˆ“¥i e5d?dadd‡dbfdˆ“e4d?dad?d‡dbfd‰“e5d?dad?d‡dbfd‰“e4d?daddŠdbfd‹“e5d?daddŠdbfd‹“e4d?daddŠdŒfd“e5d?daddŠdŒfd“e4d?daddŽdfd“e5d?daddŽdfd“e4d?dadd‘d’fd““e5d?dadd‘d’fd““e4d?daddŠdafd”“e5d?daddŠdafd”“e4d?daddŽd•fd–“e5d?daddŽd•fd–“e4d?dadd‘d—fd˜“e5d?dadd‘d—fd˜“¥i e4d?daddŠdgfd‹“e5d?daddŠdgfd‹“e4d?daddŽd™fdš“e5d?daddŽd™fdš“e4d?dadd‘d›fdœ“e5d?dadd‘d›fdœ“e4d?daddŠdfd‹“e5d?daddŠdfd‹“e4d?daddždbfdŸ“e5d?daddždbfd “e4d?dadd¡dbfd¢“e5d?dadd¡dbfd£“e4d?dadd¡dŒfd¤“e5d?dadd¡dŒfd¥“e4d?dadd¡dafd¦“e5d?dadd¡dafd§“e4d?dadd¡dgfd¢“¥i e5d?dadd¡dgfd£“e4dAdaddadbfd¨“e5dAdaddadbfd¨“e4dAdad?dadbfd©“e5dAdad?dadbfd©“e4dAdaddgdbfdª“e5dAdaddgdbfdª“e4dAdad?dgdbfd«“e5dAdad?dgdbfd«“e4dAdaddldbfd¬“e5dAdaddldbfd¬“e4dAdad?dldbfd­“e5dAdad?dldbfd­“e4dAdaddqdbfd®“e5dAdaddqdbfd®“e4dAdadd…dŒfd¯“e4dAdadd…dgfd°“¥i e5dAdadd…dgfd°“e4dAdad?dqdbfd±“e5dAdad?dqdbfd±“e4dEdaddŠdbfd²“e5dEdaddŠdbfd²“e4dEdaddŽdŒfd³“e5dEdaddŽdŒfd³“e4dEdadd‘dfd´“e5dEdadd‘dfd´“e4dEdadd¡dbfdµ“e5dEdadd¡dbfd¶“e4dGdaddqdbfdt“e5dGdaddqdbfdt“e4dGdadd‡dbfd“e5dGdadd‡dbfd“e4dKdadd‡dbfd·“e5dKdadd‡dbfd·“¥Zbecd¸d¹„ ebD ƒƒZdg dº¢Zeefejgd»d¼ƒs‚e&d½d¾ƒ ddÃdÄ„ZhddÊdË„ZiddÎdÏ„Zji Zki ZlddÓdÔ„ZmG dÕdÌ„ dÌeƒZnedÖeoepgef ZqddÚdÛ„ZrddÝdÞ„Zsddâdã„ZterËeeuef ZvneZvG dädÖ„ dÖevƒZwekew_kelew_le+ `¡ D ]#\ZxZyey zdådæ¡Zye{ewdçey› ekex d ƒ e{ewdèey› elex ƒ qß[k[l[x[yG dédê„ dêewƒZ|e|Z}G dëdì„ dìejƒZ~i dídíe4dddadf“dîdîe4dddqdf“dïdïe4ddd…d?f“dðdðe4dAddqdf“dñdñe4dAdd…d?f“dòdóe4dd?ddf“dôdôe4dddxdf“dõdõe4dd?dxdf“död÷e4ddAddf“dødøe4d?dd‡df“dùdùe4d?ddŠd f“dúdúe4d?ddŠd?f“dûdûe4dEddŠdf“düdüe4dGdd‡df“dýdýe4dKdd‡df“dþdþe5dd?ddf“dÿdÿe5dddxdf“d e5dd?dxdfde5ddAddfdœ¥Zdd	d
„Z€G dd„ dejƒZ‚ddd„Zƒe „e~j…e~eh¡ e †e~j…e€¡ e ‡e~j…eƒ¡ e ˆe~j…ddg¡ e ‰e~j…d¡ dS (  é    )ÚannotationsN)ÚIteratorÚMutableMapping)ÚFraction)ÚNumberÚRational)ÚIOÚTYPE_CHECKINGÚAnyÚCallableÚNoReturnÚcasté   )ÚExifTagsÚImageÚ	ImageFileÚImageOpsÚImagePaletteÚTiffTags)Úi16be)Úi32be©Úo8)Ú	deprecate)ÚStrOrBytesPath)Úis_path©ÚTYPES)ÚBufferÚIntegralLikeFé   s   IIs   MMéÿ   é   i  i  i  i  i
  i  é  i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  éD  iE  iJ  iR  iS  i[  i  i  i˜‚  i»ƒ  iI†  is‡  ii‡  i¼  i  i–Æ  i—Æ  Úrawé   Ú
tiff_ccitté   Úgroup3é   Úgroup4é   Útiff_lzwé   Ú	tiff_jpegé   Újpegé   Útiff_adobe_deflatei€  Útiff_raw_16i€  Úpackbitsi)€  Útiff_thunderscani²€  Útiff_deflateit‡  Útiff_sgilogiu‡  Útiff_sgilog24imˆ  ÚlzmaiPÃ  ÚzstdiQÃ  Úwebpc                 C  s   i | ]\}}||“qS © r=   )Ú.0ÚkÚvr=   r=   úF/var/www/html/venv/lib/python3.10/site-packages/PIL/TiffImagePlugin.pyÚ
<dictcomp>“   s    rB   ©r   r=   )Ú1z1;I)rD   z1;IR)rD   rD   )rD   z1;R)r&   )ÚLzL;2I)rE   zL;2IR)rE   zL;2)rE   zL;2R)r*   )rE   zL;4I)rE   zL;4IR)rE   zL;4)rE   zL;4R)r2   )rE   zL;I)rE   zL;IR)rE   rE   )rE   zL;R)é   )úI;16zI;12)é   )rG   rG   )úI;16BrI   )rG   zI;16R)ÚIúI;16S)rJ   úI;16BS)r(   )é    )ÚFúF;32F)rN   úF;32BF)rJ   zI;32N)rJ   úI;32S)rJ   úI;32BS)r2   r2   )ÚLArS   )r2   r2   r2   )ÚRGBrT   )rT   zRGB;R)r2   r2   r2   r2   )ÚRGBArU   ©r   )rT   ÚRGBX)r2   r2   r2   r2   r2   ©r   r   )rT   ÚRGBXX)r2   r2   r2   r2   r2   r2   )r   r   r   )rT   ÚRGBXXX)rU   ÚRGBa)r   r   )rU   ÚRGBaX)r   r   r   )rU   ÚRGBaXX)r&   r   )rU   ÚRGBAX)r&   r   r   )rU   ÚRGBAXX)iç  )rH   rH   rH   )rT   zRGB;16L)rT   zRGB;16B)rH   rH   rH   rH   )rU   zRGBA;16L)rU   zRGBA;16B)rT   zRGBX;16L)rT   zRGBX;16B)rU   zRGBa;16L)rU   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)ÚPArb   )r`   zP;R)ÚCMYKrc   )rc   ÚCMYKX)rc   ÚCMYKXX)rc   zCMYK;16L)rc   zCMYK;16B)ÚLABrf   c                 c  s    | ]	}t |d  ƒV  qdS )r*   N)Úlen)r>   Úkey_tpr=   r=   rA   Ú	<genexpr>  ó   € ri   )ó   MM *ó   II* s   MM* s   II *s   MM +s   II+ Úlibtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rF   ÚprefixÚbytesÚreturnÚboolc                 C  s   | d d… t v S ©Nr*   )ÚPREFIXES©rn   r=   r=   rA   Ú_accept"  ó   ru   Úvalúfloat | Fraction | IFDRationalÚmax_valÚintú!tuple[IntegralLike, IntegralLike]c                 C  s<   t | ƒdk}t|rd|  n| ƒ |¡}|r|d d d… S |S )Nr   éÿÿÿÿ)ÚabsÚIFDRationalÚlimit_rational)rw   ry   ÚinvÚn_dr=   r=   rA   Ú_limit_rational&  s   r‚   r~   Úmin_valc                 C  sp   t | ƒ}|j|jf}tdd„ |D ƒƒ|k rt| t|ƒƒ}tdd„ |D ƒƒ}t|ƒ|kr6t|d |d  |ƒ}|S )Nc                 s  ó    | ]}t |ƒV  qd S ©N©Úfloat©r>   Úir=   r=   rA   ri   4  ó   € z)_limit_signed_rational.<locals>.<genexpr>c                 s  r„   r…   r†   rˆ   r=   r=   rA   ri   7  rŠ   r   r   )r   Ú	numeratorÚdenominatorÚminr‚   r}   ÚtupleÚmax)rw   ry   rƒ   Úfracr   Ú	n_d_floatr=   r=   rA   Ú_limit_signed_rational.  s   r’   ÚopÚstrr
   c                   s   d	‡ fdd„}|S )
NÚselfr~   Úargsútuple[float, ...]rp   úbool | float | Fractionc                   s   t | jˆ ƒ|Ž S r…   )ÚgetattrÚ_val©r•   r–   ©r“   r=   rA   ÚdelegateF  s   z_delegate.<locals>.delegate)r•   r~   r–   r—   rp   r˜   r=   )r“   r   r=   rœ   rA   Ú	_delegateE  s   rž   c                   @  sd  e Zd ZdZ	 dZ	dAdBd
d„ZedCdd„ƒZedDdd„ƒZdEdd„Z	dFdd„Z
dDdd„ZdGdd„ZdHd d!„ZdId#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d6ƒZ!ed7ƒZ"ed8ƒZ#ed9ƒZ$ed:ƒZ%ed;ƒZ&ed<ƒZ'ed=ƒZ(ed>ƒZ)e*e+d?ƒr°ed?ƒZ,d@S d@S )Jr~   zÀImplements 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   Úvaluerx   rŒ   rz   rp   ÚNonec                 C  sÂ   |  t |tƒr|j| _|j| _|j| _dS t |tƒr#|j| _|j| _ntr,t	t
|ƒ| _n|| _|| _|dkr=tdƒ| _dS |dkrHt|ƒ| _dS t|ƒ|krXtt|ƒ|ƒ| _dS t|| ƒ| _dS )z®
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   Únanr   )Ú
isinstancer~   r‹   rŸ   rŒ   r    rš   r   r	   r   r   r‡   rz   )r•   r¡   rŒ   r=   r=   rA   Ú__init__\  s(   


zIFDRational.__init__r   c                 C  ó   | j S r…   )rŸ   ©r•   r=   r=   rA   r‹   ~  ó   zIFDRational.numeratorc                 C  r¦   r…   )r    r§   r=   r=   rA   rŒ   ‚  r¨   zIFDRational.denominatorÚmax_denominatorútuple[IntegralLike, int]c                 C  s>   | 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©   Úfr=   r=   rA   r   †  s
   
zIFDRational.limit_rationalr”   c                 C  s   t t| jƒƒS r…   )r”   r‡   rš   r§   r=   r=   rA   Ú__repr__”  s   zIFDRational.__repr__c                 C  s
   | j  ¡ S r…   )rš   Ú__hash__r§   r=   r=   rA   r®   —  ó   
zIFDRational.__hash__ÚotherÚobjectrq   c                 C  s0   | j }t|tƒr|j }t|tƒrt|ƒ}||kS r…   )rš   r¤   r~   r‡   )r•   r°   rw   r=   r=   rA   Ú__eq__š  s   

zIFDRational.__eq__ú%list[float | Fraction | IntegralLike]c                 C  s   | j | j| jgS r…   )rš   rŸ   r    r§   r=   r=   rA   Ú__getstate__¢  rv   zIFDRational.__getstate__Ústatec                 C  s^   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Ÿ   rz   r    )r•   rµ   rš   rŸ   r    r=   r=   rA   Ú__setstate__¥  s   

zIFDRational.__setstate__Ú__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__NrC   )r¡   rx   rŒ   rz   rp   r¢   )rp   r   ©rp   rz   )r©   rz   rp   rª   ©rp   r”   )r°   r±   rp   rq   )rp   r³   )rµ   r³   rp   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=   r=   r=   rA   r~   N  s\    ÿ"






ÿÚImageFileDirectory_v2ÚidxÚsizeú$Callable[[_LoaderFunc], _LoaderFunc]c                   s   d‡ ‡fdd„}|S )NÚfuncÚ_LoaderFuncrp   c                   sB   ddl m} | j d¡r| jdd …  dd¡|ˆ < ˆ| ftˆ < | S )Nr   r   Úload_r,   Ú_ú )r   r   rÕ   Ú
startswithÚreplaceÚ_load_dispatch)rà   r   ©rÝ   rÞ   r=   rA   Ú	decoratorÜ  s
   z#_register_loader.<locals>.decorator)rà   rá   rp   rá   r=   )rÝ   rÞ   ré   r=   rè   rA   Ú_register_loaderÛ  s   rê   ú2Callable[[Callable[..., Any]], Callable[..., Any]]c                   s   d‡ fdd„}|S )Nrà   úCallable[..., Any]rp   c                   s   | t ˆ < | S r…   )Ú_write_dispatch)rà   ©rÝ   r=   rA   ré   è  s   z#_register_writer.<locals>.decorator)rà   rì   rp   rì   r=   )rÝ   ré   r=   rî   rA   Ú_register_writerç  s   rï   Úidx_fmt_nameútuple[int, str, str]r¢   c                   sb   ddl m} | \}‰ }|||< t dˆ › ¡‰	dd‡ ‡fdd„}ˆ|ft|< ‡ fdd„t|< d S )Nr   r   ú=Tr•   rÜ   Údataro   Ú
legacy_apirq   rp   útuple[Any, ...]c                   s   |   t|ƒˆ › ˆ › |¡S r…   )Ú_unpackrg   ©r•   ró   rô   ©ÚfmtrÞ   r=   rA   Úbasic_handlerö  s   z&_register_basic.<locals>.basic_handlerc                   s   d  ‡‡ fdd„|D ƒ¡S )Nó    c                 3  s    | ]	}ˆ  ˆ |¡V  qd S r…   )Ú_pack©r>   r¡   )rù   r•   r=   rA   ri   ý  rj   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>©Újoin©r•   Úvalues)rù   r§   rA   Ú<lambda>ü  s   z!_register_basic.<locals>.<lambda>©T)r•   rÜ   ró   ro   rô   rq   rp   rõ   )r   r   ÚstructÚcalcsizerç   rí   )rð   r   rÝ   Únamerú   r=   rø   rA   Ú_register_basicï  s   
ÿr  c                   @  sP  e Zd ZU dZi Zded< i Zded< 			d}d~dd„Zedd„ ƒZ	edd„ ƒZ
eddd„ƒZejd€dd„ƒZddd„Zd‚dd„Zdƒd!d"„Zd„d$d%„Zd…d(d)„Zd†d+d,„Zd‡d-d.„Zdˆd0d1„Zd‰d2d3„ZdŠd5d6„Zd‹d:d;„ZdŒd=d>„Zeeeejd?d@fejdAdBfejdCdDfej dEdFfej!dGdHfej"dIdJfej#dKdLfej$dAdBfej%dMdNfg	ƒƒ e&dOdOƒddŽdQdR„ƒZ'e(dOƒddTdU„ƒZ)e&dVdOƒdddWdX„ƒZ*e(dVƒd‘dZd[„ƒZ+e&d\d]ƒ	Pdd’d_d`„ƒZ,e(d\ƒd“dbdc„ƒZ-e&dddOƒddŽdedf„ƒZ.e(ddƒd”dgdh„ƒZ/e&did]ƒ	Pdd’djdk„ƒZ0e(diƒd“dldm„ƒZ1d•dqdr„Z2d–dsdt„Z3dudv„ Z4d—d˜dydz„Z5d™d{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Úifhro   rn   úbytes | NoneÚgroupú
int | Nonerp   r¢   c                 C  sÐ   t |ƒsdt|ƒ› d}t|ƒ‚|dur|n|dd… | _| jtkr&d| _n| jtkr/d| _nd}t|ƒ‚|d dk| _|| _i | _		 |  
¡  | jrV|  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   rE   r*   F)ru   ÚreprÚSyntaxErrorÚ_prefixÚMMÚ_endianÚIIÚ_bigtiffr  ÚtagtypeÚresetrö   ÚnextÚ_legacy_api)r•   r	  rn   r  Úmsgr=   r=   rA   r¥   G  s(   

ÿý
zImageFileDirectory_v2.__init__c                 C  r¦   r…   )r  r§   r=   r=   rA   r  n  ó    zImageFileDirectory_v2.<lambda>c                 C  r¦   r…   )Ú_offsetr§   r=   r=   rA   r  o  r  rq   c                 C  r¦   r…   )r  r§   r=   r=   rA   rô   q  r¨   z ImageFileDirectory_v2.legacy_apir¡   r   c                 C  s   d}t |ƒ‚)Nz"Not allowing setting of legacy api)Ú	Exception)r•   r¡   r  r=   r=   rA   rô   u  s   c                 C  s(   i | _ i | _i | _i | _d | _d | _d S r…   )Ú_tags_v1Ú_tags_v2Ú_tagdatar  Ú_nextr  r§   r=   r=   rA   r  z  s   
zImageFileDirectory_v2.resetr”   c                 C  s   t t| ƒƒS r…   )r”   Údictr§   r=   r=   rA   Ú__str__‚  ó   zImageFileDirectory_v2.__str__údict[str, Any]c                   s   ‡ fdd„ˆ   ¡ D ƒS )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                   s"   i | ]\}}t  |ˆ j¡j|“qS r=   )r   Úlookupr  r  )r>   Úcoder¡   r§   r=   rA   rB   ‹  s    ÿÿz/ImageFileDirectory_v2.named.<locals>.<dictcomp>)Úitemsr§   r=   r§   rA   Únamed…  s   
þzImageFileDirectory_v2.namedrz   c                 C  ó   t t| jƒt| jƒB ƒS r…   )rg   Úsetr"  r!  r§   r=   r=   rA   Ú__len__  ó   zImageFileDirectory_v2.__len__Útagr
   c                 C  sf   || j vr| j| }| j| }| j| \}}|| || jƒ| |< | j | }| jr1t|ttfƒs1|f}|S r…   )r!  r"  r  rç   rô   r¤   rŽ   ro   )r•   r0  ró   ÚtyprÞ   Úhandlerrw   r=   r=   rA   Ú__getitem__“  s   



z!ImageFileDirectory_v2.__getitem__r±   c                 C  ó   || j v p	|| jv S r…   )r!  r"  ©r•   r0  r=   r=   rA   Ú__contains__ž  ó   z"ImageFileDirectory_v2.__contains__c                 C  s   |   ||| j¡ d S r…   )Ú_setitemrô   )r•   r0  r¡   r=   r=   rA   Ú__setitem__¡  r7  z!ImageFileDirectory_v2.__setitem__rô   c              
     s  t ttf}t || j¡‰ t||ƒr|gn|}|| jvråˆ jr%ˆ j| j|< nÀtj	| j|< t
dd„ |D ƒƒrS|D ]}t|tƒs?J ‚|dk rKtj| j|<  nq6tj| j|< n’t
dd„ |D ƒƒr¶d}d}d}	|D ]/}t|tƒsmJ ‚|r|d|  krydk s|n d}|r‹d|  k rˆd	k s‹n d}|	r“|dk r“d}	qd|rtj| j|< nH|r¦tj| j|< n?|	r¯tj| j|< n6tj| j|< n/t
d
d„ |D ƒƒrÆtj| j|< nt
dd„ |D ƒƒrÖtj| j|< nt
dd„ |D ƒƒråtj| j|< | j| tj	krõdd„ |D ƒ}n| j| tjkrdd„ |D ƒ}| j| tjkot|tƒ}
|
s!t‡ fdd„|D ƒƒ}|r'| jn| j}|
s†ˆ jdksL| j| tjksLˆ jd u r†t|ƒdkr†|s†|r^| j| tjtjfv r^|f}z|\||< W d S  ty…   t d|› dt|ƒ› d¡ |d ||< Y d S w |||< d S )Nc                 s  ó    | ]}t |tƒV  qd S r…   )r¤   r~   ©r>   r@   r=   r=   rA   ri   ¯  ó   € z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>r   c                 s  r:  r…   )r¤   rz   r;  r=   r=   rA   ri   ·  r<  Tr    Fi €ÿÿi €  c                 s  r:  r…   )r¤   r‡   r;  r=   r=   rA   ri   Ë  r<  c                 s  r:  r…   )r¤   r”   r;  r=   r=   rA   ri   Í  r<  c                 s  r:  r…   )r¤   ro   r;  r=   r=   rA   ri   Ï  r<  c                 S  s&   g | ]}t |tƒr| d d¡n|‘qS )Úasciiræ   )r¤   r”   Úencoder;  r=   r=   rA   Ú
<listcomp>Ó  s    ÿÿz2ImageFileDirectory_v2._setitem.<locals>.<listcomp>c                 S  s"   g | ]}t |tƒrt|ƒn|‘qS r=   )r¤   rz   r‡   r;  r=   r=   rA   r?  Ø  s   " c                 3  s(    | ]}t |tƒrˆ  |¡n|V  qd S r…   )r¤   r”   Úcvt_enumrý   ©Úinfor=   rA   ri   Ü  s
   € ÿ
ÿr   zMetadata Warning, tag z had too many entries: z, expected 1)r   ro   r”   r   r(  r  r¤   r  ÚtypeÚ	UNDEFINEDÚallr~   ÚSIGNED_RATIONALÚRATIONALrz   ÚSHORTÚSIGNED_SHORTÚLONGÚSIGNED_LONGÚDOUBLEÚASCIIÚBYTEr$  rŽ   r   r!  Úlengthrg   Ú
ValueErrorÚwarningsÚwarn)r•   r0  r¡   rô   Ú	basetypesr  r@   ÚshortÚsigned_shortÚlongÚis_ifdÚdestr=   rA  rA   r8  ¤  s”   

þ€€þþ þÿÿúzImageFileDirectory_v2._setitemc                 C  s.   | j  |d ¡ | j |d ¡ | j |d ¡ d S r…   )r!  Úpopr   r"  r5  r=   r=   rA   Ú__delitem__  s   z!ImageFileDirectory_v2.__delitem__úIterator[int]c                 C  r,  r…   )Úiterr-  r"  r!  r§   r=   r=   rA   Ú__iter__  r/  zImageFileDirectory_v2.__iter__rù   ró   rõ   c                 C  s   t  | j| |¡S r…   )r  Úunpackr  )r•   rù   ró   r=   r=   rA   rö   
  s   zImageFileDirectory_v2._unpackr  c                 G  s   t j| j| g|¢R Ž S r…   )r  Úpackr  )r•   rù   r  r=   r=   rA   rü     r/  zImageFileDirectory_v2._packÚHrT  rE   rV  Úbzsigned byteÚhzsigned shortÚlzsigned longr¬   r‡   ÚdÚdoubler  Úlong8r   Tc                 C  ó   |S r…   r=   r÷   r=   r=   rA   Ú	load_byte!  ó   zImageFileDirectory_v2.load_byteúbytes | int | IFDRationalc                 C  s*   t |tƒr	t|ƒ}t |tƒrt|fƒ}|S r…   )r¤   r~   rz   ro   ©r•   ró   r=   r=   rA   Ú
write_byte%  s
   


z ImageFileDirectory_v2.write_byter&   c                 C  s"   |  d¡r|d d… }| dd¡S )Nó    r|   zlatin-1ræ   )ÚendswithÚdecoder÷   r=   r=   rA   Úload_string-  s   
z!ImageFileDirectory_v2.load_stringústr | bytes | intc                 C  s0   t |tƒr	t|ƒ}t |tƒs| dd¡}|d S )Nr=  ræ   rm  )r¤   rz   r”   ro   r>  ©r•   r¡   r=   r=   rA   Úwrite_string3  s
   

z"ImageFileDirectory_v2.write_stringr,   r2   ú)tuple[tuple[int, int] | IFDRational, ...]c                   óX   |   t|ƒd › d|¡}d‡fdd	„‰ t‡ fd
d„t|d d d… |dd d… ƒD ƒƒS )Nr*   rE   Úarz   ra  rp   útuple[int, int] | IFDRationalc                   ó   ˆ r| |fS t | |ƒS r…   ©r~   ©rv  ra  ©rô   r=   rA   ÚcombineB  ó   z4ImageFileDirectory_v2.load_rational.<locals>.combinec                 3  ó    | ]
\}}ˆ ||ƒV  qd S r…   r=   ©r>   ÚnumÚdenom©r|  r=   rA   ri   E  ó   € z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>r&   r   ©rv  rz   ra  rz   rp   rw  ©rö   rg   rŽ   Úzip©r•   ró   rô   Úvalsr=   ©r|  rô   rA   Úload_rational<  ó   0z#ImageFileDirectory_v2.load_rationalr~   c                   ó   d  ‡ fdd„|D ƒ¡S )Nrû   c                 3  s(    | ]}ˆ j d gt|dƒ¢R Ž V  qdS )Ú2Ll   ÿÿ N)rü   r‚   ©r>   r   r§   r=   rA   ri   I  s   € 
ÿz7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>rþ   r   r=   r§   rA   Úwrite_rationalG  s   ÿz$ImageFileDirectory_v2.write_rationalr0   c                 C  rg  r…   r=   r÷   r=   r=   rA   Úload_undefinedM  ri  z$ImageFileDirectory_v2.load_undefinedc                 C  s0   t |tƒr	t|ƒ}t |tƒrt|ƒ dd¡}|S )Nr=  ræ   )r¤   r~   rz   r”   r>  rr  r=   r=   rA   Úwrite_undefinedQ  s
   

z%ImageFileDirectory_v2.write_undefinedé
   c                   ru  )Nr*   rc  rv  rz   ra  rp   rw  c                   rx  r…   ry  rz  r{  r=   rA   r|  _  r}  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combinec                 3  r~  r…   r=   r  r‚  r=   rA   ri   b  rƒ  z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>r&   r   r„  r…  r‡  r=   r‰  rA   Úload_signed_rationalY  r‹  z*ImageFileDirectory_v2.load_signed_rationalc                   rŒ  )Nrû   c                 3  s*    | ]}ˆ j d gt|ddƒ¢R Ž V  qdS )Ú2liÿÿÿi   €N)rü   r’   rŽ  r§   r=   rA   ri   f  s
   € ÿ
ÿz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>rþ   r   r=   r§   rA   Úwrite_signed_rationald  s   þz+ImageFileDirectory_v2.write_signed_rationalÚfpú	IO[bytes]rÞ   c                 C  s8   |  |¡}t|ƒ|krd|› dt|ƒ› d}t|ƒ‚|S )Nz&Corrupt EXIF data.  Expecting to read ú bytes but only got z. )Úreadrg   ÚOSError)r•   r–  rÞ   Úretr  r=   r=   rA   Ú_ensure_readk  s   
ÿÿÿz"ImageFileDirectory_v2._ensure_readc              
   C  st  |   ¡  | ¡ | _z| jr|  d|  |d¡¡n	|  d|  |d¡¡d }t|ƒD ]Ù}| jr7|  d|  |d¡¡n	|  d|  |d	¡¡\}}}}t || j	¡j
}t |d
¡}	d|› d|› d|	› d|› d	}
z	| j| \}}W n ty{   t d|
|¡ Y q(w || }|| jr†dndkr´| ¡ }|  | jr”dnd|¡\}|
d|› d|› 7 }
| |¡ t ||¡}| |¡ n|d |… }t|ƒ|krÖt d|› dt|ƒ› d|› ¡ t |
¡ q(|sÞt |
¡ q(|| j|< || j|< |
d7 }
|
|dkr÷d|› dnt|ƒ7 }
t |
¡ q(| jr|  d|  |d¡¡n	|  d|  |d¡¡\| _W d S  ty9 }
 zt t|
ƒ¡ W Y d }
~
d S d }
~
ww )Nr  r2   r`  r&   r   ÚHHQ8sé   ÚHHL4srF   Úunknownztag: ú (ú
) - type: ú)z%s - unsupported type %sr*   rE   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   r(  r  r  r   Úgetrç   ÚKeyErrorÚloggerÚdebugÚseekr   Ú
_safe_readrg   rQ  rR  r"  r  r  r  rš  r”   )r•   r–  Ú	tag_countr‰   r0  r1  Úcountró   ÚtagnameÚtypnamer  Ú	unit_sizer2  rÞ   ÚhereÚoffsetr=   r=   rA   Úloadu  sx   
ÿüÿ
ýþ
ÿÿþÿ



 ÿý€þzImageFileDirectory_v2.loadc                 C  s`   | j |  d| jr
dnd¡ }| jr||  ddd¡7 }|| jr'|  dd¡7 }|S |  d	d¡7 }|S )
Nr`  r  é*   ÚHHr2   r   r  rH   rE   )r  rü   r  ©r•   r	  r=   r=   rA   Ú_get_ifh¸  s   þzImageFileDirectory_v2._get_ifhr   r´  c              
     sX  |   | jrdndt| jƒ¡}g }ˆ t|ƒt| jƒ| jrdnd  d 7 ‰ d }| jr+dnd}| jr2dnd}t| j ¡ ƒD ]Ý\}}|tkrGt|ƒ}| j| }	t 	d||	t
|ƒ¡ |	tjko_t|tƒ}
|
r‚t|  ¡ |d	}| j| }| ¡ D ]\}}|||< qs| ˆ ¡}nt|tƒr‰|n|f}| j|	 | g|¢R Ž }t || j¡j}|
r£d
nt |	d¡}d|› d|› d|› d|	› d	}|t|ƒdkrÇdt|ƒ› dnt|ƒ7 }t 	|¡ |
rÖd}n|	tjtjtjfv råt|ƒ}nt|ƒ}t|ƒ|krþ| ||	|| |d¡df¡ q;| ||	||   |ˆ ¡|f¡ ˆ t|ƒd d d 7 ‰ q;|d urb|| \}}	}}}|rK| j|	 \}}‡ fdd„|| || j ƒD ƒ}| j|	 | g|¢R Ž }n|   ||  !||¡d ˆ  ¡}||	|||f||< |D ]'\}}	}}}t 	d||	|t
|ƒt
|ƒ¡ ||   | jr‚dnd||	||¡7 }qd|d7 }|D ]\}}	}}}||7 }t|ƒd@ r¨|d7 }q’|S )Nr  r`  rž  rF   r*   rE   r2   zTag %s, Type: %s, Value: %s)r  Úifdr   zsave: r¡  r¢  z) - value: rH   r¤  r¥  r   rm  rû   r&   c                   s   g | ]}|ˆ  ‘qS r=   r=   )r>   rw   ©r´  r=   rA   r?  õ  ó    z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>r   z%s %s %s %s %sr  rŸ  s       )"rü   r  rg   r!  Úsortedr*  ÚSTRIPOFFSETSr  rª  r«  r  r   rJ  r¤   r$  rÜ   r¹  ÚtobytesrŽ   rí   r(  r  r  r   r¨  r”   rN  rM  rD  ÚappendÚljustrç   rô   rö   )r•   r´  ÚresultÚentriesÚstripoffsetsrù   Úfmt_sizer0  r¡   r1  rW  rº  r  Úifd_tagÚ	ifd_valueró   r°  r±  r  r¯  rÞ   r2  r=   r»  rA   r¿  À  sl   (


(



ÿ€zImageFileDirectory_v2.tobytesc                 C  sB   |  ¡ dkr| |  ¡ ¡ |  ¡ }|  |¡}| |¡ |t|ƒ S r¶   )r¦  Úwriter¹  r¿  rg   )r•   r–  r´  rÂ  r=   r=   rA   Úsave  s   

zImageFileDirectory_v2.save)r  NN)r	  ro   rn   r
  r  r  rp   r¢   )rp   rq   )r¡   rq   rp   r   ©rp   r¢   rÔ   )rp   r'  rÓ   ©r0  rz   rp   r
   ©r0  r±   rp   rq   ©r0  rz   r¡   r
   rp   r¢   )r0  rz   r¡   r
   rô   rq   rp   r¢   )r0  rz   rp   r¢   ©rp   r[  )rù   r”   ró   ro   rp   rõ   )rù   r”   r  r
   rp   ro   r  )ró   ro   rô   rq   rp   ro   )ró   rj  rp   ro   )ró   ro   rô   rq   rp   r”   )r¡   rq  rp   ro   )ró   ro   rô   rq   rp   rt  )r  r~   rp   ro   )r¡   rj  rp   ro   )r–  r—  rÞ   rz   rp   ro   )r–  r—  rp   r¢   rV   )r´  rz   rp   ro   )r–  r—  rp   rz   )7rÕ   rÖ   r×   rØ   rç   Ú__annotations__rí   r¥   rÚ   rn   r´  rô   Úsetterr  r%  r+  r.  r3  r6  r9  r8  rZ  r]  rö   rü   ÚlistÚmapr  r   rH  rJ  ÚSIGNED_BYTErI  rK  ÚFLOATrL  ÚIFDÚLONG8rê   rh  rï   rl  rp  rs  rŠ  r  r  r‘  r“  r•  rœ  rµ  r¹  r¿  rÉ  r=   r=   r=   rA   rÜ     sˆ   
 <ü'








^











÷þÿÿ
ÿ



CMrä   rã   râ   Úwrite_c                      s   e Zd ZU dZd$‡ fdd„Zed	d
„ ƒZedd
„ ƒZded< 	 e	d%dd„ƒZ
d&dd„Zd'dd„Zd(dd„Zd)dd„Zd*d d!„Zd+d"d#„Z‡  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
   Úkwargsrp   r¢   c                   s   t ƒ j|i |¤Ž d| _d S )NT)Úsuperr¥   r  )r•   r–   rÙ  ©Ú	__class__r=   rA   r¥   4  s   
zImageFileDirectory_v1.__init__c                 C  r¦   r…   )r   r§   r=   r=   rA   r  8  r  zImageFileDirectory_v1.<lambda>c                 C  r¦   r…   )r"  r§   r=   r=   rA   r  9  r  zdict[int, int]r  ÚoriginalrÜ   c                 C  s(   | |j d}|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`

        rt   )rn   r"  r  r  )ÚclsrÝ  rº  r=   r=   rA   Úfrom_v2?  s
   zImageFileDirectory_v1.from_v2c                 C  s4   t | jd}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`

        rt   )rÜ   rn   r$  r"  r  r!  )r•   rº  r=   r=   rA   Úto_v2Q  s
   zImageFileDirectory_v1.to_v2r0  r±   rq   c                 C  r4  r…   )r   r"  r5  r=   r=   rA   r6  b  r7  z"ImageFileDirectory_v1.__contains__rz   c                 C  r,  r…   )rg   r-  r"  r   r§   r=   r=   rA   r.  e  r/  zImageFileDirectory_v1.__len__r[  c                 C  r,  r…   )r\  r-  r"  r   r§   r=   r=   rA   r]  h  r/  zImageFileDirectory_v1.__iter__r¡   c                 C  s   dD ]	}|   |||¡ qd S ©N)FT)r8  )r•   r0  r¡   rô   r=   r=   rA   r9  k  s   ÿz!ImageFileDirectory_v1.__setitem__c                 C  sn   || j vr&| j| }| j| }| j| \}}dD ]}|  ||| ||ƒ|¡ q| j | }t|ttfƒs5|f}|S rá  )r   r"  r  rç   r8  r¤   rŽ   ro   )r•   r0  ró   r1  rÞ   r2  Úlegacyrw   r=   r=   rA   r3  o  s   



z!ImageFileDirectory_v1.__getitem__)r–   r
   rÙ  r
   rp   r¢   )rÝ  rÜ   rp   rØ  )rp   rÜ   rÌ  rÓ   rÎ  rÍ  rË  )rÕ   rÖ   r×   rØ   r¥   rÚ   ÚtagsÚtagdatarÏ  Úclassmethodrß  rà  r6  r.  r]  r9  r3  Ú__classcell__r=   r=   rÛ  rA   rØ  !  s   
 




rØ  c                      s¤   e Zd ZdZdZdZ	d'd(‡ fdd„Zd)dd„Zed*dd„ƒZ	d+dd„Z
d+dd„Zd*dd„Zd,dd„Zd-‡ fdd„Zd)dd „Zd)d!d"„Zd-d#d$„Zd)d%d&„Z‡  ZS ).ÚTiffImageFileÚTIFFz
Adobe TIFFFNr–  úStrOrBytesPath | IO[bytes]Úfilenameústr | bytes | Nonerp   r¢   c                   s   |  	 |  	 t ƒ  ||¡ d S r…   )rÚ  r¥   )r•   r–  rê  rÛ  r=   rA   r¥   ‰  s
   zTiffImageFile.__init__c                 C  s’   | j  d¡}|d dkr|| j  d¡7 }t|ƒ| _| jj | _| _d| _| j | _g | _	d| _
t d¡ t d| j¡ t dt|ƒ¡ |  d	¡ dS )
z#Open the first image in a TIFF filer2   r&   r  r|   Nz*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r–  r™  rÜ   Útag_v2r  Ú_TiffImageFile__firstÚ_TiffImageFile__nextÚ_TiffImageFile__frameÚ_fpÚ
_frame_posÚ	_n_framesrª  r«  r  Ú_seekr¸  r=   r=   rA   Ú_open–  s   

zTiffImageFile._openrz   c                 C  sj   | j }|d u r+|  ¡ }|  t| jƒ¡ | j d u r&|  |  ¡ d ¡ | j d u s|  |¡ | j d us2J ‚| j S )Nr   )rò  r¦  ró  rg   rñ  r¬  )r•   Úcurrent_n_framesÚcurrentr=   r=   rA   Ún_frames®  s   

ÿ
zTiffImageFile.n_framesÚframec                 C  sP   |   |¡sdS |  |¡ | jdur$| jj| jks| jj| jkr&d| _dS dS dS )z%Select a given frame as current imageN)Ú_seek_checkró  Ú_imÚimrÞ   Ú
_tile_sizeÚmode)r•   rø  r=   r=   rA   r¬  º  s   



üzTiffImageFile.seekc                 C  s|  | 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 rVd| _n| jj| _| jdkre|d | _t| jƒdkrr| jdk| _|  jd7  _t| jƒ|ks| j | j| ¡ | j | j¡ t| jv rž| jt | jd< n	d| jv r§| jd= |  ¡  t | j¡ | _| _|| _|  ¡  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–  rg   rñ  rî  ÚEOFErrorrª  r«  rï  r¦  rP  r¬  rÀ  rì  rµ  r  rò  Úis_animatedÚXMPrB  Ú_reload_exifrØ  rß  r0  rº  Ú_setup)r•   rø  r  r=   r=   rA   ró  Å  sL   û



ä

zTiffImageFile._seekc                 C  r¦   )zReturn the current frame number)rï  r§   r=   r=   rA   r¦  ñ  r¨   zTiffImageFile.tellúdict[int, dict[str, bytes]]c                 C  sÄ   i }| j  tjj¡}|r`|dd… dkr`t|dd… ƒ}t |d d d ¡d }t|d| d| … ƒ}|d| d| | … }d|i||< |t d| | d ¡d d… }|dd… dks|S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr*   s   8BIMr.   r   r&   r’  ró   )	rì  r¨  r   ÚBaseÚImageResourcesÚi16ÚmathÚceilÚi32)r•   Úblocksrw   ÚidÚnrÞ   ró   r=   r=   rA   Úget_photoshop_blocksõ  s   "ùz"TiffImageFile.get_photoshop_blocksúImage.core.PixelAccess | Nonec                   s   | j r
| jr
|  ¡ S tƒ  ¡ S r…   )ÚtileÚuse_load_libtiffÚ_load_libtiffrÚ  rµ  r§   rÛ  r=   rA   rµ  
  s   
zTiffImageFile.loadc                 C  s:   | j d u rt | j¡ tj | j| j¡| _tj 	| ¡ d S r…   )
rú  r   Ú_decompression_bomb_checkrü  ÚcoreÚnewrý  rû  r   Úload_preparer§   r=   r=   rA   r    s   
zTiffImageFile.load_preparec                 C  sd   | j sd| _|  ¡ }tjD ]}||vrq| |¡ qtj| dd tj	j
| jv r0| 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   r  ÚOrientationrì  )r•   ÚexifÚkeyr=   r=   rA   Úload_end  s   
ÿzTiffImageFile.load_endc              
   C  s   t j  | ¡ |  ¡  t| jƒdksd}t|ƒ‚| jd d }| jd d }zt| jdƒo0| j ¡ }t| jdƒr<| j 	¡  W n tyH   d}Y nw |r^t
|tƒsRJ ‚t|ƒ}||d< t|ƒ}t  | jd	|| j¡}z	| | j|¡ W n ty„ } zd
}t|ƒ|‚d}~ww | jo‹| j }t| jdƒr¢t d¡ | | j ¡ ¡\}	}
n<|rÉt d¡ |s±| j d¡ t |dtj¡}| d¡\}	}
t ||tj¡ nt d¡ | j d¡ | | j ¡ ¡\}	}
g | _d| _|   ¡  |rò| j !¡  d| _|
dk rút|
ƒ‚t j  | ¡S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r(   ÚfilenoÚflushFr&   ÚlibtiffzCouldn't set the imageNÚgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just reading)"r   rµ  r  rg   r  rš  rÛ   r–  r!  r"  r¤   rŽ   rÑ  Ú_getdecoderrý  ÚdecoderconfigÚsetimagerû  rP  Ú_exclusive_fpr   rª  r«  ro  r$  r¬  ÚosÚlseekÚSEEK_CURÚSEEK_SETr™  Úreadonlyr   Úclose)r•   r  Úextentsr–   r–  Ú	args_listÚdecoderÚeÚclose_self_fpr  ÚerrÚposr=   r=   rA   r  &  sf   
€ý
€þ




zTiffImageFile._load_libtiffc                  C  s~  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¡¡ z| j t }| j t }W n tyz } zd}t|ƒ|‚d}~ww t|tƒr…t|tƒs‹d}t|ƒ‚||f| _| j  tjj¡}|dv r¢||f| _n||f| _t
 d| j¡ | j  td¡}t|ƒdkrÍt|ƒt|ƒ  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}|t|
ƒ7 }t|	ƒ}| j  t | jdkr|dv rdnd¡}|t!krt
 "d|¡ d}t#|ƒ‚||k r&|	d|… }	n||kr4|dkr4|	| }	t|	ƒ|krAd}t#|ƒ‚| j j$||||	|
f}t
 d|¡ z	t%| \| _&}W n tys } zt
 d¡ d}t#|ƒ|‚d}~ww t
 d|¡ t
 d | j'¡ | j| j(d!< | j  t)d¡}| j  t*d¡}|rÚ|rÚ| j  t+¡}|d"kr®||f| j(d#< n,|dkr¿|d$ |d$ f| j(d#< n|du rÓ||f| j(d#< ||f| j(d%< n||f| j(d%< d } }}g | _,t-pê| jd&k| _.| j.rZ|d"kr|dd… d |dd…  }t
 d|¡ t%| \| _&}|dkr$| jd'kr$| jdkr$d(}n|d)kr,d*}n| /d+¡s8| /d,¡r@|dd-… d. }|| jd/| j j0f}| j, 1t2 3d0dd||fd|¡¡ n¹t4| j v sft5| j v rt4| j v r{| j t4 }| j  t6|¡}|}n%| j t5 }| j  t7¡}| j  t8¡}t|tƒr˜t|tƒsžd1}t|ƒ‚|}|D ]d}|| |kr´|t9|	ƒ d2 }nd}|}| jd"krÆ|| }|| }|t|ƒdf}| j, 1t2 3| j||t|| |ƒt|| |ƒf||¡¡ || }||krd|| }}||krd }}|d7 }q¢nt
 d3¡ d}t#|ƒ‚t:| j v r!| j t: | j(d4< | j'd5v r=d6d7„ | j t; D ƒ}t< =d8d9 >|¡¡| _?dS dS ):z-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: %srC   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   rT   rG   úI;16Nz;16Bz;16Lr|   ÚNFr#  zInvalid tile dimensionsr2   z- unsupported data organizationÚicc_profile©r`   rb   c                 S  s   g | ]}t |d  ƒ‘qS ©r"   r   )r>   ra  r=   r=   rA   r?  o  s    z(TiffImageFile._setup.<locals>.<listcomp>úRGB;Lrû   )@rì  rš  ÚCOMPRESSION_INFOr¨  ÚCOMPRESSIONÚ_compressionÚPLANAR_CONFIGURATIONÚ_planar_configurationÚPHOTOMETRIC_INTERPRETATIONÚ	FILLORDERrª  r«  ÚYCBCRSUBSAMPLINGÚ
IMAGEWIDTHÚIMAGELENGTHr©  Ú	TypeErrorr¤   rz   rP  rü  r   r  r  Ú_sizerÞ   ÚSAMPLEFORMATrg   r   r   ÚBITSPERSAMPLEÚEXTRASAMPLESÚSAMPLESPERPIXELÚMAX_SAMPLESPERPIXELÚerrorr  rn   Ú	OPEN_INFOÚ_moderý  rB  ÚX_RESOLUTIONÚY_RESOLUTIONÚRESOLUTION_UNITr  ÚREAD_LIBTIFFr  rn  r´  rÀ  r   Ú_Tiler¾  ÚTILEOFFSETSÚROWSPERSTRIPÚ	TILEWIDTHÚ
TILELENGTHÚsumÚ
ICCPROFILEÚCOLORMAPr   r%   rÿ   Úpalette) r•   r  ÚphotoÚ	fillorderÚxsizeÚysizer2  ÚorientationÚsample_formatÚ	bps_tupleÚextra_tupleÚ	bps_countÚbps_actual_countÚsamples_per_pixelr  ÚrawmodeÚxresÚyresÚresunitÚxÚyÚlayerrv  Úoffsetsrb  ÚwÚ	tilewidthr´  ÚstrideÚtile_rawmoder–   r_  r=   r=   rA   r  …  s8  




€þ

,þ
ÿ
ú

€ý





"

üÿ

€å
þzTiffImageFile._setupr…   )r–  ré  rê  rë  rp   r¢   rÊ  rÓ   )rø  rz   rp   r¢   )rp   r  )rp   r  )rÕ   rÖ   r×   ÚformatÚformat_descriptionr  r¥   rô  rÚ   r÷  r¬  ró  r¦  r  rµ  r  r   r  r  ræ  r=   r=   rÛ  rA   rç  „  s$    ý



,



_rç  rD   rE   rS   r`   rb   rJ   rQ   rG   rK   rN   rO   rT   rW   rU   rc   ÚYCbCrrf   rR   rI   rL   rP   )rL   rP   rû  úImage.Imager–  r—  rê  ústr | bytesc           6      C  st	  zt | j \}}}}}}W n ty% }	 zd| j› d}
t|
ƒ|	‚d }	~	ww | j}| j}t|d}| d¡r9d|_z|d }W n tyU   | j	 d¡}t
|tƒrSd }Y nw |d u r]d}n|dkrdd	}n|d
krjd}tpo|dk}d|t< | jd |t< | jd |t< d|v r‹|d }nd|v r¤|d }t
|tƒr£t ¡ }| |¡ |}ni }t dt|ƒ¡ t
|tƒr·| ¡ }|D ]/}t
|tjƒrÎ|tjv rÎ| |¡||< n| |¡||< z
|j| |j|< W q¹ tyè   Y q¹w i }t| dƒrõ| j  ¡ }i |¥t!| di ƒ¥}t"t#fD ]}||v r||= qt| dƒrNt$t%t&t't(t)fD ]0}|| j*v rL|t'kr<| j*j| tj+tj,fvr<||= q| j*| ||< | j*j| |j|< q| d| j	 d¡¡}|r_||t-< t.dft%dft&dft%dft&dft$dft/dft0dft1dft2dff
D ]\}}||v rŽ|| ||< q| d¡}|r¨d|t$< |d |t%< |d |t&< |dkr¾||t3< t4|ƒdkr¾t4|ƒ|t5< |d urÇ||t6< |dkrÐ||t#< t7|vrÚ||t7< nK| jd v r%|t7 dkr%| jd!kr |  8¡ }| ¡ }|d urt9|j:ƒD ]}t9|j;ƒD ]}|||f d"krdnd"|||f< qqÿ|} nt< =| ¡} | jd#v rb| j> ?d$d%¡}g }t4|ƒd& }t9d&ƒD ]} |d'd(„ |||  || d  … D ƒ7 }|dgd)|  7 }q>||t@< |t |t }!}"t4|ƒ|!|d  d* d+  }#tA|vr³|r¦| d,tB¡}$|#dkrŽdntC|$|# |"ƒ}%|d	kr¥tC|%d* d+ d+ |"ƒ}%n|"}%|%dkr¯d}%|%|tA< |#dkrºdn|#|tA  }&|"|tA  d |tA  }'|&d-kr×tjD|jtE< |&f|'d  |#|" |&|'d   f |tE< tFt9d|&|' |&ƒƒ|tG< tH |d¡|tI< | jd.krtJd/tKd0i L¡ D ]\}}(| M||(¡ qtNtOtPtQg})|r‰d1|v rP|d1 }*t
|*tƒr;|*dk s;|*d2krAd3}
tR|
ƒ‚|d	krLd4}
tR|
ƒ‚|*|tS< t d5¡ t d6tT| L¡ ƒ¡ d}+t|d7ƒr~z| Ud¡ | V¡ }+W n tWjXy}   Y nw i },|)tYtKtEtGtZt[g7 })t3|d i}-t\ ]| L¡ | L¡ ¡D ]v\}}.|tj^vrát!tj_d8d9ƒs®qš|tjv rºtj`|,|< n'||jv rÈ|j| |,|< nt
|.ttatbtfƒsÔqšt c|¡jd}/|/rá|/|,|< ||-vr||)vrt
|.tbƒrý|. ed:d;¡d< |-|< qšt
|.tfƒrta|.ƒ|-|< qš|.|-|< qšt#|-v r't4|-t# ƒdkr'|-t# d |-t#< t d=tT|- L¡ ƒ¡ | jd>v r9d?}t|- L¡ ƒ}0|0 g¡  |||+||0|,f}1t h| jd@|1|¡}2|2 i| j>dA| j ¡ 	 |2 etjjk¡dd … \}3}4|+ss| l|4¡ |3rwnq_|3dk rˆdB|3› dC}
t|
ƒ‚n"|)D ]}||= q‹| m|¡}5tj n| |tj oddA| j |5||#df¡g¡ dD|v r¸tp| dD|ƒ d S d S )ENzcannot write mode z as TIFFrt   Úbig_tiffTr6  r%   r/   r1   r7   r3   r   r   Útiffinfor  zTiffinfo Keys: %sr0  rì  r;  Údescriptionr8  Úx_resolutionÚy_resolutionÚresolution_unitÚsoftwareÚ	date_timeÚartistÚ	copyrightr7  r&   rC   )rD   rE   rD   r!   r<  rT   r>  r(   c                 S  s   g | ]}|d  ‘qS r=  r=   r;  r=   r=   rA   r?  +  r¼  z_save.<locals>.<listcomp>r"   r0   r2   Ú
strip_sizer    ry  )r   r   )r   r!   é€   r!   r‡  r!   Úqualityéd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr!  rm   Fr=  ræ   rm  zConverted items: %s)rI   rG   r9  r#  rX   zencoder error z when writing image fileÚ_debug_multipage)qÚ	SAVE_INFOrý  r©  rš  ÚencoderinfoÚencoderconfigrÜ   r¨  r  rB  r¤   rz   ÚWRITE_LIBTIFFrB  rÞ   rG  rH  ro   r   ÚExifrµ  rª  r«  rÑ  rØ  rà  r   r  r  r  r  rÛ   r0  r™   ÚEXIFIFDrK  rU  rS  rT  ÚIPTC_NAA_CHUNKÚPHOTOSHOP_CHUNKr  rì  rN  rD  r]  ÚIMAGEDESCRIPTIONÚSOFTWAREÚ	DATE_TIMEÚARTISTÚ	COPYRIGHTrL  rg   rN  rM  rD  Úcopyr§  ÚheightÚwidthr   Úinvertrû  Ú
getpaletter^  rY  Ú
STRIP_SIZEr   rJ  ÚSTRIPBYTECOUNTSrŽ   r¾  ÚCOMPRESSION_INFO_REVr@  rF  ÚREFERENCEBLACKWHITEr*  Ú
setdefaultrZ  r[  rX  ÚTILEBYTECOUNTSrP  ÚJPEGQUALITYr½  r¬  r!  ÚioÚUnsupportedOperationÚOSUBFILETYPEÚTRANSFERFUNCTIONÚSUBIFDÚ	itertoolsÚchainÚLIBTIFF_COREr  rÖ  r‡   r”   r(  rC  r>  r~   ÚsortÚ_getencoderr'  r   ÚMAXBLOCKrÈ  rÉ  Ú_saverW  Úsetattr)6rû  r–  rê  rk  rn   r`  rw  ÚbitsÚextrar2  r  rŒ  r  rº  r6  r#  rB  r  r  Ú
legacy_ifdÚsupplied_tagsr0  Úiccr  r7  Úinverted_imÚpxrp  ro  ÚlutÚcolormapÚcolorsr‰   rs  rb  ru  Úim_strip_sizeÚrows_per_stripÚstrip_byte_countsÚstrips_per_imageÚdefault_valueÚ	blocklistrˆ  rð  ÚtypesÚattsr¡   rC  rã  rv  ÚencoderÚerrcoderó   r´  r=   r=   rA   r¯  “  sê  
€þ


€ü


€
ÿ

ü
€úþ
€ö
€






&ÿ€
&

€


ÿÿþ
ý
 


ÿú
€
û
þ

ý
þr¯  c                   @  s:  e Zd Zg d¢Zh d£ZdRdSd
d„ZdTdd„ZdTdd„ZdTdd„ZdUdd„Z	dVdd„Z
dWdd„ZejfdXdd„ZdTdd „ZdYd#d$„ZdTd%d&„ZdZd)d*„Zd[d,d-„Zd\d.d/„ZdWd0d1„ZdWd2d3„Zed]d7d8„ƒZd^d:d;„Zd_d<d=„Zd^d>d?„Zd^d@dA„Zd^dBdC„Zd^dDdE„ZdTdFdG„ZdTdHdI„Z d`dKdL„Z!	dadbdOdP„Z"dQS )cÚAppendingTiffWriter)r   r   r   r&   r*   r2   r   r   r&   r*   r2   r*   r2   r*   r&   r*   r2   >   é  é  é	  é   r#   r$   FÚfnré  r  rq   rp   r¢   c                 C  s~   |  t |ƒr(|| _d| _zt||rdndƒ| _W n ty'   t|dƒ| _Y nw ttt |ƒ| _d| _| j 	¡ | _
|  ¡  d S )NTzw+bzr+bF)r   r  Úclose_fpÚopenr¬   rš  r   r   ro   r¦  Ú	beginningÚsetup)r•   rÊ  r  r=   r=   rA   r¥   ç  s   ÿzAppendingTiffWriter.__init__c                 C  sŒ   | j  | jtj¡ d | _d| _| j  d¡ | _}|sd| _	d S d| _	|dkr,|  
d¡ n|dkr6|  
d¡ nd	}t|ƒ‚|  ¡  |  ¡  d S )
Nr   r*   TFrl   r  rk   r  zInvalid TIFF file header)r¬   r¬  rÍ  r)  r,  ÚwhereToWriteNewIFDOffsetÚoffsetOfNewPager™  ÚIIMMÚisFirstÚ	setEndianÚRuntimeErrorÚskipIFDsÚgoToEnd)r•   Úiimmr  r=   r=   rA   rÎ  ö  s    zAppendingTiffWriter.setupc                 C  s’   | j rd S | j | j¡ | j d¡}|sd S || jkr!d}t|ƒ‚|  ¡ }|| j7 }| jd us1J ‚| j | j¡ |  	|¡ | j |¡ |  
¡  d S )Nr*   z1IIMM of new page doesn't match IIMM of first page)rÒ  r¬   r¬  rÐ  r™  rÑ  rÔ  ÚreadLongrÏ  Ú	writeLongÚfixIFD)r•   r×  r  Ú
ifd_offsetr=   r=   rA   Úfinalize  s    


zAppendingTiffWriter.finalizec                 C  s   |   ¡  |  ¡  d S r…   )rÜ  rÎ  r§   r=   r=   rA   ÚnewFrame'  s   zAppendingTiffWriter.newFramec                 C  s   | S r…   r=   r§   r=   r=   rA   Ú	__enter__,  s   zAppendingTiffWriter.__enter__r–   r±   c                 G  s   | j r	|  ¡  d S d S r…   )rË  r.  r›   r=   r=   rA   Ú__exit__/  s   ÿzAppendingTiffWriter.__exit__rz   c                 C  s   | j  ¡ | j S r…   )r¬   r¦  rÐ  r§   r=   r=   rA   r¦  3  rv   zAppendingTiffWriter.tellr´  Úwhencec                 C  s*   |t jkr
|| j7 }| j ||¡ |  ¡ S )zé
        :param offset: Distance to seek.
        :param whence: Whether the distance is relative to the start,
                       end or current position.
        :returns: The resulting position, relative to the start.
        )r)  r,  rÐ  r¬   r¬  r¦  )r•   r´  rà  r=   r=   rA   r¬  6  s   

zAppendingTiffWriter.seekc                 C  s^   | j  dtj¡ | j  ¡ }d|d  }d|  k rdk r'n n| j  t|ƒ¡ | j  ¡ | _d S )Nr   rH   )r¬   r¬  r)  ÚSEEK_ENDr¦  rÈ  ro   rÐ  )r•   r5  Ú	pad_bytesr=   r=   rA   rÖ  C  s   
zAppendingTiffWriter.goToEndÚendianr”   c                 C  s4   || _ | j › d| _| j › d| _| j › d| _d S )NrE   r`  ÚHHL)rã  ÚlongFmtÚshortFmtÚ	tagFormat)r•   rã  r=   r=   rA   rÓ  M  s   zAppendingTiffWriter.setEndianc                 C  sP   	 |   ¡ }|dkr| j ¡ d | _d S | j |¡ |  ¡ }| j |d tj¡ q)NTr   r*   rF   )rØ  r¬   r¦  rÏ  r¬  Ú	readShortr)  r+  )r•   rÛ  Únum_tagsr=   r=   rA   rÕ  S  s   øzAppendingTiffWriter.skipIFDsró   r   c                C  s   | j  |¡S r…   )r¬   rÈ  rk  r=   r=   rA   rÈ  ^  r&  zAppendingTiffWriter.writeÚ
field_sizec                 C  s.   z	ddddœ| W S  t y   d}t|ƒ‚w )Nr`  rE   r  )r&   r*   r2   zoffset is not supported)r©  rÔ  )r•   rê  r  r=   r=   rA   Ú_fmta  s   þzAppendingTiffWriter._fmtc                 C  s&   t  | j|  |¡ | j |¡¡\}|S r…   )r  r^  rã  rë  r¬   r™  )r•   rê  r¡   r=   r=   rA   Ú_readh  s   ÿzAppendingTiffWriter._readc                 C  ó
   |   d¡S ©Nr&   ©rì  r§   r=   r=   rA   rè  n  r¯   zAppendingTiffWriter.readShortc                 C  rí  rr   rï  r§   r=   r=   rA   rØ  q  r¯   zAppendingTiffWriter.readLongÚbytes_writtenr  Úexpectedc                 C  s0   | d ur| |krd| › d|› }t |ƒ‚d S d S )Nzwrote only z bytes but wanted )rÔ  )rð  rñ  r  r=   r=   rA   Ú_verify_bytes_writtent  s   þz)AppendingTiffWriter._verify_bytes_writtenr¡   c                 C  s6   | j  dtj¡ | j  t | j|¡¡}|  |d¡ d S )Néþÿÿÿr*   )	r¬   r¬  r)  r+  rÈ  r  r_  rå  rò  ©r•   r¡   rð  r=   r=   rA   ÚrewriteLastShortToLongz  s   z*AppendingTiffWriter.rewriteLastShortToLongc                 C  sB   | j  | tj¡ | j  t | j|  |¡ |¡¡}|  	||¡ d S r…   )
r¬   r¬  r)  r+  rÈ  r  r_  rã  rë  rò  )r•   r¡   rê  rð  r=   r=   rA   Ú_rewriteLast  s
   ÿz AppendingTiffWriter._rewriteLastc                 C  ó   |   |d¡S rî  ©rö  rr  r=   r=   rA   ÚrewriteLastShort†  r&  z$AppendingTiffWriter.rewriteLastShortc                 C  r÷  rr   rø  rr  r=   r=   rA   ÚrewriteLastLong‰  r&  z#AppendingTiffWriter.rewriteLastLongc                 C  ó&   | j  t | j|¡¡}|  |d¡ d S rî  )r¬   rÈ  r  r_  ræ  rò  rô  r=   r=   rA   Ú
writeShortŒ  ó   zAppendingTiffWriter.writeShortc                 C  rû  rr   )r¬   rÈ  r  r_  rå  rò  rô  r=   r=   rA   rÙ    rý  zAppendingTiffWriter.writeLongc                 C  s    |   ¡  | jr| j ¡  d S d S r…   )rÜ  rË  r¬   r.  r§   r=   r=   rA   r.  ”  s   ÿzAppendingTiffWriter.closec                 C  sÜ   |   ¡ }t|ƒD ]c}t | j| j d¡¡\}}}| j| }|| }|dk}|s3|  ¡ | j	 }	|  
|	¡ || jv ra| j ¡ }
|rN|  ||¡ | j |
d ¡ q| j |	¡ |  ||¡ | j |
¡ q|rk| j dtj¡ qd S )Nr2   r*   )rè  r§  r  r^  rç  r¬   r™  Ú
fieldSizesrØ  rÐ  rú  ÚTagsr¦  Ú_fixOffsetsr¬  r)  r+  )r•   ré  r‰   r0  Ú
field_typer¯  rê  Ú
total_sizeÚis_localr´  Úcur_posr=   r=   rA   rÚ  ™  s*   



€ézAppendingTiffWriter.fixIFDr¯  c                 C  sŽ   t |ƒD ]@}|  |¡}|| j7 }|dkr>|dkr>|dkr"d}t|ƒ‚|  |¡ | j dtj¡ |  	t
j¡ | j dtj¡ q|  ||¡ qd S )Nr&   r    r   znot implementediöÿÿÿr2   )r§  rì  rÐ  rÔ  rõ  r¬   r¬  r)  r+  rü  r   rJ  rö  )r•   r¯  rê  r‰   r´  r  r=   r=   rA   r   µ  s   


ðzAppendingTiffWriter._fixOffsetsÚisShortÚisLongc                 C  s$   |rd}n|r
d}nd}|   ||¡S )Nr&   r*   r   )r   )r•   r¯  r  r  rê  r=   r=   rA   Ú
fixOffsetsÈ  s   zAppendingTiffWriter.fixOffsetsN)F)rÊ  ré  r  rq   rp   r¢   rÊ  )rp   rÅ  )r–   r±   rp   r¢   rÓ   )r´  rz   rà  rz   rp   rz   )rã  r”   rp   r¢   )ró   r   rp   rz   )rê  rz   rp   r”   )rê  rz   rp   rz   )rð  r  rñ  rz   rp   r¢   )r¡   rz   rp   r¢   )r¡   rz   rê  rz   rp   r¢   )r¯  rz   rê  rz   rp   r¢   )FF)r¯  rz   r  rq   r  rq   rp   r¢   )#rÕ   rÖ   r×   rþ  rÿ  r¥   rÎ  rÜ  rÝ  rÞ  rß  r¦  r¤  r,  r¬  rÖ  rÓ  rÕ  rÈ  rë  rì  rè  rØ  Ústaticmethodrò  rõ  rö  rù  rú  rü  rÙ  r.  rÚ  r   r  r=   r=   r=   rA   rÅ  É  s@    	























ÿrÅ  c              	   C  sþ   | j  ¡ }| j}t| dg ¡ƒ}t| dƒs|st| ||ƒS |  ¡ }zWt|ƒ;}| g| D ]-}||_ ||_t|dƒs<d}	n|j	}	t
|	ƒD ]}
| |
¡ | ¡  t|||ƒ | ¡  qCq,W d   ƒ n1 sdw   Y  W |  |¡ d S W |  |¡ d S |  |¡ w )NÚappend_imagesr÷  r   )rŒ  r˜  r  rÑ  r¨  rÛ   r¯  r¦  rÅ  r÷  r§  r¬  rµ  rÝ  )rû  r–  rê  rŒ  r  r	  Úcur_idxÚtfÚimsÚnfrrÝ   r=   r=   rA   Ú	_save_allÔ  s2   




üøÿñr  z.tifz.tiffz
image/tiff)rn   ro   rp   rq   )rw   rx   ry   rz   rp   r{   )rw   r~   ry   rz   rƒ   rz   rp   r{   )r“   r”   rp   r
   )rÝ   rz   rÞ   rz   rp   rß   )rÝ   rz   rp   rë   )rð   rñ   rp   r¢   )rû  rz  r–  r—  rê  r{  rp   r¢   )ŠÚ
__future__r   r¤  r©  Úloggingr  r)  r  rQ  Úcollections.abcr   r   Ú	fractionsr   Únumbersr   r   Útypingr   r	   r
   r   r   r   Ú r   r   r   r   r   r   Ú_binaryr   r  r   r
  r   Ú
_deprecater   Ú_typingr   Ú_utilr   r   r   r   Ú	getLoggerrÕ   rª  rV  rŽ  r  r  r  r¦  rG  rH  rL  r@  rD  rE  r“  r¾  rN  rY  rž  rS  rT  rB  rU  r§  r”  r•  r–  Ú	PREDICTORr^  rZ  r[  rX  r¢  r¨  rM  rK  Ú
JPEGTABLESrF  r   r—  r‘  r’  r]  r  r  r£  ÚIMAGEJ_META_DATA_BYTE_COUNTSÚIMAGEJ_META_DATAr?  r*  rŸ  rQ  r   rO  rs   r™   r  ru   r‚   r’   rç   rí   rž   r~   ro   rq   rá   rê   rï   r  rz   Ú
_IFDv2BaserÜ   rÝ   r  ræ   r°  rØ  ÚImageFileDirectoryrç  r‹  r¯  ÚBytesIOrÅ  r  Úregister_openrw  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer=   r=   r=   rA   Ú<module>   s^  (  
þýüûúùø	÷
öõôóòñðïîýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8È9Ç:Æ;Å<Ä=Ã>Â?Á@ÀA¿B¾C½D¼E»FºG¹H¸I·J¶KµL´M³N²O±P°Q¯R®S­T¬U«VªW©X¨Y§Z¦[¥\¤]£^¢_¡` aŸbžcdœe›fšg™h˜i—j–k•l”m“n’o‘pqrŽstŒu‹xˆy‡z†{…~	
	     \   yýüûúùø	÷
öõôóòñðïîí
ë  8  