Ë
    ™2Úi®<  ã                   óŠ  — d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	  G d„ de«      Z
 G d	„ d
e«      Z G d„ de«      Zd„ Zd#d„Zd„ Zd„ Z G d„ de«      Zd„ Z G d„ de	j                  «      Z G d„ de	j*                  «      Z G d„ de«      Z G d„ de«      Z G d„ de	j2                  «      Zd„ Z ej8                  ej:                  ee«        ej<                  ej:                  d«        ej>                  d e«        ej>                  d!e«        ej@                  ej:                  e«        ejB                  d"e«       y)$aÑ  
Blizzard Mipmap Format (.blp)
Jerome Leclanche <jerome@leclan.ch>

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/

BLP1 files, used mostly in Warcraft III, are not fully supported.
All types of BLP2 files used in World of Warcraft are supported.

The BLP file structure consists of a header, up to 16 mipmaps of the
texture

Texture sizes must be powers of two, though the two dimensions do
not have to be equal; 512x256 is valid, but 512x200 is not.
The first mipmap (mipmap #0) is the full size image; each subsequent
mipmap halves both dimensions. The final mipmap should be 1x1.

BLP files come in many different flavours:
* JPEG-compressed (type == 0) - only supported for BLP1.
* RAW images (type == 1, encoding == 1). Each mipmap is stored as an
  array of 8-bit values, one per pixel, left to right, top to bottom.
  Each value is an index to the palette.
* DXT-compressed (type == 1, encoding == 2):
- DXT1 compression is used if alpha_encoding == 0.
  - An additional alpha bit is used if alpha_depth == 1.
  - DXT3 compression is used if alpha_encoding == 1.
  - DXT5 compression is used if alpha_encoding == 7.
é    N)ÚIntEnum)ÚBytesIOé   )ÚImageÚ	ImageFilec                   ó   — e Zd ZdZy)ÚFormatr   N)Ú__name__Ú
__module__Ú__qualname__ÚJPEG© ó    úI/var/www/html/acx/venv/lib/python3.12/site-packages/PIL/BlpImagePlugin.pyr	   r	   (   s   „ Ø�Dr   r	   c                   ó   — e Zd ZdZdZdZy)ÚEncodingr   é   é   N)r
   r   r   ÚUNCOMPRESSEDÚDXTÚUNCOMPRESSED_RAW_BGRAr   r   r   r   r   ,   s   „ Ø€LØ
€CØÑr   r   c                   ó   — e Zd ZdZdZdZy)ÚAlphaEncodingr   r   é   N)r
   r   r   ÚDXT1ÚDXT3ÚDXT5r   r   r   r   r   2   s   „ Ø€DØ€DØ�Dr   r   c                 ó<   — | dz	  dz  dz  | dz	  dz  dz  | dz  dz  fS )Né   é   r   é   é?   r   r   )Úis    r   Ú
unpack_565r$   8   s2   € Ø�"‰W˜Ñ Ñ" a¨1¡f°¡_¸Ñ$:¸QÀ¹XÈ!¹OÐKÐKr   c           	      óê  — t        | «      dz  }t        «       t        «       t        «       t        «       f}t        |«      D �]/  }|dz  }t        j                  d| |«      \  }}}t        |«      \  }	}
}t        |«      \  }}}t        d«      D ]à  }t        d«      D ]Ð  }|dz  }|dz	  }d}|dk(  r|	|
|}}}n„|dk(  r|||}}}nx|dk(  r@||kD  r"d|	z  |z   dz  }d|
z  |z   dz  }d|z  |z   dz  }nL|	|z   dz  }|
|z   dz  }||z   dz  }n3|dk(  r.||kD  r"d|z  |	z   dz  }d|z  |
z   dz  }d|z  |z   dz  }nd	\  }}}}|r||   j                  |g«       Œº||   j                  g«       ŒÒ Œâ �Œ2 |S )
úE
    input: one "row" of data (i.e. will produce 4*width pixels)
    é   z<HHIé   r   r   éÿ   r   r   )r   r   r   r   ©ÚlenÚ	bytearrayÚrangeÚstructÚunpack_fromr$   Úextend)ÚdataÚalphaÚblocksÚretÚblockÚidxÚcolor0Úcolor1ÚbitsÚr0Úg0Úb0Úr1Úg1Úb1Újr#   ÚcontrolÚaÚrÚgÚbs                         r   Údecode_dxt1rF   <   sÜ  € ô
 �‹Y˜!‰^€FÜ‹;œ	›¤Y£[´)³+Ð
