
    +Si                        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 d dlmZmZmZmZmZ d dlmZmZmZ d dlmZmZ d d	lmZ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' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC  e j                  eE      ZF G d de      ZG G d de      ZH e5d      ZI e5d      ZJ e5d      ZK e5d      ZL e5d      ZM G d d      ZNeeOePeOeOeOf   ePeOeOeOeOf   f   ZQeeQeRePeQeRf   f   ZS G d d      ZT G d d      ZU G d  d!e8ee6e+f            ZVe9e+   ZW G d" d#      ZXy)$    N)MappingSequence)BytesIO)Unioncast)settings)	safe_cmyk
safe_floatsafe_intsafe_matrixsafe_rgb)CMapCMapBaseCMapDB)PREDEFINED_COLORSPACEPDFColorSpace)	PDFDevice
PDFTextSeq)PDFExceptionPDFValueError)
PDFCIDFontPDFFontPDFFontErrorPDFTrueTypeFontPDFType1FontPDFType3Font)PDFPage)LITERALS_ASCII85_DECODE	PDFObjRef	PDFStream
dict_value
list_valueresolve1stream_value)PSEOFPSTypeError)KWDLIT	PSKeyword	PSLiteralPSStackParserPSStackTypekeyword_nameliteral_name)MATRIX_IDENTITYMatrixPathSegmentPointRectchoplistmult_matrixc                       e Zd Zy)PDFResourceErrorN__name__
__module____qualname__     [/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/pdfminer/pdfinterp.pyr7   r7   7       r=   r7   c                       e Zd Zy)PDFInterpreterErrorNr8   r<   r=   r>   rA   rA   ;   r?   r=   rA   PDFTextFontFormImagec                   F    e Zd ZU eed<   eed<   d	dZdefdZd
dZ	d	dZ
y)PDFTextStatematrix
linematrixreturnNc                     d | _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        | j                          y )Nr   d   )	fontfontsize	charspace	wordspacescalingleadingrenderriseresetselfs    r>   __init__zPDFTextState.__init__J   sC    $(	  ! !!	

r=   c                    d| j                   d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  d	| j                  d
| j                  dS )Nz<PDFTextState: font=z, fontsize=z, charspace=z, wordspace=z
, scaling=z
, leading=z	, render=z, rise=z	, matrix=z, linematrix=>)
rN   rO   rP   rQ   rR   rS   rT   rU   rI   rJ   rW   s    r>   __repr__zPDFTextState.__repr__W   s    "499- 0( )* +* +||& '||& 'kk_ %II= !kk_ %//,A	/	
r=   c                 n   t               }| j                  |_        | j                  |_        | j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_	        | j                  |_
        |S N)rH   rN   rO   rP   rQ   rR   rS   rT   rU   rI   rJ   rX   objs     r>   copyzPDFTextState.copye   s|    n99}}llll[[
99[[

r=   c                 (    t         | _        d| _        y )Nr   r   )r/   rI   rJ   rW   s    r>   rV   zPDFTextState.resets   s    % r=   rK   N)rK   rH   )r9   r:   r;   r0   __annotations__r2   rY   strr\   ra   rV   r<   r=   r>   rH   rH   F   s(    N	
# 
!r=   rH   c                   (    e Zd ZddZddZdefdZy)PDFGraphicStaterK   Nc                     d| _         d | _        d | _        d | _        d | _        d | _        d | _        d| _        t        d   | _	        d| _
        t        d   | _        y )Nr   
DeviceGray)	linewidthlinecaplinejoin
miterlimitdashintentflatnessscolorr   scsncolorncsrW   s    r>   rY   zPDFGraphicState.__init__   s]     !&*'+)-26	%)'+ "7"E "7"Er=   c                    t               }| j                  |_        | j                  |_        | j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_	        | j                  |_
        | j                  |_        |S r^   )rh   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r_   s     r>   ra   zPDFGraphicState.copy   s    ll}}99[[
}}[[
(([[
((
r=   c                     d| j                   d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  d	| j                  d
S )Nz<PDFGraphicState: linewidth=z
, linecap=z, linejoin=z, miterlimit=z, dash=z	, intent=z, flatness=z, stroking color=z, non stroking color=r[   )	rk   rl   rm   rn   ro   rp   rq   rr   rt   rW   s    r>   r\   zPDFGraphicState.__repr__   s    * +||& '( )//, -II= !kk_ %( )"kk_ -""&++	3	
r=   rd   )rK   rh   )r9   r:   r;   rY   ra   rf   r\   r<   r=   r>   rh   rh      s    F"
# 
r=   rh   c                   l    e Zd ZdZddeddfdZdee   ddfdZdde	d	ede
fd
Zdedee	ef   defdZy)PDFResourceManagerzRepository of shared resources.

    ResourceManager facilitates reuse of shared resources
    such as fonts and images so that large objects are not
    allocated multiple times.
    cachingrK   Nc                      || _         i | _        y r^   )rz   _cached_fonts)rX   rz   s     r>   rY   zPDFResourceManager.__init__   s    46r=   procsc                 4    |D ]  }|t         u s|t        u r y r^   )LITERAL_PDFLITERAL_TEXT)rX   r}   procs      r>   get_procsetzPDFResourceManager.get_procset   s&     	D{"dl&:		r=   cmapnamestrictc                 z    	 t        j                  |      S # t         j                  $ r |r t               cY S w xY wr^   )r   get_cmapCMapNotFoundr   )rX   r   r   s      r>   r   zPDFResourceManager.get_cmap   s8    	??8,,"" 	6M	s     ::objidspecc                    |r|| j                   v r| j                   |   }|S t        j                  d||       t        j                  r|d   t
        urt        d      d|v rt        |d         }nt        j                  rt        d      d}|dv rt        | |      }n|dk(  rt        | |      }n|d	k(  rt        | |      }n|d
