Ë
    z¾jŠ.  ã                  óŠ  — d dl mZ d dlZd dlZd dlZddlmZmZmZm	Z	  G d„ d«      Z
d„ Zd„ Zd	„ Z G d
„ dej                  «      Zd„ Zd„ Z ej"                  ej$                  ee«        ej&                  ej$                  e«        ej(                  ej$                  g d¢«        ej*                  ej$                  d«       y)é    )ÚannotationsNé   )ÚImageÚ	ImageFileÚImagePaletteÚ_binaryc                  ó<   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)Ú	BoxReaderz}
    A small helper class to read fields stored in JPEG2000 header boxes
    and to easily step into and read sub-boxes.
    c                óB   — || _         |dk\  | _        || _        d| _        y )Nr   éÿÿÿÿ)ÚfpÚ
has_lengthÚlengthÚremaining_in_box)Úselfr   r   s      úX/var/www/html/candidateportal/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.pyÚ__init__zBoxReader.__init__   s#   € ØˆŒØ  A™+ˆŒØˆŒØ "ˆÕó    c                ó®   — | j                   r+| j                  j                  «       |z   | j                  kD  ry| j                  dk\  r|| j                  k  S y)NFr   T)r   r   Útellr   r   )r   Ú	num_bytess     r   Ú	_can_readzBoxReader._can_read%   sH   € Ø�?Š?˜tŸw™wŸ|™|›~°	Ñ9¸D¿K¹KÒGàØ× Ñ  AÒ%à × 5Ñ 5Ñ5Ð5àr   c                ó  — | j                  |«      sd}t        |«      ‚| j                  j                  |«      }t	        |«      |k  rd|› dt	        |«      › d�}t        |«      ‚| j                  dkD  r| xj                  |z  c_        |S )NzNot enough data in headerzExpected to read z bytes but only got ú.r   )r   ÚSyntaxErrorr   ÚreadÚlenÚOSErrorr   )r   r   ÚmsgÚdatas       r   Ú_read_byteszBoxReader._read_bytes/   sƒ   € Ø�~‰~˜iÔ(Ø-ˆCÜ˜cÓ"Ð"à�w‰w�|‰|˜IÓ&ˆÜˆt‹9�yÒ Ø% i [Ð0DÄSÈÃYÀKÈqÐQˆCÜ˜#“,Ðà× Ñ  1Ò$Ø×!Ò! YÑ.Õ!Øˆr   c                óz   — t        j                  |«      }| j                  |«      }t        j                  ||«      S ©N)ÚstructÚcalcsizer!   Úunpack)r   Úfield_formatÚsizer    s       r   Úread_fieldszBoxReader.read_fields=   s1   € Ü�‰˜|Ó,ˆØ×Ñ Ó%ˆÜ�}‰}˜\¨4Ó0Ð0r   c                óz   — | j                   }| j                  |«      }t        t        j                  |«      |«      S r#   )r   r!   r
   ÚioÚBytesIO)r   r(   r    s      r   Ú
read_boxeszBoxReader.read_boxesB   s3   € Ø×$Ñ$ˆØ×Ñ Ó%ˆÜœŸ™ DÓ)¨4Ó0Ð0r   c                ó„   — | j                   r4| j                  j                  «       | j                  z   | j                  k  S y)NT)r   r   r   r   r   )r   s    r   Úhas_next_boxzBoxReader.has_next_boxG   s0   € Ø�?Š?Ø—7‘7—<‘<“> D×$9Ñ$9Ñ9¸D¿K¹KÑGÐGàr   c                ó^  — | j                   dkD  r4| j                  j                  | j                   t        j                  «       d| _         | j                  d«      \  }}|dk(  r| j                  d«      d   }d}nd}||k  s| j                  ||z
  «      sd}t        |«      ‚||z
  | _         |S )	Nr   r   z>I4sr   z>Qé   é   zInvalid header length)r   r   ÚseekÚosÚSEEK_CURr)   r   r   )r   ÚlboxÚtboxÚhlenr   s        r   Únext_box_typezBoxReader.next_box_typeM   s§   € à× Ñ  1Ò$Ø�G‰G�L‰L˜×.Ñ.´·±Ô<Ø "ˆÔð ×%Ñ% fÓ-‰