>€Cä�v“ó *-ˆà�a‰iˆÜ%×1Ñ1°&¸$ÀÓDÑˆ�˜ä Ó'‰
ˆˆB�Ü Ó'‰
ˆˆB�ô �q“ò  	-ˆAÜ˜1“Xò -�ð  ™(�Ø˜q‘y�à�Ø˜a’<Ø  " b˜!�q‘AØ ’\Ø  " b˜!�q‘AØ ’\Ø ’Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.™à "™W¨™N˜Ø "™W¨™N˜Ø "™W¨™N™Ø ’\Ø ’Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.™à%/™
˜˜1˜a áØ˜‘F—M‘M 1 a¨¨A ,Õ/à˜‘F—M‘M 1 a¨ )Õ,ñ?-ò 	-ð*-ðX €Jr   c           	      ó&  — t        | «      dz  }t        «       t        «       t        «       t        «       f}t        |«      D �]M  }|dz  }| ||dz    }t        j                  d|«      }t        j                  d|d«      \  }}t        j                  d|d«      \  }t        |«      \  }	}
}t        |«      \  }}}t        d«      D ]È  }d}t        d«      D ]¶  }d|z  |z   d	z  }||   }|rd}|dz  }nd
}|dz  }|dz  }|d	d|z  |z   z  z	  dz  }|dk(  r|	|
|}}}nY|dk(  r|||}}}nM|d	k(  r"d	|	z  |z   dz  }d	|
z  |z   dz  }d	|z  |z   dz  }n&|dk(  r!d	|z  |	z   dz  }d	|z  |
z   dz  }d	|z  |z   dz  }||   j                  |g«       Œ¸ ŒÊ �ŒP |S )r&   é   z<8Bú<HHr'   ú<Ié   r(   Fr   Té   é   r   r   r   r*   )r1   r3   r4   r5   r6   r9   r7   r8   Úcoder:   r;   r<   r=   r>   r?   r@   Úhighr#   Úalphacode_indexrB   Ú
color_coderC   rD   rE   s                           r   Údecode_dxt3rR   s   sÿ  € ô
 �‹Y˜"‰_€FÜ‹;œ	›¤Y£[´)³+Ð
>€Cä�v“ó (,ˆØ�b‰jˆØ�S˜3 ™8Ð$ˆä×!Ñ! %¨Ó/ˆÜ×+Ñ+¨E°5¸!Ó<‰ˆ�ä×$Ñ$ T¨5°"Ó5‰ˆä Ó'‰
ˆˆB�Ü Ó'‰
ˆˆB�ä�q“ò 	,ˆAØˆDÜ˜1“Xò ,�Ø#$ q¡5¨1¡9°Ñ"2�Ø˜Ñ)�ÙØ �DØ˜!‘G‘Aà�DØ˜‘H�AØ�R‘�à" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?Ø  " b˜!�q‘AØ 1’_Ø  " b˜!�q‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A‘—‘˜q ! Q¨˜lÕ+ñ5,ò	,ð(,ðT €Jr   c           	      óz  — t        | «      dz  }t        «       t        «       t        «       t        «       f}t        |«      D �]÷  }|dz  }| ||dz    }t        j                  d|«      \  }}t        j                  d|d«      }|d   |d   dz  z  |d   dz  z  |d   d	z  z  }|d
   |d   dz  z  }	t        j                  d|d«      \  }
}t        j                  d|d«      \  }t        |
«      \  }}}t        |«      \  }}}t        d«      D �])  }t        d«      D �]  }dd|z  |z   z  }|dk  r	|	|z	  dz  }n|dk(  r|	dz	  |dz  dz  z  }n||dz
  z	  dz  }|d
k(  r|}nF|dk(  r|}n>||kD  rd|z
  |z  |dz
  |z  z   dz  }n$|dk(  rd
}n|dk(  rd}nd|z
  |z  |dz
  |z  z   dz  }|dd|z  |z   z  z	  dz  }|d