v rt        | |      }n|dk(  r^t        |d         }|sJ t        |d         j                         }dD ]  }||v st        ||         ||<    | j!                  d |      }n*t        j                  rt        d|      t        | |      }|r| j"                  r|| j                   |<   |S )Nz#get_font: create: objid=%r, spec=%rTypezType is not /FontSubtypezFont Subtype is not specified.Type1)r   MMType1TrueTypeType3)CIDFontType0CIDFontType2Type0DescendantFontsr   )Encoding	ToUnicodezInvalid Font spec: )r|   logdebugr   STRICTLITERAL_FONTr   r.   r   r   r   r   r"   r!   ra   r#   get_fontrz   )rX   r   r   rN   subtypedfontssubspecks           r>   r   zPDFResourceManager.get_font   s   Ud000%%e,DN K II;UDI4<|#C"#677D &tI7??&'GHH!..#D$/J&&tT2G##D$/<<!$-G##D):$;<v$VAY/4462 7ADy%-d1g%6
7 }}T73??&)<TH'EFF#D$/,0""5)r=   )T)F)r9   r:   r;   __doc__boolrY   r   objectr   rf   r   r   r   r   r   r<   r=   r>   ry   ry      so    7 7 7&!1 d  d x )f )GCK,@ )W )r=   ry   c            	           e Zd Zdee   ddfdZdefdZdeddfdZ	defdZ
dded
edeeef   fdZddZ ed      Z ed      Z ed	      ZdededdfdZy)PDFContentParserstreamsrK   Nc                 L    || _         d| _        t        j                  | d        y Nr   )r   istreamr+   rY   )rX   r   s     r>   rY   zPDFContentParser.__init__  s"     	tT*r=   c                 $   | j                   s| j                  t        | j                        k  r8t	        | j                  | j                           }| xj                  dz  c_        nt        d      t        |j                               | _         yy)N   zUnexpected EOF, file truncated?TF)fpr   lenr   r$   r%   r   get_data)rX   strms     r>   fillfpzPDFContentParser.fillfp	  sg    ww||c$,,//#DLL$>?!=>>dmmo.DGr=   posc                 P    | j                          t        j                  | |       y r^   )r   r+   seek)rX   r   s     r>   r   zPDFContentParser.seek  s    4%r=   c                 <   | j                   t        | j                        k  ryd}	 | j                         }| j                  j                         | _        | j                  j                  | j                        | _        | j                  rnd | _        nd| _         |S )NFr   )	charposr   bufr   r   tellbufposreadBUFSIZ)rX   
new_streams     r>   fillbufzPDFContentParser.fillbuf  sz    <<#dhh-'
J'',,.DKww||DKK0DHxxDG  r=      EItargetc                 $   | j                  |       d}d}|t        |      k  r| j                          |r| j                  | j                     }t        |f      }||z  }| xj                  dz  c_        t        |      |k  r|j                         s |t        |      k  r|t        ||   f      k(  r|dz  }nXd}nU	 | j                  j                  |d   | j                        }|| j                  | j                  |dz    z  }|dz   | _        d}|t        |      k  r|d t        |      dz     }t        j                  dd|      }||fS # t        $ r9 || j                  | j                  d  z  }t        | j                        | _        Y }w xY w)Nr   r=   r   s   (\x0d\x0a|[\x0d\x0a])$)r   r   r   r   r   bytesisspaceindex
ValueErrorresub)rX   r   r   idatacicjs           r>   get_inline_dataz PDFContentParser.get_inline_data&  sn   		#3v;LLNXXdll+2%L	!K1$FOeVAYL.A(BFAA1vay$,,?ADHHT\\AE::D#$q5DLA% 3v;, (Fa()vv0#t<T{ " 1DHHT\\^44D#&txx=DL1s   =AE ?FFc                 >     | j                   | j                           y r^   )add_resultspopallrW   s    r>   flushzPDFContentParser.flushD  s    $++-(r=   s   BIs   IDtokenc                    || j                   u r| j                  |d       y || j                  u r	 | j                  d      \  }}t	        |      dz  dk7  rd|}t        |      t        d|      D ci c]  \  }}t        |      t        |       }}}d}	|j                  d      }
|
 t        |
t              r|
g}
|
d   t        v rd}	| j                  |t	        d      z   |		      \  }}|	dk7  r||	z  }t        ||      }| j                  ||f       |	dk(  r| j                  || j                   f       y y | j                  ||f       y c c}}w # t
        $ r t"        j$                  r Y y w xY w)
