§
    dÒ³gDQ  ã                   ó  — U d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ erddlmZ ddlZdZeej        eej        f         Zeee	f         Z  G d„ d	e!¦  «        Z"d
ede#fd„Z$de!defd„Z%dede&defd„Z'	 dVdee#ef         dededefd„Z(de&de&de&de&fd„Z)de&de&de&de&d e#de#fd!„Z*ee+e+f         Z,ee+e+e+e+f         Z-ee+e+e+e+e+e+f         Z.eee         eee+e+f         eee+e+e+e+f         eee+e+e+e+e+e+f         f         Z/d"Z0e.e1d#<   d$e.d%e.de.fd&„Z2d'e.d(e,de.fd)„Z3d'e.d(e,de,fd*„Z4d'e.d(e,de,fd+„Z5d,e!de6fd-„Z7 ed.¦  «        Z8d/ee8         dee8         fd0„Z9de
e8ge6f         d/ee8         deee8         ee8         f         fd1„Z:d2e+d3e+d4e&de;fd5„Z<d6ee,         de-fd7„Z=	 dWd8ee8         d9e
e8ge+f         d:ee8         dee8         fd;„Z>d<e&d8ee8         deee8d=f                  fd>„Z?dXde#d?e&de&fd@„Z@dA A                    dB„ dCD ¦   «         ¦  «        ZBde#defdD„ZCd,edefdE„ZDdFe-defdG„ZEd'e.defdH„ZFdIdJdKdJde,fdL„ZG edMdJ¬N¦  «        ZH G dO„ dPeeH         ¦  «        ZIg dQ¢ZJg dR¢ZKdSe&defdT„ZLdSe&defdU„ZMdS )Yz
Miscellaneous Routines.
é    N)Úescape)ÚAnyÚBinaryIOÚCallableÚDictÚGenericÚIterableÚIteratorÚListÚOptionalÚSetÚTextIOÚTupleÚTypeVarÚUnionÚTYPE_CHECKINGÚcasté   )ÚLTComponentiÿÿÿc                   óN   — e Zd ZdZdedededdfd„Zdefd„Zd	e	d
e	de	ddfd„Z
dS )Úopen_filenamez¿
    Context manager that allows opening a filename
    (str or pathlib.PurePath type is supported) and closes it on exit,
    (just like `open`), but does nothing for file-like objects.
    ÚfilenameÚargsÚkwargsÚreturnNc                 ór  — t          |t          j        ¦  «        rt          |¦  «        }t          |t          ¦  «        rt	          |g|¢R i |¤Ž| _        d| _        d S t          |t          j        ¦  «        r#t          t          |¦  «        | _        d| _        d S t          dt          |¦  «        z  ¦  «        ‚)NTFzUnsupported input type: %s)Ú
isinstanceÚpathlibÚPurePathÚstrÚopenÚfile_handlerÚclosingÚioÚIOBaser   ÚAnyIOÚ	TypeErrorÚtype)Úselfr   r   r   s       úL/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pdfminer/utils.pyÚ__init__zopen_filename.__init__1   s¬   € Ý�h¥Ô 0Ñ1Ô1ð 	%Ý˜8‘}”}ˆHÝ�h¥Ñ$Ô$ð 	KÝ'+¨HÐ'F°tÐ'FÐ'FÐ'F¸vÐ'FÐ'FˆDÔØˆDŒLˆLˆLÝ˜¥"¤)Ñ,Ô,ð 	KÝ $¥U¨HÑ 5Ô 5ˆDÔØ ˆDŒLˆLˆLåÐ8½4À¹>¼>ÑIÑJÔJÐJó    c                 ó   — | j         S ©N)r"   ©r)   s    r*   Ú	__enter__zopen_filename.__enter__=   s   € ØÔ Ð r,   Úexc_typeÚexc_valÚexc_tbc                 óJ   — | j         r| j                             ¦   «          d S d S r.   )r#   r"   Úclose)r)   r1   r2   r3   s       r*   Ú__exit__zopen_filename.__exit__@   s1   € ØŒ<ð 	&ØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
FileOrNamer   r+   r&   r0   Úobjectr6   © r,   r*   r   r   *   s¡   € € € € € ðð ð
K ð 
K°Cð 
KÀ3ð 
KÈ4ð 
Kð 
Kð 
Kð 
Kð!˜5ð !ð !ð !ð !ð& ð &°&ð &À&ð &ÈTð &ð &ð &ð &ð &ð &r,   r   Úin_strr   c                 óœ   — t          | t          ¦  «        s$J t          t          | ¦  «        ¦  «        ¦   «         ‚|                      ¦   «         S )z'Converts to bytes, encoding to unicode.)r   r    r(   Úencode)r>   s    r*   Úmake_compat_bytesrA   E   s<   € å�f�cÑ"Ô"Ð5Ð5¥C­¨V©¬Ñ$5Ô$5Ñ5Ô5Ð5Ø�=Š=‰?Œ?Ðr,   Úoc                 óè   — t          | t          ¦  «        rOt          j        | ¦  «        }	 |                      |d         ¦  «        S # t
          $ r t          | ¦  «        cY S w xY wt          | ¦  «        S )z>Converts everything to string, if bytes guessing the encoding.Úencoding)r   ÚbytesÚcharset_normalizerÚdetectÚdecodeÚUnicodeDecodeErrorr    )rB   Úencs     r*   Úmake_compat_strrK   K   sv   € å�!•UÑÔð Ý Ô'¨Ñ*Ô*ˆð	Ø—8’8˜C 