k(  r|||}}}nY|dk(  r|||}}}nM|dk(  r"d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }n&|dk(  r!d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }||   j                  |g«       �Œ �Œ, �Œú |S )zG
    input: one "row" of data (i.e. will produce 4 * width pixels)
    rH   z<BBz<6Br   r   r'   r(   r!   é   r   r   rI   rJ   rK   r   rL   é   r)   r*   )r1   r3   r4   r5   r6   Úa0Úa1r9   Ú
alphacode1Ú
alphacode2r7   r8   rN   r:   r;   r<   r=   r>   r?   r@   r#   rP   Ú	alphacoderB   rQ   rC   rD   rE   s                               r   Údecode_dxt5r[   ¨   sê  € ô
 �‹Y˜"‰_€FÜ‹;œ	›¤Y£[´)³+Ð
>€Cä�v“ó 9,ˆØ�b‰jˆØ�S˜3 ™8Ð$ˆä×#Ñ# E¨5Ó1‰ˆˆBä×!Ñ! %¨°Ó2ˆØ˜!‘W  Q¡¨1¡Ñ-°°a±¸B±Ñ?À4ÈÁ7ÈbÁ=ÑQˆ
Ø˜!‘W  Q¡¨1¡Ñ-ˆ
ä×+Ñ+¨E°5¸!Ó<‰ˆ�ä×$Ñ$ T¨5°"Ó5‰ˆä Ó'‰
ˆˆB�Ü Ó'‰
ˆˆB�ä�q“ó (	,ˆAÜ˜1“Xó ',�à"# q¨1¡u¨q¡y¡/�à" bÒ(Ø!+¨Ñ!>À$Ñ F‘IØ$¨Ò*Ø!+¨rÑ!1°zÀQ±È$Ñ6NÑ O‘Ià!+°À"Ñ0DÑ!EÈÑ M�Ià ’>Ø‘AØ !’^Ø‘AØ˜"’WØ˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ‘AØ !’^Ø‘AØ !’^Ø‘Aà˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�Aà" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?Ø  " b˜!�q‘AØ 1’_Ø  " b˜!�q‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A‘—‘˜q ! Q¨˜lÖ+òO',ò(	,ð#9,ðv €Jr   c                   ó   — e Zd Zy)ÚBLPFormatErrorN)r
   r   r   r   r   r   r]   r]   î   s   „ Ør   r]   c                 ó   — | d d dv S )Nr(   ©ó   BLP1ó   BLP2r   )Úprefixs    r   Ú_acceptrc   ò   s   € Ø�"�1ˆ:Ð+Ð+Ð+r   c                   ó   — e Zd ZdZdZdZd„ Zy)ÚBlpImageFilez 
    Blizzard Mipmap Format
    ÚBLPzBlizzard Mipmap Formatc                 óÎ  — | j                   j                  d«      | _        | j                   j                  dt        j
                  «       t        j                  d| j                   j                  d«      «      \  | _        | j                   j                  dt        j
                  «       t        j                  d| j                   j                  d«      «      | _	        | j                  dv r| j                  j                  «       }n#d	t        | j                  «      › �}t        |«      ‚| j                  rd