Ninline   r   zInvalid dictionary construct: r   Fs   ~>s   ID )r   )
KEYWORD_BI
start_type
KEYWORD_IDend_typer   r&   r4   r.   r#   get
isinstancer*   r   r   r    push
KEYWORD_EIr   r   )rX   r   r   _objs	error_msgr   vdeosfilterr   r`   s                r>   
do_keywordzPDFContentParser.do_keywordK  ss   DOO#OOC*doo% MM(3	Dt9q=A%"@ II%i00@HD@QRfq!\!_hqk1RRs%!&)4"(ay$;;#"223V3DS2Qd%<CKD4(		3*%%<IIsDOO45   IIsEl#' S  ?? #s%   AE 6EB%E E E32E3)r   rd   )r9   r:   r;   r   r   rY   r   r   intr   r   r   tupler   r   r'   r   r   r   r)   r   r<   r=   r>   r   r      s    + 0 +T +	 	& & & 3  %U
BS <) UJUJUJ$c $) $ $r=   r   c                   r   e Zd ZdZdededdfdZddZddZd	e	e
e
f   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eeeef   fdZdeeeef   ddfdZddZddZdededededededdfdZdeddfdZdeddfd Zd!eddfd"Zd#eddfd$Zd%ed&eddfd'Zd(eddfd)Z d*eddfd+Z!d,eddfd-Z"d.ed/eddfd0Z#d.ed/eddfd1Z$d2ed3ed4ed5ed6ed7eddfd8Z%d4ed5ed6ed7eddf
d9Z&d2ed3ed6ed7eddf
d:Z'dd;Z(d.ed/ed<ed=eddf
d>Z)dd?Z*dd@Z+ddAZ,ddBZ-ddCZ.ddDZ/ddEZ0ddFZ1ddGZ2ddHZ3ddIZ4ddJZ5d,eddfdKZ6d,eddfdLZ7dMeddfdNZ8dMeddfdOZ9dPedQedReddfdSZ:dPedQedReddfdTZ;dUedVed/edWeddf
dXZ<dUedVed/edWeddf
dYZ=dZee   d[e>de?dz  fd\Z@dd]ZAdd^ZBdd_ZCdd`ZDd,e
ddfdaZEddbZFddcZGdddZHddeZIdfeddfdgZJdfedheddfdiZKdfeddfdjZLdfedheddfdkZMddlZNdmeddfdnZOdmeddfdoZPdpeddfdqZQdreddfdsZRdtedueddfdvZSdweddfdxZTdyeddfdzZUd{ed|eddfd}ZVd{ed|eddfd~ZWdedRedUededededdfdZXddZYdeddfdZZdeddfdZ[deddfdZ\dedededdfdZ]ddZ^ddZ_deddfdZ`deddfdZadebddfdZcedfd	e	e
e
f   deee
   deddfdZfdeee
   ddfdZgy)PDFPageInterpreterzhProcessor for the content of a PDF page

    Reference: PDF Reference, Appendix A, Operator Summary
    rsrcmgrdevicerK   Nc                 \    || _         || _        t               | _        t               | _        y r^   )r   r   set
stream_idsparent_stream_ids)rX   r   r   s      r>   rY   zPDFPageInterpreter.__init__u  s#    $'E+.5r=   c                 N    | j                  | j                  | j                        S r^   )	__class__r   r   rW   s    r>   dupzPDFPageInterpreter.dup}  s    ~~dllDKK88r=   c                     | j                         }|j                  j                  | j                         |j                  j                  | j                         |S )aX  Create a sub-interpreter for processing nested content streams.

        This is used when invoking Form XObjects to prevent circular references.
        Unlike dup(), this method propagates the stream ID tracking from the
        parent interpreter, allowing detection of circular references across
        nested XObject invocations.
        )r   r   updater   )rX   interps     r>   	subinterpzPDFPageInterpreter.subinterp  sF       ''(>(>?  ''8r=   	resourcesc                 J   || _         i | _        i | _        t        j                         | _        |sydt        dt        dz  fd}t        |      j                         D ]B  \  }}t        j                  d||       |dk(  rtt        |      j                         D ]W  \  }}d}t        |t              r|j                  }t        |      }| j                  j!                  ||      | j                  |<   Y |dk(  rEt        |      j                         D ](  \  }} |t#        |            }	|	|	| j
                  |<   * |dk(  r&| j                  j%                  t'        |             |d	k(  st        |      j                         D ]  \  }
}|| j                  |
<    E y)
z@Prepare the fonts and XObjects listed in the Resource attribute.Nr   rK   c           	         t        | t              rt        | d         }nt        |       }|dk(  r9t        | t              r)t        |       dk\  rt	        |t        | d         d         S |dk(  r?t        | t              r/t        |       dk\  r!t	        |t        t        | d                     S t        j                  |      S )Nr   ICCBasedr   r   NDeviceN)	r   listr.   r   r   r$   r"   r   r   )r   names     r>   get_colorspacez9PDFPageInterpreter.init_resources.<locals>.get_colorspace  s    $%#DG,#D)z!jt&<Ta$T<Q+@+EFF"z$'=#d)q.$T3z$q'/B+CDD,0066r=   zResource: %r: %rrD   
ColorSpaceProcSetXObject)r   fontmapxobjmapr   ra   csmapr   r   r!   itemsr   r   r   r   r   r   r   r#   r   r"   )rX   r   r   r   r   fontidr   r   csid
colorspacexobjidxobjstrms               r>   init_resourcesz!PDFPageInterpreter.init_resources  s   ".0/D/I/I/K

	7 
	7MD,@ 
	7 y)//1 	4DAqII(!Q/F{$.qM$7$7$9 NLFD E!$	2 $

%d+D+/<<+@+@+MDLL(N l"",Q-"5"5"7 6JD$!/!?J!-+5

4(6 i((A7i(21(;(;(= 4$FH+3DLL(4#	4r=   ctmc                     g | _         || _        | j                  j                  | j                         t	               | _        t               | _        g | _        g | _	        y)z<Initialize the text and graphic states for rendering a page.N)
gstackr  r   set_ctmrH   	textstaterh   graphicstatecurpathargstack)rX   r  s     r>   
init_statezPDFPageInterpreter.init_state  sL     KMDHH%%+-*,)+r=   r`   c                 :    | j                   j                  |       y r^   )r  appendr_   s     r>   r   zPDFPageInterpreter.push  s    S!r=   nc                 ^    |dk(  rg S | j                   | d  }| j                   d |  | _         |S r   )r  )rX   r  xs      r>   popzPDFPageInterpreter.pop  s9    6IMM1"#cr*r=   c                     | j                   | j                  j                         | j                  j                         fS r^   )r  r  ra   r  rW   s    r>   get_current_statez$PDFPageInterpreter.get_current_state  s/    $..--/1B1B1G1G1IJJr=   statec                 x    |\  | _         | _        | _        | j                  j	                  | j                          y r^   )r  r  r  r   r  )rX   r  s     r>   set_current_statez$PDFPageInterpreter.set_current_state  s-     9>54>4#4DHH%r=   c                 V    | j                   j                  | j                                y)zSave graphics stateN)r  r  r  rW   s    r>   do_qzPDFPageInterpreter.do_q  s    41134r=   c                 p    | j                   r*| j                  | j                   j                                yy)zRestore graphics stateN)r  r  r  rW   s    r>   do_QzPDFPageInterpreter.do_Q  s'    ;;""4;;??#45 r=   a1b1c1d1e1f1c           	          t        ||||||      }| t        j                  d||||||fd       yt        || j                        | _        | j
                  j                  | j                         y)z3Concatenate matrix to current transformation matrixNzUCannot concatenate matrix to current transformation matrix because not all values in  can be parsed as floats)r   r   warningr5   r  r   r  )rX   r#  r$  r%  r&  r'  r(  rI   s           r>   do_cmzPDFPageInterpreter.do_cm  sv     RRR4>KK-.0"b"b"-E,H I** #64884DHKK)r=   rk   c                     t        |      }|t        j                  d|d       y| j                  d   dz  | j                  d   dz  z   dz  }||z  | j                  _        y)zSet line widthNzCannot set line width because  is an invalid float valuer   r   r   g      ?)r
   r   r+  r  r  rk   )rX   rk   linewidth_fscales       r>   do_wzPDFPageInterpreter.do_w  si     +KK0=WX XXa[A%q(88S@E*5*=D'r=   rl   c                 &    || j                   _        y)zSet line cap styleN)r  rl   )rX   rl   s     r>   do_JzPDFPageInterpreter.do_J   s    $+!r=   rm   c                 &    || j                   _        y)zSet line join styleN)r  rm   )rX   rm   s     r>   do_jzPDFPageInterpreter.do_j      %-"r=   rn   c                 &    || j                   _        y)zSet miter limitN)r  rn   )rX   rn   s     r>   do_MzPDFPageInterpreter.do_M  s    '1$r=   ro   phasec                 *    ||f| j                   _        y)zSet line dash patternN)r  ro   )rX   ro   r9  s      r>   do_dzPDFPageInterpreter.do_d  s    "&r=   rp   c                 &    || j                   _        y)zSet color rendering intentN)r  rp   )rX   rp   s     r>   do_rizPDFPageInterpreter.do_ri  s    #) r=   rq   c                 &    || j                   _        y)zSet flatness toleranceN)r  rq   )rX   rq   s     r>   do_izPDFPageInterpreter.do_i  r6  r=   r   c                      y)z7Set parameters from graphics state parameter dictionaryNr<   rX   r   s     r>   do_gszPDFPageInterpreter.do_gs      r=   r  yc                     t        |      }t        |      }||d||f}t        j                  d|d       yd||f}| j                  j	                  |       y)zBegin new subpathNmz3Cannot start new subpath because not all values in r*  r
   r   r+  r  r  rX   r  rD  x_fy_fpoints         r>   do_mzPDFPageInterpreter.do_m  se    mm;#+!QKEKKY68
 #sOELL&r=   c                     t        |      }t        |      }||d||f}t        j                  d|d       yd||f}| j                  j	                  |       y)z$Append straight line segment to pathNlzFCannot append straight line segment to path because not all values in r*  rG  rH  s         r>   do_lzPDFPageInterpreter.do_l+  sf    mm;#+!QKEKK--2I5MO
 #sOELL&r=   x1y1x2y2x3y3c                 .   t        |      }t        |      }t        |      }	t        |      }