ˆˆdØ�1Š9Ø×#Ñ# DÓ)¨!Ñ,ˆDØ‰DàˆDà�$Š;˜dŸn™n¨T°D©[Ô9Ø)ˆCÜ˜cÓ"Ð"à $ t¡ˆÔØˆr   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r)   r-   r/   r9   © r   r   r
   r
      s*   „ ñó
#òòò1ò
1ò
ór   r
   c                óŽ  — | j                  d«      }t        j                  |«      }|| j                  |dz
  «      z   }t        j                  d|«      \  }}}}}}}	}	}	}	}
||z
  ||z
  f}|
dk(  r1t        j                  d|d«      }|d   dz  dz   dkD  rd	}||fS d
}||fS |
dk(  rd}||fS |
dk(  rd}||fS |
dk(  rd}||fS d}||fS )z‹Parse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.é   z>HHIIIIIIIIHr   z>Bé&   r   é   r2   úI;16ÚLÚLAé   ÚRGBé   ÚRGBAN)r   r   Úi16ber$   Úunpack_from)r   ÚhdrÚlsizÚsizÚrsizÚxsizÚysizÚxosizÚyosizÚ_Úcsizr(   ÚssizÚmodes                 r   Ú_parse_codestreamrX   c   s)  € ð �'‰'�!‹*€CÜ�=‰=˜Ó€DØ
�—‘˜˜q™Ó!Ñ
!€CÜ=C×=OÑ=OØ˜ó>Ñ:€Dˆ$��d˜E 5¨!¨Q°°1°dð �5‰L˜$ ™,Ð'€DØˆq‚yÜ×!Ñ! $¨¨RÓ0ˆØ�‰G�d‰N˜aÑ !Ò#ØˆDð �ˆ:Ðð ˆDð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð ˆà�ˆ:Ðr   c                ó0   — |dk7  rd| z  d|z  z  d|z  z  S y)zµConvert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
    calculated as (num / denom) * 10^exp and stored in dots per meter,
    to floating-point dots per inch.r   éþ   é
   i'  Nr>   )ÚnumÚdenomÚexps      r   Ú_res_to_dpir_   �   s,   € ð �‚zØ�c‘	˜R ™WÑ%¨%°%©-Ñ8Ð8ð r   c                óz  — t        | «      }d}d}|j                  «       rU|j                  «       }|dk(  r|j                  «       }n/|dk(  r|j	                  d«      d   dk(  rd}|j                  «       rŒUd}d}d}d}d}	d}
|j                  «       �r“|j                  «       }|dk(  rP|j	                  d	«      \  }}}}||f}|d
k(  r|dz  dkD  rd}�nA|d
k(  rd}�n8|dk(  rd}�n/|dk(  rd}�n&|dk(  �r d}�n|dk(  r‘|dv r�|j	                  d«      \  }}|j	                  dd|z  z   «      }t        |«      dk  rÚt        j                  «       }
t        |«      D ](  }|
j                  |j	                  dd|z  z   «      «       Œ* |dk(  rdnd}n†|dk(  r�|j                  «       }|j                  «       ra|j                  «       }|dk(  r;|j	                  d«      \  }}}}}}t        |||«      }t        |||«      }|�|�||f}	n|j                  «       rŒa|j                  «       r�Œ“|�|€d}t        |«      ‚||||	|
fS ) zªParse the JP2 header box to extract size, component count,
    color space information, and optionally DPI information,
    returning a (size, mode, mimetype, dpi) tuple.Ns   jp2hs   ftypz>4sr   s   jpx z	image/jpxs   ihdrz>IIHBr   rB   r2   rC   rD   r@   rE   rF   rG   rH   rI   s   pclr)rD   rE   z>HBú>ÚBÚPÚPAs   res s   rescz>HHHHBBzMalformed JP2 header)r
   r/   r9   r-   r)   Úmaxr   ÚrangeÚgetcolorr_   r   )r   ÚreaderÚheaderÚmimetyper7   r(   rW   ÚbpcÚncÚdpiÚpaletteÚheightÚwidthÚneÚnpcÚ	bitdepthsÚiÚresÚtresÚvrcnÚvrcdÚhrcnÚhrcdÚvrceÚhrceÚhresÚvresr   s                               r   Ú_parse_jp2_headerr   ‰   s‹  € ô �r‹]€FØ€FØ€HØ