nd| _        |d| j                  z   d| j                  ddffg| _        y )Nr(   r!   ú<br   r   ú<IIr'   r_   zBad BLP magic ÚRGBAÚRGB©r   r   r   )ÚfpÚreadÚmagicÚseekÚosÚSEEK_CURr.   ÚunpackÚ_blp_alpha_depthÚ_sizeÚdecodeÚreprr]   Ú_modeÚsizeÚmodeÚtile)ÚselfÚdecoderÚmsgs      r   Ú_openzBlpImageFile._openþ   sù   € Ø—W‘W—\‘\ !“_ˆŒ
à�‰�‰�QœŸ™Ô$Ü#)§=¡=°°t·w±w·|±|ÀA³Ó#GÑ ˆÔ	à�‰�‰�QœŸ™Ô$Ü—]‘] 5¨$¯'©'¯,©,°q«/Ó:ˆŒ
à�:‰:Ð+Ñ+Ø—j‘j×'Ñ'Ó)‰Gà"¤4¨¯
©
Ó#3Ð"4Ð5ˆCÜ  Ó%Ð%à#×4Ò4‘V¸%ˆŒ
Ø˜v¨¯	©	Ñ1°1°t·y±yÀ!ÀQÐ6GÐHÐIˆ�	r   N)r
   r   r   Ú__doc__ÚformatÚformat_descriptionr   r   r   r   re   re   ö   s   „ ñð €FØ1ÐóJr   re   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú_BLPBaseDecoderTc                 ó˜   — 	 | j                  «        | j                  «        y# t        j                  $ r}d}t	        |«      |‚d }~ww xY w)NzTruncated BLP file)éÿÿÿÿr   )Ú_read_blp_headerÚ_loadr.   ÚerrorÚOSError)r|   ÚbufferÚer~   s       r   rv   z_BLPBaseDecoder.decode  sH   € ð	&Ø×!Ñ!Ô#Ø�J‰JŒLð øô �|‰|ò 	&Ø&ˆCÜ˜#“, AÐ%ûð	&ús   ‚ # £A	¶AÁA	c                 ó¶  — | j                   j                  d«       t        j                  d| j	                  d«      «      \  | _        t        j                  d| j	                  d«      «      \  | _        t        j                  d| j	                  d«      «      \  | _        t        j                  d| j	                  d«      «      \  | _        | j                   j                  dt        j                  «       t        j                  d| j	                  d«      «      | _        t        | t        «      rVt        j                  d| j	                  d«      «      \  | _        | j                   j                  dt        j                  «       t        j                  d| j	                  d«      «      | _        t        j                  d| j	                  d«      «      | _        y )	Nr(   ú<irh   r   ri   r'   ú<16Ié@   )Úfdrp   r.   rs   Ú
_safe_readÚ_blp_compressionÚ_blp_encodingrt   Ú_blp_alpha_encodingrq   rr   ry   Ú
isinstanceÚBLP1DecoderÚ_blp_offsetsÚ_blp_lengths)r|   s    r   r‡   z _BLPBaseDecoder._read_blp_header  s5  € Ø�‰�‰�QŒÜ#)§=¡=°°t·±ÀqÓ7IÓ#JÑ ˆÔ	ä &§¡¨d°D·O±OÀAÓ4FÓ GÑˆÔ	Ü#)§=¡=°°t·±ÀqÓ7IÓ#JÑ ˆÔ	Ü&,§m¡m°D¸$¿/¹/È!Ó:LÓ&MÑ#ˆÔ	!Ø�‰�‰�QœŸ™Ô$ä—M‘M %¨¯©¸Ó);Ó<ˆŒ	ä�dœKÔ(ä$*§M¡M°$¸¿¹ÈÓ8JÓ$KÑ!ˆTÔØ�G‰G�L‰L˜œBŸK™KÔ(ä"ŸM™M¨&°$·/±/À&Ó2IÓJˆÔÜ"ŸM™M¨&°$·/±/À&Ó2IÓJˆÕr   c                 óB   — t        j                  | j                  |«      S )N)r   r’   r‘   )r|   Úlengths     r   r’   z_BLPBaseDecoder._safe_read0  s   € Ü×#Ñ# D§G¡G¨VÓ4Ð4r   c                 óà   — g }t        d«      D ]B  }	 t        j                  d| j                  d«      «      \  }}}}|j                  ||||f«       ŒD |S # t        j                  $ r Y  |S w xY w)Né   ú<4Br(   )r-   r.   rs   r’   r‰   Úappend)r|   r4   r#   rE   rD   rC   rB   s          r   Ú_read_palettez_BLPBaseDecoder._read_palette3  sz   € ØˆÜ�s“ò 	%ˆAðÜ#Ÿ]™]¨5°$·/±/À!Ó2DÓE‘
��1�a˜ð �J‰J˜˜1˜a �|Õ$ð	%ð ˆ
øô —<‘<ò Ùàˆ
ðús   ’*AÁA-Á,A-c                 óP  — t        «       }t        | j                  | j                  d   «      «      }	 	 t	        j
                  d|j                  d«      «      \  }||   \  }}}}|||f}	| j                  r|	|fz  }	|j                  |	«       Œ[# t        j                  $ r Y |S w xY w)Nr   ú<Br   )
r,   r   r’   r™   r.   rs   rn   r‰   rt   r0   )
r|   Úpaletter1   Ú_dataÚoffsetrE   rD   rC   rB   Úds
             r   Ú