t        |      }t        |      }|
||	|
||#d||||||f}t        j                  d|d       yd|||	|
||f}| j                  j	                  |       y)z4Append curved segment to path (three control points)Nr   ?Cannot append curved segment to path because not all values in r*  rG  )rX   rP  rQ  rR  rS  rT  rU  x1_fy1_fx2_fy2_fx3_fy3_frK  s                 r>   do_czPDFPageInterpreter.do_c9  s     "~"~"~"~"~"~L|||||"b"b"b1EKK--2I5MO
 $dD$=ELL&r=   c                     t        |      }t        |      }t        |      }t        |      }||||!d||||f}	t        j                  d|	d       yd||||f}	| j                  j	                  |	       y)z8Append curved segment to path (initial point replicated)Nr   rW  r*  rG  )
rX   rR  rS  rT  rU  rZ  r[  r\  r]  rK  s
             r>   do_vzPDFPageInterpreter.do_vZ      "~"~"~"~<4<4<4<"b"b)EKK--2I5MO
 $dD1ELL&r=   c                     t        |      }t        |      }t        |      }t        |      }||||!d||||f}	t        j                  d|	d       yd||||f}	| j                  j	                  |	       y)z6Append curved segment to path (final point replicated)NrD  rW  r*  rG  )
rX   rP  rQ  rT  rU  rX  rY  r\  r]  rK  s
             r>   do_yzPDFPageInterpreter.do_yj  ra  r=   c                 :    | j                   j                  d       y)zClose subpathhN)r  r  rW   s    r>   do_hzPDFPageInterpreter.do_hz  s    F#r=   wrf  c                    t        |      }t        |      }t        |      }t        |      }|||| ||||f}	t        j                  d|	d       y| j                  j	                  d||f       | j                  j	                  d||z   |f       | j                  j	                  d||z   ||z   f       | j                  j	                  d|||z   f       | j                  j	                  d       y)zAppend rectangle to pathNz:Cannot append rectangle to path because not all values in r*  rF  rN  re  rG  )
rX   r  rD  rh  rf  rI  rJ  w_fh_fvaluess
             r>   do_rezPDFPageInterpreter.do_re~  s    mmmm;#+Aq\FKK--3J6NP
 LLc30LLcCi 56LLcCis ;<LLc39 56LL'r=   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)zStroke pathTFNr   