œOÑ,Ô,Ð,øÝ!ð 	ð 	ð 	Ý�q‘6”6ˆMˆMˆMð	øøøõ �1‰vŒvˆs   «A ÁA"Á!A"ÚsÚsizec                 óª   — |dk     r
| d |…         S t          | ¦  «        |k    r/|dz
  dz  }d                     | d |…         | | d …         ¦  «        S | S )Né   é   é   z	{} ... {})ÚlenÚformat)rL   rM   Úlengths      r*   Úshorten_strrU   W   sa   € Øˆa‚x€xØ��$�ŒxˆÝ
ˆ1�v„v�‚}€}Ø˜‘(˜q‘ˆØ×!Ò! ! G V G¤*¨a°°°°¬kÑ:Ô:Ð:àˆr,   úutf-8ÚignoreÚbytesorstringrD   Ú	erractionc                 óÎ   — t          | t          ¦  «        r| S t          | t          ¦  «        s$J t          t          | ¦  «        ¦  «        ¦   «         ‚|                      ||¦  «        S )z^When Py2 str.encode is called, it often means bytes.encode in Py3.

    This does either.
    )r   r    rE   r(   rH   )rX   rD   rY   s      r*   Úcompatible_encode_methodr[   a   s`   € õ �-¥Ñ%Ô%ð ØÐÝ�m¥UÑ+Ô+ÐEÐE­Sµ°mÑ1DÔ1DÑ-EÔ-EÑEÔEÐEØ×Ò ¨)Ñ4Ô4Ð4r,   ÚleftÚaboveÚ
upper_leftc                 ó®   — | |z   |z
  }t          || z
  ¦  «        }t          ||z
  ¦  «        }t          ||z
  ¦  «        }||k    r||k    r| S ||k    r|S |S r.   )Úabs)r\   r]   r^   ÚpÚpaÚpbÚpcs          r*   Úpaeth_predictorre   n   sm   € ð 	ˆu‰�zÑ!€Aå	ˆQ�‰X‰Œ€BÝ	ˆQ�‰Y‰Œ€BÝ	ˆQ�‰^Ñ	Ô	€Bð 
ˆR‚x€x�B˜"’H�HØˆØ	ˆrŠˆØˆàÐr,   ÚpredÚcolorsÚcolumnsÚbitspercomponentÚdatac                 óˆ  — |dvrd|z  }t          |¦  «        ‚||z  |z  dz  }||z  dz  }d}d|z  }	t          dt          |¦  «        |dz   ¦  «        D �]ì}
||
         }||
dz   |
dz   |z   …         }d}|dk    r||z  }�n¸|dk    rVt          |¦  «        D ]D\  }}||z
  dk     rd}nt	          |||z
           ¦  «        }||z   dz  }|t          |f¦  «        z  }ŒE�n\|d	k    r3t          ||	¦  «        D ] \  }}||z   dz  }|t          |f¦  «        z  }Œ!�n#|d
k    rpt          |¦  «        D ]_\  }}||z
  dk     rd}nt	          |||z
           ¦  «        }t	          |	|         ¦  «        }|||z   d	z  z   dz  }|t          |f¦  «        z  }Œ`n­|dk    r•t          |¦  «        D ]„\  }}||z
  dk     rd}d}n0t	          |||z
           ¦  «        }t	          |	||z
           ¦  «        }t	          |	|         ¦  «        }t          |||¦  «        }||z   dz  }|t          |f¦  «        z  }Œ…nt          d|z  ¦  «        ‚||z  }|}	�Œî|S )zxReverse the effect of the PNG predictor

    Documentation: http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
    )é   r   z"Unsupported `bitspercomponent': %drl   r,   ó    r   r   éÿ   rQ   é   é   zUnsupported predictor value: %d)Ú