×
Ñ
Ô
Ø×#Ñ#Ó%ˆà�7Š?Ø×&Ñ&Ó(ˆFØØ�WŠ_Ø×!Ñ! %Ó(¨Ñ+¨wÒ6Ø&�ð ×
Ñ
Õ
ð €DØ€DØ
€CØ	€BØ
€CØ€Gà
×
Ñ
Õ
Ø×#Ñ#Ó%ˆà�7Š?Ø%+×%7Ñ%7¸Ó%@Ñ"ˆF�E˜2˜sØ˜6�?ˆDØ�QŠw˜C $™J¨!Ò+Ø’Ø�q’Ø’Ø�q’Ø’Ø�q’Ø’Ø�q“Ø’Ø�WŠ_ ¨Ñ!4Ø×(Ñ(¨Ó/‰GˆB�Ø×*Ñ*¨3°#¸±)Ñ+<Ó=ˆIÜ�9‹~ Ò"Ü&×3Ñ3Ó5�Ü˜r›ò L�AØ×$Ñ$ V×%7Ñ%7¸¸sÀS¹yÑ8IÓ%JÕKðLà" cšk‘s¨t‘Ø�WŠ_Ø×#Ñ#Ó%ˆCØ×"Ñ"Ô$Ø×(Ñ(Ó*�Ø˜7’?Ø9<¿¹ÈÓ9SÑ6�D˜$  d¨D°$Ü& t¨T°4Ó8�DÜ& t¨T°4Ó8�DØÐ'¨DÐ,<Ø# T˜l˜Øð ×"Ñ"Õ$ð5 ×
Ñ
Ö
ðH €|�t�|Ø$ˆÜ˜#ÓÐà��x  gÐ-Ð-r   c                  óf   ‡ — e Zd ZdZdZd„ Zd„ Zeˆ fd„«       Zej                  d„ «       Zd„ Z
ˆ xZS )ÚJpeg2KImageFileÚJPEG2000zJPEG 2000 (ISO 15444)c                ó”  — | j                   j                  d«      }|dk(  r*d| _        t        | j                   «      \  | _        | _        n´|| j                   j                  d«      z   }|dk(  r„d| _        t        | j                   «      }|\  | _        | _        | _        }| _        |�|| j                  d<   | j                   j                  d«      j                  d	«      r| j                  «        nd
}t        |«      ‚| j                  �| j                  €d}t        |«      ‚d| _        d| _        d}d}	 | j                   j#                  «       }t%        j&                  |«      j(                  }dd| j                  z   d| j                  | j                  | j                   ||ffg| _        y # t*        $ r‘ d}	 | j                   j-                  «       }| j                   j/                  dt0        j2                  «       | j                   j-                  «       }| j                   j/                  |«       n# t*        $ r d}Y nw xY wY ŒÖw xY w)NrH   ó   ÿOÿQÚj2kr2   ó      jP  
‡
Újp2rm   é   s   jp2cÿOÿQznot a JPEG 2000 filezunable to determine size/moder   r   Újpeg2k©r   r   )r   r   ÚcodecrX   Ú_sizeÚ_moder   Úcustom_mimetypern   ÚinfoÚendswithÚ_parse_commentr   r(   rW   Ú_reduceÚlayersÚfilenor4   ÚfstatÚst_sizeÚ	Exceptionr   r3   r+   ÚSEEK_ENDÚtile)r   Úsigri   rm   r   Úfdr   Úposs           r   Ú_openzJpeg2KImageFile._openÖ   sä  € Ø�g‰g�l‰l˜1‹oˆØÐ%Ò%ØˆDŒJÜ%6°t·w±wÓ%?Ñ"ˆDŒJ˜�
à˜Ÿ™Ÿ™ Q›Ñ'ˆCàÐ=Ò=Ø"�”
Ü*¨4¯7©7Ó3�ØRXÑO�”
˜DœJ¨Ô(<¸cÀ4Ä<Ø�?Ø'*�D—I‘I˜eÑ$Ø—7‘7—<‘< Ó#×,Ñ,Ð-DÔEØ×'Ñ'Õ)à,�Ü! #Ó&Ð&à�9‰9Ð §	¡	Ð 1Ø1ˆCÜ˜cÓ"Ð"àˆŒØˆŒàˆØˆð	Ø—‘—‘Ó!ˆBÜ—X‘X˜b“\×)Ñ)ˆFð Ø˜Ÿ™Ñ"ØØ—‘˜TŸ\™\¨4¯;©;¸¸FÐCð	ð
ˆ�	øô ò 	ØˆBðØ—g‘g—l‘l“n�Ø—‘—‘˜Q¤§¡Ô,ØŸ™Ÿ™›�Ø—‘—‘˜SÕ!øÜò Ø’ðüð	ús7   Ä79F- Æ-IÆ9A9H3È2IÈ3IÈ>IÉ IÉIÉIc                ó2  — | j                   j                  d«      }t        j                  |«      }| j                   j	                  |dz
  t
        j                  «       	 | j                   j                  d«      }|sy |d   }|dv ry | j                   j                  d«      }t        j                  |«      }|dk(  r/| j                   j                  |dz
  «      dd  | j                  d<   y | j                   j	                  |dz
  t
        j                  «       Œº)Nr@   r   )é�   éÙ   éd   Úcomment)r   r   r   rJ   r3   r4   r5   r�   )r   rL   r   ÚmarkerÚtyps        r   r‘   zJpeg2KImageFile._parse_comment
  s×   € Ø�g‰g�l‰l˜1‹oˆÜ—‘˜sÓ#ˆØ�‰�‰�V˜a‘Z¤§¡Ô-àØ—W‘W—\‘\ !“_ˆFÙØØ˜‘)ˆCØ�lÑ"àØ—'‘'—,‘,˜q“/ˆCÜ—]‘] 3Ó'ˆFØ�dŠ{à'+§w¡w§|¡|°F¸Q±JÓ'?ÀÀÐ'C�—	‘	˜)Ñ$Øà—‘—‘˜V a™Z¬¯©Ô5ð r   c                ó4   •— | j                   xs
 t        ‰| �  S r#   )r’   ÚsuperÚreduce)r   Ú	__class__s    €r   r§   zJpeg2KImageFile.reduce   s   ø€ ð
 �|‰|Ò-œu™w™~Ð-r   c                ó   — || _         y r#   )r’   )r   Úvalues     r   r§   zJpeg2KImageFile.reduce'  s	   € àˆ�r   c                óÐ  — | j                   r¼| j                  r°d| j                  z  }|dz	  }t        | j                  d   |z   |z  «      t        | j                  d   |z   |z  «      f| _        | j                   d   }|d   d   | j                  | j
                  |d   d   |d   d   f}|d   d| j                  z   |d   |fg| _         t        j                  j                  | «      S )Nr   r   rF   rH   rŠ   r@   )r™   r’   Úintr(   rŒ   r“   r   Úload)r   ÚpowerÚadjustÚtÚt3s        r   r­   zJpeg2KImageFile.load+  sÝ   € Ø�9Š9˜ŸšØ˜Ÿ™Ñ%ˆEØ˜a‘ZˆFä�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4Ü�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4ðˆDŒJð —	‘	˜!‘ˆAØ�A‘$�q‘'˜4Ÿ<™<¨¯©°a¸±d¸1±g¸qÀ¹tÀA¹wÐGˆBØ˜A™$ ¨¯©Ñ 2°A°a±D¸"Ð=Ð>ˆDŒIä×"Ñ"×'Ñ'¨Ó-Ð-r   )r:   r;   r<   ÚformatÚformat_descriptionr�   r‘   Úpropertyr§   Úsetterr­   Ú__classcell__)r¨   s   @r   r�   r�   Ò   sJ   ø„ Ø€FØ0Ðò2