paint_pathr  r  rW   s    r>   do_SzPDFPageInterpreter.do_S  s-    t00$udllSr=   c                 D    | j                          | j                          y)zClose and stroke pathN)rg  rq  rW   s    r>   do_szPDFPageInterpreter.do_s      				r=   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)z+Fill path using nonzero winding number ruleFTNro  rW   s    r>   do_fzPDFPageInterpreter.do_f  s-    t00%udllSr=   c                      y)z6Fill path using nonzero winding number rule (obsolete)Nr<   rW   s    r>   do_FzPDFPageInterpreter.do_F  rC  r=   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)zFill path using even-odd ruleFTNro  rW   s    r>   do_f_azPDFPageInterpreter.do_f_a  s-    t00%tT\\Rr=   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)z6Fill and stroke path using nonzero winding number ruleTFNro  rW   s    r>   do_BzPDFPageInterpreter.do_B  s-    t00$eT\\Rr=   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)z(Fill and stroke path using even-odd ruleTNro  rW   s    r>   do_B_azPDFPageInterpreter.do_B_a  s-    t00$dDLLQr=   c                 D    | j                          | j                          y)z>Close, fill, and stroke path using nonzero winding number ruleN)rg  r|  rW   s    r>   do_bzPDFPageInterpreter.do_b  rt  r=   c                 D    | j                          | j                          y)z0Close, fill, and stroke path using even-odd ruleN)rg  r~  rW   s    r>   do_b_azPDFPageInterpreter.do_b_a  s    		r=   c                     g | _         y)z$End path without filling or strokingN)r  rW   s    r>   do_nzPDFPageInterpreter.do_n  s	    r=   c                      y)z3Set clipping path using nonzero winding number ruleNr<   rW   s    r>   do_WzPDFPageInterpreter.do_W  rC  r=   c                      y)z%Set clipping path using even-odd ruleNr<   rW   s    r>   do_W_azPDFPageInterpreter.do_W_a  rC  r=   c                     	 | j                   t        |         | j                  _        y# t        $ r)}t
        j                  rt        d|      |Y d}~yd}~ww xY w)zOSet color space for stroking operations

        Introduced in PDF 1.1
        Undefined ColorSpace: N)r  r.   r  rs   KeyErrorr   r   rA   rX   r   errs      r>   do_CSzPDFPageInterpreter.do_CS  sX    
	V$(JJ|D/A$BD! 	V),B4(*KLRUU 	V   '* 	AAAc                     	 | j                   t        |         | j                  _        y# t        $ r)}t
        j                  rt        d|      |Y d}~yd}~ww xY w)z*Set color space for nonstroking operationsr  N)r  r.   r  ru   r  r   r   rA   r  s      r>   do_cszPDFPageInterpreter.do_cs  sX    	V$(JJ|D/A$BD! 	V),B4(*KLRUU 	Vr  grayc                     t        |      }|t        j                  d|d       y|| j                  _        | j
                  d   | j                  _        y)z&Set gray level for stroking operationsNCannot set gray level because r.  rj   )r
   r   r+  r  rr   r  rs   rX   r  gray_fs      r>   do_GzPDFPageInterpreter.do_G  Q    D!>KK08RS (.D$$(JJ|$<D!r=   c                     t        |      }|t        j                  d|d       y|| j                  _        | j
                  d   | j                  _        y)z)Set gray level for nonstroking operationsNr  r.  rj   )r
   r   r+  r  rt   r  ru   r  s      r>   do_gzPDFPageInterpreter.do_g  r  r=   rgbc                     t        |||      }|t        j                  d|||fd       y|| j                  _        | j
                  d   | j                  _        y)z%Set RGB color for stroking operationsNz6Cannot set RGB stroke color because not all values in r*  	DeviceRGB)r   r   r+  r  rr   r  rs   rX   r  r  r  rgbs        r>   do_RGzPDFPageInterpreter.do_RG  a    q!Q;KK-./AYM9QS
 (+D$$(JJ{$;D!r=   c                     t        |||      }|t        j                  d|||fd       y|| j                  _        | j
                  d   | j                  _        y)z(Set RGB color for nonstroking operationsNz:Cannot set RGB non-stroke color because not all values in r*  r  )r   r   r+  r  rt   r  ru   r  s        r>   do_rgzPDFPageInterpreter.do_rg  r  r=   r   rF  r   c                     t        ||||      }|t        j                  d||||fd       y|| j                  _        | j
                  d   | j                  _        y)z&Set CMYK color for stroking operationsNz7Cannot set CMYK stroke color because not all values in r*  
DeviceCMYK)r	   r   r+  r  rr   r  rs   rX   r   rF  rD  r   cmyks         r>   do_KzPDFPageInterpreter.do_K  f    Aq!$<KK-./Aq\,<<TV
 (,D$$(JJ|$<D!r=   c                     t        ||||      }|t        j                  d||||fd       y|| j                  _        | j
                  d   | j                  _        y)z)Set CMYK color for nonstroking operationsNz;Cannot set CMYK non-stroke color because not all values in r*  r  )r	   r   r+  r  rt   r  ru   r  s         r>   do_kzPDFPageInterpreter.do_k  r  r=   
componentscontextc                    t        |      dk(  r1t        |d         }|t        j                  d| d|d   d       |S t        |      dk(  r(t	        | }|t        j                  d| d|d	       |S t        |      d
k(  r(t        | }|t        j                  d| d|d       |S t        j                  d| dt        |       d       y)aQ  Parse color components into StandardColor (gray, RGB, or CMYK).

        Args:
            components: List of 1, 3, or 4 numeric color components
            context: Description for error messages (e.g., "stroke", "non-stroke")

        Returns:
            Parsed color (float for gray, tuple for RGB/CMYK) or None if invalid
        r   r   NzCannot set z color: r.     z color: components z cannot be parsed as RGB   z cannot be parsed as CMYKzR components specified, but only 1 (grayscale), 3 (RGB), and 4 (CMYK) are supported)r   r
   r   r+  r   r	   )rX   r  r  r  r  r  s         r>   _parse_color_componentsz*PDFPageInterpreter._parse_color_components&  s    z?ajm,D|!'(!!}''AC K_!J'C{!' +"",/GI J_!j)D|!' +"",/HJ K KKgYhz?# $NN
 r=   c                    | j                   j                  j                  }| j                  |      }t	        |      |k7  rt
        j                  d| d|       y| j                   j                  j                  dk7  r'| j                  |d      }||| j                   _	        yyt	        |      dk\  r|d   }t        |t              s0t
        j                  dt        |      j                   d	|d
       yt        |      }t	        |      dk(  r*|| j                   _	        t
        j                  d|        y|dd }| j                  |d      }|y||f| j                   _	        t
        j                  d| d|        yy)a=  Set color for stroking operations.

        Handles Pattern color spaces per ISO 32000-1:2008 4.5.5 (PDF 1.7)
        and ISO 32000-2:2020 8.7.3 (PDF 2.0):
        - Colored patterns (PaintType=1): single operand (pattern name)
        - Uncolored patterns (PaintType=2): n+1 operands (colors + pattern name)
        z)Cannot set stroke color because expected  components but got PatternstrokeNr   :Pattern color space requires name object (PSLiteral), got : z. Per ISO 32000 8.7.3.2, colored patterns use syntax '/name SCN'. Per ISO 32000 8.7.3.3, uncolored patterns use syntax 'c1...cn /name SCN'.zSet stroke pattern (colored): zstroke (uncolored pattern)z Set stroke pattern (uncolored):  + )r  rs   ncomponentsr  r   r   r+  r   r  rr   r   r*   typer9   r.   r   rX   r  r  colorpattern_componentpattern_namebase_color_components