ValueErrorÚrangerR   Ú	enumerateÚintrE   Úzipre   )rf   rg   rh   ri   rj   ÚmsgÚnbytesÚbppÚbufÚ
line_aboveÚ
scanline_iÚfilter_typeÚline_encodedÚrawÚjÚsub_xÚ	raw_x_bppÚraw_xÚup_xÚprior_xÚ	average_xÚpaeth_xÚprior_x_bppÚpaeths                           r*   Úapply_png_predictorr‰   €   s  € ð ˜vÐ%Ð%Ø2Ð5EÑEˆÝ˜‰oŒoÐà�gÑÐ 0Ñ0°AÑ5€FØ
Ð#Ñ
# qÑ
(€CØ
€CØ˜7Ñ"€JÝ˜A�s 4™yœy¨&°1©*Ñ5Ô5ð Nñ Nˆ
Ø˜:Ô&ˆØ˜J¨™N¨Z¸!©^¸fÑ-DÐDÔEˆØˆà˜!ÒÐà�<ÑˆC‰Cà˜AÒÐõ & lÑ3Ô3ð 'ð '‘��5Ø�s‘7˜Q’;�;Ø !�I�Iå # C¨¨C©¤LÑ 1Ô 1�IØ Ñ*¨cÑ1�Ø•u˜e˜X‘”Ñ&��ñ'ð ˜AÒÐõ $' |°ZÑ#@Ô#@ð 'ð '‘��wØ ™¨3Ñ.�Ø•u˜e˜X‘”Ñ&��ñ'ð ˜AÒÐõ !*¨,Ñ 7Ô 7ð 'ð '‘��9Ø�s‘7˜Q’;�;Ø !�I�Iå # C¨¨C©¤LÑ 1Ô 1�IÝ˜j¨œmÑ,Ô,�Ø" i°'Ñ&9¸aÑ%?Ñ?À3ÑF�Ø•u˜e˜X‘”Ñ&��ð'ð ˜AÒÐõ (¨Ñ5Ô5ð 
'ð 
'‘
��7Ø�s‘7˜Q’;�;Ø !�IØ"#�K�Kå # C¨¨C©¤LÑ 1Ô 1�IÝ"% j°°S±Ô&9Ñ":Ô":�KÝ˜j¨œmÑ,Ô,�Ý'¨	°7¸KÑHÔH�Ø  5™¨CÑ/�Ø•u˜e˜X‘”Ñ&��ð
'õ Ð>ÀÑLÑMÔMÐMàˆs‰
ˆØˆ
‰
Ø€Jr,   )r   r   r   r   r   r   ÚMATRIX_IDENTITYÚm1Úm0c                 ó°   — | \  }}}}}}|\  }}	}
}}}	 ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |z   |	|z  ||z  z   |z   fS r.   r=   )r‹   rŒ   Úa1Úb1Úc1Úd1Úe1Úf1Úa0Úb0Úc0Úd0Úe0Úf0s                 r*   Úmult_matrixrš   ï   s�   € Ø!Ñ€RˆˆR��R˜Ø!Ñ€RˆˆR��R˜Ø5à
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'Ñ˜BÑØ
ˆR‰�"�r‘'Ñ˜BÑðð r,   ÚmÚvc                 ó^   — | \  }}}}}}|\  }}	||||||z  |	|z  z   |z   ||z  |	|z  z   |z   fS )zTranslates a matrix by (x, y).r=   ©
r›   rœ   ÚaÚbÚcÚdÚeÚfÚxÚys
             r*   Útranslate_matrixr§   ý   sR   € àÑ€Qˆˆ1ˆa��AØ�F€QˆØˆa��A�q˜1‘u˜q 1™u‘} qÑ(¨!¨a©%°!°a±%©-¸!Ñ*;Ð;Ð;r,   c                 óX   — | \  }}}}}}|\  }}		 ||z  ||	z  z   |z   ||z  ||	z  z   |z   fS r.   r=   rž   s
             r*   Úapply_matrix_ptr©     sM   € ØÑ€Qˆˆ1ˆa��AØ�F€QˆØ&Øˆq‰5�1�q‘5‰=˜1Ñ˜a !™e a¨!¡e™m¨aÑ/Ð/Ð/r,   c                 óJ   — | \  }}}}}}|\  }}	||z  ||	z  z   ||z  ||	z  z   fS )zCEquivalent to apply_matrix_pt(M, (p,q)) - apply_matrix_pt(M, (0,0))r=   )
r›   rœ   rŸ   r    r¡   r¢   r£   r¤   ra   Úqs
             r*   Úapply_matrix_normr¬     s@   € àÑ€Qˆˆ1ˆa��AØ�F€QˆØˆq‰5�1�q‘5‰=˜!˜a™% ! a¡%™-Ð'Ð'r,   r¥   c                 ó:   — t          | t          t          f¦  «        S r.   )r   rt   Úfloat©r¥   s    r*   Úisnumberr°     s   € Ý�a�#�u˜Ñ&Ô&Ð&r,   Ú_TÚobjsc              #   ól   K  — t          ¦   «         }| D ] }||v rŒ|                     |¦  «         |V — Œ!dS )zEliminates duplicated elements.N)ÚsetÚadd)r²   ÚdoneÚobjs      r*   Úuniqr¸     sI   è è € å‰5Œ5€DØð ð ˆØ�$ˆ;ˆ;ØØ�Š�‰ŒˆØˆ	ˆ	ˆ	ˆ	Ø