_read_bgraz_BLPBaseDecoder._read_bgra=  sª   € Ü‹{ˆÜ˜Ÿ™¨×(9Ñ(9¸!Ñ(<Ó=Ó>ˆØðÜ"ŸM™M¨$°·
±
¸1³Ó>‘	�ð ! ™‰JˆAˆq�!�QØ�A�q�	ˆAØ×$Ò$Ø�a�T‘	�Ø�K‰K˜ŒNð øô —<‘<ò Øð ˆðús   ´'B ÂB%Â$B%N)	r
   r   r   Ú	_pulls_fdrv   r‡   r’   r    r§   r   r   r   r„   r„     s!   „ Ø€IòòKò&5òór   r„   c                   ó   — e Zd Zd„ Zd„ Zy)r—   c                 óœ  — | j                   t        j                  k(  r| j                  «        y | j                   dk(  rm| j                  dv r<| j                  «       }| j                  |«      }| j                  t        |«      «       y dt        | j                  «      › �}t        |«      ‚dt        | j                  «      › �}t        |«      ‚)Nr   )r(   r!   zUnsupported BLP encoding zUnsupported BLP compression )r“   r	   r   Ú_decode_jpeg_streamr”   r    r§   Ú
set_as_rawÚbytesrw   r]   )r|   r£   r1   r~   s       r   rˆ   zBLP1Decoder._loadN  s®   € Ø× Ñ ¤F§K¡KÒ/Ø×$Ñ$Õ&à×"Ñ" aÒ'Ø×!Ñ! VÑ+Ø×,Ñ,Ó.�Ø—‘ wÓ/�Ø—‘¤ d£Õ,à1´$°t×7IÑ7IÓ2JÐ1KÐL�Ü$ SÓ)Ð)à0´°d×6HÑ6HÓ1IÐ0JÐKˆCÜ  Ó%Ð%r   c                 óº  — ddl m} t        j                  d| j	                  d«      «      \  }| j	                  |«      }| j	                  | j
                  d   | j                  j                  «       z
  «       | j	                  | j                  d   «      }||z   }t        |«      } ||«      }t        j                  |j                  «       |j                  dk(  r%|j                  d   \  }}}}	||||	d   dffg|_        |j                  d«      j!                  «       \  }
}}t        j"                  d|||
f«      }| j%                  |j'                  «       «       y )Nr   )ÚJpegImageFilerJ   r(   r   ÚCMYKrk   )ÚJpegImagePluginr¯   r.   rs   r’   r˜   r‘   Útellr™   r   r   Ú_decompression_bomb_checkry   rz   r{   ÚconvertÚsplitÚmerger¬   Útobytes)r|   r¯   Újpeg_header_sizeÚjpeg_headerr1   ÚimageÚdecoder_nameÚextentsr¥   ÚargsrC   rD   rE   s                r   r«   zBLP1Decoder._decode_jpeg_stream^  s"  € Ý2ä$Ÿm™m¨D°$·/±/À!Ó2DÓEÑÐ	Ø—o‘oÐ&6Ó7ˆØ�‰˜×)Ñ)¨!Ñ,¨t¯w©w¯|©|«~Ñ=Ô>Ø�‰˜t×0Ñ0°Ñ3Ó4ˆØ˜TÑ!ˆÜ�t‹}ˆÙ˜dÓ#ˆÜ×'Ñ'¨¯
©
Ô3Ø�:‰:˜ÒØ27·*±*¸Q±-Ñ/ˆL˜' 6¨4Ø'¨°&¸4À¹7ÀFÐ:KÐLÐMˆEŒJØ—-‘- Ó&×,Ñ,Ó.‰ˆˆ1ˆaÜ—‘˜E A q¨! 9Ó-ˆØ�‰˜Ÿ™›Õ(r   N)r
   r   r   rˆ   r«   r   r   r   r—   r—   M  s   „ ò&ó )r   r—   c                   ó   — e Zd Zd„ Zy)ÚBLP2Decoderc                 ód  — | j                  «       }| j                  j                  | j                  d   «       | j                  dk(  �r+| j
                  t        j                  k(  r| j                  |«      }�n| j
                  t        j                  k(  �rºt        «       }| j                  t        j                  k(  rv| j                  d   dz   dz  dz  }t        | j                  d   dz   dz  «      D ];  }t!        | j#                  |«      t%        | j&                  «      ¬«      D ]  }||z  }Œ	 Œ= �nc| j                  t        j(                  k(  r`| j                  d   dz   dz  dz  }t        | j                  d   dz   dz  «      D ]&  }t+        | j#                  |«      «      D ]  }||z  }Œ	 Œ( næ| j                  t        j,                  k(  r`| j                  d   dz   dz  dz  }t        | j                  d   dz   dz  «      D ]&  }t/        | j#                  |«      «      D ]  }||z  }Œ	 Œ( nidt1        | j                  «      › �}t3        |«      ‚d	t1        | j
                  «      › �}t3        |«      ‚d