base_colors           r>   do_SCNzPDFPageInterpreter.do_SCNU  s    !!--XXa[
z?aKK32:.B
 ""''9400XFE +0!!( ! _! !+2 /; 12;;<B?P>S T22 '(9:L:!#+7!!(		:<.IJ )33B% "99)+G
 % -7+E!!(		6zl#l^TI "r=   c                    | j                   j                  j                  }| j                  |      }t	        |      |k7  rt
        j                  d| d|       y| j                   j                  j                  dk7  r'| j                  |d      }||| j                   _	        yyt	        |      dk\  r|d   }t        |t              s0t
        j                  dt        |      j                   d	|d
       yt        |      }t	        |      dk(  r*|| j                   _	        t
        j                  d|        y|dd }| j                  |d      }|y||f| j                   _	        t
        j                  d| d|        yy)uB  Set color for nonstroking operations.

        Handles Pattern color spaces per ISO 32000-1:2008 4.5.5 (PDF 1.7)
        and ISO 32000-2:2020 §8.7.3 (PDF 2.0):
        - Colored patterns (PaintType=1): single operand (pattern name)
        - Uncolored patterns (PaintType=2): n+1 operands (colors + pattern name)
        z-Cannot set non-stroke color because expected r  r  z
non-strokeNr   r  r  r  z. Per ISO 32000 8.7.3.2, colored patterns use syntax '/name scn'. Per ISO 32000 8.7.3.3, uncolored patterns use syntax 'c1...cn /name scn'.z"Set non-stroke pattern (colored): znon-stroke (uncolored pattern)z$Set non-stroke pattern (uncolored): r  )r  ru   r  r  r   r   r+  r   r  rt   r   r*   r  r9   r.   r   r  s           r>   do_scnzPDFPageInterpreter.do_scn  s    !!--XXa[
z?aKK32:.B
 ""''9400\JE +0!!( ! _! !+2 /; 12;;<B?P>S T22 '(9:L:!#+7!!(		>|nMN )33B% "99)+K
 % -7+E!!(		::,c,XI "r=   c                 $    | j                          y)z!Set color for stroking operationsN)r  rW   s    r>   do_SCzPDFPageInterpreter.do_SC      r=   c                 $    | j                          y)z$Set color for nonstroking operationsN)r  rW   s    r>   do_sczPDFPageInterpreter.do_sc  r  r=   c                      y)z%Paint area defined by shading patternNr<   rA  s     r>   do_shzPDFPageInterpreter.do_sh  rC  r=   c                 8    | j                   j                          y)zBegin text object

        Initializing the text matrix, Tm, and the text line matrix, Tlm, to
        the identity matrix. Text objects cannot be nested; a second BT cannot
        appear before an ET.
        N)r  rV   rW   s    r>   do_BTzPDFPageInterpreter.do_BT  s     	r=   c                      y)zEnd a text objectNr<   rW   s    r>   do_ETzPDFPageInterpreter.do_ET  rC  r=   c                      y)zBegin compatibility sectionNr<   rW   s    r>   do_BXzPDFPageInterpreter.do_BX  rC  r=   c                      y)zEnd compatibility sectionNr<   rW   s    r>   do_EXzPDFPageInterpreter.do_EX  rC  r=   tagc                     t        |t              r| j                  j                  |       yt        j                  d|d       y)zDefine marked-content pointz+Cannot define marked-content point because  is not a PSLiteralNr   r*   r   do_tagr   r+  rX   r  s     r>   do_MPzPDFPageInterpreter.do_MP  s7    c9%KKs#KK=cWDWXr=   propsc                     t        |t              r| j                  j                  ||       yt        j                  d|d       y)z.Define marked-content point with property listz>Cannot define marked-content point with property list because r  Nr  rX   r  r  s      r>   do_DPzPDFPageInterpreter.do_DP  s>    c9%KKsE*KK'!46r=   c                     t        |t              r| j                  j                  |       yt        j                  d|d       y)zBegin marked-content sequencez-Cannot begin marked-content sequence because r  Nr   r*   r   	begin_tagr   r+  r  s     r>   do_BMCzPDFPageInterpreter.do_BMC  s:    c9%KK!!#&KK?',.r=   c                     t        |t              r| j                  j                  ||       yt        j                  d|d       y)z0Begin marked-content sequence with property listz@Cannot begin marked-content sequence with property list because r  Nr  r  s      r>   do_BDCzPDFPageInterpreter.do_BDC  s>    c9%KK!!#u-KK'!46r=   c                 8    | j                   j                          y)zEnd marked-content sequenceN)r   end_tagrW   s    r>   do_EMCzPDFPageInterpreter.do_EMC  s    r=   spacec                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zSet character spacing.

        Character spacing is used by the Tj, TJ, and ' operators.

        :param space: a number expressed in unscaled text space units.
        Nz(Could not set character spacing because r.  )r
   r   r+  r  rP   )rX   r  rP   s      r>   do_TczPDFPageInterpreter.do_Tc  s>     u%	KK:)57
 (1DNN$r=   c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zSet the word spacing.

        Word spacing is used by the Tj, TJ, and ' operators.

        :param space: a number expressed in unscaled text space units
        Nz#Could not set word spacing because r.  )r
   r   r+  r  rQ   )rX   r  rQ   s      r>   do_TwzPDFPageInterpreter.do_Tw+  s>     u%	KK5)57
 (1DNN$r=   r0  c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zuSet the horizontal scaling.

        :param scale: is a number specifying the percentage of the normal width
        Nz)Could not set horizontal scaling because r.  )r
   r   r+  r  rR   )rX   r0  scale_fs      r>   do_TzzPDFPageInterpreter.do_Tz;  s=    
 U#?KK;)57
 &-DNN"r=   rS   c                 v    t        |      }|t        j                  d|d       y| | j                  _        y)zSet the text leading.

        Text leading is used only by the T*, ', and " operators.

        :param leading: a number expressed in unscaled text space units
        Nz#Could not set text leading because r.  )r
   r   r+  r  rS   )rX   rS   	leading_fs      r>   do_TLzPDFPageInterpreter.do_TLJ  s@     w'	KK5+79
 '0ZDNN"r=   r  rO   c                    	 | j                   t        |         | j                  _        t        |      }|t        j                  d|d       y|| j                  _        y# t        $ rT}t
        j                  rt        d|      || j                  j                  di       | j                  _        Y d}~d}~ww xY w)zSet the text font

        :param fontid: the name of a font resource in the Font subdictionary
            of the current resource dictionary
        :param fontsize: size is a number representing a scale factor.
        zUndefined Font id: Nz Could not set text font because r.  )r  r.   r  rN   r  r   r   rA   r   r   r
   r   r+  rO   )rX   r  rO   r  