€Fr,   c                 óˆ   — g }g }|D ]8} | |¦  «        r|                      |¦  «         Œ#|                      |¦  «         Œ9||fS )z9Split a list into two classes according to the predicate.)Úappend)rf   r²   Útr¤   r·   s        r*   Úfsplitr¼   '  sV   € à
€AØ
€AØð ð ˆØˆ4�‰9Œ9ð 	Ø�HŠH�S‰MŒMˆMˆMà�HŠH�S‰MŒMˆMˆMØˆaˆ4€Kr,   Úv0Úv1r¢   c                 óh   — t          t          | ¦  «        |z  t          ||z   ¦  «        |z  ¦  «        S )zReturns a discrete range.)rr   rt   )r½   r¾   r¢   s      r*   ÚdrangerÀ   3  s+   € å•�R‘”˜A‘�s 2¨¡6™{œ{¨aÑ/Ñ0Ô0Ð0r,   Úptsc                 óä   — t           t           t            t            f}|\  }}}}| D ]E\  }}t          ||¦  «        }t          ||¦  «        }t          ||¦  «        }t          ||¦  «        }ŒF||||fS )z7Compute a minimal rectangle that covers all the points.)ÚINFÚminÚmax)rÁ   ÚlimitÚx0Úy0Úx1Úy1r¥   r¦   s           r*   Ú	get_boundrË   8  sy   € å��c˜T¥C 4Ð(€EØÑ€RˆˆR�Øð ð ‰ˆˆAÝ��Q‰ZŒZˆÝ��Q‰ZŒZˆÝ��Q‰ZŒZˆÝ��Q‰ZŒZˆˆØˆr�2�rˆ>Ðr,   ÚseqÚfuncÚmaxobjc                 óB   — d}| D ]} ||¦  «        }|�||k     r||}}Œ|S )z;Picks the object obj where func(obj) has the highest value.Nr=   )rÌ   rÍ   rÎ   Úmaxscorer·   Úscores         r*   ÚpickrÒ   D  sD   € ð €HØð .ð .ˆØ��S‘	”	ˆØÐ˜x¨%Ò/Ð/Ø"'¨�vˆXøØ€Mr,   Ún.c              #   óŽ   K  — g }|D ]=}|                      |¦  «         t          |¦  «        | k    rt          |¦  «        V — g }Œ>dS )z$Groups every n elements of the list.N)rº   rR   Útuple)rÓ   rÌ   Úrr¥   s       r*   Úchoplistr×   P  sR   è è € à
€AØð ð ˆØ	�Š�‰ŒˆÝˆq‰6Œ6�QŠ;ˆ;Ý˜‘(”(ˆNˆNˆNØˆAøØ
€Fr,   Údefaultc                 ó  — t          | ¦  «        }|s|S |dk    rt          | ¦  «        S |dk    r.t          t          t	          j        d| ¦  «        d         ¦  «        S |dk    r1t          t          t	          j        dd| z   ¦  «        d         ¦  «        S |dk    r.t          t          t	          j        d| ¦  «        d         ¦  «        S |d	k    r.t          t          t	          j        d
| ¦  «        d         ¦  «        S t          d|z  ¦  «        ‚)z/Unpacks 1 to 4 or 8 byte integers (big endian).r   rQ   z>Hr   ro   z>Lrm   rp   rl   z>Qzinvalid length: %d)rR   Úordr   rt   ÚstructÚunpackr'   )rL   rØ   rT   s      r*   ÚnunpackrÝ   [  sî   € å�‰VŒV€FØð 7ØˆØ	�1ŠˆÝ�1‰vŒvˆØ	�1ŠˆÝ•C�œ t¨QÑ/Ô/°Ô2Ñ3Ô3Ð3Ø	�1ŠˆÝ•C�œ t¨W°q©[Ñ9Ô9¸!Ô<Ñ=Ô=Ð=Ø	�1ŠˆÝ•C�œ t¨QÑ/Ô/°Ô2Ñ3Ô3Ð3Ø	�1ŠˆÝ•C�œ t¨QÑ/Ô/°Ô2Ñ3Ô3Ð3åÐ,¨vÑ5Ñ6Ô6Ð6r,   Ú c              #   ó4   K  — | ]}t          |¦  «        V — Œd S r.   )Úchr)Ú.0r¥   s     r*   ú	<genexpr>râ   n  sD   è è € ð Dð Dà	õ ˆ�F„FðDð Dð Dð Dð Dð Dr,   (   r   r   rQ   ro   rp   rP   é   rO   rl   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   rñ   iØ  iÇ  iÆ  iÙ  iÝ  iÛ  iÚ  iÜ  é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é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   év   éw   éx   éy   éz   é{   é|   é}   é~   r   i"   i    i!   i&   i   i   i’  iD   i9   i:   i"  i0   i   i   i   i   i   i   i"!  iû  iû  iA  iR  i`  ix  i}  i1  iB  iS  ia  i~  r   i¬   é¡   é¢   é£   é¤   é¥   é¦   é§   é¨   é©   éª   é«   é¬   r   é®   é¯   é°   é±   é²   é³   é´   éµ   é¶   é·   é¸   é¹   éº   é»   é¼   é½   é¾   é¿   éÀ   éÁ   éÂ   éÃ   éÄ   éÅ   éÆ   éÇ   éÈ   éÉ   éÊ   éË   éÌ   éÍ   éÎ   éÏ   éÐ   éÑ   éÒ   éÓ   éÔ   éÕ   éÖ   é×   éØ   éÙ   éÚ   éÛ   éÜ   éÝ   éÞ   éß   éà   éá   éâ   éã   éä   éå   éæ   éç   éè   éé   éê   éë   éì   éí   éî   éï   éð   éñ   éò   éó   éô   éõ   éö   é÷   éø   éù   éú   éû   éü   éý   éþ   rn   c                 óœ   — |                       d¦  «        rt          | dd…         dd¦  «        S d                     d„ | D ¦   «         ¦  «        S )z+Decodes a PDFDocEncoding string to Unicode.s   þÿrQ   Nzutf-16berW   rÞ   c              3   ó0   K  — | ]}t           |         V — Œd S r.   )ÚPDFDocEncoding)rá   r¡   s     r*   râ   zdecode_text.<locals>.<genexpr>z  s'   è è € Ð4Ð4¨Q•~ aÔ(Ð4Ð4Ð4Ð4Ð4Ð4r,   )Ú
startswithr    Újoin)rL   s    r*   Údecode_textr³  u  sQ   € à‡|‚|�KÑ Ô ð 5Ý�1�Q�R�R”5˜* hÑ/Ô/Ð/à�wŠwÐ4Ð4°!Ð4Ñ4Ô4Ñ4Ô4Ð4r,   c                 óN   — t          | t          ¦  «        rdS t          | ¦  «        S )z"Encodes a string for SGML/XML/HTMLrÞ   )r   rE   r   r¯   s    r*   rJ   rJ   }  s%   € å�!•UÑÔð ØˆrÝ�!‰9Œ9Ðr,   Úbboxc                 ó@   — | \  }}}}d                      ||||¦  «        S )Nz{:.3f},{:.3f},{:.3f},{:.3f}©rS   )rµ  rÇ   rÈ   rÉ   rÊ   s        r*   Úbbox2strr¸  „  s*   € ØÑ€RˆˆR�Ø(×/Ò/°°B¸¸BÑ?Ô?Ð?r,   c                 óH   — | \  }}}}}}d                      ||||||¦  «        S )Nz.[{:.2f},{:.2f},{:.2f},{:.2f}, ({:.2f},{:.2f})]r·  )r›   rŸ   r    r¡   r¢   r£   r¤   s          r*   Ú
matrix2strrº  ‰  s3   € ØÑ€Qˆˆ1ˆa��AØ;×BÒBÀ1ÀaÈÈAÈqÐRSÑTÔTÐTr,   Úobj1r   Úobj2c                 ó*  — t          | j        |j        ¦  «        t          | j        |j        ¦  «        }}t          | j        |j        ¦  «        t          | j        |j        ¦  «        }}||z
  ||z
  }}|| j        z
  |j        z
  || j        z
  |j        z
  }	}|dk     rX|	dk     rR| j        | j        z   dz  | j        | j        z   dz  }}