t1        | j                  «      › �}t3        |«      ‚| j5                  t7        |«      «       y )Nr   r   r   r(   r'   )r2   rH   zUnsupported alpha encoding zUnknown BLP encoding zUnknown BLP compression )r    r‘   rp   r˜   r“   r”   r   r   r§   r   r,   r•   r   r   ry   r-   rF   r’   Úboolrt   r   rR   r   r[   rw   r]   r¬   r­   )r|   r£   r1   ÚlinesizeÚybr¦   r~   s          r   rˆ   zBLP2Decoder._loadr  s}  € Ø×$Ñ$Ó&ˆà�‰�‰�T×&Ñ& qÑ)Ô*à× Ñ  AÓ%ð ×!Ñ!¤X×%:Ñ%:Ò:Ø—‘ wÓ/’à×#Ñ#¤x§|¡|Ó3Ü “{�Ø×+Ñ+¬}×/AÑ/AÒAØ $§	¡	¨!¡¨qÑ 0°QÑ6¸Ñ:�HÜ# T§Y¡Y¨q¡\°AÑ%5¸!Ñ$;Ó<ò &˜Ü!,Ø ŸO™O¨HÓ5¼TÀ$×BWÑBWÓ=Xô"ò &˜Að ! A™I™Dñ&ò&ð ×-Ñ-´×1CÑ1CÒCØ $§	¡	¨!¡¨qÑ 0°QÑ6¸Ñ;�HÜ# T§Y¡Y¨q¡\°AÑ%5¸!Ñ$;Ó<ò &˜Ü!,¨T¯_©_¸XÓ-FÓ!Gò &˜AØ  A™I™Dñ&ñ&ð ×-Ñ-´×1CÑ1CÒCØ $§	¡	¨!¡¨qÑ 0°QÑ6¸Ñ;�HÜ# T§Y¡Y¨q¡\°AÑ%5¸!Ñ$;Ó<ò &˜Ü!,¨T¯_©_¸XÓ-FÓ!Gò &˜AØ  A™I™Dñ&ñ&ð 8¼¸T×=UÑ=UÓ8VÐ7WÐX�CÜ(¨Ó-Ð-à-¬d°4×3EÑ3EÓ.FÐ-GÐH�Ü$ SÓ)Ð)ð -¬T°$×2GÑ2GÓ-HÐ,IÐJˆCÜ  Ó%Ð%à�‰œ˜d›Õ$r   N)r
   r   r   rˆ   r   r   r   r¿   r¿   q  s   „ ó+%r   r¿   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú
BLPEncoderTc           	      ó  — d}| j                   j                  dd«      }t        t        |«      dz  «      D ]1  }||dz  |dz   dz   \  }}}}|t	        j
                  d||||«      z  }Œ3 t        |«      dk  r|dz  }t        |«      dk  rŒ|S )Nr   rj   r(   r   rž   i   s       )ÚimÚ