fontsize_fs        r>   do_TfzPDFPageInterpreter.do_TfZ  s    	B"&,,|F/C"DDNN  )
KK2,8:
 '1DNN#  	B),?z*JKQTT"&,,"7"7b"ADNN	Bs   'A" "	B?+A
B::B?rT   c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zSet the text rendering modeNz*Could not set text rendering mode because z is an invalid int value)r   r   r+  r  rT   )rX   rT   render_is      r>   do_TrzPDFPageInterpreter.do_Trq  s<    F#KK<*46
 %-DNN!r=   rU   c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)z`Set the text rise

        :param rise: a number expressed in unscaled text space units
        Nz Could not set text rise because r.  )r
   r   r+  r  rU   )rX   rU   rise_fs      r>   do_TszPDFPageInterpreter.do_Ts}  s:    
 D!>KK24(:TU #)DNNr=   txtyc                 @   t        |      }t        |      }|S|Q| j                  j                  \  }}}}}	}
||z  ||z  z   |	z   }||z  ||z  z   |
z   }||||||f| j                  _        n"t        j                  rt        d|d|d      d| j                  _        y)zlMove to the start of the next line

        Offset from the start of the current line by (tx , ty).
        NzInvalid offset (z, z) for Tdrc   )r
   r  rI   r   r   r   rJ   rX   r  r  tx_ty_ar  r   r   efe_newf_news                r>   do_TdzPDFPageInterpreter.do_Td  s    
 nn?s!%!6!6Q1aA!GcAg%)E!GcAg%)E%&1a$>DNN!__"22&2& IJJ$*!r=   c                 X   t        |      }t        |      }|S|Q| j                  j                  \  }}}}}	}
||z  ||z  z   |	z   }||z  ||z  z   |
z   }||||||f| j                  _        nt        j                  rt        d      ||| j                  _        d| j                  _        y)zMove to the start of the next line.

        offset from the start of the current line by (tx , ty). As a side effect, this
        operator sets the leading parameter in the text state.
        Nz"Invalid offset ({tx}, {ty}) for TDrc   )r
   r  rI   r   r   r   rS   rJ   r  s                r>   do_TDzPDFPageInterpreter.do_TD  s     nn?s!%!6!6Q1aA!GcAg%)E!GcAg%)E%&1a$>DNN!__ DEE?%(DNN"$*!r=   r  r   r  r  c                     ||||||f}t        | }|t        j                  d|d       y|| j                  _        d| j                  _        y)z$Set text matrix and text line matrixNz4Could not set text matrix because not all values in r*  rc   )r   r   r+  r  rI   rJ   )	rX   r  r  r   r   r  r  rl  rI   s	            r>   do_TmzPDFPageInterpreter.do_Tm  s^     Q1a#f%>KK%%+J.FH
 %+DNN!(.DNN%r=   c                     | j                   j                  \  }}}}}}||||| j                   j                  |z  |z   | j                   j                  |z  |z   f| j                   _        d| j                   _        y)zMove to start of next text linerc   N)r  rI   rS   rJ   )rX   r  r  r   r   r  r  s          r>   do_T_azPDFPageInterpreter.do_T_a  st    !^^22Aq!QNN""Q&*NN""Q&*!
 %+!r=   seqc                 ,   | j                   j                  t        j                  rt	        d      y| j
                  j                  | j                   t        t        |      | j                  j                  | j                  j                                y)z0Show text, allowing individual glyph positioningNzNo font specified!)r  rN   r   r   rA   r   render_stringr   r   r  ru   ra   )rX   r  s     r>   do_TJzPDFPageInterpreter.do_TJ  sl    >>&)*>??!!NNS!!!""$		
r=   sc                 (    | j                  |g       y)z	Show textN)r  rX   r  s     r>   do_TjzPDFPageInterpreter.do_Tj  s    

A3r=   c                 H    | j                          | j                  |g       y)zPMove to next line and show text

        The ' (single quote) operator.
        N)r  r  r  s     r>   do__qzPDFPageInterpreter.do__q  s    
 	

A3r=   awacc                 l    | j                  |       | j                  |       | j                  |g       y)zqSet word and character spacing, move to next line, and show text

        The " (double quote) operator.
        N)r  r  r  )rX   r  r  r  s       r>   do__wzPDFPageInterpreter.do__w  s'    
 	

2

2

A3r=   c                      y)zBegin inline image objectNr<   rW   s    r>   do_BIzPDFPageInterpreter.do_BI  rC  r=   c                      y)zBegin inline image dataNr<   rW   s    r>   do_IDzPDFPageInterpreter.do_ID  rC  r=   c                    t        |t              rwd|v rrd|v rmt        t        |            }| j                  j                  |dt               | j                  j                  ||       | j                  j                  |       yyyy)zEnd inline image objectWHr   r   r   r   N)	r   r    rf   idr   begin_figurer/   render_image
end_figure)rX   r`   iobjids      r>   do_EIzPDFPageInterpreter.do_EI  sl    c9%#*C\FKK$$V\?KKK$$VS1KK""6*	 :D*%r=   
xobjid_argc           	         t        |      }	 t        | j                  |         }t        j                  d|       |j                  d      }|t        u rd|v r| j                         }t        t        t        |d               }t        t        t        |j                  dt                           }|j                  d      }	|	rt#        |	      n| j$                  j'                         }
| j(                  j+                  |||       |j-                  |
|gt/        || j0                               | j(                  j3                  |       y|t4        u rad	|v r]d
|v rY| j(                  j+                  |dt                | j(                  j7                  ||       | j(                  j3                  |       yy# t        $ r)}t        j
                  rt        d|      |Y d}~yd}~ww xY w)zInvoke named XObjectzUndefined xobject id: NzProcessing xobj: %rr   BBoxr0   	Resourcesr  WidthHeightr%  )r.   r$   r  r  r   r   rA   r   r   r   LITERAL_FORMr   r   r3   r"   r0   r/   r!   r   ra   r   r'  render_contentsr5   r  r)  LITERAL_IMAGEr(  )rX   r,  r  xobjr  r   interpreterbboxrI   xobjresr   s              r>   do_DozPDFPageInterpreter.do_Do  s   j)	V 45D
 			'.((9%l"v~..*Kjf67D&*TXXh-P"QRF hh{+G/6