|j        |j        z   dz  |j        |j        z   dz  }}|
|z
  ||z
  fS t          d|¦  «        t          d|	¦  «        fS )aŽ  A distance function between two TextBoxes.

    Consider the bounding rectangle for obj1 and obj2.
    Return vector between 2 boxes boundaries if they don't overlap, otherwise
    returns vector betweeen boxes centers

             +------+..........+ (x1, y1)
             | obj1 |          :
             +------+www+------+
             :          | obj2 |
    (x0, y0) +..........+------+
    r   rQ   )rÄ   rÇ   rÈ   rÅ   rÉ   rÊ   ÚwidthÚheight)r»  r¼  rÇ   rÈ   rÉ   rÊ   ÚowÚohÚiwÚihÚxc1Úyc1Úxc2Úyc2s                 r*   ÚvecBetweenBoxesrÈ  Ž  s  € õ �D”G˜TœWÑ%Ô%¥s¨4¬7°D´GÑ'<Ô'<ˆ€RÝ�D”G˜TœWÑ%Ô%¥s¨4¬7°D´GÑ'<Ô'<ˆ€RØ�R‘˜˜b™ˆ€RØ�T”Z‘ $¤*Ñ,¨b°4´;Ñ.>ÀÄÑ.Lˆ€RØ	ˆA‚v€v�"�q’&�&à”w ¤Ñ(¨AÑ-°´¸$¼'Ñ0AÀQÑ/FˆcˆØ”w ¤Ñ(¨AÑ-°´¸$¼'Ñ0AÀQÑ/FˆcˆØ�S‰y˜# ™)Ð#Ð#å�1�b‰zŒz�3˜q "™:œ:Ð%Ð%r,   ÚLTComponentT)Úboundc                   óÜ   — e Zd ZdZddededdfd„Zdefd„Zde	e
         fd	„Zdefd