getpaletter-   r+   r.   Úpack)r|   r1   r£   r#   rC   rD   rE   rB   s           r   Ú_write_palettezBLPEncoder._write_palette£  s    € ØˆØ—'‘'×$Ñ$ V¨VÓ4ˆÜ”s˜7“| qÑ(Ó)ò 	3ˆAØ   Q¡¨!¨a©%°1©Ð5‰JˆAˆq�!�QØ”F—K‘K  q¨!¨Q°Ó2Ñ2‰Dð	3ô �$‹i˜'Ò!Ø�KÑˆDô �$‹i˜'Ó!àˆr   c           
      ó¦  — | j                  «       }dt        |«      z   }t        j                  d|gd¢­Ž }| j                  j
                  \  }}|t        j                  d||z  gd¢­Ž z  }||z  }t        |«      D ]F  }t        |«      D ]6  }|t        j                  d| j                  j                  ||f«      «      z  }Œ8 ŒH t        |«      d|fS )Né”   r�   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r¢   r   )rÊ   r+   r.   rÉ   rÇ   ry   r-   Úgetpixel)	r|   ÚbufsizeÚpalette_datar¥   r1   ÚwÚhÚyÚxs	            r   ÚencodezBLPEncoder.encode­  sÒ   € Ø×*Ñ*Ó,ˆà ¤3 |Ó#4Ñ4ˆÜ�{‰{˜6 6Ð8¨YÒ8ˆà�w‰w�|‰|‰ˆˆ1Ø”—‘˜F A¨¡EÐ8¨YÒ8Ñ8ˆà�Ñˆä�q“ò 	DˆAÜ˜1“Xò D�ØœŸ™ D¨$¯'©'×*:Ñ*:¸A¸q¸6Ó*BÓCÑC‘ñDð	Dô �4‹y˜!˜TÐ!Ð!r   N)r
   r   r   Ú
_pushes_fdrÊ   rÔ   r   r   r   rÅ   rÅ      s   „ Ø€Jòó"r   rÅ   c                 óÈ  — | j                   dk7  rd}t        |«      ‚| j                  j                  d«      dk(  rdnd}|j	                  |«       |j	                  t        j                  dd«      «       |j	                  t        j                  d	t        j                  «      «       |j	                  t        j                  d	| j                  j                   d
k(  rdnd«      «       |j	                  t        j                  d	d«      «       |j	                  t        j                  d	d«      «       |j	                  t        j                  dg| j                  ¢­Ž «       |dk(  rJ|j	                  t        j                  dd«      «       |j	                  t        j                  dd«      «       t        j                  | |dd| j                  z   d| j                   fg«       y )NÚPzUnsupported BLP image modeÚblp_versionÚBLP1r`   ra   rŽ   r   rh   rj   r   ri   r!   rf   rl   )rz   Ú
ValueErrorÚencoderinfoÚgetÚwriter.   rÉ   r   r   r£   ry   r   Ú_save)rÇ   rm   Úfilenamer~   ro   s        r   rÞ   rÞ   ¿  sK  € Ø	‡w�w�#‚~Ø*ˆÜ˜‹oÐà—~‘~×)Ñ)¨-Ó8¸FÒB‰GÈ€EØ‡H�HˆU„Oà‡H�HŒV�[‰[˜˜qÓ!Ô"Ø‡H�HŒV�[‰[˜œx×4Ñ4Ó5Ô6Ø‡H�HŒV�[‰[˜ B§J¡J§O¡O°vÒ$=™qÀ1ÓEÔFØ‡H�HŒV�[‰[˜˜qÓ!Ô"Ø‡H�HŒV�[‰[˜˜qÓ!Ô"Ø‡H�HŒV�[‰[˜Ð) §¡Ò)Ô*Ø�ÒØ
�‰”—‘˜T 1Ó%Ô&Ø
�‰”—‘˜T 1Ó%Ô&ä‡O�O�B˜˜e V¨b¯g©gÑ%5°q¸"¿'¹'ÐBÐCÕDr   z.blprÙ   ÚBLP2rf   )F)"r€   rq   r.   Úenumr   Úior   Ú r   r   r	   r   r   r$   rF   rR   r[   ÚNotImplementedErrorr]   rc   re   Ú	PyDecoderr„   r—   r¿   Ú	PyEncoderrÅ   rÞ   Úregister_openr�   Úregister_extensionÚregister_decoderÚregister_saveÚregister_encoderr   r   r   ú<module>rì      sE  ðñó> 
Û Ý Ý ç ôˆWô ôˆwô ô�Gô òLó4òn2òjCôL	Ð(ô 	ò,ôJ�9×&Ñ&ô Jô69�i×)Ñ)ô 9ôx!)�/ô !)ôH,%�/ô ,%ô^"�×$Ñ$ô "ò>Eð* €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ ˜×,Ñ,¨fÔ 5Ø €× Ñ �v˜{Ô +Ø €× Ñ �v˜{Ô +à €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ �u˜jÕ )r   