
    i92i*                       S r SSKrSSKrSSKJrJr  SSKJr  SSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  S	S
KJr  S	SKJrJr  S	SKJrJrJrJr  S	SKJr  S	SKJrJ r J!r!  S	SK"J#r#  S	SK$J%r%  S	SK&J'r'  S	SK(J)r)  S	SK*J+r+J,r,  S	SK-J.r.J/r/J0r0J1r1J2r2J3r3J4r4  S	SK-J5r6  S	SK-J7r8  S	SK-J9r:  S	SK;J<r<J=r=   SSK>J?r?  SSKAJBrBJCrCJDrDJErE  \B(       a  S	SKFJGrG  \R                  " \I5      rJSSSS.rK " S  S!5      rL " S" S#\L5      rM " S$ S%\25      rN " S& S'\25      rO " S( S)\25      rP " S* S+\25      rQ " S, S-5      rR " S. S/\25      rS " S0 S1\25      rT " S2 S3\05      rU " S4 S5\05      rV " S6 S7\05      rW " S8 S9\05      rX " S: S;5      rY " S< S=\25      rZ " S> S?\25      r[ " S@ SA\25      r\ " SB SC\L5      r] " SD SE5      r^ " SF SG5      r_ " SH SI5      r`   SRSJ\%4SK jjraSL rbSM rcSSSN jrdSO\_4SP jreSO\_4SQ jrfg! \@ a    Sr? GNCf = f)Tai  
This module contains the serialization logic that produces a PDF document from a FPDF instance.
Most of the code in this module is used when FPDF.output() is called.

The contents of this module are internal to fpdf2, and not part of the public API.
They may change at any time without prior warning or any deprecation period,
in non-backward-compatible ways.
    N)OrderedDictdefaultdict)contextmanager)datetimetimezone)escape)BytesIO)subset   )PDFAnnotation)PaintSoftMask	Transform)OutputIntentSubTypePageLabelStylePDFResourceTypeSignatureFlag)FPDFException)
CORE_FONTSCoreFontTTFFont)	Type3Font)RasterImageInfo)TotalPagesSubstitutionFragment)build_outline_objs)	Signaturesign_content)NamePDFArrayPDFContentStreamPDFDate	PDFObject	PDFStringbuild_obj_dict)create_dictionary_string)create_list_string)iobj_ref)	int2romanint_to_letters)signer)TYPE_CHECKINGDictOptionalUnion)FPDF)z/Fit)z/FitHnull)/XYZr/   r/   1)fullpage	fullwidthrealc                       \ rS rSrSS jrSrg)ContentWithoutID@   Nc                     g N self_security_handlers     E/home/james-whalen/.local/lib/python3.13/site-packages/fpdf/output.py	serializeContentWithoutID.serializeA   s        r:   r9   )__name__
__module____qualname____firstlineno__r?   __static_attributes__r:   rA   r>   r6   r6   @   s    rA   r6   c                   (    \ rS rSrSrS rSS jrSrg)	PDFHeaderE   u  
Emit the PDF file header as required by ISO 32000-1, §7.5.2 “File header”.

The header consists of:
  1) A line starting with the literal "%PDF-" followed by the file version
  2) If the file contains binary data an immediate second line that is a comment
     starting with "%" and containing at least four bytes with values ≥ 128 (non-ASCII).
     This helps file-transfer tools treat the content as binary rather than text.
c                     Xl         g r9   pdf_version)r<   rL   s     r>   __init__PDFHeader.__init__P   s    &rA   Nc                 "    SU R                    S3$ )Nz%PDF-u
   
%éëñ¿rK   r;   s     r>   r?   PDFHeader.serializeT   s    t''(44rA   rK   r9   rB   rC   rD   rE   __doc__rM   r?   rF   r:   rA   r>   rH   rH   E   s    '5rA   rH   c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )PDFFontX   c                   > [         TU ]  5         [        S5      U l        [        U5      U l        [        U5      U l        U(       a  [        U5      OS U l        X@l        XPl        S U l	        S U l
        S U l        S U l        S U l        g )NFont)superrM   r   typesubtype	base_fontencodingd_wwdescendant_fonts
to_unicodec_i_d_system_infofont_descriptorc_i_d_to_g_i_d_map)r<   rZ   r[   r\   r]   r^   	__class__s         r>   rM   PDFFont.__init__Y   so    L	G}i*2X $!%#"&rA   )r[   ra   rc   r]   r_   r\   rb   rZ   r`   rY   r^   NNNrB   rC   rD   rE   rM   rF   __classcell__rd   s   @r>   rT   rT   X   s    ' 'rA   rT   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )CIDSystemInfoh   c                 l   > [         TU ]  5         [        SSS9U l        [        SSS9U l        SU l        g )NAdobeTencryptUCSr   )rX   rM   r"   registryordering
supplement)r<   rd   s    r>   rM   CIDSystemInfo.__init__i   s1    !'48!%6rA   )rs   rr   rt   rg   ri   s   @r>   rk   rk   h   s     rA   rk   c                   h   ^  \ rS rSrS	U 4S jjr\S 5       r\S 5       r\S 5       rS r	S r
SrU =r$ )
PDFType3Fontp   c           	        > [         TU ]  5         Xl        [        S5      U l        [        SUR
                  R                   35      U l        [        S5      U l        SU R                  R
                  R                  S   R                  U R                  R                  -  S SU R                  R
                  R                  S   R                  U R                  R                  -  S SU R                  R
                  R                  S   R                  U R                  R                  -  S SU R                  R
                  R                  S   R                  U R                  R                  -  S S3	U l        S	U l        [!        S
 UR"                   5       5      U l        ['        S UR"                   5       5      U l        S U l        S U l        g )NrW   MPDFAA+Type3[headz.0f ]z[0.001 0 0 0.001 0 0]c              3   8   #    U  H  oR                   v   M     g 7fr9   unicode.0gs     r>   	<genexpr>(PDFType3Font.__init__.<locals>.<genexpr>~   s     >Aii   c              3   8   #    U  H  oR                   v   M     g 7fr9   r   r   s     r>   r   r      s     =1YYr   )rX   rM   _font3r   rY   r[   namerZ   ttfontxMinscaleyMinxMaxyMax
font_b_boxfont_matrixminglyphs
first_charmax	last_char	resourcesr`   )r<   font3rd   s     r>   rM   PDFType3Font.__init__q   sk   L	75??#7#7"89:	G}%%,,V499DKK<M<MMcR%%,,V499DKK<M<MMcR%%,,V499DKK<M<MMcR%%,,V499DKK<M<MMcRRSU 	 3>>>===rA   c                     [        U R                  R                   Vs0 s H   nSUR                   3UR                   S3_M"     sn5      $ s  snf )N/ 0 R)pdf_dictr   r   
glyph_nameobj_id)r<   r   s     r>   
char_procsPDFType3Font.char_procs   sK    <@KK<N<NO<NqqAHH:T!22<NO
 	
Os   'Ac                 r    [        [        S5      [        S5      [        S5      U R                  5       05      $ )N/Typez	/Encodingz/Differences)r   r   differences_tabler<   s    r>   r\   PDFType3Font.encoding   s5    WtK0^$d&<&<&>
 	
rA   c                 v   [        U R                  R                  S S9nUS   R                  nUS   R                  nS/US-   U-
  -  nU HA  n[	        UR
                  U R                  R                  -  S-   5      XER                  U-
  '   MC     [        U Vs/ s H  n[        U5      PM     sn5      $ s  snf )Nc                     U R                   $ r9   r   glyphs    r>   <lambda>%PDFType3Font.widths.<locals>.<lambda>       U]]rA   keyr   r   gMbP?)	sortedr   r   r   roundglyph_widthr   pdf_liststr)r<   sorted_glyphsmin_unicodemax_unicodewidthsr   r   s          r>   r   PDFType3Font.widths   s    t{{117RS#A&..#B'// a+56 #E27!!DKK$5$55=3F==;./ # VDVk[)VDEEDs   B6c                   ^ ^ SnSR                  U4S jT R                  R                   5       5      nU[        U5      S:  a  SU S3OS-  nSR                  U 4S jUR	                  5        5       5      nU[        U5      S:  a  S	U S3OS-  nSR                  U 4S
 jUR	                  5        5       5      nU[        U5      S:  a  SU S3OS-  nUS-  nUT l        g )N<<r~   c              3   P   >#    U  H  nS U STU   R                    S3v   M     g7f)/Ir~   r   N)id)r   imgimg_objs_per_indexs     r>   r   2PDFType3Font.generate_resources.<locals>.<genexpr>   s4      
. Q)#.112$7.s   #&r   z/XObject <<>> c              3      >#    U  H6  u  pUTR                   R                  ;   d  M!  S U SUR                   S3v   M8     g7fr   r~   r   N)r   graphics_style_usedr   )r   r   gfxstate_objr<   s      r>   r   r      sC      
&D"t{{666 -avQ|'t,&D
    AAz/ExtGState <<c              3      >#    U  H6  u  pUTR                   R                  ;   d  M!  S U SUR                   S3v   M8     g7fr   )r   patterns_usedr   )r   r   patternr<   s      r>   r   r      sA      
!>t{{000 (avQwzzl$'!>r   z/Pattern <<)joinr   images_usedlenitemsr   )r<   r   gfxstate_objs_per_namepattern_objs_per_namer   objectsext_g_stater   s   ``      r>   generate_resourcesPDFType3Font.generate_resources   s     	(( 
{{..
 
 	#g,2B{7)2.J	hh 
&<&B&B&D
 

 	K8H18L}[M4RTT	(( 
!6!<!<!>
 

 	#g,2B{7)2.J	T	"rA   c                 |    [        U R                  R                  S S9nSSR                  S U 5       5      -   S-   $ )Nc                     U R                   $ r9   r   r   s    r>   r   0PDFType3Font.differences_table.<locals>.<lambda>   r   rA   r   r|   
c              3   V   #    U  H  oR                    S UR                   3v   M!     g7f)z /N)r   r   )r   r   s     r>   r   1PDFType3Font.differences_table.<locals>.<genexpr>   s'      DQ5==/E$4$4#56Ms   ')r   )r   r   r   r   )r<   r   s     r>   r   PDFType3Font.differences_table   sI    t{{117RSii DQ  		
rA   )
r   r   r   r   r   r   r   rZ   r`   rY   )r   r   )rB   rC   rD   rE   rM   propertyr   r\   r   r   r   rF   rh   ri   s   @r>   rw   rw   p   sU    $ 
 

 
 
 F F #6
 
rA   rw   c                   0   ^  \ rS rSrS\4U 4S jjrSrU =r$ )PDFInfo   creation_datec                 J  > [         TU ]  5         U(       a
  [        USS9OS U l        U(       a
  [        USS9OS U l        U(       a8  [        U[        [        [        45      (       a  SR                  S U 5       5      nU(       a
  [        USS9OS U l
        U(       a8  [        U[        [        [        45      (       a  SR                  S U 5       5      nU(       a
  [        USS9OS U l        U(       a
  [        USS9OS U l        U(       a
  [        USS9OS U l        Xpl        g )NTro   z; c              3   8   #    U  H  n[        U5      v   M     g 7fr9   r   )r   as     r>   r   #PDFInfo.__init__.<locals>.<genexpr>   s     6v!s1vvvr   , c              3   8   #    U  H  n[        U5      v   M     g 7fr9   r   )r   keywords     r>   r   r      s      FX'WXr   )rX   rM   r"   titlesubject
isinstancelisttuplesetr   authorkeywordscreatorproducerr   )	r<   r   r   r   r   r   r   r   rd   s	           r>   rM   PDFInfo.__init__   s     	7<Yud3$
;By$7j$s);<<YY6v66F9?i5T
8dE3-?@@yy FX FFH=E	(D94;By$7=E	(D94*rA   )r   r   r   r   r   r   r   )rB   rC   rD   rE   r    rM   rF   rh   ri   s   @r>   r   r      s    + + +rA   r   c                   $    \ rS rSrS rSS jrSrg)AcroForm   c                     Xl         X l        g r9   fields	sig_flags)r<   r   r   s      r>   rM   AcroForm.__init__   s    "rA   Nc           
      |    [        [        U 5       Vs0 s H  o3[        X5      _M     snUUS9n[        USS9$ s  snf )Nr=   _obj_idr~   
field_joinr#   dirgetattrr   r<   r=   r  r   obj_dicts        r>   r?   AcroForm.serialize   sD    !03D	:	'$$$	:/

 S11	 ;s   9r   NN)rB   rC   rD   rE   rM   r?   rF   r:   rA   r>   r   r      s    #2rA   r   c                   .   ^  \ rS rSr SU 4S jjrSrU =r$ )
PDFCatalog   c                   > [         TU ]  5         [        S5      U l        U(       a  [	        U5      OS U l        X l        X0l        X@l        S U l	        S U l
        S U l        S U l        S U l        S U l        S U l        S U l        S U l        g )NCatalog)rX   rM   r   rY   r"   langpage_layout	page_modeviewer_preferencespages	acro_formopen_action	mark_infometadatanamesoutlinesoutput_intentsstruct_tree_root)r<   r  r  r  r  rd   s        r>   rM   PDFCatalog.__init__   s}     	O	'+IdO	&""4

" $rA   )r  r  r  r  r  r  r  r  r  r  r  r  rY   r  NNNNrg   ri   s   @r>   r  r     s    NR% %rA   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )PDFResourcesi  c                 j   > [         TU ]  5         Xl        X l        X0l        X@l        XPl        X`l        g r9   )rX   rM   proc_setfontx_objectr   shadingr   )r<   r#  r$  r%  r   r&  r   rd   s          r>   rM   PDFResources.__init__  s-     	 &rA   )r   r$  r   r#  r&  r%  rg   ri   s   @r>   r!  r!    s     rA   r!  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )PDFFontStreami  c                 B   > [         TU ]  USS9  [        U5      U l        g NTcontentscompress)rX   rM   r   length1r<   r-  rd   s     r>   rM   PDFFontStream.__init__  s     (T:8}rA   )r/  rg   ri   s   @r>   r)  r)    s    % %rA   r)  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )PDFXmpMetadatai  c                 ~   > [         TU ]  UR                  S5      S9  [        S5      U l        [        S5      U l        g )Nzutf-8r-  MetadataXML)rX   rM   encoder   rY   rZ   r0  s     r>   rM   PDFXmpMetadata.__init__  s3    (//'":;$	E{rA   )rZ   rY   rg   ri   s   @r>   r3  r3    s    # #rA   r3  c                   6   ^  \ rS rSrSr   SU 4S jjrSrU =r$ )
PDFXObjecti  )_id	_contentsfilterlengthrY   rZ   widthheightcolor_spacebits_per_componentdecodedecode_parmss_maskc
                    > [         T
U ]  US9  [        S5      U l        [        U5      U l        X0l        X@l        XPl        X`l        [        U5      U l	        Xl
        Xl        S U l        g )Nr5  XObject)rX   rM   r   rY   rZ   r@  rA  rB  rC  r>  rD  rE  rF  )r<   r-  rZ   r@  rA  rB  rC  
img_filterrD  rE  rd   s             r>   rM   PDFXObject.__init__.  s_     	(+O	G}
&"4:&(rA   )
rC  rB  rD  rE  r>  rA  rF  rZ   rY   r@  rf   )rB   rC   rD   rE   	__slots__rM   rF   rh   ri   s   @r>   r;  r;    s    I0  rA   r;  c                   0   ^  \ rS rSrSrSrU 4S jrSrU =r$ )PDFICCProfileiG  z
Holds values for ICC Profile Stream
Args:
    contents (str): stream content
    n (int): [1|3|4], # the numbers for colors 1=Gray, 3=RGB, 4=CMYK
    alternate (str): ['DeviceGray'|'DeviceRGB'|'DeviceCMYK']
)r<  r=  r>  r?  n	alternatec                 N   > [         TU ]  USS9  X l        [        U5      U l        g r+  )rX   rM   rN  r   rO  )r<   r-  rN  rO  rd   s       r>   rM   PDFICCProfile.__init__Y  s'     	(T:irA   )rO  rN  )	rB   rC   rD   rE   rR   rK  rM   rF   rh   ri   s   @r>   rM  rM  G  s    I) )rA   rM  c                       \ rS rSrSrSrS\S\S\4S jr	\
S\4S	 j5       r\
S\4S
 j5       rS rS rS\4S jrS\4S jrS\4S jrS\4S jrSrg)PDFPageLabelid  z?
This will be displayed by some PDF readers to identify pages.
_style_prefixstlabel_stylelabel_prefixlabel_startc                 (    Xl         X l        X0l        g r9   rT  )r<   rX  rY  rZ  s       r>   rM   PDFPageLabel.__init__k  s     '2("rA   returnc                 f    U R                   (       a  [        U R                   R                  5      $ S $ r9   )rU  r   valuer   s    r>   sPDFPageLabel.sr  s"    *.++tDKK%%&?4?rA   c                 R    U R                   (       a  [        U R                   5      $ S $ r9   )rV  r"   r   s    r>   pPDFPageLabel.pv  s    *.,,y&@D@rA   c                 V    SU R                    SU R                   SU R                   S3$ )NzPDFPageLabel(r   )rT  r   s    r>   __repr__PDFPageLabel.__repr__z  s)    t{{m2dll^2dggYaHHrA   c                    U R                   (       a  U R                   OSnU R                  (       Ga8  U R                  [        R                  :X  a  U[	        U R
                  5      -  nU$ U R                  [        R                  :X  a  U[        U R
                  5      -  nU$ U R                  [        R                  :X  a(  U[        U R
                  5      R                  5       -  nU$ U R                  [        R                  :X  a  U[        U R
                  S-
  5      -  nU$ U R                  [        R                  :X  a)  U[        U R
                  S-
  5      R                  5       -  nU$ )Nr   r   )rV  rU  r   NUMBERr   rW  UPPER_ROMANr'   LOWER_ROMANlowerUPPER_LETTERr(   LOWER_LETTER)r<   rets     r>   __str__PDFPageLabel.__str__}  s   "lldll;;;{{n333s477|# 
  : ::y)) 
  : ::y)//11
 
	  ; ;;~dggk22 
  ; ;;~dggk288::
rA   c           
      h    [        [        U 5       Vs0 s H  o[        X5      _M     sn5      $ s  snf r9   )r#   r  r  )r<   r   s     r>   r?   PDFPageLabel.serialize  s+    #d)L)3GD$66)LMMLs   /c                     U R                   $ r9   )rU  r   s    r>   	get_stylePDFPageLabel.get_style      {{rA   c                     U R                   $ r9   )rV  r   s    r>   
get_prefixPDFPageLabel.get_prefix  s    ||rA   c                     U R                   $ r9   )rW  r   s    r>   	get_startPDFPageLabel.get_start  s    wwrA   )rV  rU  rW  N)rB   rC   rD   rE   rR   rK  r   r   intrM   r   r   r`  r"   rc  rg  rq  dictr?   rv  rz  r}  rF   r:   rA   r>   rS  rS  d  s     ,I#)#9<#KN# @4 @ @ A9 A AIN4 N> C 3 rA   rS  c                   ~   ^  \ rS rSrSrU 4S jrS rS rS rS r	S\
S	\
4S
 jrS\
4S jrS\4S jrS rS rSrU =r$ )PDFPagei  )r<  rY   r-  durtransannotsgroup	media_boxstruct_parentsr   parent_index	_width_pt
_height_pt_page_label_text_substitution_fragmentsc                 $  > [         TU ]  5         [        S5      U l        X0l        U(       a  UOS U l        X l        [        5       U l        S U l	        S U l
        S U l        S U l        S U l        X@l        Su  U l        U l        S U l        / U l        g )NPager  )rX   rM   r   rY   r-  r  r  r   r  r  r  r  r   r  r  r  r  r  r  )r<   duration
transitionr-  indexrd   s        r>   rM   PDFPage.__init__  s     	L	 '8T
j
"*4')-RT)rA   c                     U R                   $ r9   r  r   s    r>   r  PDFPage.index  rx  rA   c                     Xl         g r9   r  )r<   is     r>   	set_indexPDFPage.set_index  s    rA   c                 2    U R                   U R                  4$ )zGReturn a pair (width, height) in the unit specified to FPDF constructorr  r  r   s    r>   
dimensionsPDFPage.dimensions  s    ~~t..rA   c                      XsU l         U l        g)zHAccepts a pair (width, height) in the unit specified to FPDF constructorNr  )r<   width_pt	height_pts      r>   set_dimensionsPDFPage.set_dimensions  s    *2'rA   previous_page_label
page_labelc                    U(       at  U(       am  UR                  5       UR                  5       :X  aK  UR                  5       UR                  5       :X  a)  UR                  (       d  UR                  5       S-   Ul        U(       a  UR                  5       (       d  SUl        U(       aA  U(       d:  [	        UR                  5       UR                  5       UR                  5       S-   5      nX l        g Nr   )rv  rz  rW  r}  rS  r  )r<   r  r  s      r>   set_page_labelPDFPage.set_page_label  s      $$&*=*G*G*II%%'+>+I+I+KKMM/99;a?JM'')) !
z%#--/#..0#--/!3J &rA   r]  c                     U R                   $ r9   )r  r   s    r>   get_page_labelPDFPage.get_page_label  s    rA   c                     U R                   (       d  [        U R                  5       5      $ [        U R                   5      $ r9   )r  r   r  r   s    r>   	get_labelPDFPage.get_label  s+    (,(8(8s4::< Sc$BRBR>SSrA   c                     U R                   $ r9   )r  r   s    r>   get_text_substitutionsPDFPage.get_text_substitutions  s    000rA   c                 :    U R                   R                  U5        g r9   )r  append)r<   fragments     r>   add_text_substitutionPDFPage.add_text_substitution  s    ))00:rA   )r  r  r  r  r  r  r-  r  r  r  r  r   r  r  rY   )rB   rC   rD   rE   rK  rM   r  r  r  r  rS  r  r  r   r  r  r  rF   rh   ri   s   @r>   r  r    sb    I&U0/>&#/&=I&2   T3 T1; ;rA   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )PDFPagesRooti  c                 h   > [         TU ]  5         [        S5      U l        Xl        X l        S U l        g )NPages)rX   rM   r   rY   countr  kids)r<   r  r  rd   s      r>   rM   PDFPagesRoot.__init__  s*    M	
"	rA   )r  r  r  rY   rg   ri   s   @r>   r  r    s     rA   r  c                   2   ^  \ rS rSrU 4S jrSS jrSrU =r$ )PDFExtGStatei  c                 .   > [         TU ]  5         Xl        g r9   )rX   rM   _dict_as_str)r<   dict_as_strrd   s     r>   rM   PDFExtGState.__init__  s    'rA   c                 :    U R                    SU R                   S3$ )Nz 0 obj
z
endobj)r   r  )r<   r	  r=   s      r>   r?   PDFExtGState.serialize  s     ''(4#4#4"5X>>rA   )r  r  )rB   rC   rD   rE   rM   r?   rF   rh   ri   s   @r>   r  r    s    (
? ?rA   r  c                   (    \ rS rSrSrS rSS jrSrg)PDFXrefAndTraileri  z$Cross-reference table & file trailerc                 b    Xl         UR                  S-   U l        S U l        S U l        S U l        g r  )output_builderr   r  catalog_objinfo_objencryption_obj)r<   r  s     r>   rM   PDFXrefAndTrailer.__init__  s1    ,#**Q.
"rA   Nc                    U R                   n[        [        UR                  5      5      n/ nUR	                  S5        UR	                  SU R
                   35        UR	                  S5        [        SU R
                  5       H%  nUR	                  UR                  U   S S35        M'     UR	                  S5        UR	                  S5        UR	                  S	U R
                   35        UR	                  S
[        U R                  R                  5       35        U R                  (       a1  UR	                  S[        U R                  R                  5       35        UR                  nU R                  (       aH  UR	                  S[        U R                  R                  5       35        UR                  R                  nO1UR                  5       nUS:X  a  UR!                  UR                  5      nU(       a  UR	                  SU S35        UR	                  S5        UR	                  S5        UR	                  U5        UR	                  S5        SR#                  U5      $ )Nxrefz0 z0000000000 65535 f r   010z	 00000 n trailerr   z/Size z/Root z/Info z	/Encrypt r   z/ID [r   r   	startxrefz%%EOFr   )r  r   r   bufferr  r  rangeoffsetspdf_refr  r   r  fpdfr  r=   file_id_default_file_idr   )r<   r=   builderr  outr   r  r  s           r>   r?   PDFXrefAndTrailer.serialize  s   %%GNN+,	

6

R

|$%

()Atzz*FJJ'//&1#6i@A +

9

4

VDJJ<()

VGD$4$4$7$789:;==JJ(8(8 9:;<||JJ74+>+>+A+A#B"CDE,,44GllnG"}//?JJwiq)*

4

;

9

7yy~rA   )r  r  r  r  r  r9   rQ   r:   rA   r>   r  r    s    *#rA   r  c                   T    \ rS rSrSrSr    SSSS\S\S	\S
\S\4S jjrSS jr	Sr
g)OutputIntentDictionaryi7  ar  
The optional OutputIntents (PDF 1.4) entry in the document
catalog dictionary holds an array of output intent dictionaries,
each describing the colour reproduction characteristics of a possible
output device.

Args:
    subtype (OutputIntentSubType, required): PDFA, PDFX or ISOPDF
    output_condition_identifier (str, required): see the Name in
        https://www.color.org/registry.xalter
    output_condition (str, optional): see the Definition in
        https://www.color.org/registry.xalter
    registry_name (str, optional): "https://www.color.org"
    dest_output_profile (PDFICCProfile, required/optional):
        PDFICCProfile | None # (required if
        output_condition_identifier does not specify a standard
        production condition; optional otherwise)
    info (str, required/optional see dest_output_profile): human
        readable description of profile
)rY   r`  output_condition_identifieroutput_conditionregistry_namedest_output_profileinfoNrZ   zOutputIntentSubType | strr  r  r  r  r  c                    [        S5      U l        [        [        R                  " U5      R                  5      U l        U(       a  [        U5      OS U l        U(       a  [        U5      OS U l        U(       a  [        U5      OS U l	        U(       a  [        U[        5      (       a  UOS U l        U(       a  [        U5      U l        g S U l        g )NOutputIntent)r   rY   r   coercer_  r`  r"   r  r  r  r   rM  r  r  )r<   rZ   r  r  r  r  r  s          r>   rM   OutputIntentDictionary.__init__W  s     (	)009??@ + 12 	( ,<I&' 	 :GY}5D #z2E}'U'U   	 
 (,IdO		rA   c           
      ~    [        [        U 5       Vs0 s H  o3[        X5      _M     snUUS9n[        U5      $ s  snf )Nr  r  r  s        r>   r?    OutputIntentDictionary.serializer  sB    !03D	:	'$$$	:/

 !!	 ;s   :)r  r  r  r  r  r`  rY   r  r  )rB   rC   rD   rE   rR   rK  r   rM  rM   r?   rF   r:   rA   r>   r  r  7  s`    *I !%!-16,6 &)6 	6
 6 +6 66"rA   r  c                      \ rS rSrSr\R                  " S5      r\R                  " S5      r\R                  " S5      r	\R                  " S5      r
\R                  " S5      rS rS	\S
\\   4S jrS rS\S\4S jrS\4S jrS\S\\\\4      4S jrS\S
\SS4S jrS	\4S jrS
\S	\4S jrS	\4S jr\S	\4S j5       r SS\S\S\S   4S jjr Sr!g)ResourceCatalogi{  zKManage the indexing of resources and association to the pages they are usedz/(GS\d+) gsz
/I(\d+) Doz/(P\d+)\s+scnz/(P\d+)\s+SCNz!/F(\d+)\s+[-+]?\d+(?:\.\d+)?\s+Tfc                     [        [        5      U l        [        [        5      U l        [        5       U l        / U l        / U l        SU l	        0 U l
        SU l        g )Nr   r   )r   r  r   r   resources_per_pager   graphics_stylessoft_mask_xobjectsform_xobjectslast_reserved_object_idfont_registrynext_xobject_indexr   s    r>   rM   ResourceCatalog.__init__  sM    $T*"-c"2*}"$'($BD"#rA   resource_typepage_numberc                    U[         R                  [         R                  4;   aa  U R                  U   nU R	                  U5      nX$;  a  U [        U5      S-    3XB'   Ub!  U R                  X14   R                  XB   5        XB   $ U[         R                  :X  a.  [        U[        5      (       a  X R                  :  a
  US-   U l        U R                  X14   R                  U5        g r  )r   PATTERNSHADINGr   _get_prefixr   r  addX_OBJECTr   r  r  )r<   r  resourcer  rr   prefixs         r>   r  ResourceCatalog.add  s    _44o6M6MNN~~m4H%%m4F'(.xH0A/B%C"&''(DEII& %% _5558S))333&.lD# <=AA(KrA   c                    UR                  5       nU(       d  gX R                  ;  aM  [        U R                  [        R
                  5       [        U R                  5       35      nX0R                  U'   U R                  U   $ )z
Graphics style can be added without associating to a page number right away,
like when rendering a svg image.
The method that adds image to the page will call the add method for the page association.
N)r?   r  r   r  r   EXT_G_STATEr   )r<   style
style_dictr   s       r>   register_graphics_style'ResourceCatalog.register_graphics_style  sw     __&
111##O$?$?@A#dFZFZB[A\]D 04  ,##J//rA   	soft_maskr]  c                     U =R                   S-  sl         [        X5      nU R                   Ul        U R                  R	                  U5        UR                  $ )z5Register a soft mask xobject and return its object idr   )r  soft_mask_path_to_xobjectr   r  r  )r<   r  xobjects      r>   register_soft_mask"ResourceCatalog.register_soft_mask  sH    $$)$+I<11
&&w/zzrA   c                     [        X5      nU R                  nU =R                  S-  sl        U R                  R                  X245        U$ )zBRegister a blend group Form XObject and return its resource index.r   )blend_group_to_xobjectr  r  r  )r<   blend_groupr  r  s       r>   register_blend_form#ResourceCatalog.register_blend_form  sD    (;''1$!!5"23rA   renderedc           	      r   [        5       nU R                  R                  U5       H3  nUR                  [        R
                  UR                  S5      45        M5     U R                  R                  U5       H<  nUR                  [        R                  [        UR                  S5      5      45        M>     U R                  R                  U5       H3  nUR                  [        R                  UR                  S5      45        M5     U R                  R                  U5       H3  nUR                  [        R                  UR                  S5      45        M5     U R                  R                  U5       H<  nUR                  [        R                  [        UR                  S5      5      45        M>     U$ )z6Parse a content stream and return discovered resourcesr   )r   GS_REGEXfinditerr  r   r  r  	IMG_REGEXr  r  PATTERN_FILL_REGEXr  PATTERN_STROKE_REGEX
FONT_REGEXFONT)r<   r  foundms       r>   scan_streamResourceCatalog.scan_stream  s<   ''1AII22AGGAJ?@ 2 ((2AII//QWWQZAB 3 ((11(;AII..
;< < **33H=AII..
;< > ))(3AII++S_=> 4 rA   Nc                     U R                  U5       H[  u  p4U[        R                  :X  a0  U R                  U[        R                  4   R	                  U5        MI  U R	                  X4U5        M]     g)z
Scan a rendered content stream and register resources used on the given page.
Currently indexes:
  - ExtGState invocations: '/GSn gs'
  - Image XObjects: '/In Do'
N)r  r   r  r  r  )r<   r  r  r  r  s        r>   index_stream_resources&ResourceCatalog.index_stream_resources  sb     (,'7'7'A#M 7 77''o6M6M(NOSS +> (BrA   c                 <    U R                   U   R                  5       $ r9   )r   r   )r<   r  s     r>   	get_itemsResourceCatalog.get_items  s    ~~m,2244rA   c                 "    U R                   X4   $ r9   )r  )r<   r  r  s      r>   get_resources_per_page&ResourceCatalog.get_resources_per_page  s    &&'CDDrA   c                     [        5       nU R                  R                  5        H   u  u  p4nXA:X  d  M  UR                  U5        M"     U$ r9   )r   r  r   update)r<   r  unique_rtyper  s         r>   get_used_resources"ResourceCatalog.get_used_resources  sC    $($;$;$A$A$C JQ%h' %D rA   c                     U[         R                  :X  a  gU[         R                  :X  a  gU[         R                  :X  a  g[	        SU 35      e)NGSPShzNo prefix for resource type )r   r  r  r  
ValueError)clsr  s     r>   r  ResourceCatalog._get_prefix  sH    O777O333O3337GHHrA   font_family
font_style)r   r   c                    U(       d  [        S5      eSR                  [        UR                  5       5      5      n0 SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SSSS.EnUR	                  5       R	                  S5      R                  S5       GH:  nUR	                  5       R	                  S5      R                  5       nU U 3nXpR                  ;   a  U R                  U   s  $ U[        ;   aa  US;   a  SOUnU U 3n	XR                  ;  a1  [        U R                  5      S-   n
[        XU5      U R                  U	'   U R                  U	   s  $ UR                  U5      nU(       d  M  US;   a  SOUnU U 3n	XR                  ;  a1  [        U R                  5      S-   n
[        XU5      U R                  U	'   U R                  U	   s  $    [        SU< SU< 35      e)a  
Resolve a family+style to a concrete font instance from the font registry.
Behavior:
  - Exact match (family.lower() + style.upper()) in registry: return it
  - If `family` names a core font: add CoreFont to registry (if missing) and return it
  - If `family` is an alias/generic: translate to a core font, add to registry (if missing), and return it
  - Otherwise: raise KeyError

Notes:
  - For Symbol/ZapfDingbats, style is forced to "" (they don't support B/I).
zEmpty font familyr   z
sans-serif	helveticaz
sans serifarialverdanatahomazsegoe uiseriftimesztimes new romangeorgiacambriagaramond	monospacecourierzcourier newconsolasmonacosymbolzapfdingbats)rG  rH  zzapf dingbatsz'",>   rG  rH  r   zNo suitable font for family=z, style=)KeyErrorr   r   upperstripsplitrm  r  r   r   r   get)r<   r7  r8  r  alias	candidatefamilyfontkey
core_styler   r  mappeds               r>   get_font_from_family$ResourceCatalog.get_font_from_family  s    .//z//123
+
 +
 [	

 {
 k
 
 W
 W
 w
 w
 w
 
  !
" y#
$ 9%
& 	'
( i)
, *+1
6 %**,2259??DI__&,,U399;F  (G,,,))'22 ##)-G#GRU
-000D../!3A.6qz.JD&&s+))#.. YYv&Fv#)-G#GRU
-000D../!3A.6qz.JD&&s+))#..3 E8 5k_HUIVWWrA   )r  r  r  r  r  r   r  r  )r   )"rB   rC   rD   rE   rR   recompiler  r  r  r  r  rM   r   r,   r  r  r  r   r  r  r   r   r   r  r!  r$  r'  r.  classmethodr  r-   rU  rF   r:   rA   r>   r  r  {  sP   Qzz.)H

=)I$45::&67@AJ$ RU .0$M c # C D7K1L,M *?s ? ? ?5 5E# Eo E  I I I 35JXJX,/JX	$	%JX JXrA   r  c                       \ rS rSrSrS&S jrS rS rS'S jrS r	S	 r
\" S
S5      4S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS\4S jrS rS r S  r!S! r"S" r#\$S# 5       r%S$ r&S%r'g)(OutputProduceriO  zVGenerates the final bytearray representing the PDF document, based on a FPDF instance.c                     Xl         / U l        0 U l        UR                  R                  U l        0 U l        0 U l        [        [        5      U l
        [        5       U l        g r9   )r  pdf_objsiccp_i_to_pdf_i_resource_catalogr  r   r  trace_labels_per_obj_idr   r  sections_size_per_trace_label	bytearrayr  )r<   r  s     r>   rM   OutputProducer.__init__R  sS    	!"":: 	 ')$-8-=*krA   c           
         U R                   nUR                  (       aK  UR                  5       nUS:X  a  UR                  [	        S5      5      nUR                  R                  U5        UR                  nUR                  (       a0  UR                  R                  U:  a  UR                  R                  nU R                  R                  [        U5      5        U R                  5       nU R                  5       nU R                  5       nU R                  5       nUR                    H5  nU R#                  US5        U R#                  UR%                  5       S5        M7     U R'                  U5        U R)                  5       n	U R+                  5       u  pU R-                  5       nSnUR.                  (       d  U R1                  5       nU R3                  5       n[5        U 5      nU R                  R                  U5        [7        U5      Ul        U R;                  UUUS   UUU	U
S9  / nU GHW  nUUl        UR>                   GH   n/ nUR@                  (       a6  [C        UR@                  S5      (       a  UR                  UR@                  5        URD                  (       ae  [C        URD                  S5      (       aJ  [C        URD                  R@                  S5      (       a%  UR                  URD                  R@                  5        U HF  nURF                  [I        U5      :  d  M  [K        S	URF                   S
URM                  5        S35      e   URO                  U5        GM#     UR>                  (       a  GMP  SUl        GMZ     U H  nUR                  UR@                  5        M      U H-  n[Q        UURF                  S-
     RR                  5      Ul*        M/     URV                  RX                  RZ                   H  nUURG                  5       S-
     Ul.        M      X_l/        Xl0        Xl1        U Rd                  (       a   SU Rd                   35       eU Rf                  (       a   S[I        U Rf                  5       35       eU R                   H  n[i        U[j        5      (       a  SnOQ[I        U Rd                  5      U Rf                  URR                  '   U Rl                  Ro                  URR                  5      nU(       aD  U Rq                  U5         U Rs                  URu                  UR                  S95        SSS5        M  U Rs                  URu                  UR                  S95        M     U Rw                  5         URx                  (       aV  [{        [|        U Rd                  URx                  UR~                  UR                  UR                  UR                  5      U l2        U Rd                  $ ! , (       d  f       GMv  = f)z
This method alters the target FPDF instance
by assigning IDs to all PDF objects,
plus a few other properties on PDFPage instances
r   r   embedded_files	file_specN)pages_root_objfirst_page_objsig_annotation_objxmp_metadata_objstruct_tree_root_objoutline_dict_objr  destz'Invalid reference to non-existing page z present on page z: r   z@Nothing should have been appended to the .buffer at this stage: z.No offset should have been set at this stage: )r=   )Cr  r=   r  r  rb  generate_passwordsrL   r  _min_pdf_versionr]  r  rH   _add_pages_root_add_catalog
_add_pages_add_annotations_as_objectsre  _add_pdf_objrf  _insert_resources_add_structure_tree_add_document_outline_add_xmp_metadata_compliance	_add_info_add_encryptionr  r   r  _finalize_catalogr  r  rm  hasattrr   r  r   r4  r  extendr  r   page_refstruct_builderdoc_struct_elemkpgr  r  r  r  r  r   r6   r`  rN  _trace_size_outr?   _log_final_sections_sizes	_sign_keyr   r)   
_sign_cert_sign_extra_certs_sign_hashalgo
_sign_time)r<   r  r  rL   rg  r  	page_objsri  embedded_filerk  rl  outline_itemsrj  r  r  r  destspage_objannot
page_destsrm  outline_itemstruct_elempdf_objtrace_labels                            r>   	bufferizeOutputProducer.bufferize_  s    yy
 !!llnG"}//	$@""55g>&&##''88;F11BBKY{34--/'')OO%	!==?!00Mm-=>m557E 1 	y)#779*.*D*D*F'113~~'H--/ &T" 'y1)$Q<1-!5- 	 	
 !H,HO!
::uzz=99"))%**577wuww77uww||];;"))%'',,7&D''#i.8(EdFVFVEWWhiqiwiwiyhzz|}  '
 Z( )  ???"&) "* *LLL**+ * D#Id.>.>.B$C$F$FGDM ..>>@@K&{'>'>'@1'DEKN A& , 	\Mdkk][	\ 	P;C<M;NO	P }}G'#344"+.t{{+;WZZ("::>>wzzJ%%k2II))D<R<R)S 32
 		'++d>T>T+UV % 	&&(>>&&&##DK {{% 32s   )W33
X	c                     [        U[        5      (       d1  [        U[        5      (       d  [        U5      nUR                  S5      nU =R                  US-   -  sl        g)zAppend data to the bufferlatin1   
N)r   bytesr   r8  r  )r<   datas     r>   r  OutputProducer._out  sE    $&&dC((4y;;x(Dte|#rA   Nc                     U =R                   S-  sl         U R                   Ul        U R                  R                  U5        U(       a  X R                  U R                   '   U R                   $ r  )r   r   r]  r  r`  )r<   r  r  s      r>   rt  OutputProducer._add_pdf_obj  sL    q[[
W%8C((5{{rA   c                     U R                   n[        UR                  [        UR                  5      S9nU R                  U5        U$ )N)r  r  )r  r  pages_count_dimensions_to_mediaboxdefault_page_dimensionsrt  )r<   r  rg  s      r>   rp  OutputProducer._add_pages_root  sB    yy%""-d.J.JK
 	.)rA   c              #      #    [        SU R                  R                  S-   5       HQ  nU R                  R                  U   nUR	                  5       U:X  d   SUR	                  5       < SU< 35       eUv   MS     g 7f)Nr   zpage_obj.index()=z != page_index=)r  r  r  r  r  )r<   
page_indexr  s      r>   _iter_pages_in_order#OutputProducer._iter_pages_in_order  ss     499#8#81#<=Jyyz2H  J.7#(.."$$467.N >s   A:A<r   c                    U R                   n/ n[        U R                  5       5      U    H  nUR                  S:  a$  UR                  (       a  [        SSSS.SS9Ul        UR                  5       UR                  :w  a  [        UR                  5       5      Ul
        U R                  US5        UR                  U5        [        UR                  UR                  S	9nU R                  US5        XTl        M     U$ )
Nz1.3z/Groupz/Transparency
/DeviceRGB)r   z/Sz/CSr~   r  r  r,  )r  r   r  rL   allow_images_transparencyr   r  r  r  r  r  rt  r  r   r-  r.  )r<   _slicer  r  r  cs_objs         r>   rr  OutputProducer._add_pages  s    yy	T6689&AH%'D,J,J!)&olS"" ""$(D(DD%<X=P=P=R%S"h0X& &!**T]]F fg. &! B$ rA   c                 0   S nU R                   R                  R                  5        Hk  nUR                   HX  n[	        U[
        5      (       d  M  U R                  U5        [	        UR                  [        5      (       d  ML  Ub   S5       eUnMZ     Mm     U$ )Nz0A /Sig annotation is present on more than 1 page)	r  r  valuesr  r   r   rt  vr   )r<   ri  r  	annot_objs       r>   rs  *OutputProducer._add_annotations_as_objects  s    !		..0H%__	i77%%i0!)++y99.6NMN6-6* - 1 "!rA   c                   ^ 0 n[        U R                  R                  R                  5       S S9 GH  nUR                  S:X  Ga  UR
                  (       Ga  UR                  R                  S:  a  [        S5      eUR
                  R                   HO  nU R                  [        UR                  R                  S5      U R                  R                  S9S5      Ul        MQ     / nUR                  R!                  5        HY  u  ph[#        UR$                  5      S	:X  a  M   UR'                  S
US SSR)                  S UR$                   5       5       S35        M[     [        S[#        U5       SSR)                  U5       S35      n	U R                  U	S5        [+        UR
                  5      n
[-        U	R.                  5      U
l        U
R3                  UUU5        U R                  U
S5        XUR4                  '   GM  UR                  S:X  aL  UR6                  S;  a  SOS n[9        SUR6                  US9nU R                  US5        XUR4                  '   GM+  UR                  S:X  d  GM>  SUR6                   3nUR                  R;                  5       n[#        UR<                  5      S	:  as  SR)                  S UR<                  S S  5       5      n[#        UR<                  5      S:  a  US[#        UR<                  5      S-
   S3-  n[>        RA                  SX5        [B        RD                  " SSS 9nU=RF                  / S!Q-  sl#        [B        RH                  " U5      nURK                  US"9  UR                  URL                  5        UR                  R!                  5        VVs0 s H,  u  nnUURL                  RO                  URP                  5      _M.     nnn[S        5       nURL                  RU                  U5        URW                  S	5        URY                  5       n[9        S#US$S9nU R                  US5        UXER4                  '   [9        S%UURZ                  R\                  [_        U5      S&9nU R                  US5        [a        U/5      Ul1        / nS' mUR                  R!                  5        H\  u  ph[#        UR$                  5      S	:X  a  M   UR'                  S
US( SSR)                  U4S) jUR$                   5       5       S35        M^     [        S*[#        U5       SSR)                  U5       S35      n	U R                  U	S5        U	Ul        [e        5       nU R                  US5        UUl3        URZ                  n[i        U5      Ul5        U R                  US5        UUl6        S+/S,-  S,-  S--  nUR!                  5        H1  u  nn[o        US.-	  5      UUS--  '   [o        US-  5      UUS--  S/-   '   M3     SR)                  U5      n[        UR                  S05      SS9nU R                  US5        UUl8        [s        US19nU R                  US5        UUl:        UR                  Rv                  Ry                  5         UR                  Rz                  Ry                  5         UR}                  5         GM     U$ s  snnf )2Nc                     U R                   $ r9   )r  )r$  s    r>   r   +OutputProducer._add_fonts.<locals>.<lambda>&  s    dffrA   r   TTF   zType 3 fonts with color glyphs are not supported is more than 255 glyphs are rendered. Set FPDF.render_color_fonts=False or use less color glyphs.zlatin-1r,  fontsr   <02Xz> <r   c              3      #    U  H;  n[        U5      R                  S 5      R                  5       R                  5       v   M=     g7f)z	utf-16-beN)chrr8  hexrK  )r   codes     r>   r   ,OutputProducer._add_fonts.<locals>.<genexpr>=  s7     7~p}hlD	8H8H8U8Y8Y8[8a8a8c8cp}s   AAz>
z/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry (Adobe)
/Ordering (UCS)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<00> <FF>
endcodespacerange
z beginbfchar
zGendbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
endcore)SymbolZapfDingbatsWinAnsiEncodingType1)rZ   r[   r\   rz   r   c              3      #    U  H=  nS [        U5       S[        U5      R                  S5      R                  5        S3v   M?     g7f)'z' (zunicode-escaperf  N)r  r8  rD  )r   xs     r>   r   r  v  sC      $!9A CF83s1v}}5E'F'M'M'O&PPQR!9s   AA
   z, ... (and z others)z+Font %s is missing the following glyphs: %sT)notdef_outlinerecommended_glyphs)FFTMGDEFGPOSGSUBMATHhdmxmetasbixCBDTCBLCEBDTEBLCEBSCzSVG CPALCOLR)r   Type0z
Identity-HCIDFontType2)rZ   r[   r]   r^   c                 L    U S:  a  SU S-
  S-	  -  nSU S-  -  nUS US 3$ U S $ )Ni  i   i   r  i   i  04Xr:   )r   	code_highcode_lows      r>   format_code.OutputProducer._add_fonts.<locals>.format_code  sI    '$*g.?B-F$F	#)Wu_#="+C#??%c]+rA   r  c              3   4   >#    U  H  nT" U5      v   M     g 7fr9   r:   )r   r  r  s     r>   r   r    s     7dVcdD8I8IVcs   z/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry (Adobe)
/Ordering (UCS)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
          r   r  r5  )?r   r  r  r  rY   
color_fontr
   _nextr   r   rt  r   r   r8  r.  r   r   r   r   r  r   rw   r  r   r`   r   r  r   rT   get_all_glyph_namesmissing_glyphsLOGGERwarningftsubsetOptionsdrop_tables	Subsetterpopulater   
getGlyphIDr   r	   saveseekreaddescmissing_width_tt_font_widthsr   r_   rk   ra   r   	font_namerb   r  rc   r)  
font_file2pickcache_clear	get_glyphclose)r<   image_objects_per_indexr   r   font_objs_per_indexr$  r   bfCharcode_mappedto_unicode_objt3_font_objr\   core_font_objfontnameglyph_namesmsgoptions	subsetterchar_idcode_to_glyphoutputttfontstreamcomposite_font_objcid_font_objcid_system_info_objfont_descriptor_objcid_to_gid_mapcccid_to_gid_map_objfont_file_cs_objr  s                                 @r>   
_add_fontsOutputProducer._add_fonts"  sk    !499??1139LMD yyE!dooo;;$$t+'V  "__33E#'#4#4(%*[[%7%7	%B%)YY%7%7  $EL 4 *.++*;*;*=&E5==)Q. MMK,C7~pup}p}7~0~/  @C  D +> "2* 6{m>wwv'", !!.':*4??;)01B1B)C&..+*)
 !!+w7.9DFF+ yyF" yy(BB & 
 !(#tyy8! !!-9.;DFF+e#$TYYK0 #kk==?t**+a/)) $!%!4!4Sb!9$ C 4../"4S1D1D-E-J,K8TTNNEx #**$SWX## ( #( %..w7	""+"6  - +/++*;*;*=!*=w T[[33E4D4DEE*=  ! !  (A%{{} &-#x,&" !!"4g>.@#FF+  '*&		//%d+	  !!,86>~6N"3 , +/++*;*;*=&E5==)Q. MMK,C7dV[VcVc7d0d/eehi +> "2* 6{m>wwv'", !!.':0>"-&3o#!!"5w?1D.&*ii#04X#-!!"5w?/B, #)C#!5!9!.!4!4!6IB-0!_N26*14UT\1BN26A:. "7 "$!8 &6+228<t&" !!"4g>2D/#0,#G !!"2G<1A#.  ,,.%%113

S NV #"[!s   -3[c                     0 n[        U R                  R                  R                  R	                  5       S S9 H$  nUS   S:  d  M  U R                  U5      XS   '   M&     U$ )Nc                     U S   $ )Nr  r:   )r   s    r>   r   ,OutputProducer._add_images.<locals>.<lambda>  s    3s8rA   r   usagesr   r  )r   r  image_cacheimagesr  
_add_image)r<   r   r   s      r>   _add_imagesOutputProducer._add_images  sb    II!!((//17K
C 8}q /3s/C"s8,	

 "!rA   c                 :   US   nX R                   ;   a  U R                   U   $ SnU R                  R                  R                  R	                  5        H  u  pEX%:X  d  M  Un  O   Uc   e[        X1S   US   S9nU R                  US5      nXpR                   U'   U$ )zf
Returns the PDF object of the ICC profile indexed iccp_i in the FPDF object.
Adds it if not present.
iccp_iNdpncs)r-  rN  rO  iccp)r^  r  r  icc_profilesr   rM  rt  )r<   img_infor%  iccp_contenticcp_cr  iccp_obj
iccp_pdf_is           r>   _ensure_iccpOutputProducer._ensure_iccp  s    
 (#)))''//..;;AACIF{% D ''' !e_
 &&x8
'1V$rA   c                     [        US   5      nS nUR                  S5      nUS:X  a"  [        SS[        US   5      S-  S-
   /5      nOFUb3  U R	                  U5      n[        S	[        U5      [        S
5      S/5      nOUS:X  a
  US   SL a  SnSUS    SUS    S3n[        SUS   US   US   UUS   US   UUS9	nU R                  US5      US'   U R                  R                  (       a8  SU;   a2  SUS    3nU R                  US   US   SS US   UUS   S!.5      Ul        SU;   aa  [        US   U R                  R                  S"9n	U R                  U	S5        UR                  R                  [!        U	R"                  5      5        U$ )#Nr'  r%  Indexedz/Indexedr  pal   r   z	/ICCBased0R
DeviceCMYKinvertedTz[1 0 1 0 1 0 1 0]r   dpz /BitsPerComponent bpcr   Imager  r^   hf)	rZ   r-  r@  rA  rB  rC  rI  rD  rE  r   r   smaskz!/Predictor 15 /Colors 1 /Columns 
DeviceGrayr  )r^   r<  r'  r:  r=  r9  r  r,  )r   rN  r   r   r/  r   r;  rt  r  r  r!  rF  r   r.  rB  r  r  r   )
r<   r  rB  rD  r%  r.  rE  img_objr9  
pal_cs_objs
             r>   r!  OutputProducer._add_image2  s   4:&(#)#"\c$u+.>!.Ca.G-HJK **40J"KZ#c(C#PQKL(J4',DJ<':4;-rJ&\s)9##E{Cy%

 **7H=X 99..7d?4T#YK@B!__cc&c M
GN $)etyy/A/AJ j(3&&wz}}'=>rA   c                     [        5       nU R                  R                  R                  R	                  5        H&  u  p#[        U5      nU R                  US5        XAU'   M(     U$ )Ngfxstate)r   r  r_  r  r   r  rt  )r<   r   
state_dictr   r   s        r>   _add_gfxstatesOutputProducer._add_gfxstatesh  s[    !, $		 ; ; K K Q Q SJ'
3LlJ7+74( !T &%rA   c                     U R                   R                  R                   H>  nUR                  R	                  X5      Ul        U R                  R                  U5        M@     g)zSAppend soft-mask Form XObjects after patterns exist so we can resolve /Pattern ids.N)r  r_  r  _pathget_resource_dictionaryr   r]  r  )r<   r   r   r  s       r>   _add_soft_masksOutputProducer._add_soft_masksp  sK    44GGI"+//"I"I&#I MM  +	 HrA   c                     U R                   R                  R                   HA  u  p#[        USS5      (       d  U R	                  US5        SUl        UR                  X#5        MC     g)z\Ensure isolated blend forms are part of the XObject set before other resources rely on them._registeredFr   TN)r  r_  r  r  rt  rN  
setdefault)r<   r   r  r  s       r>   #_register_form_xobject_placeholders2OutputProducer._register_form_xobject_placeholdersx  sT    "ii99GGNE7M599!!'84&*#))%9	 HrA   c                     U R                   R                  R                   H1  u  pg[        USS5      nUc  M  UR	                  UUUUU5      Ul        M3     g)z@Populate resource dictionaries for isolated blend Form XObjects._blend_groupN)r  r_  r  r  rJ  r   )	r<   r   r   r   shading_objs_per_namer  r,  r  r  s	            r>   _finalize_form_xobjects&OutputProducer._finalize_form_xobjects  sW     ))55CCJA!'>4@K&$/$G$G*))'&%! DrA   c                 0   [        5       nU R                  R                  R                  [        R
                  5       HT  u  p#UR                  5        H  nU R                  US5        M     UR                  5       nU R                  US5        XQU'   MV     U$ )Nfunctionr&  )	r   r  r_  r$  r   r  get_functionsrt  get_shading_object)r<   rT  r&  r   rX  shading_objs         r>   _add_shadingsOutputProducer._add_shadings  s     +!YY88BB##
MG $113!!(J7 4!446Kk95*5$'
 %$rA   c           	         [        5       nU R                  R                  R                  [        R
                  5       H  u  p#U R                  US5        X!U'   UR                  5       (       d  M2  UR                  UR                  5       [        R                  " SU R                  R                  * 5      R                  SSS9R                  U R                  R                  5      -  5        M     U$ )Nr   r   r   r   )r  y)r   r  r_  r$  r   r  rt  get_apply_page_ctm
set_matrix
get_matrixr   translationr<  r   r  )r<   r   r   r   s       r>   _add_patternsOutputProducer._add_patterns  s     +!YY88BB##
MG gy1*1$'))++""&&(++A		|<UQ"U%U499;;'(
 %$rA   c           
          U R                  5       nU R                  U5        U R                  5       nU R                  5       nU R	                  X#U5      nU R                  5       nU R                  UUUUU5        U R                  X45        U R                  R                  (       a%  U R                  UUUUU5      nU H	  nXxl        M     g [        USS9 GH  u  pU R                  R                  R                  U	[        R                   5       V
s0 s H  n
XU
   _M
     nn
U R                  R                  R                  U	[        R"                  5       Vs0 s H  nXU   _M
     nnUR%                  5        VVs0 s HA  u  pUU R                  R                  R                  U	[        R&                  5      ;   d  M?  X_MC     nnnU R                  R                  R                  U	[        R(                  5       Vs0 s H	  nUUU   _M     nnU R                  R                  R                  U	[        R*                  5       Vs0 s H	  nUUU   _M     nnU R                  UUUUU5      Ul        GM     g s  sn
f s  snf s  snnf s  snf s  snf )Nr   )start)r"  rP  rF  rd  r  r\  rU  rK  r  single_resources_object_add_resources_dictr   	enumerater_  r'  r   r  r  r   r  r  r  )r<   r  r   r   r   r  rT  resources_dict_objr  r  font_idpage_font_objs_per_indeximg_idpage_img_objs_per_indexgfx_name	gfx_statepage_gfxstate_objs_per_nameshading_namepage_shading_objs_per_namepattern_namepage_pattern_objs_per_names                        r>   ru   OutputProducer._insert_resources  s   !--/001CD!%!4!4!6 $ 2 2 4"oo8M
 !% 2 2 4$$"!!	
 	3K99,,!%!9!9#"&%%" &%7" & *39A)F% $(99#>#>#U#U#_%9%9$,$ 99$ ) , #'))"="="T"T#_%=%=#+# v66# ( + 2H1M1M1O/1O-yy22II#_%@%@ (H'1O , / )-		(C(C(Z(Z#_%<%<).) !"7"EE) + . )-		(C(C(Z(Z#_%<%<).) !"7"EE) + . &*%=%=,+/..&"C *G,+/..s$   I6I;;>J =J <JJc           
         SnSu  pxpnU(       aN  [        [        UR                  5       5       VVs0 s H  u  pSU 3[        UR                  5      _M      snn5      nU(       aN  [        [        UR                  5       5       VVs0 s H  u  pSU 3[        UR                  5      _M      snn5      nU(       aF  [        UR                  5        VVs0 s H  u  nnSU 3[        UR                  5      _M!     snn5      n	U(       aO  [        [        UR                  5       5       VVs0 s H  u  nnSU 3[        UR                  5      _M!     snn5      n
U(       aO  [        [        UR                  5       5       VVs0 s H  u  nnSU 3[        UR                  5      _M!     snn5      n[        UUUU	U
US9nU R                  U5        U$ s  snnf s  snnf s  snnf s  snnf s  snnf )Nz$[/PDF /Text /ImageB /ImageC /ImageI])NNNNNz/Fr   r   )r#  r$  r%  r   r&  r   )r   r   r   r  r   r!  rt  )r<   r  r   r   rT  r   r#  r$  r%  r   r&  r   r  font_objr@  r   r   r[  pattern_objresources_objs                       r>   ri  "OutputProducer._add_resources_dict  s    :8T5g ,22E2K2K2M+N+N L'(++"66+ND  +11C1I1I1K*L*L L''**"55*LH "" /E.J.J.L.L*l vJ 88.LK ! .44I4O4O4Q-R-R)k vJ 77-RG ! .44I4O4O4Q-R-R)k vJ 77-RG %#
 	-(]s   %G
%G
&G
(&G
>&G%
c                     U R                   R                  R                  5       (       a  gSnU R                   R                   H  nUc  UnU R                  US5        M     U$ )zDBuilds a Structure Hierarchy, including image alternate descriptionsNstructure_tree)r  r  emptyrt  )r<   rk  r  s      r>   rv  "OutputProducer._add_structure_tree9  s]    99##))++#yy//G#+'.$g'78 0 $#rA   c                     U R                   R                  (       d  gS / p![        U R                   R                  5       H,  nUc  UnOUR                  U5        U R	                  US5        M.     X4$ )N)Nr:   document_outline)r  _outliner   r  rt  )r<   rl  r  r  s       r>   rw  $OutputProducer._add_document_outlineD  sh    yy!!*.-)$))*<*<=G'#* $$W-g'9: >  ..rA   c                    U R                   R                  nU(       d+  U R                   R                  (       a  U R                  5       nU(       d  g S[	        S5       SU S3n[        U5      nU R                  U5        U$ )Nz<?xpacket begin="i  z"" id="W5M0MpCehiHzreSzNTczkc9d"?>
z
<?xpacket end="w"?>
)r  xmp_metadatary  _build_xmp_from_infor  r3  rt  )r<   xmp_srcxpacketr  s       r>   rx   OutputProducer._add_xmp_metadataP  sm    ))((49900//1G%c&k]2UV]U^^uv )'"rA   r]  c           
      6   [        U R                  SS 5      =(       d    Sn[        U R                  SS 5      =(       d    Sn[        U R                  SS 5      =(       d    SnU(       a  [        U[        5      (       a  U/n[        U R                  SS 5      =(       d    SnU(       a  [        U[        5      (       a  U/n[        U R                  SS 5      =(       d    Sn[        U R                  SS 5      =(       d    Sn[        U R                  SS 5      nS n[        U[        5      (       aB  UR
                  (       a  UOUR                  5       nUR                  [        R                  5      nU R                  R                  n	S	 n
[	        S
SSSSS[        R                  S9n[        R                  " [        R                  5      nX:X  a  UR                  SS9nUR                  SS9nO)U=(       d    UnUR                  SS9nUR                  SS9n/ SQnU(       a  UR                  SU
" U5       S35        U(       aQ  UR                  SU
" U5       S35        UR                  SU
" U5       S35        UR                  SU
" U5       S35        U(       a  UR                  SU
" U5       S35        U(       a,  SR                  U5      nUR                  SU
" U5       S35        UR                  S5        U	(       a  UR                  S[        U	R                  5       S35        U	R                   (       a%  UR                  SU
" U	R                   5       S35        U	R                  S :X  a  UR                  S!5        U(       a  US"S#U
" U5      -   S$-   S%/-  nU(       a  US&S#U
" U5      -   S$-   S'/-  nU(       aF  UR                  S(5        U H  nUR                  S)U
" U5       S$35        M      UR                  S*5        U/ S+Q-  nS,R                  U5      $ )-Nr   r   r   r   r   r   r   r   c                 V    U c  SO[        [        U 5      SS9nUR                  SS5      $ )zDReturn XML-escaped text suitable for XMP (attributes or text nodes).r   T)quoter  z&apos;)_html_escaper   replace)r`  r_  s     r>   esc0OutputProducer._build_xmp_from_info.<locals>.escp  s)    )Bc!fD)IE==h//rA   i           r   )tzinfoseconds)timespec)z4<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="fpdf2">z
  <rdf:RDFz;    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"z/    xmlns:dc="http://purl.org/dc/elements/1.1/"z,    xmlns:xmp="http://ns.adobe.com/xap/1.0/"z,    xmlns:pdf="http://ns.adobe.com/pdf/1.3/"z3    xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">z!    <rdf:Description rdf:about=""z        xmp:CreatorTool=""z        xmp:CreateDate="z        xmp:ModifyDate="z        xmp:MetadataDate="z        pdf:Producer="rI  z        pdf:Keywords="z      >z      <pdfaid:part>z</pdfaid:part>z      <pdfaid:conformance>z</pdfaid:conformance>   z#      <pdfaid:rev>2020</pdfaid:rev>z      <dc:title><rdf:Alt>z%        <rdf:li xml:lang="x-default">z	</rdf:li>z      </rdf:Alt></dc:title>z      <dc:description><rdf:Alt>z!      </rdf:Alt></dc:description>z      <dc:creator><rdf:Seq>z        <rdf:li>z      </rdf:Seq></dc:creator>)z    </rdf:Description>z  </rdf:RDF>z</x:xmpmeta>r   )r  r  r   r   r   r  
astimezoner   utcry  now	isoformatr  r   r  partconformance)r<   r   r   r   r   creator_toolr   cdatecreation_date_utcpdfar  EPOCHr  
xmp_create
xmp_modify	create_dtpartskeyword_listr   s                      r>   r  #OutputProducer._build_xmp_from_info]  s   		7D17R$))Y5;Hd39rj--XF499j$7=2
8S11 zHtyy)T:@b499j$7=2		?D9 eX&&).5;K;K;M 1 < <X\\ Jyy$$	0 r2r1aEll8<<(%)<J)<J)0SI",,i,@J	:J	
 LL4S5F4GqIJLL3C
O3DAFGLL3C
O3DAFGLL5c*o5FaHILL1#h-BC88H-LLL1#l2C1DAFGYLL.s499~.>nMN0T5E5E1F0GG\] yyA~BC+7#e*D{R- E
 17#g,FT3 E
 LL67/AxyAB LL89 
 	

 yyrA   c                    U R                   nS nUR                  (       a   [        UR                  SSS9n[        UR                  [        USS 5      [        USS 5      [        USS 5      [        USS 5      [        USS 5      US	9nU R                  U5        U$ ! [         a  n[	        SUR                   35      UeS nAff = f)
NT)with_tzrp   zCould not format date: r   r   r   r   r   )r   r   r   r   r   r   r   )	r  r   r    	Exceptionr   r   r   r  rt  )r<   r  r   errorr  s        r>   rz  OutputProducer._add_info  s    yy '(:(:DRV W
 **D)T2440T:t4D)T2T:t4'
 	(#  #-d.@.@-ABs   B 
C#B<<Cc                     U R                   R                  (       a9  U R                   R                  nUR                  5       nU R                  U5        U$ g r9   )r  r=   get_encryption_objrt  )r<   encryption_handlerr  s      r>   r{  OutputProducer._add_encryption  sC    99&&!%!<!<(;;=Gg&NrA   c                     U R                   R                  nU(       d  gU H1  nUR                  (       d  M  U R                  UR                  5        M3     [	        U5      $ )zshould be added in _add_catalogN)r  r  r  rt  r   )r<   r  output_intents      r>   _add_output_intents"OutputProducer._add_output_intents  sN    11+M000!!-"C"CD , ''rA   c                     U R                   n[        [        USS 5      UR                  UR                  UR
                  S9nU R                  5       Ul        U R                  U5        U$ )Nr  )r  r  r  r  )	r  r  r  r  r  r  r  r  rt  )r<   r  r  s      r>   rq  OutputProducer._add_catalog  sa    yy vt,((nn#66	
 &*%=%=%?"+&rA   c           
      	   U R                   nX!l        Xal        Xql        XQl        U(       a:  [
        R                  [
        R                  -   n	[        [        U/5      U	S9Ul
        UR                  [        ;   a*  [        UR                  5      /[        UR                     Qn
O0[        UR                  5      SSS[        UR                  S-  5      /n
[!        U
5      Ul        U(       a  [%        SS05      Ul        UR(                  (       d  UR*                  (       Gau  0 nUR(                  (       a  UR(                   Vs/ s HZ  nUR,                  (       d  M  [/        UR1                  5       5      R3                  5        SUR5                  5       R6                   3PM\     nn[%        S[!        U5      05      US	'   U R                   R(                   Vs/ s H=  nUR-                  5       (       d  M  [        UR5                  5       R                  5      PM?     nnU(       a  [!        U5      Ul        UR*                  (       GaA  / nUR*                  R;                  5        H  u  nnUR<                  S
:X  a  [?        SU S35      e[A        US5      (       a  URB                  (       dc  UR<                  S-
  nS
Us=::  a  [E        UR                  5      :  a4  O  O1[        UR                  UR<                     R                  5      Ul!        URG                  [/        USS9R3                  URH                  UR                  S9 SUR3                  5        35        M     U(       a"  [%        S[!        [K        U5      5      05      US'   [%        U5      Ul&        [O        U RQ                  5       5       VVs/ s HI  u  nnURS                  5       (       d  M  U S[%        URS                  5       R3                  5       5       3PMK     nnnU(       a4  UR                  S   RS                  5       (       d  URU                  S
S5        U(       a*  [%        S[        U5      R3                  5       05      Ul+        g g s  snf s  snf s  snnf )Nr   r0   r/   d   z/Markedtruer~   z/Namesz/EmbeddedFilesr   zNamed destination 'z6' was referenced but never set with set_link(name=...)r  r   Tro   r  z/Destsz0 <<>>z/Nums),r  r  r  r  r  r   SIGNATURES_EXISTAPPEND_ONLYr   r   r  	zoom_modeZOOM_CONFIGSr  r   r   r   r  r   r  re  named_destinationsglobally_enclosedr"   basenamer?   rf  refa_fr   r  r   r}  r  r   r  r=   r   r  rj  r  r  insertpage_labels)r<   r  rg  rh  ri  rj  rk  rl  r  flagszoom_confignames_dict_entriesr  file_spec_namesefglobal_file_specsdests_namesr   rm  r  r  pager  s                          r>   r|   OutputProducer._finalize_catalog  s    yy*';$//!22]5N5NNE$,!3 45%K! >>\)))*dnn-K ))*DNNS()K #+;"7$,i-@$AK!$"9"9"9!#"" *.)<)<#)<$66 iy!7!7!9:DDFGqI`I`IbIfIfHgh)<   #
 8@x898"#34
 #ii66%6++- /GBLLN--.6 " %
 %&./@&AKO&&& "&"9"9"?"?"AJD$''1,+1$7mn 
 #444DMM%)%5%5%9

<S_<,3DJJt?O?O4P4S4S,TDM  &&$T48BBUYUkUk  vA  vD  vDB  E  F  FG  HL  HV  HV  HX  GY  Z #B$ 3;!8F;,?#@A4&x0 !)); <K %T%>%>%@A
A4""$ Aqc8D//1;;=>?@A 	 

 tzz!};;==q(+&.(;/99;<'K# i#%H
s%   Q1AQ1Q62'Q61Q;0Q;c              #      #    [        U R                  5      nS v   U R                  U==   [        U R                  5      U-
  -  ss'   g 7fr9   )r   r  ra  )r<   label	prev_sizes      r>   r  OutputProducer._trace_sizeN  s:     $	**51S5E	5QQ1s   AA
c                     [         R                  S5        U R                  R                  5        H%  u  p[         R                  SU[	        U5      5        M'     g )Nz4Final size summary of the biggest document sections:z- %s: %s)r  debugra  r   _sizeof_fmt)r<   r  section_sizes      r>   r  (OutputProducer._log_final_sections_sizesT  sA    KL#'#E#E#K#K#MELLUK,EF $NrA   )r  r  r^  r   r  r]  ra  r`  )r  r.   r9   )(rB   rC   rD   rE   rR   rM   r  r  rt  rp  r  slicerr  rs  r  r"  r/  r!  rF  rK  rP  rU  r\  rd  ru  ri  rv  rw  rx  r   r  rz  r{  r  rq  r|  r   r  r  rF   r:   rA   r>   r[  r[  O  s    \"{z$ !&a ."o#b",4l&,:(
%%"DL@D	$
/Y c Y v,(_B R R
GrA   r[  r  c                     U(       a  U R                  XX45      u  pp4U(       a
  UnXt-
  U-
  n	OU* nX$-   n	SX6-  S SX-  S SX-  S SX-  S SU S    S3$ )Nzq .2fz 0 0 r~   z cm /Ir  z Do Q)scale_inside_box)
r  r  r_  r^   r<  keep_aspect_ratior   pdf_height_to_flipstream_hstream_ys
             r>   stream_content_for_raster_imager  Z  s     **16
a%)A-25
QYsO5!1# 6
AIc?!H,S1 23i[	rA   c           
         Sn0 n0 nSnSnSn[        [        U R                  R                  5       S S95      nU H  nXx   n	XS-   :X  a  UR                  U:X  ak  UR                  X!   S   :X  a,  UR                  U/ 5      R                  UR                  5        O#X!   R                  5         UnXXR                  /X!'   SnSX1'   OLU(       a  U	nUR                  /X!'   OX!   R                  UR                  5        SnOU	nUR                  /X!'   SnU	nUR                  nM     Sn
SnSnUn[        UR                  5       5       HX  u  p[        U5      nX:X  a'  U(       d   X;  d  US	:  a  X;   a  X	 X*   X.   -   X*'   X.	 OUn
UU-   nX;   a  US	:  nX	 US-  nMV  SnMZ     / n[        UR                  5       5       Hy  u  p[        [        U5      5      S:X  a.  UR                  S
U S
U[        U5      -   S-
   S
US    35        MK  UR                  S
U SS
R                  S U 5       5       S35        M{     SSR                  U5       S3$ )Nr   r   Fc                     U S   $ r  r:   )items    r>   r   !_tt_font_widths.<locals>.<lambda>|  s    tAwrA   r   r   Tr4  r~   z [ c              3   J   #    U  H  n[        [        U5      5      v   M     g 7fr9   )r   r  )r   r<  s     r>   r   "_tt_font_widths.<locals>.<genexpr>  s     '@RCFRs   !#z ]
r|   r   r   )r  r   r
   r   r   rO  r  popr   r   r   )r$  rangeidrange_range_intervalprevcid	prevwidthintervalr   r   
cid_mappedprevknextkprevintrir  wscwsr^   s                     r>   r  r  s  sd   GFNGIH &**,2FGHF]
A+&  I-$$(::%%gr299%:K:KLO'')%G'02C2C&DFO*.'(G','8'8&9FOO**5+<+<=  G$001FOH%%	5 6 EEG	B'"g:g1;#'wE"MFI5FM	EC7AgGQJEG (  	A's2w<1HHq1QR[1_-Qr!ug67HHq3sxx'@R'@@AFG	 (
 rwwqzl!rA   c                      U u  pSUS SUS S3$ )Nz[0 0 r  r~   r   r:   )r  r  r  s      r>   r  r    s#    $H8C.)C22rA   c                 b    S H"  n[        U 5      S:  a  U S U U 3s  $ U S-  n M$     U S SU 3$ )N)r   KiMiGiTiPiEiZii   z3.1fz.1fYi)abs)numsuffixunits      r>   r  r    sJ    >s8d?$ZvfX..t ? #Yb!!rA   resource_catalogc                     [        U R                  U5      S9nXl        [        S5      Ul        [        S5      Ul        [        U R                  5       5      Ul        SUl	        U$ )zSConverts a PaintedSoftMask into a PDF XObject Form suitable for use as a soft mask.r5  rH  Formz5<</S /Transparency /CS /DeviceGray /I true /K false>>)
r   renderrI  r   rY   rZ   r   get_bounding_boxb_boxr  )pathr  r  s      r>   r
  r
    sR    4D(EFGM	?GL6lGOT2245GMKGMNrA   c                     U R                  U5      n[        US9nXl        SUl        [	        S5      Ul        [	        S5      Ul        U R                  5       n[        U5      Ul	        SUl
        U$ )zNConvert a blend group into a Form XObject with an isolated transparency group.r5  FrH  r  z+<</S /Transparency /CS /DeviceRGB /I true>>)r	  r   rS  rN  r   rY   rZ   r
  r   r  r  )r  r  streamr  bboxs        r>   r  r    sd    \\*+F/G G	?GL6lGO!!#DTNGMAGMNrA   )Fr   N)B)grR   loggingrW  collectionsr   r   
contextlibr   r   r   htmlr   r  ior	   	fontToolsr
   r  annotationsr   drawingr   r   enumsr   r   r   r   errorsr   r  r   r   r   font_type_3r   image_datastructuresr   
line_breakr   outliner   signr   r   syntaxr   r   r   r    r!   r"   r#   r$   r   r%   r   r&   r  utilr'   r(   endesiver)   ImportErrortypingr*   r+   r,   r-   r  r.   	getLoggerrB   r  r  r6   rH   rT   rk   rw   r   r   r  r!  r)  r3  r;  rM  rS  r  r  r  r  r  r  r[  r  r  r  r  r
  r  r:   rA   r>   <module>r&     s    	 0 % ' '  ( & - V V ! 0 0 " 1 6 ' )   9 2 ' + 8 7			8	$ ") 
5  5&'i ' I V
9 V
r+i +22 2% %*9 %$ %#% #'! 'T)$ ):2 2j];i ];@9 ?9 ?(( (VA" A"HQX QXhHG HGb  

2AH3
"o O C=  Fs   *G( (G43G4