òh6ð, ó.ó ð.ð ‡]�]ñó ðö.r   r�   c                ó&   — | d d dk(  xs | d d dk(  S )NrH   r„   rˆ   r†   r>   )Úprefixs    r   Ú_acceptr¹   <  s+   € àˆr�ˆ
Ð)Ñ)ò 	BØ�#�2ˆ;ÐAÑAðr   c                ó  — | j                   }|j                  d«      s|j                  dd«      rd}nd}|j                  dd «      }|j                  dd «      }|j                  dd «      }|j                  d	d
«      }|j                  dd «      }	|	�5t        |	t        t
        f«      rt        d„ |	D «       «      sd}
t        |
«      ‚|j                  dd«      }|j                  dd «      }|j                  dd «      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  d«      }t        |t        «      r|j                  «       }|j                  dd«      }d}t        |d«      r	 |j                  «       }|||||	|||||||||||f| _        t        j                  | |dd| j                   z   d|fg«       y # t        $ r d}Y ŒNw xY w)Nú.j2kÚno_jp2Fr…   r‡   ÚoffsetÚtile_offsetÚ	tile_sizeÚquality_modeÚratesÚquality_layersc              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr#   )Ú
isinstancer¬   Úfloat)Ú.0Úquality_layers     r   ú	<genexpr>z_save.<locals>.<genexpr>W  s    è ø€ ò 
Ø8EŒJ�}¤s¬E l×3ñ
ùs   ‚ "z,quality_layers must be a sequence of numbersÚnum_resolutionsr   Úcodeblock_sizeÚprecinct_sizeÚirreversibleÚprogressionÚLRCPÚcinema_modeÚnoÚmctÚsignedr¢   Úpltr   r”   r‰   rŠ   )Úencoderinfor�   ÚgetrÄ   ÚlistÚtupleÚallÚ
ValueErrorÚstrÚencodeÚhasattrr”   r—   Úencoderconfigr   Ú_saver(   )Úimr   Úfilenamer�   Úkindr½   r¾   r¿   rÀ   rÂ   r   rÉ   Ú	cblk_sizerË   rÌ   rÍ   rÏ   rÑ   rÒ   r¢   rÓ   r›   s                         r   rÞ   rÞ   G  s	  € à�>‰>€Dà×Ñ˜Ô  D§H¡H¨X°uÔ$=Ø‰àˆà�X‰X�h Ó%€FØ—(‘(˜=¨$Ó/€KØ—‘˜ dÓ+€IØ—8‘8˜N¨GÓ4€LØ—X‘XÐ.°Ó5€NØÐ!Ü�>¤D¬% =Ô1Üñ 
ØIWô
ô 
ð =ˆÜ˜‹oÐà—h‘hÐ0°!Ó4€OØ—‘Ð)¨4Ó0€IØ—H‘H˜_¨dÓ3€MØ—8‘8˜N¨EÓ2€LØ—(‘(˜=¨&Ó1€KØ—(‘(˜=¨$Ó/€KØ
�(‰(�5˜!Ó
€CØ�X‰X�h Ó&€FØ�h‰h�yÓ!€GÜ�'œ3ÔØ—.‘.Ó"ˆØ
�(‰(�5˜%Ó
 €Cà	€BÜˆr�8Ôð	Ø—‘“ˆBð
 	ØØØØØØØØØØØØØ
ØØð!€BÔô& ‡O�O�B˜˜h¨°·±Ñ(8¸!¸TÐBÐCÕDøô- ò 	ØŠBð	ús   Æ(G9 Ç9HÈH)z.jp2r»   z.jpcz.jpfz.jpxz.j2cz	image/jp2)Ú
__future__r   r+   r4   r$   Ú r   r   r   r   r
   rX   r_   r   r�   r¹   rÞ   Úregister_openr²   Úregister_saveÚregister_extensionsÚregister_mimer>   r   r   ú<module>ré      sÂ   ðõ  #ã 	Û 	Û ç 5Ó 5÷Gñ GòTò<9òB.ôRg.�i×)Ñ)ô g.òTò>EðJ €× Ñ �O×*Ñ*¨O¸WÔ EØ €× Ñ �O×*Ñ*¨EÔ 2à €× Ñ Ø×ÑÒLôð €× Ñ �O×*Ñ*¨KÕ 8r   