„Zdedefd„Zdede	e         fd„Zdee
         ddfd„Zde
ddfd„Zde
ddfd„Zdede	e
         fd„ZdS )ÚPlanezäA set-like data structure for objects placed on a plane.

    Can efficiently find objects in a certain rectangular area.
    It maintains two parallel lists of objects, each of
    which is sorted by its x or y coordinate.
    r  rµ  Úgridsizer   Nc                 óŒ   — g | _         t          ¦   «         | _        i | _        || _        |\  | _        | _        | _        | _        d S r.   )	Ú_seqr´   Ú_objsÚ_gridrÍ  rÇ   rÈ   rÉ   rÊ   )r)   rµ  rÍ  s      r*   r+   zPlane.__init__³  s<   € Ø(*ˆŒ	Ý(+©¬ˆŒ
Ø68ˆŒ
Ø ˆŒØ/3Ñ,ˆŒ�$”'˜4œ7 D¤G G Gr,   c                 ó&   — dt          | ¦  «        z  S )Nz<Plane objs=%r>)Úlistr/   s    r*   Ú__repr__zPlane.__repr__º  s   € Ø ¥4¨¡:¤:Ñ-Ð-r,   c                 ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )Nc              3   ó.   •K  — | ]}|‰j         v ¯|V — Œd S r.   ©rÐ  )rá   r·   r)   s     €r*   râ   z!Plane.__iter__.<locals>.<genexpr>¾  s/   øè è € Ð>Ð>˜¨C°4´:Ð,=Ð,=�Ð,=Ð,=Ð,=Ð,=Ð>Ð>r,   )rÏ  r/   s   `r*   Ú__iter__zPlane.__iter__½  s   ø€ Ø>Ð>Ð>Ð>˜tœyÐ>Ñ>Ô>Ð>r,   c                 ó*   — t          | j        ¦  «        S r.   )rR   rÐ  r/   s    r*   Ú__len__zPlane.__len__À  s   € Ý�4”:‰ŒÐr,   r·   c                 ó   — || j         v S r.   r×  )r)   r·   s     r*   Ú__contains__zPlane.__contains__Ã  s   € Ø�d”jÐ Ð r,   c              #   óŒ  K  — |\  }}}}|| j         k    s!| j        |k    s|| j        k    s| j        |k    rd S t	          | j         |¦  «        }t	          | j        |¦  «        }t          | j        |¦  «        }t          | j        |¦  «        }t          ||| j        ¦  «        D ]!}t          ||| j        ¦  «        D ]}||fV — Œ	Œ"d S r.   )rÇ   rÉ   rÈ   rÊ   rÅ   rÄ   rÀ   rÍ  )r)   rµ  rÇ   rÈ   rÉ   rÊ   Úgrid_yÚgrid_xs           r*   Ú	_getrangezPlane._getrangeÆ  sã   è è € ØÑˆˆR��RØ�”Š=ˆ=˜DœG ršM˜M¨R°4´7ª]¨]¸d¼gÈºm¸mØˆFÝ�”˜"ÑÔˆÝ�”˜"ÑÔˆÝ�”˜"ÑÔˆÝ�”˜"ÑÔˆÝ˜R  T¤]Ñ3Ô3ð 	'ð 	'ˆFÝ   R¨¬Ñ7Ô7ð 'ð '�Ø˜vÐ&Ð&Ð&Ð&Ð&ð'ð	'ð 	'r,   r²   c                 ó:   — |D ]}|                       |¦  «         Œd S r.   )rµ   )r)   r²   r·   s      r*   ÚextendzPlane.extendÒ  s,   € Øð 	ð 	ˆCØ�HŠH�S‰MŒMˆMˆMð	ð 	r,   c                 ó>  — |                       |j        |j        |j        |j        f¦  «        D ]:}|| j        vrg }|| j        |<   n| j        |         }|                     |¦  «         Œ;| j                             |¦  «         | j         	                    |¦  «         dS )zplace an object.N)
rà  rÇ   rÈ   rÉ   rÊ   rÑ  rº   rÏ  rÐ  rµ   )r)   r·   ÚkrÖ   s       r*   rµ   z	Plane.addÖ  s™   € à—’ ¤¨¬°´¸¼Ð @ÑAÔAð 	ð 	ˆAØ˜œ
Ð"Ð"Ø(*�Ø !�”
˜1‘�à”J˜q”M�Ø�HŠH�S‰MŒMˆMˆMØŒ	×Ò˜ÑÔÐØŒ
�Š�sÑÔÐÐÐr,   c                 ó
  — |                       |j        |j        |j        |j        f¦  «        D ]:}	 | j        |                              |¦  «         Œ$# t          t          f$ r Y Œ7w xY w| j	                             |¦  «         dS )zdisplace an object.N)