7+DNN<O<O<QIKK$$VT6:''1 ( 
 KK""6*%'T/h$>NKK$$V\?KKK$$VT2KK""6* 9  	),B6**MNTWW	s   F5 5	G'>G""G'pagec                    t         j                  d|       |j                  \  }}}}|j                  dk(  r
dddd| |f}n;|j                  dk(  r	dddd||f}n#|j                  dk(  r
dddd|| f}n
dddd| | f}| j                  j                  ||       | j                  |j                  |j                  |       | j                  j                  |       y )	NzProcessing page: %rZ   r   r  r      i  r0  )
r   r   mediaboxrotater   
begin_pager4  r   contentsend_page)rX   r;  x0y0rP  rQ  r  s          r>   process_pagezPDFPageInterpreter.process_page*  s    		'.==RR;;"b!QR(C[[Cq!RR(C[[CaQRC(CaAsRC(CtS)T^^T]]DT"r=   r   c                     t         j                  d|||       | j                  |       | j                  |       | j	                  t        |             y)zTRender the content streams.

        This method may be called recursively.
        z1render_contents: resources=%r, streams=%r, ctm=%rN)r   r   r
  r  executer"   )rX   r   r   r  s       r>   r4  z"PDFPageInterpreter.render_contents9  sI     			?		
 	I&Z()r=   c                 8   g }| j                   j                          |D ]  }t        |      }|j                  t        j                  d|       1|j                  | j                  v r!t        j                  d|j                         j|j                  |       | j                   j                  |j                          	 t        |      }	 	 |j                         \  }}t        |t              rt        |      }dj                  |j!                  dd      j!                  dd      j!                  dd	            }t#        | |      rt%        | |      }	|	j&                  j(                  d
z
  }
|
r<| j+                  |
      }t        j-                  d||       t/        |      |
k(  rU |	|  nOt        j-                  d|        |	        n1t0        j2                  r!d|}t5        |      | j7                  |       0# t        $ r Y y w xY w# t        $ r Y y w xY w)Nz8Execute called on non-indirect object (inline image?) %rz;Refusing to execute circular reference to content stream %dzdo_{}*_a"_w'_qr   zexec: %s %rzexec: %szUnknown operator: )r   clearr$   r   r   r+  r   r  addr   r%   
nextobjectr   r)   r-   formatreplacehasattrgetattr__code__co_argcountr  r   r   r   r   rA   r   )rX   r   valid_streamsr`   streamparserr   r   methodfuncnargsargsr   s                r>   rH  zPDFPageInterpreter.executeM  s    *, 	2C!#&F||#NPV ||t555QLL
 $$V,##FLL1	2 	%m4F !,,.C #y)#C( LLd+WS$'W 4("40D MM559E#xx		-t<t9- $K		*d3__"4TH =I-i88		#=   		  s$   G> H >	H
	H
	HH)rK   r   rd   )hr9   r:   r;   r   ry   r   rY   r   r   dictr   r
  r0   r  	PDFStackTr   r   r   r  r   rH   rh   r  r  r   r"  r,  r1  r3  r5  r8  r;  r=  r?  rB  rL  rO  r^  r`  rc  rg  rm  rq  rs  rv  rx  rz  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  rf   StandardColorr  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   rF  r/   r   r4  rH  r<   r=   r>   r   r   o  s   
1 2 1I 1$ 19'4VV^(< '4 '4R
,f 
, 
,"	 "d "S T)_ K5)N#O K&V\?:;& 
&56
** * 	*
 * * * 
*,	>i 	>D 	>,I ,$ ,.Y .4 .2y 2T 2/ /9 / /*I *$ *.Y .4 .F) F F'i 'I '$ ''i 'I '$ ''' ' 	'
 ' ' ' 
'B'y 'i 'Y 'I 'RV ' 'y 'i 'Y 'I 'RV ' $(y (Y (9 ( (t ((


E




B4	V) 	V 	VV) V V
= 
=t 
=
= 
=t 
=<y <Y <9 < <<y <Y <9 < <=i =I =) =	 =d ==i =I =) =	 =d =-y/-47-		-^=~=~4& 4T 4 *( t  9  )  ) I $ 19 1 1 19 1 1 -9 - -0Y 04 0 1I 1 1t 1.
-I 
-$ 
-)) ) )+	 +y +T +$+	 +y +T +.// / 	/
 / / / 
/,+
 
t 
y T y T 	 y Y 4 (&+ +t +!	 !d !F# #T #& &	*'* &!* 	*
 
*(<x/ <D <r=   r   )Yloggingr   collections.abcr   r   ior   typingr   r   pdfminerr   pdfminer.castingr	   r
   r   r   r   pdfminer.cmapdbr   r   r   pdfminer.pdfcolorr   r   pdfminer.pdfdevicer   r   pdfminer.pdfexceptionsr   r   pdfminer.pdffontr   r   r   r   r   r   pdfminer.pdfpager   pdfminer.pdftypesr   r   r    r!   r"   r#   r$   pdfminer.psexceptionsr%   r&   pdfminer.psparserr'   r(   r)   r*   r+   r,   r-   r.   pdfminer.utilsr/   r0   r1   r2   r3   r4   r5   	getLoggerr9   r   r7   rA   r   r   r   r3  r5  rH   floatr   rb  rf   Colorrh   ry   r   ra  r   r<   r=   r>   <module>rv     s|    	 -    S S 2 2 B 4 >  %   5	 	 	   g!	| 		, 	 %j6{6{6{G/! /!f 		%
	%u
$%' 		s	-
 -
`D DNh$}U9i+?%@A h$X 	"	Z Zr=   