rà  rÇ   rÈ   rÉ   rÊ   rÑ  ÚremoveÚKeyErrorrq   rÐ  )r)   r·   rä  s      r*   ræ  zPlane.removeâ  s‘   € à—’ ¤¨¬°´¸¼Ð @ÑAÔAð 	ð 	ˆAðØ”
˜1”×$Ò$ SÑ)Ô)Ð)Ð)øÝ�jÐ)ð ð ð Ø�ðøøøàŒ
×Ò˜#ÑÔÐÐÐs   ± AÁA&Á%A&c              #   ó.  K  — |\  }}}}t          ¦   «         }|                      |¦  «        D ]g}|| j        vrŒ| j        |         D ]M}||v rŒ|                     |¦  «         |j        |k    s!||j        k    s|j        |k    s||j        k    rŒI|V — ŒNŒhdS )z)finds objects that are in a certain area.N)r´   rà  rÑ  rµ   rÉ   rÇ   rÊ   rÈ   )	r)   rµ  rÇ   rÈ   rÉ   rÊ   r¶   rä  r·   s	            r*   Úfindz
Plane.findë  s¾   è è € àÑˆˆR��RÝ‰uŒuˆØ—’ Ñ%Ô%ð 		ð 		ˆAØ˜œ
Ð"Ð"ØØ”z !”}ð ð �Ø˜$�;�;ØØ—’˜‘”�Ø”6˜R’<�< 2¨¬¢< <°3´6¸R²<°<À2ÈÌÂ<À<ØØ�	�	�	�	ðð		ð 		r,   )r  )r7   r8   r9   r:   ÚRectrt   r+   r    rÔ  r
   rÉ  rØ  rÚ  r<   ÚboolrÜ  ÚPointrà  r	   râ  rµ   ræ  ré  r=   r,   r*   rÌ  rÌ  «  s|  € € € € € ðð ð4ð 4˜Tð 4¨Sð 4¸$ð 4ð 4ð 4ð 4ð.˜#ð .ð .ð .ð .ð?˜( <Ô0ð ?ð ?ð ?ð ?ð˜ð ð ð ð ð! ð !¨4ð !ð !ð !ð !ð
'˜dð 
' x°¤ð 
'ð 
'ð 
'ð 
'ð˜8 LÔ1ð °dð ð ð ð ð
�|ð 
¨ð 
ð 
ð 
ð 
ð˜,ð ¨4ð ð ð ð ð˜ð  (¨<Ô"8ð ð ð ð ð ð r,   rÌ  )Úir¥   r¡   r›   )rœ   Úlr¢   Úvaluec                 óx  — d| cxk     rdk     sn J ‚g }d}| dk    �r
t          | d¦  «        \  } }|dk    rF|                     dt          |         ¦  «         |                     dt          |dz            ¦  «         nŸ|dk    rC|                     dt          |         ¦  «         |                     dt          |         ¦  «         nV|dk    }|r&|                     dt          |         ¦  «         |dz  }|                     |rdndt          |         |z  ¦  «         |dz  }| dk    �°
d                     |¦  «        S )	z,Format a number as lowercase Roman numerals.r   i   rå   rä   r   rp   rP   rÞ   )ÚdivmodÚinsertÚ
ROMAN_ONESÚROMAN_FIVESr²  )rï  ÚresultÚindexÚ	remainderÚ	over_fives        r*   Úformat_int_romanrù  ÿ  sP  € ð ˆuÐÐÒÐ�tÒÐÐÐÐÐØ€FØ€Eà
�1Š*‰*Ý! %¨Ñ,Ô,ÑˆˆyØ˜Š>ˆ>Ø�MŠM˜!�Z¨Ô.Ñ/Ô/Ð/Ø�MŠM˜!�Z¨°©	Ô2Ñ3Ô3Ð3Ð3Ø˜!Š^ˆ^Ø�MŠM˜!�Z¨Ô.Ñ/Ô/Ð/Ø�MŠM˜!�[¨Ô/Ñ0Ô0Ð0Ð0à! QšˆIØð Ø—’˜a¥¨UÔ!3Ñ4Ô4Ð4Ø˜Q‘�	Ø�MŠM˜yÐ/˜!˜!¨aµ¸EÔ1BÀYÑ1NÑOÔOÐOØ�‰
ˆð �1Š*‰*ð  �7Š7�6‰?Œ?Ðr,   c                 ó$  — | dk    sJ ‚g }| dk    rXt          | dz
  t          t          j        ¦  «        ¦  «        \  } }|                     t          j        |         ¦  «         | dk    °X|                     ¦   «          d                     |¦  «        S )z5Format a number as lowercase letters a-z, aa-zz, etc.r   r   rÞ   )rñ  rR   ÚstringÚascii_lowercaserº   Úreverser²  )rï  rõ  r÷  s      r*   Úformat_int_alpharþ    s‰   € ð �1Š9ˆ9ˆ9ˆ9Ø€Fà
�1Š*ˆ*Ý! %¨!¡)­SµÔ1GÑ-HÔ-HÑIÔIÑˆˆyØ�Š•fÔ,¨YÔ7Ñ8Ô8Ð8ð �1Š*ˆ*ð ‡N‚NÑÔÐØ�7Š7�6‰?Œ?Ðr,   )rV   rW   r.   )r   )Nr:   r$   r   rû  rÛ   Úhtmlr   Útypingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Úlayoutr   rF   rÃ   r   r    r%   r;   r&   r<   r   rE   rA   rK   rt   rU   r[   re   r‰   r®   rì  rê  ÚMatrixÚPathSegmentrŠ   Ú__annotations__rš   r§   r©   r¬   rë  r°   r±   r¸   r¼   rr   rÀ   rË   rÒ   r×   rÝ   r²  r°  r³  rJ   r¸  rº  rÈ  rÉ  rÌ  ró  rô  rù  rþ  r=   r,   r*   ú<module>r     sZ  ððð ð ð 
€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& ð $Ø#Ð#Ð#Ð#Ð#Ð#à Ð Ð Ð ð €ð �7Ô# S¨"¬)Ð3Ô4€
Øˆf�hÐÔ€ð&ð &ð &ð &ð &�Fñ &ô &ð &ð6˜cð  eð ð ð ð ð	�vð 	 #ð 	ð 	ð 	ð 	ð�3ð ˜cð  cð ð ð ð ð QYð
5ð 
5Ø˜ ˜Ô$ð
5Ø03ð
5ØJMð
5àð
5ð 
5ð 
5ð 
5ð˜#ð  cð °sð ¸sð ð ð ð ð$^Ø
ð^Øð^Ø%(ð^Ø<?ð^ØGLð^à
ð^ð ^ð ^ð ^ðB 	ˆe�UˆlÔ€ØˆU�E˜5 %Ð'Ô(€Ø	ˆu�e˜U E¨5°%Ð7Ô	8€ØØ	ˆ#„JØ	ˆ#ˆu�eÐ
ÔØ	ˆ#ˆu�e˜U EÐ
)Ô*Ø	ˆ#ˆu�e˜U E¨5°%Ð
7Ô8ð:ô€ð -€�Ð ,Ð ,Ñ ,ð�Fð  ð ¨6ð ð ð ð ð<˜ð < 5ð <¨Vð <ð <ð <ð <ð0�vð 0 %ð 0¨Eð 0ð 0ð 0ð 0ð(˜ð ( Eð (¨eð (ð (ð (ð (ð'�ð '˜4ð 'ð 'ð 'ð 'ð €WˆT�]„]€ðˆx˜Œ|ð  ¨¤ð ð ð ð ð	�˜2˜$ ˜*Ô%ð 	¨X°b¬\ð 	¸eÀDÈÄHÈdÐSUÌhÐDVÔ>Wð 	ð 	ð 	ð 	ð1ˆuð 1˜%ð 1 Cð 1¨Eð 1ð 1ð 1ð 1ð
	�8˜E”?ð 	 tð 	ð 	ð 	ð 	ð LPð	ð 	Ø	�"Œð	Ø% r d¨E kÔ2ð	Ø<DÀR¼Lð	àˆb„\ð	ð 	ð 	ð 	ð�ð ˜( 2œ,ð ¨8°E¸"¸c¸'´NÔ+Cð ð ð ð ð7ð 7ˆuð 7˜sð 7¨3ð 7ð 7ð 7ð 7ð& —’ð Dð DðAðDñ Dô Dñ Dô D€ðN5�5ð 5˜Sð 5ð 5ð 5ð 5ðˆ3ð �3ð ð ð ð ð@�4ð @˜Cð @ð @ð @ð @ð
U�&ð U˜Sð Uð Uð Uð Uð
&˜-ð &¨}ð &Àð &ð &ð &ð &ð4 ˆw�~¨]Ð;Ñ;Ô;€ðMð Mð Mð Mð MˆG�LÔ!ñ Mô Mð Mð` "Ð!Ð!€
Øˆoˆo€ð˜Cð  Cð ð ð ð ð4˜Cð  Cð ð ð ð ð ð r,   