
    Rj7h                       d Z ddlZddlZddlmZm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 dd	lmZ d
dlmZ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! d
dl"m#Z# d
dl$m%Z% d
dl&m'Z'm(Z(m)Z) d
dl*m+Z+ d
dl,m-Z- d
dl.m/Z/m0Z0m1Z1 d
dl2m3Z3m4Z4m5Z5m6Z6 d
dl7m8Z8m9Z9 d
dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZEmFZGmHZI d
dlJmKZKmLZL 	 ddlMmNZN n# eO$ r dZNY nw xY wddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY eQr0d
dlmZZZm[Z[ d
dl\m]Z]m^Z^ d
dlm_Z_m`Z` d
dl&maZa d
dlbmcZc d
d ldmeZe d
d!lfmgZg  ejh        ei          Zjd"d#d$d%Zk G d& d'e          Zl G d( d)el          Zm G d* d+e@          Zn G d, d-e@          Zo G d. d/e@          Zp G d0 d1e@          Zq G d2 d3          Zr G d4 d5e@          Zs G d6 d7e@          Zt G d8 d9e>          Zu G d: d;e>          Zv G d< d=e>          Zw G d> d?e>          Zx G d@ dA          Zy G dB dCe@          Zz G dD dEe@          Z{ G dF dGe@          Z| G dH dIel          Z} G dJ dK          Z~eXeee<dLdMdNdOf         Z G dP dQ          Z G dR dS          Z	 	 	 dodUe+dVedWedXedYedZed[ed\eVe         d]efd^Zd_e)d]efd`Zdaeeef         d]efdbZdceeef         d]efddZdpdfedged]efdhZdieez  djed]e>fdkZdldmdjed]e>fdnZdS )qai  
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)ABCabstractmethod)OrderedDictdefaultdict)contextmanager)datetimetimezone)escape)BytesIO)subset   )AnnotationDictPDFAnnotation)ImageSoftMaskPaintSoftMask)	Transform)OutputIntentSubTypePageLabelStylePDFResourceTypeSignatureFlag)FPDFException)	Type3Font)
CORE_FONTSCoreFontTTFFont)RasterImageInfo)TotalPagesSubstitutionFragment)OutlineDictionaryOutlineItemDictionarybuild_outline_objs)GradientMeshShadingPatternShading)	Signaturesign_content)DestinationXYZNamePDFArrayPDFContentStreamPDFDate	PDFObject	PDFStringRawbuild_obj_dictcreate_dictionary_stringcreate_list_stringiobj_ref)	int2romanint_to_letters)signer)	TYPE_CHECKINGAny	ItemsViewIteratorLiteralOptionalSequenceUnioncast)
BlendGroupGraphicsStyle)EncryptionDictionaryStandardSecurityHandler)
PageLayoutPageMode)PDFFontDescriptor)FPDF)ViewerPreferences)
Transition)z/Fit)z/FitHnull)/XYZrI   rI   1)fullpage	fullwidthrealc                   >    e Zd Ze	 dded         defd            ZdS )ContentWithoutIDN_security_handlerrB   returnc                     t           N)NotImplementedErrorselfrQ   s     L/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/fpdf/output.py	serializezContentWithoutID.serialize[   s
     "!    rT   )__name__
__module____qualname__r   r;   strrY    rZ   rX   rP   rP   Y   sP        GK" "!)*C!D"	" " " ^" " "rZ   rP   c                   B    e Zd ZdZdeddfdZ	 d	ded         defdZdS )
	PDFHeaderu  
    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.
    pdf_versionrR   Nc                     || _         d S rT   rb   )rW   rb   s     rX   __init__zPDFHeader.__init__m   s    &rZ   rQ   rB   c                     d| j          dS )Nz%PDF-u
   
%éëñ¿rd   rV   s     rX   rY   zPDFHeader.serializep   s     5t'4444rZ   rT   )r[   r\   r]   __doc__r^   re   r;   rY   r_   rZ   rX   ra   ra   b   sv         'C 'D ' ' ' ' HL5 5!)*C!D5	5 5 5 5 5 5rZ   ra   c                   d     e Zd Z	 	 	 d	dededee         dee         dee         ddf fdZ xZS )
PDFFontNsubtype	base_fontencodingd_wwrR   c                 R   t                                                       t          d          | _        t          |          | _        t          |          | _        |rt          |          nd | _        || _        || _        d | _	        d | _
        d | _        d | _        d | _        d S )NFont)superre   r(   typerj   rk   rl   rm   rn   descendant_fonts
to_unicodec_i_d_system_infofont_descriptorc_i_d_to_g_i_d_map)rW   rj   rk   rl   rm   rn   	__class__s         rX   re   zPDFFont.__init__w   s     	LL	G}}i*2<X486::>>B>BrZ   )NNN)r[   r\   r]   r^   r;   floatre   __classcell__rx   s   @rX   ri   ri   v   s        
 #'#C CC C 3-	C
 e_C C=C 
C C C C C C C C C CrZ   ri   c                         e Zd Zd fdZ xZS )CIDSystemInforR   Nc                     t                                                       t          dd          | _        t          dd          | _        d| _        d S )NAdobeTencryptUCSr   )rq   re   r-   registryordering
supplement)rW   rx   s    rX   re   zCIDSystemInfo.__init__   sL    !'4888!%666rZ   rR   N)r[   r\   r]   re   rz   r{   s   @rX   r}   r}      s=                 rZ   r}   c                        e Zd Zd fdZedefd            Zedefd            Zedefd            Zd	e	e
d
f         de	edf         de	edf         ddfdZdefdZ xZS )PDFType3Fontfont3r   rR   Nc           	         t                                                       || _        t          d          | _        t          d|j        j                   | _        t          d          | _        d| j        j        j        d         j	        | j        j
        z  dd| j        j        j        d         j        | j        j
        z  dd| j        j        j        d         j        | j        j
        z  dd| j        j        j        d         j        | j        j
        z  dd	| _        d	| _        t!          d
 |j        D                       | _        t'          d |j        D                       | _        d | _        d | _        d S )Nrp   MPDFAA+Type3[headz.0f ]z[0.001 0 0 0.001 0 0]c              3   $   K   | ]}|j         V  d S rT   unicode.0gs     rX   	<genexpr>z(PDFType3Font.__init__.<locals>.<genexpr>   s$      >>Aai>>>>>>rZ   c              3   $   K   | ]}|j         V  d S rT   r   r   s     rX   r   z(PDFType3Font.__init__.<locals>.<genexpr>   s$      ==1QY======rZ   )rq   re   _font3r(   rr   rk   namerj   ttfontxMinscaleyMinxMaxyMax
font_b_boxfont_matrixminglyphs
first_charmax	last_char	resourcesrt   )rW   r   rx   s     rX   re   zPDFType3Font.__init__   sw   LL	95?#799::	G}}U%,V49DK<MMS U U%,V49DK<MMSU U%,V49DK<MMSU U %,V49DK<MMTU U U 	 3>>>>>>>=======(,)-rZ   c                 H    t          d | j        j        D                       S )Nc                 4    i | ]}d |j          |j         dS )/ 0 R)
glyph_nameobj_idr   s     rX   
<dictcomp>z+PDFType3Font.char_procs.<locals>.<dictcomp>   s0    OOOqAH!2!2!2OOOrZ   )pdf_dictr   r   rW   s    rX   
char_procszPDFType3Font.char_procs   s*    OODK<NOOO
 
 	
rZ   c                     t          t          d          t          d          t          d          |                                 i          S )N/Typez	/Encodingz/Differences)r   r(   differences_tabler   s    rX   rl   zPDFType3Font.encoding   sE    WtK00^$$d&<&<&>&>
 
 	
rZ   c                     t          | j        j        d           }|d         j        }|d         j        }dg|dz   |z
  z  }|D ]1}t	          |j        | j        j        z  dz             ||j        |z
  <   2t          d |D                       S )Nc                     | j         S rT   r   glyphs    rX   <lambda>z%PDFType3Font.widths.<locals>.<lambda>       U] rZ   keyr   r   gMbP?c                 ,    g | ]}t          |          S r_   r^   )r   glyph_widths     rX   
<listcomp>z'PDFType3Font.widths.<locals>.<listcomp>   s     DDDk[))DDDrZ   )sortedr   r   r   roundr   r   pdf_list)rW   sorted_glyphsmin_unicodemax_unicodewidthsr   s         rX   r   zPDFType3Font.widths   s    t{17R7RSSS#A&.#B'/ a+56 # 	 	E27!DK$55=3 3F5=;.// DDVDDDEEErZ   img_objs_per_index
PDFXObjectgfxstate_objs_per_namePDFExtGStatepattern_objs_per_namer#   c                     d}d                     fd j        j        D                       }|t          |          dk    rd| dndz  }d                      fd|                                D                       }|t          |          dk    rd	| dndz  }d                      fd
|                                D                       }|t          |          dk    rd| dndz  }|dz  }| _        d S )N<<r   c              3   @   K   | ]}d | d|         j          dV  dS )/Ir   r   N)id)r   imgr   s     rX   r   z2PDFType3Font.generate_resources.<locals>.<genexpr>   sS       
 
 877)#.1777
 
 
 
 
 
rZ   r   z/XObject <<>> c              3   V   K   | ]#\  }}|j         j        v d | d|j         dV  $dS r   r   r   N)r   graphics_style_usedr   )r   r   gfxstate_objrW   s      rX   r   z2PDFType3Font.generate_resources.<locals>.<genexpr>   sX       
 
"lt{666 -,,|,,,6666
 
rZ   z/ExtGState <<c              3   V   K   | ]#\  }}|j         j        v d | d|j         dV  $dS r   )r   patterns_usedr   )r   r   patternrW   s      rX   r   z2PDFType3Font.generate_resources.<locals>.<genexpr>   sX       
 
gt{000 (''wz'''0000
 
rZ   z/Pattern <<)joinr   images_usedlenitemsr   )rW   r   r   r   r   objectsext_g_stater   s   ``      rX   generate_resourceszPDFType3Font.generate_resources   sr    	(( 
 
 
 
{.
 
 
 
 
 	#g,,2B2B.7....J	hh 
 
 
 
&<&B&B&D&D
 
 
 
 

 	K8H8H18L8L4[4444RTT	(( 
 
 
 
!6!<!<!>!>
 
 
 
 

 	#g,,2B2B.7....J	T	"rZ   c                     t          | j        j        d           }dd                    d |D                       z   dz   S )Nc                     | j         S rT   r   r   s    rX   r   z0PDFType3Font.differences_table.<locals>.<lambda>   r   rZ   r   r   
c              3   8   K   | ]}|j          d |j         V  dS )z /N)r   r   )r   r   s     rX   r   z1PDFType3Font.differences_table.<locals>.<genexpr>   sF        ;@5=66E$466     rZ   r   )r   r   r   r   )rW   r   s     rX   r   zPDFType3Font.differences_table   sa    t{17R7RSSSii  DQ     		
rZ   )r   r   rR   N)r[   r\   r]   re   propertyr^   r   rl   r   dictintr   r   rz   r{   s   @rX   r   r      s)       . . . . . .$ 
C 
 
 
 X

 
# 
 
 
 X
 F F F F XF # l!23# !%S.%8 9#  $CN3	#
 
# # # #<
3 
 
 
 
 
 
 
 
rZ   r   c                        e Zd Zdee         dee         dee         dee         dee         dee         dedd	f fd
Z xZS )PDFInfotitlesubjectauthorkeywordscreatorproducercreation_daterR   Nc                    t                                                       |rt          |d          nd | _        |rt          |d          nd | _        |rAt          |t          t          t          f          rd	                    d |D                       }|rt          |d          nd | _
        |rAt          |t          t          t          f          rd	                    d |D                       }|rt          |d          nd | _        |rt          |d          nd | _        |rt          |d          nd | _        || _        d S )NTr   z; c              3   4   K   | ]}t          |          V  d S rT   r   )r   as     rX   r   z#PDFInfo.__init__.<locals>.<genexpr>   s(      66!s1vv666666rZ   , c              3   4   K   | ]}t          |          V  d S rT   r   )r   keywords     rX   r   z#PDFInfo.__init__.<locals>.<genexpr>  s(       F F'W F F F F F FrZ   )rq   re   r-   r   r   
isinstancelisttuplesetr   r   r   r   r   r   )	rW   r   r   r   r   r   r   r   rx   s	           rX   re   zPDFInfo.__init__   s_    	7<FYud3333$
;BLy$7777 	7j$s);<< 	7YY66v66666F9?Ii5555T 	G
8dE3-?@@ 	Gyy F FX F F FFFH=EO	(D99994;BLy$7777=EO	(D99994*rZ   )r[   r\   r]   r;   r^   r+   re   rz   r{   s   @rX   r   r      s        +}+ #+ 	+
 3-+ #+ 3-+ + 
+ + + + + + + + + +rZ   r   c                   P    e Zd ZdedefdZ	 	 d
ded         dee         defd	ZdS )AcroFormfields	sig_flagsc                 "    || _         || _        d S rT   r  r  )rW   r  r  s      rX   re   zAcroForm.__init__  s    "rZ   NrQ   rB   _obj_idrR   c                 |     t           fdt                     D             ||          }t          |d          S )Nc                 2    i | ]}|t          |          S r_   getattrr   r   rW   s     rX   r   z&AcroForm.serialize.<locals>.<dictcomp>  %    :::S'$$$:::rZ   rQ   r  r   
field_joinr/   dirr   rW   rQ   r  obj_dicts   `   rX   rY   zAcroForm.serialize  sQ    
 "::::D		:::/
 
 

 S1111rZ   NN)	r[   r\   r]   r)   r   re   r;   r^   rY   r_   rZ   rX   r   r   
  s        #x #C # # # # BF!%
2 
2#$=>
2 #
2 
	
2 
2 
2 
2 
2 
2rZ   r   c                   n     e Zd Z	 	 	 	 ddee         ded         ded         ded         d	df
 fd
Z xZS )
PDFCatalogNlangpage_layoutrC   	page_moderD   viewer_preferencesrG   rR   c                 d   t                                                       t          d          | _        |rt	          |          nd | _        || _        || _        || _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d S )NCatalog)rq   re   r(   rr   r-   r  r  r  r  pages	acro_formopen_action	mark_infometadatanamesoutlinesoutput_intentsstruct_tree_roota_fpage_labels)rW   r  r  r  r  rx   s        rX   re   zPDFCatalog.__init__  s     	OO	'+5IdOOO	&""4 	
 .2*.(,26$(
592659"&*.rZ   NNNNr[   r\   r]   r;   r^   re   rz   r{   s   @rX   r  r    s         #.2*.<@/ /sm/ l+/ J'	/
 %%89/ 
/ / / / / / / / / /rZ   r  c                        e Zd Zdee         dee         dee         dee         dee         dee         ddf fd	Z xZS )
PDFResourcesproc_setfontx_objectr   shadingr   rR   Nc                     t                                                       || _        || _        || _        || _        || _        || _        d S rT   )rq   re   r+  r,  r-  r   r.  r   )rW   r+  r,  r-  r   r.  r   rx   s          rX   re   zPDFResources.__init__:  sJ     	 	 &rZ   r(  r{   s   @rX   r*  r*  9  s        3- sm 3-	
 c] # # 
         rZ   r*  c                   (     e Zd Zdeddf fdZ xZS )PDFFontStreamcontentsrR   Nc                 v    t                                          |d           t          |          | _        d S NTr2  compress)rq   re   r   length1rW   r2  rx   s     rX   re   zPDFFontStream.__init__M  s1    (T:::8}}rZ   )r[   r\   r]   bytesre   rz   r{   s   @rX   r1  r1  L  sK        % %4 % % % % % % % % % %rZ   r1  c                   (     e Zd Zdeddf fdZ xZS )PDFXmpMetadatar2  rR   Nc                     t                                          |                    d                     t          d          | _        t          d          | _        d S )Nzutf-8r2  MetadataXML)rq   re   encoder(   rr   rj   r8  s     rX   re   zPDFXmpMetadata.__init__S  sJ    (//'":":;;;$$	E{{rZ   )r[   r\   r]   r^   re   rz   r{   s   @rX   r;  r;  R  sK        # # # # # # # # # # # #rZ   r;  c                        e Zd ZdZ	 	 	 	 ddededededeez  dz  d	e	d
e
e         de
e         de
e         deddf fdZ xZS )r   )_id	_contentsfilterlengthrr   rj   widthheightcolor_spacebits_per_componentdecodedecode_parmss_mask
image_maskNFr2  rj   rF  rG  rH  rI  
img_filterrJ  rK  rM  rR   c                 <   t                                          |           t          d          | _        t          |          | _        || _        || _        || _        || _        t          |          | _	        || _
        |	| _        d | _        |
rdnd | _        d S )Nr=  XObjectT)rq   re   r(   rr   rj   rF  rG  rH  rI  rD  rJ  rK  rL  rM  )rW   r2  rj   rF  rG  rH  rI  rN  rJ  rK  rM  rx   s              rX   re   zPDFXObject.__init__k  s     	(+++OO	G}}
&"4:&&(,0",6$$$rZ   )NNNF)r[   r\   r]   	__slots__r9  r^   ry   r)   r(   r   r;   boolre   rz   r{   s   @rX   r   r   Y  s        I2 %) $&* 7 77 7 	7
 7 _t+7  7 SM7 7 sm7 7 
7 7 7 7 7 7 7 7 7 7rZ   r   c                   4     e Zd ZdZdZdededef fdZ xZ	S )PDFICCProfilez
    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']
    )rB  rC  rD  rE  n	alternater2  rU  rV  c                     t                                          |d           || _        t          |          | _        d S r4  )rq   re   rU  r(   rV  )rW   r2  rU  rV  rx   s       rX   re   zPDFICCProfile.__init__  s:     	(T:::irZ   )
r[   r\   r]   rg   rQ  r9  r   r^   re   rz   r{   s   @rX   rT  rT    sj         I)) ) 	) ) ) ) ) ) ) ) ) )rZ   rT  c                      e Zd ZdZdZdee         dee         dee         ddfdZ	e
dee         fd	            Ze
dee         fd
            ZdefdZdefdZdeeef         fdZdee         fdZdefdZdefdZdS )PDFPageLabelzG
    This will be displayed by some PDF readers to identify pages.
    _style_prefixstlabel_stylelabel_prefixlabel_startrR   Nc                 0    || _         || _        || _        d S rT   rZ  )rW   r^  r_  r`  s       rX   re   zPDFPageLabel.__init__  s     1<&2!,rZ   c                 F    | j         rt          | j         j                  nd S rT   )r[  r(   valuer   s    rX   szPDFPageLabel.s  s!    *.+?tDK%&&&4?rZ   c                 <    | j         rt          | j                   nd S rT   )r\  r-   r   s    rX   pzPDFPageLabel.p  s    *.,@y&&&D@rZ   c                 8    d| j          d| j         d| j         dS )NzPDFPageLabel(r   )rZ  r   s    rX   __repr__zPDFPageLabel.__repr__  s)    Ht{HHdlHHdgHHHHrZ   c                 b   | j         r| j         nd}| j        r| j        t          j        k    r|t	          | j                  z  }n| j        t          j        k    r|t          | j        pd          z  }n| j        t          j        k    r,|t          | j        pd          	                                z  }ny| j        t          j
        k    r| j        pddz
  }|t          |          z  }nE| j        t          j        k    r0| j        pddz
  }|t          |          	                                z  }|S )Nr   r   )r\  r[  r   NUMBERr^   r]  UPPER_ROMANr3   LOWER_ROMANlowerUPPER_LETTERr4   LOWER_LETTER)rW   retstarts      rX   __str__zPDFPageLabel.__str__  s   "l2dll; 	5{n333s47||# :::yA... :::yA..44666 ;;;A*~e,,, ;;;A*~e,,22444
rZ   c                 T     t           fdt                     D                       S )Nc                 2    i | ]}|t          |          S r_   r  r
  s     rX   r   z*PDFPageLabel.serialize.<locals>.<dictcomp>  s%    LLL3sGD#$6$6LLLrZ   )r/   r  r   s   `rX   rY   zPDFPageLabel.serialize  s,    LLLL#d))LLLMMMrZ   c                     | j         S rT   )r[  r   s    rX   	get_stylezPDFPageLabel.get_style  
    {rZ   c                     | j         pdS )Nr   )r\  r   s    rX   
get_prefixzPDFPageLabel.get_prefix  s    |!r!rZ   c                     | j         pdS Nr   )r]  r   s    rX   	get_startzPDFPageLabel.get_start  s    w|!rZ   )r[   r\   r]   rg   rQ  r;   r   r^   r   re   r   r(   rd  r-   rf  ri  rs  r   r7   rY   rw  rz  r}  r_   rZ   rX   rY  rY    s         ,I-n-- sm- c]	-
 
- - - - @8D> @ @ @ X@ A8I& A A A XAI# I I I I    "N4S> N N N N8N3    "C " " " "3      rZ   rY  c                   ,    e Zd ZdZdee         ded         deez  def fdZ	defd	Z
d
eddfdZdeeef         fdZdededdfdZdee         dee         ddfdZdee         fdZdefdZdee         fdZdeddfdZdeez  ddfdZ xZS )PDFPage)rB  rr   r2  durtransannotsgroup	media_boxstruct_parentsr   parent_index	_width_pt
_height_pt_page_label_text_substitution_fragmentsduration
transitionrH   r2  indexc                 T   t                                                       t          d          | _        || _        |r|nd | _        || _        t                      | _        d | _	        d | _
        d | _        d | _        d | _        || _        d | _        d | _        d | _        g | _        d S )NPage)rq   re   r(   rr   r2  r  r  r)   r  r  r  r  r   r  r  r  r  r  r  )rW   r  r  r2  r  rx   s        rX   re   zPDFPage.__init__  s     	LL	 '188T
*2**$(
(,-1 	  	 *.+/37RT)))rZ   rR   c                     | j         S rT   r  r   s    rX   r  zPDFPage.index  rx  rZ   iNc                     || _         d S rT   r  )rW   r  s     rX   	set_indexzPDFPage.set_index  s    rZ   c                 X    | j         | j        t          d          | j         | j        fS )zGReturn a pair (width, height) in the unit specified to FPDF constructorNzPage dimensions are null)r  r  
ValueErrorr   s    rX   
dimensionszPDFPage.dimensions  s/    >!T_%<7888~t..rZ   width_pt	height_ptc                 $    ||c| _         | _        dS )zHAccepts a pair (width, height) in the unit specified to FPDF constructorN)r  r  )rW   r  r  s      rX   set_dimensionszPDFPage.set_dimensions  s    *2I'rZ   previous_page_label
page_labelc                    |ry|rw|                                 |                                 k    rM|                                |                                k    r#|j        s|                                dz   |_        |r|j        |j        dk    rd|_        |rL|sJt	          |                                 |                                |                                dz             }|| _        d S )Nr   r   )rw  rz  r]  r}  rY  r  )rW   r  r  s      rX   set_page_labelzPDFPage.set_page_label  s     	@	@ $$&&*=*G*G*I*III%%''+>+I+I+K+KKKM L 099;;a?JM 	"}$
(:(: !
 	z 	%#--//#..00#--//!3 J &rZ   c                     | j         S rT   )r  r   s    rX   get_page_labelzPDFPage.get_page_label9  s    rZ   c                 z    | j         s!t          |                                           nt          | j                   S rT   )r  r^   r  r   s    rX   	get_labelzPDFPage.get_label<  s0    (,(8Ss4::<<   c$BR>S>SSrZ   c                     | j         S rT   )r  r   s    rX   get_text_substitutionszPDFPage.get_text_substitutions?  s    00rZ   fragmentc                 :    | j                             |           d S rT   )r  append)rW   r  s     rX   add_text_substitutionzPDFPage.add_text_substitutionB  s    )00:::::rZ   
annotationc                 n    | j         t                      | _         | j                             |           d S rT   )r  r)   r  )rW   r  s     rX   add_annotationzPDFPage.add_annotationE  s1    ;"**DK:&&&&&rZ   )r[   r\   r]   rQ  r;   ry   	bytearrayr*   r   re   r  r  r   r  r  rY  r  r  r^   r  r<   r   r  r  r   r   r  rz   r{   s   @rX   r  r    s       I&U5/U \*U ..	U
 U U U U U U:s    3 4    /E%,/ / / / />u > >4 > > > >&%l3& \*& 
	& & & &6  6        T3 T T T T11O(P 1 1 1 1;.L ;QU ; ; ; ;'-)G 'D ' ' ' ' ' ' ' 'rZ   r  c                   ,     e Zd Zdededdf fdZ xZS )PDFPagesRootcountr  rR   Nc                     t                                                       t          d          | _        || _        || _        d | _        d S )NPages)rq   re   r(   rr   r  r  kids)rW   r  r  rx   s      rX   re   zPDFPagesRoot.__init__L  sB    MM	
" 				rZ   )r[   r\   r]   r   r^   re   rz   r{   s   @rX   r  r  K  sR        
c 
c 
d 
 
 
 
 
 
 
 
 
 
rZ   r  c                   j     e Zd Zdeddf fdZ	 	 d	deeeef                  ded         defdZ xZ	S )
r   dict_as_strrR   Nc                 V    t                                                       || _        d S rT   )rq   re   _dict_as_str)rW   r  rx   s     rX   re   zPDFExtGState.__init__W  s'    'rZ   r  rQ   rB   c                 &    | j          d| j         dS )Nz 0 obj
z
endobj)r   r  )rW   r  rQ   s      rX   rY   zPDFExtGState.serialize\  s     
 '>>4#4>>>>rZ   r  )
r[   r\   r]   r^   re   r;   r   r7   rY   rz   r{   s   @rX   r   r   V  s        (C (D ( ( ( ( ( ( .2AE? ?4S>*? $$=>? 
	? ? ? ? ? ? ? ?rZ   r   c                   :    e Zd ZdZd
dZ	 dded         defd	ZdS )PDFXrefAndTrailerz$Cross-reference table & file traileroutput_builderOutputProducerrR   Nc                 \    || _         |j        dz   | _        d | _        d | _        d | _        d S r|  )r  r   r  catalog_objinfo_objencryption_obj)rW   r  s     rX   re   zPDFXrefAndTrailer.__init__g  s6    ,#*Q.
15+/@DrZ   rQ   rB   c                    | j         t          d          | j        }t          t	          |j                            }g }|                    d           |                    d| j                    |                    d           t          d| j                  D ]&}|                    |j	        |         dd           '|                    d           |                    d	           |                    d
| j                    |                    dt          | j         j                              | j        r/|                    dt          | j        j                              |j        }| j        rE|                    dt          | j        j                              |j        J |j        j        }n4|                                }|dk    r|                    |j                  }||                    d| d           |                    d           |                    d           |                    |           |                    d           d                    |          S )Nz"Invalid state for XREF production.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  r^   r   bufferr  r  rangeoffsetspdf_refr   r  fpdfr  rQ   file_id_default_file_idr   )rW   rQ   builderr  outr   r  r  s           rX   rY   zPDFXrefAndTrailer.serializeo  sb    # DEEE%GN++,,	

6

$
$$%%%

()))Atz** 	B 	BFJJ'/&1@@@@AAAA

9

4

(DJ(()))

:GD$4$788::;;;= 	=JJ;(8 9 9;;<<<| 	@JJD74+>+A#B#BDDEEE)555373I3QGGllnnG"}}//??JJ)w)))***

4

;

9

7yy~~rZ   )r  r  rR   NrT   )r[   r\   r]   rg   re   r;   r^   rY   r_   rZ   rX   r  r  d  sh        **E E E E HL" "!)*C!D"	" " " " " "rZ   r  c                       e Zd ZdZdZ	 	 	 	 ddddee         dee         dee         d	ee         d
ee         ddfdZ	 	 dded         dee	         defdZ
dS )OutputIntentDictionarya  
    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
    )rr   rd  output_condition_identifieroutput_conditionregistry_namedest_output_profileinfoNrj   zOutputIntentSubType | strr  r  r  r  r  rR   c                    t          d          | _        t          t          j        |          j                  | _        |rt          |          nd | _        |rt          |          nd | _        |rt          |          nd | _	        |rt          |t                    r|nd | _        |rt          |          nd | _        d S )NOutputIntent)r(   rr   r   coercerc  rd  r-   r  r  r  r   rT  r  r  )rW   rj   r  r  r  r  r  s          rX   re   zOutputIntentDictionary.__init__  s     ((	)099?@@ +I1222 	( ,<EI&''' 	 :GPY}555D #'12E}'U'U 	 
 (,5IdOOO			rZ   rQ   rB   r  c                 x     t           fdt                     D             ||          }t          |          S )Nc                 2    i | ]}|t          |          S r_   r  r
  s     rX   r   z4OutputIntentDictionary.serialize.<locals>.<dictcomp>  r  rZ   r  r  r  s   `   rX   rY   z OutputIntentDictionary.serialize  sL    
 "::::D		:::/
 
 

 !!!rZ   r'  r  )r[   r\   r]   rg   rQ  r;   r^   rT  re   r   rY   r_   rZ   rX   r  r    s         *I +/'+7;"6 6,6 &.c]6 #3-	6
  }6 &m46 sm6 
6 6 6 6: BF!%
" 
"#$=>
" #
" 
	
" 
" 
" 
" 
" 
"rZ   r  r!   r#   r$   r"   c            	          e Zd ZdZ ej        d          Z ej        d          Z ej        d          Z ej        d          Z	 ej        d          Z
d!d	Zd
ededee         dee         fdZdddee         fdZdeez  defdZdddefdZdedeeeef                  fdZdededdfdZd
edeeef         fdZded
edee         fdZd
edee         fdZe d
edefd            Z!	 d"dedede"e#z  fd Z$dS )#ResourceCatalogzKManage 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+TfrR   Nc                     t          t                    | _        t          t                    | _        t                      | _        g | _        g | _        d| _	        i | _
        d| _        d S )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    rX   re   zResourceCatalog.__init__  si    JUK
 K

  	 1<:<AC,-$<>'(rZ   resource_typeresourcepage_numberc                    |t           j        t           j        fv r~| j        |         }|                     |          }||vr| t          |          dz    ||<   |(| j        ||f                             ||                    t          ||                   S |t           j	        k    r*t          |t                    r|| j        k    r
|dz   | _        t          r|J | j        ||f                             |           d S r|  )r   PATTERNSHADINGr   _get_prefixr   r  addr^   X_OBJECTr   r   r  r6   )rW   r  r  r  r   prefixs         rX   r  zResourceCatalog.add  s"    _4o6MNNN~m4H%%m44Fx''(.%CH0A%C%C"&'m(DEIIX&   x)*** _5558S)) 6D333&.lD# 	+***m <=AA(KKKtrZ   styler@   c                    |                                 }|dS t          |          }|| j        vrLt          |                     t
          j                   t          | j                             }|| j        |<   | j        |         S )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)rY   r^   r  r(   r  r   EXT_G_STATEr   )rW   r  
style_dict	style_strr   s        rX   register_graphics_stylez'ResourceCatalog.register_graphics_style  s     %*OO$5$5
4
OO	D000##O$?@@]#dFZB[B[]] D /3D +#I..rZ   	soft_maskc                     | xj         dz  c_         t          ||           }| j         |_        | j                            |           |j        S )z5Register a soft mask xobject and return its object idr   )r  soft_mask_path_to_xobjectr   r  r  )rW   r  xobjects      rX   register_soft_maskz"ResourceCatalog.register_soft_mask'  sN    $$)$$+It<<1
&&w///zrZ   blend_groupr?   c                     t          ||           }| j        }| xj        dz  c_        | j                            ||f           |S )zBRegister a blend group Form XObject and return its resource index.r   )blend_group_to_xobjectr  r  r  )rW   r  r  r  s       rX   register_blend_formz#ResourceCatalog.register_blend_form/  sN    (d;;'1$!!5'"2333rZ   renderedc                 L   t                      }| j                            |          D ]6}|                    t          j        |                    d          f           7| j                            |          D ]6}|                    t          j        |                    d          f           7| j	                            |          D ]6}|                    t          j
        |                    d          f           7| j                            |          D ]6}|                    t          j
        |                    d          f           7| j                            |          D ]6}|                    t          j        |                    d          f           7|S )z6Parse a content stream and return discovered resourcesr   )r   GS_REGEXfinditerr  r   r  r  	IMG_REGEXr  PATTERN_FILL_REGEXr  PATTERN_STROKE_REGEX
FONT_REGEXFONT)rW   r  foundms       rX   scan_streamzResourceCatalog.scan_stream7  sr   25%%''11 	A 	AAII2AGGAJJ?@@@@((22 	> 	>AII/<====(11(;; 	= 	=AII.

;<<<<*33H== 	= 	=AII.

;<<<<))(33 	: 	:AII+QWWQZZ89999rZ   c                     |                      |          D ]Y\  }}|t          j        k    r-| j        |t          j        f                             |           B|                     |||           ZdS )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  )rW   r  r  r  r  s        rX   index_stream_resourcesz&ResourceCatalog.index_stream_resourcesL  s     (,'7'7'A'A 	? 	?#M8 777'o6M(NOSS    +>>>>	? 	?rZ   c                 @    | j         |                                         S rT   )r   r   )rW   r  s     rX   	get_itemszResourceCatalog.get_items[  s     ~m,22444rZ   c                      | j         ||f         S rT   )r  )rW   r  r  s      rX   get_resources_per_pagez&ResourceCatalog.get_resources_per_page`  s     &]'CDDrZ   c                     t                      }| j                                        D ]#\  \  }}}||k    r|                    |           $|S rT   )r   r  r   update)rW   r  unique_rtyper  s         rX   get_used_resourcesz"ResourceCatalog.get_used_resourcese  sU    %(UU$($;$A$A$C$C 	( 	( JQ%%h'''rZ   c                     |t           j        k    rdS |t           j        k    rdS |t           j        k    rdS t	          d|           )NGSPShzNo prefix for resource type )r   r  r  r  r  )clsr  s     rX   r  zResourceCatalog._get_prefixl  sR    O7774O3333O3334GGGHHHrZ   r   font_family
font_stylec                    |st          d          d                    t          |                                                    }i ddddddddddd	dd
ddddddddddddddddddddddddd}|                                                    d                              d          D ]&}|                                                    d                                          }| | }|| j        v r| j        |         c S |t          v rV|dv rdn|}| | }	|	| j        vr0t          | j                  dz   }
t          |
|	|          | j        |	<   | j        |	         c S |                    |          }|rV|dv rdn|}| | }	|	| j        vr0t          | j                  dz   }
t          |
|	|          | j        |	<   | j        |	         c S (t          d|d|          )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)r,  r-  zzapf dingbatsz'",>   r,  r-  r   zNo suitable font for family=z, style=)KeyErrorr   r   upperstripsplitrn  r  r   r   r   get)rW   r  r  r  alias	candidatefamilyfontkey
core_styler   r  mappeds               rX   get_font_from_familyz$ResourceCatalog.get_font_from_familyv  s     	0.///z//112233
+
 +
 [	

 {
 k
 
 W
 W
 w
 w
 w
 
  !
" y#
$ 9%
& 	'
( i)
, *+1
 
 
6 %**,,22599??DD 	/ 	/I__&&,,U3399;;F  (((G$,,,)'2222 ###)-G#G#GRRU
---d000D.//!3A.6q#z.J.JD&s+)#.... YYv&&F /#)-G#G#GRRU
---d000D.//!3A.6q#z.J.JD&s+)#..../ VkVVUVVWWWrZ   r   )r   )%r[   r\   r]   rg   recompiler  r  r  r  r  re   r   ResourceTypesr;   r   r^   r  r(   r  r   r   r  r  r   r   r
  r  r8   r  r  r  classmethodr  r   r   r:  r_   rZ   rX   r  r    s       QQrz.))H
=))I#$455%2:&677@AAJ) ) ) )&   c]	
 
#   </_ /$ / / / /&MM,I c    |     C Cos6J0K,L    *?s ? ? ? ? ? ?5,5	=#%	&5 5 5 5
EE/>E	]	E E E E
 CDV     I IC I I I [I 35JX JXJX,/JX	G	JX JX JX JX JX JXrZ   r  c                      e Zd ZdZd=dZdefdZdeez  ez  ddfd	Z		 d>d
e
dee         defdZdefdZdee         fdZ edd          fdedee         fdZdee         fdZdeeef         deeef         deedf         deeeez  f         fdZdeeef         fdZdeeef         defdZ deeef         defdZ!deeef         fdZ"deeef         deedf         deeef         ddfdZ#deeef         ddfd Z$deeef         deeef         deee%f         d!eee&e'z  f         d"eeeez  f         ddfd#Z(deee&e'z  f         fd$Z)deee%f         fd%Z*d&ee         ddfd'Z+d"eeeez  f         deeef         deeef         d!eee&e'z  f         deee%f         de,fd(Z-dee
         fd)Z.de/ee0         e1e2         f         fd*Z3dee4         fd+Z5defd,Z6de7fd-Z8ded.         fd/Z9dee:         fd0Z;de<fd1Z=d2e<d3ed4ed5ee         d6ee4         d7ee
         d8ee0         ddfd9Z>e?d:eded         fd;            Z@d?d<ZAdS )@r  zVGenerates the final bytearray representing the PDF document, based on a FPDF instance.r  rF   rR   Nc                     || _         g | _        i | _        |j        j        | _        i | _        i | _        t          t                    | _
        t                      | _        d S rT   )r  pdf_objsiccp_i_to_pdf_i_resource_catalogr  r   r  trace_labels_per_obj_idr   r   sections_size_per_trace_labelr  r  )rW   r  s     rX   re   zOutputProducer.__init__  sX    	<>/1": 	 (*79$=H=M=M*!*rZ   c           
      0   | j         }|j        c|                                }|dk    r"|                    t	          d                    }|j                            t          |                     |j        }|j        r|j        j	        |k    r|j        j	        }| j
                            t          |                     |                                 }|                                 }|                                 }|                                 }|j        D ]@}|                     |d           |                     |                                d           A|                     |           |                                 }	|                                 \  }
}|                                 }d}|j        s|                                 }|                                 }t7          |           }| j
                            |           t9          |          |_        |                     |||d         |||	|
           g }|D ]*}||_        tA          |j!        t8                    sJ |j!        D ]}g }|j"        r/tG          |j"        d          r|                    |j"                   |j$        rNtG          |j$        d          r9tG          |j$        j"        d          r|                    |j$        j"                   |D ]G}|j%        tM          |          k    r-tO          d	|j%         d
|(                                 d          H|)                    |           |j!        sd|_!        ,|D ]#}|j"        |                    |j"                   $|D ])}tU          ||j%        dz
           j+                  |_,        *|j-        j.        j/        D ]$}||%                                dz
           |_0        %||_1        ||_2        ||_3        | j4        rJ d| j4                     | j5        rJ dtM          | j5                               | j
        D ]}tA          |tl                    rd}n@tM          | j4                  | j5        |j+        <   | j7        8                    |j+                  }|r\| 9                    |          5  | :                    |;                    |j                             ddd           n# 1 swxY w Y   | :                    |;                    |j                             | <                                 |j=        r=t}          t~          | j4        |j=        |j@        |jA        |jB        |jC                  | _4        | j4        S )z
        This method alters the target FPDF instance
        by assigning IDs to all PDF objects,
        plus a few other properties on PDFPage instances
        Nr   r   embedded_files	file_spec)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: )rQ   )Dr  rQ   r  r  r  generate_passwordsr^   rb   r  _min_pdf_versionrA  r  ra   _add_pages_root_add_catalog
_add_pages_add_annotations_as_objectsrG  _add_pdf_objrH  _insert_resources_add_structure_tree_add_document_outline_add_xmp_metadata_compliance	_add_info_add_encryptionr  r)   r  _finalize_catalogr  r   r  rO  hasattrr   r  r   r  r  extendr  r   page_refstruct_builderdoc_struct_elemkpgr  r  r  r  r  rP   rD  r3  _trace_size_outrY   _log_final_sections_sizes	_sign_keyr&   r5   
_sign_cert_sign_extra_certs_sign_hashalgo
_sign_time)rW   r  r  rb   rI  r  	page_objsrK  embedded_filerM  rN  outline_itemsrL  r  r  r  destspage_objannot
page_destsrO  outline_itemstruct_elempdf_objtrace_labels                            rX   	bufferizezOutputProducer.bufferize  s#    y
 !-37<<>>G"}}//	$@@"55c'llCCC&#	C'8;FF1BKY{33444--//''))OO%%	!==??!0 	F 	FMm-=>>>m5577EEEEy)))#7799*.*D*D*F*F'-1133 	(~~''H--// &&T""" 'y11)$Q<1-!5- 	 	
 	
 	
 ')! 	' 	'H,HOhox88888! ) )35
: 6uz=99 6"))%*5557 8wuw77 8uw|];; 8"))%',777&  D'#i..88(}dFV}}iqiwiwiyiy}}}   9 Z((((? '"&) 	0 	0L ,\./// 	 	D#$q( DMM
  .>@ 	F 	FK&{'>'>'@'@1'DEKNN& , 	\ 	\[dk[[	\ 	\ 	P 	POC<M<MOO	P 	P } 	W 	WG'#344 K"+.t{+;+;WZ(":>>wzJJ W%%k22  II))D<R)SS                
 		'++d>T+UUVVVV&&(((> 		&&# DK {s   /S>>T	T	datac                     t          |t                    s9t          |t                    st          |          }|                    d          }| xj        |dz   z  c_        dS )zAppend data to the bufferlatin1   
N)r   r9  r^   r@  r  )rW   rz  s     rX   rg  zOutputProducer._outV  sZ    $&& 	)dC(( !4yy;;x((Dte|#rZ   rw  rx  c                     | xj         dz  c_         | j         |_        | j                            |           |r|| j        | j         <   | j         S r|  )r   r   rA  r  rD  )rW   rw  rx  s      rX   rV  zOutputProducer._add_pdf_obj^  sS     	q[
W%%% 	D8CD(5{rZ   c                     | j         }t          |j        t          |j                            }|                     |           |S )N)r  r  )r  r  pages_count_dimensions_to_mediaboxdefault_page_dimensionsrV  )rW   r  rI  s      rX   rR  zOutputProducer._add_pages_rooth  sM    y%"-d.JKK
 
 
 	.)))rZ   c              #      K   t          d| j        j        dz             D ]R}| j        j        |         }|                                |k    s"J d|                                d|            |V  Sd S )Nr   zpage_obj.index()=z != page_index=)r  r  r  r  r  )rW   
page_indexrr  s      rX   _iter_pages_in_orderz#OutputProducer._iter_pages_in_orderq  s      49#81#<== 	 	Jyz2H   J...6(..""6666 /..NNNN	 	rZ   r   _slicec                 H   | j         }g }t          |                                           |         D ]}|j        dk    r!|j        rt          ddddd          |_        |                                |j        k    r&t          |                                          |_
        |                     |d           |                    |           t          |j        t                    sJ t!          |j        |j        	          }|                     |d           ||_        |S )
Nz1.3z/Groupz/Transparency
/DeviceRGB)r   z/Sz/CSr   r  r  r5  )r  r   r  rb   allow_images_transparencyr   r  r  r  r  r  rV  r  r   r2  r  r*   r6  )rW   r  r  rn  rr  cs_objs         rX   rT  zOutputProducer._add_pagesz  s6   y#%	T668899&A 	' 	'H%''D,J'!)&olSS"" " " ""$$(DDD%<X=P=P=R=R%S%S"h000X&&& h/;;;;;%!*T]  F fg... &HrZ   c                 <   d }| j         j                                        D ]z}t          |j        t
                    sJ |j        D ]T}t          |t                    r=|                     |           t          |j        t                    r|
J d            |}U{|S )Nz0A /Sig annotation is present on more than 1 page)
r  r  valuesr   r  r)   r   rV  vr%   )rW   rK  rr  	annot_objs       rX   rU  z*OutputProducer._add_annotations_as_objects  s    !	..00 		7 		7Hhox88888%_ 7 7	i77 7%%i000!)+y99 7.66M 766-6*7 "!rZ   image_objects_per_indexr   r   r#   c                 n  () i }t          | j        j                                        d           D 	](t	          (t
                    r܉(j        rԉ(j        j        dk    rt          d          (j        j
        D ]N}|                     t          |j                            d          | j        j                  d          |_        Og }(j                                        D ]y\  }}|2t	          |j        t&                    rt)          |j                  dk    r:|                    d	|d
dd                    d |j        D                        d           zt          dt)          |           dd                    |           d                    d                    }	|                     |	d           t/          (j                  }
t1          |	j                  |
_        |
                    |||           |                     |
d           |
|(j        <   t	          (t:                    rF(j        dvrdnd }t?          d(j        |          }|                     |d           ||(j        <   Pt	          (t
                    rd(j         }(j                                         }t)          (j!                  dk    r~d                    d (j!        d d         D                       }t)          (j!                  dk    r|dt)          (j!                  dz
   dz  }tD          #                    d||           tI          j%        dd          }|xj&        g dz  c_&        tI          j'        |          }|(                    |            |                    (j)                   (fd!(j                                        D             }tU                      }(j)        +                    |           |,                    d           |-                                }t?          d"|d#          }|                     |d           ||(j        <   (j.        o(j/        }d }d }|ri }i }(j                                        D ]\  }}||j0        1                    d$          r>|j0        d%d          2                                rtg          |j0        d%d                    }n|j4        }|d&k    r"tD          #                    d'|(j5                   |||<   |j6        ||<   t?          |rd(nd)|(j7        j8        |r|rts          |          ntu          (          *          }|                     |d           tw          |g          |_<        g }d+tf          d,tz          fd-)(j                                        D ]{\  }}|2t	          |j        t&                    rt)          |j                  dk    r:|                    d	|d.dd                    )fd/|j        D                        d           |t          d0t)          |           dd                    |           d                    d                    }	|                     |	d           |	|_        |r|rd1}d2}d}(j>        r(j>        \  }}}d3 t          |                                          D             }t          d4| d5| d6| d7| d8| d9t)          |           d:d                    |           d;                    d                    }t          d<          |_@        t          | d8| d=          |_A        t          d>| d?| d@| dA          |_C        |                     |d           ||_D        t                      } |rE(j>        r>(j>        \  }}}t          |dB          | _G        t          |dB          | _H        || _I        |                     | d           | |_C        (j7        }!t          |          |!_J        |                     |!d           |!|_K        |sdCgdDz  dDz  dEz  }"|                                D ]8\  }#}$t          |$dFz	            |"|#dEz  <   t          |$dz            |"|#dEz  dGz   <   9d                    |"          }%t          |%                    dH          d          }&|                     |&d           |&|_M        t          |I          }'|rt          dJ          |'_O        |                     |'d           |r|'|!_P        n|'|!_Q        (j        jR        S                                 (j        jT        S                                 (U                                 	|S )KNc                     | j         S rT   )r  )r,  s    rX   r   z+OutputProducer._add_fonts.<locals>.<lambda>  s    df rZ   r      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.latin-1r5  fontsr   <02Xz> <r   c              3      K   | ]J}t          |                              d                                                                           V  KdS )z	utf-16-beN)chrr@  hexr0  )r   codes     rX   r   z,OutputProducer._add_fonts.<locals>.<genexpr>  sO      7~7~hlD		8H8H8U8U8Y8Y8[8[8a8a8c8c7~7~7~7~7~7~rZ   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)SymbolZapfDingbatsWinAnsiEncodingType1)rj   rk   rl   r   r   c              3      K   | ]L}d t          |           dt          |                              d                                           dV  MdS )'z' (zunicode-escaperh  N)r  r@  rJ  )r   xs     rX   r   z,OutputProducer._add_fonts.<locals>.<genexpr>  so       $ $ SCFFRRs1vv}}5E'F'F'M'M'O'ORRR$ $ $ $ $ $rZ   
   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   c                 Z    i | ]'\  }}||j                             |j                  (S rT   )r   
getGlyphIDr   )r   r   char_idr,  s      rX   r   z-OutputProducer._add_fonts.<locals>.<dictcomp>+  sB     1 1 1&w( T[33E4DEE(((rZ   Type0z
Identity-Hcid     zJGlyph CID %s exceeds 0xFFFF and cannot be encoded in a 2-byte CID font: %sCIDFontType0CIDFontType2)rj   rk   rm   rn   r   rR   c                 L    | dk    rd| dz
  dz	  z  }d| dz  z  }|d|dS | dS )Nr  i   i   r  i   i  04Xr_   )r   	code_highcode_lows      rX   format_codez.OutputProducer._add_fonts.<locals>.format_codem  sR    ''$*g.?B-F$F	#)Wu_#="+??????%+++rZ   r  c              3   .   K   | ]} |          V  d S rT   r_   )r   r  r  s     rX   r   z,OutputProducer._add_fonts.<locals>.<genexpr>}  s-      7d7ddD8I8I7d7d7d7d7d7drZ   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   Identityc                 (    g | ]\  }}d |dd| dS )r  r  z> r   r_   )r   r  r  s      rX   r   z-OutputProducer._add_fonts.<locals>.<listcomp>  sB     # # #%D# 0D//////# # #rZ   zY/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry (z)
/Ordering (z)
/Supplement z
>> def
/CMapName /-zO-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
z begincidchar
zHendcidchar
endcmap
CMapName currentdict /CMap defineresource pop
end
endCMapz-UCSz<< /Registry (z) /Ordering (z) /Supplement z >>r             r   r|  r=  CIDFontType0C)Vr   r  r  r  r   r   
color_fontr   _nextr   r   rV  r*   r   r@  r6  r   r   r   r   r   r  r   r   r  r   rt   r   r  r   r   ri   get_all_glyph_namesmissing_glyphsLOGGERwarningftsubsetOptionsdrop_tables	Subsetterpopulater   r   saveseekreadis_cffis_cid_keyedr   
startswithisdigitr   glyph_idr7  r   descmissing_width_cid_font_widths_tt_font_widthsr)   rs   r^   cff_rosr(   rr   
c_map_namer.   ru   rl   r}   r-   r   r   r   	font_namerv   r  rw   r1  rj   
font_file3
font_file2pickcache_clear	get_glyphclose)*rW   r  r   r   font_objs_per_indexcolor_glyphbfCharr   code_mappedto_unicode_objt3_font_objrl   core_font_objfontnameglyph_namesmsgoptions	subsettercode_to_glyphoutputttfontstreamcomposite_font_obj
is_cff_cidcode_to_cid
cid_widthsr  cid_font_objr   r   r   cid_mappingencoding_cmap_objcid_system_info_objfont_descriptor_objcid_to_gid_listccglyph_icid_to_gid_mapcid_to_gid_map_objfont_file_cs_objr,  r  s*                                           @@rX   
_add_fontszOutputProducer._add_fonts  s    BD49?11339L9LMMM I	 I	D $(( >T_ >;$t++'V   $(?#9  K)-):):(%0%6%=%=i%H%H%)Y%7    * *K&& %'*.+*;*;*=*= 	 	&E;)%-?? &u}--22 MM DK  D  D  D7~7~pup}7~7~7~0~0~  D  D  D    "2 v;;  776??  ( fY''-" "0 !!.':::*4?;;)01B)C)C&..+*)  
 !!+w777.9#DF+ $)) E y(BBB &% 
 !(#ty8! ! ! !!-999.;#DF++D'** z0TY00 #k==??t*++a//)) $ $!%!4SbS!9$ $ $  C 4.//"44TS1D-E-E-JTTTTNNExQT   #*$SWXXX## ( ( ( ##( %.w77	""+"666  ---1 1 1 1*.+*;*;*=*=1 1 1 !  (((A%{{}} &-#x,& & &" !!"4g>>>.@#DF+ "[>T->
8<7;
 <"$K!#J.2k.?.?.A.A < <*{ =$!,77>>1 % 0 4 < < > >1 #&e&6qrr&:";";CC"'.C<<"NN l # $  
 %36K0*/*;
3&.8LNNn&	/ &3*43(444,T22	  	  	  !!,8886>~6N6N"3 , , , , , , +/+*;*;*=*= 	 	&E;)%-?? &u}--22 MMiKiii7d7d7d7dV[Vc7d7d7d0d0diii    "2 v;;  776??  ( fY''-" "0 !!.':::0>"- *D+ *D&H)H!"J| F9=6(J# #)/0A0A0C0C)D)D# # #K )9" -5	" "
 +3" " ,6" " +3" " 6>" "  #;//" "  "ww{33" " "( !&++-) )%0 .2&\\%*37#44h4444 4%0 ;>gggggXbggg; ;%7 %%&7AAA2C&/&3oo# @$, @59\2Hh
3<Xt3T3T3T'03<Xt3T3T3T'05?'2!!"5w???1D.&*i#04X#-!!"5w???/B,! I (.hns&:Q&>O'4':':'<'< J JG25gl2C2CQ/69'D.6I6IQ
33%'WW_%=%=N *:!/!6!6x!@!@4* * *& %%&8'BBB6HL3#0,#G#G#G  E/3O/D/D$,!!"2G<<< F5E'225E'2 ,,...%11333

""rZ   c                    i }t          | j        j        j                                        d           D ]R}t          t          |d                   dk    r1|                     |          |t          t          |d                   <   S|S )Nc                 8    t          t          | d                   S )Nr  )r>   r   )r   s    rX   r   z,OutputProducer._add_images.<locals>.<lambda>  s    4SQTXCVCV rZ   r   usagesr   r  )r   r  image_cacheimagesr  r>   r   
_add_image)rW   r   r   s      rX   _add_imageszOutputProducer._add_images  s    46I!(//117V7V
 
 
 	O 	OC CX''!++:>//#:N:N"4SX#6#67!!rZ   img_infoc           	         t          t          |d                   }|| j        v r| j        |         S d}| j        j        j                                        D ]\  }}||k    r|} n|J t          |t          t          |d                   t          t          |d                             }| 	                    |d          }|| j        |<   |S )z~
        Returns the PDF object of the ICC profile indexed iccp_i in the FPDF object.
        Adds it if not present.
        iccp_iNdpncs)r2  rU  rV  iccp)
r>   r   rB  r  r  icc_profilesr   rT  r^   rV  )rW   r  r  iccp_contenticcp_cr  iccp_obj
iccp_pdf_is           rX   _ensure_iccpzOutputProducer._ensure_iccp  s    
 c8H-..T)))'//.;AACC 	 	IFA{{%  ''' !3((3//
 
 

 &&x88
'1V$rZ   r  c                    t          |                    d                    }|rd nt          |d                   }d }|rd n|                    d          }|dk    r-t          ddt	          |d                   dz  d	z
   g          }nW|C|                     |          }t          d
t          |          t          d          dg          }n|dk    r|d         du rd}d|v rt          t          |d                   }d|d          d|d          d}t          dt          t          |d                   t          t          |d                   t          t          |d                   |t          t          |d                   t          t          |d                   |||
  
        }|                     |d          |d<   | j        j        rKd|v rG|sEd |d          }	|                     |d         |d         d!d"|d         |	|d         d#          |_        t!          |t                    rd|v rt!          |j        t                    sJ t%          t          t          |d                   | j        j        $          }
|                     |
d           |j                            t+          |
j                             |S )%NrM  r  r  Indexedz/Indexedr  palr  r   z	/ICCBased0R
DeviceCMYKinvertedTz[1 0 1 0 1 0 1 0]rJ  r   dpz /BitsPerComponent bpcr   Imagerz  rn   hf)
rj   r2  rF  rG  rH  rI  rN  rJ  rK  rM  r  r   smaskz!/Predictor 15 /Colors 1 /Columns 
DeviceGrayr  )rn   r(  r  r&  r)  r%  rz  r5  )rR  r3  r(   r)   r   r  r^   r>   r   r9  r   rV  r  r  r  rL  r   rH  r*   r6  r  r  r   )rW   r  rM  rH  rJ  r  r  rK  img_objr%  
pal_cs_objs              rX   r  zOutputProducer._add_image  s   $((<0011
6@.Vddd4PT:FVFV#;(););)##"\c$u+.>.>!.Ca.G+IJ KK **400J"KZ#c((C#PQQKKL((J4'',t#tH~..FJDJJJ4;JJJ%f..sDI&&T#Y''##Ce55Cc++%!
 
 
 **7H==X 9. 	7d??:?@T#Y@@B!__cc&c M 
 
GN k8,, 	?{1J1Jg18<<<<<)eT%[11DI<N  J j(333&&wz}'='=>>>rZ   c                     t                      }| j        j        j                                        D ]/\  }}t          |          }|                     |d           |||<   0|S )Ngfxstate)r   r  rC  r  r   r   rV  )rW   r   
state_dictr   r   s        rX   _add_gfxstateszOutputProducer._add_gfxstatesP  sk    :E-- $	 ; K Q Q S S 	8 	8J'
33LlJ777+7"4((%%rZ   r   c                     | j         j        j        D ]=}|j                            |||          |_        | j                            |           >dS )zSAppend soft-mask Form XObjects after patterns exist so we can resolve /Pattern ids.N)r  rC  r  _pathget_resource_dictionaryr   rA  r  )rW   r   r   r   r  s        rX   _add_soft_maskszOutputProducer._add_soft_masksX  sc     4G 	, 	,I"+/"I"I&(=?Q# #I M  ++++		, 	,rZ   c                     | j         j        j        D ]I\  }}t          |dd          s|                     |d           d|_        |                    ||           JdS )z\Ensure isolated blend forms are part of the XObject set before other resources rely on them._registeredFr  TN)r  rC  r  r	  rV  r7  
setdefault)rW   r   r  r  s       rX   #_register_form_xobject_placeholdersz2OutputProducer._register_form_xobject_placeholderse  st     #i9G 	: 	:NE77M599 +!!'8444&*#))%9999		: 	:rZ   shading_objs_per_namer  c                     | j         j        j        D ]6\  }}t          |dd          }||                    |||||          |_        7dS )z@Populate resource dictionaries for isolated blend Form XObjects._blend_groupN)r  rC  r  r	  r4  r   )	rW   r   r   r   r:  r  r  r  r  s	            rX   _finalize_form_xobjectsz&OutputProducer._finalize_form_xobjectso  sh     )5C 		 		JAw!'>4@@K&$/$G$G*))'&% %!		 		rZ   c                    t                      }| j        j                            t          j                  D ]\  }}t          |t          t          t          f          sJ |
                                D ]}|                     |d           |                                }|                     |d           |||<   |S )Nfunctionr.  )r   r  rC  r  r   r  r   r!   r$   r"   get_functionsrV  get_shading_object)rW   r:  r.  r   r?  shading_objs         rX   _add_shadingszOutputProducer._add_shadings  s    BM--!Y8BB#
 
 	6 	6MGT g';'GHHHHH#1133 8 8!!(J7777181K1K1M1MKk9555*5!$''$$rZ   c                     t                      }| j        j                            t          j                  D ]\  }}t          |t                    sJ |                     |d           |||<   |	                                rz|
                    |                                t          j        d| j        j                                       dd                              | j        j                  z             |S )Nr   r   r   r   )r  y)r   r  rC  r  r   r  r   r#   rV  get_apply_page_ctm
set_matrix
get_matrixr   translationr(  r   rd  )rW   r   r   r   s       rX   _add_patternszOutputProducer._add_patterns  s    4?MM!Y8BB#
 
 	 	MGT gw/////gy111*1!$'))++ ""&&((+A	|<<UQ"U%%U49;''(   %$rZ   rn  c                 0   
                                                                                                    }                                                      |          
                                                      |
                                |            j        j	        r' 
                    
|          }|D ]	}||_        
d S t          |d          D ]\  }
fd j        j                            t          j                  D             }fd j        j                            t          j                  D             } fd|                                D             }fd j        j                            t          j                  D             }fd j        j                            t          j                  D             }	 
                    |||||	          |_        d S )Nr   )rr  c                 V    i | ]%}t          |          t          |                   &S r_   r   )r   font_idr  s     rX   r   z4OutputProducer._insert_resources.<locals>.<dictcomp>  s=     , , , LL"5c'll"C, , ,rZ   c                 V    i | ]%}t          |          t          |                   &S r_   rM  )r   img_idr   s     rX   r   z4OutputProducer._insert_resources.<locals>.<dictcomp>  s=     + + + KK!3CKK!@+ + +rZ   c                 t    i | ]4\  }}|j         j                            t          j                  v 1||5S r_   )r  rC  r  r   r  )r   gfx_name	gfx_stater  rW   s      rX   r   z4OutputProducer._insert_resources.<locals>.<dictcomp>  s\     / / /-9y2II#_%@   i  rZ   c                 V    i | ]%}t          |          t          |                   &S r_   r   )r   shading_namer:  s     rX   r   z4OutputProducer._insert_resources.<locals>.<dictcomp>  A     . . .$ %%'<S=N=N'O. . .rZ   c                 V    i | ]%}t          |          t          |                   &S r_   r   )r   pattern_namer   s     rX   r   z4OutputProducer._insert_resources.<locals>.<dictcomp>  rV  rZ   )r  r9  r1  rJ  r
  rC  r=  r5  r  single_resources_object_add_resources_dictr   	enumeraterC  r  r   r  r  r   r  r  )rW   rn  r   resources_dict_objrr  page_font_objs_per_indexpage_img_objs_per_indexpage_gfxstate_objs_per_namepage_shading_objs_per_namepage_pattern_objs_per_namer  r   r  r   r:  s   `         @@@@@rX   rW  z OutputProducer._insert_resources  s   !--//001CDDD!%!4!4!6!6 $ 2 2 4 4"oo 68M
 
 !% 2 2 4 4$$"!!	
 	
 	
 	"$9;M	
 	
 	
 9, 3	!%!9!9#"&%%" " & 8 8%7""8 8 *39A)F)F)F ( (%X, , , ,#'9#>#U#U#_%9$ $, , ,(+ + + +"&)"="T"T#_%=# #+ + +'/ / / / /1G1M1M1O1O/ / /+. . . .(,	(C(Z(Z#_%<) ). . .*. . . .(,	(C(Z(Z#_%<) ). . .* &*%=%=,+/..& &""E( (rZ   c                    d}d\  }}}	}
}|r8t          d t          |                                          D                       }|r8t          d t          |                                          D                       }|r+t          d |                                D                       }	|r8t          d t          |                                          D                       }
|r8t          d t          |                                          D                       }t          ||||	|
|          }|                     |           |S )	Nz$[/PDF /Text /ImageB /ImageC /ImageI])NNNNNc                 D    i | ]\  }}d | t          |j                  S )z/Fr  r   )r   r  font_objs      rX   r   z6OutputProducer._add_resources_dict.<locals>.<dictcomp>  s>       'x !LL'(+"6"6  rZ   c                 D    i | ]\  }}d | t          |j                  S )r   rd  )r   r  r,  s      rX   r   z6OutputProducer._add_resources_dict.<locals>.<dictcomp>  s>       &w !LL''*"5"5  rZ   c                 D    i | ]\  }}d | t          |j                  S r   rd  )r   r   r   s      rX   r   z6OutputProducer._add_resources_dict.<locals>.<dictcomp>  s>       *l JJ 8 8  rZ   c                 D    i | ]\  }}d | t          |j                  S rh  rd  )r   r   rB  s      rX   r   z6OutputProducer._add_resources_dict.<locals>.<dictcomp>  >       )k JJ 7 7  rZ   c                 D    i | ]\  }}d | t          |j                  S rh  rd  )r   r   pattern_objs      rX   r   z6OutputProducer._add_resources_dict.<locals>.<dictcomp>  rj  rZ   )r+  r,  r-  r   r.  r   )r   r   r   r*  rV  )rW   r  r   r   r:  r   r+  r,  r-  r   r.  r   resources_objs                rX   rZ  z"OutputProducer._add_resources_dict  s    :8T5hWg 	 +12E2K2K2M2M+N+N   D  	 *01C1I1I1K1K*L*L   H " 	" .D.J.J.L.L   K ! 	 -34I4O4O4Q4Q-R-R   G ! 	 -34I4O4O4Q4Q-R-R   G %#
 
 
 	-(((rZ   c                     | j         j                                        rdS d}| j         j        D ]}||}|                     |d           |S )zDBuilds a Structure Hierarchy, including image alternate descriptionsNstructure_tree)r  rb  emptyrV  )rW   rM  rw  s      rX   rX  z"OutputProducer._add_structure_tree-  sf    9#))++ 	4#y/ 	9 	9G#+'.$g'78888##rZ   c                     | j         j        sdS d }g }t          | j         j                  D ]E}t          |t                    r|}n|                    |           |                     |d           F||fS )N)Nr_   document_outline)r  _outliner    r   r   r  rV  )rW   rN  rp  rw  s       rX   rY  z$OutputProducer._add_document_outline8  s     y! 	88<57)$)*<== 	; 	;G'#455 .#*  $$W---g'9::::..rZ   c                     | j         j        }|s | j         j        r|                                 }|sd S dt	          d           d| d}t          |          }|                     |           |S )Nz<?xpacket begin="i  z"" id="W5M0MpCehiHzreSzNTczkc9d"?>
z
<?xpacket end="w"?>
)r  xmp_metadatar[  _build_xmp_from_infor  r;  rV  )rW   xmp_srcxpacketrw  s       rX   rZ  z OutputProducer._add_xmp_metadataG  s    )( 	2490 	2//11G 	4vc&kkvvV]vvv ))'"""rZ   c           	         t          | j        dd           pd}t          | j        dd           pd}t          | j        dd           pd}|rt          |t                    r|g}t          | j        dd           pd}|rt          |t                    r|g}t          | j        dd           pd}t          | j        dd           pd}t          | j        dd           }d }t          |t                    r<|j        r|n|                                }|                    t          j                  }| j        j	        }	d	t          d
t          fd}
t	          ddddddt          j                  }t	          j
        t          j                  }||k    r-|                    d          }|                    d          }n0|p|}|                    d          }|                    d          }g d}|r"|                    d |
|           d           |rf|                    d |
|           d           |                    d |
|           d           |                    d |
|           d           |r"|                    d |
|           d           |r7d                    |          }|                    d |
|           d           |                    d           |	ry|                    dt          |	j                   d           |	j        r'|                    d  |
|	j                   d!           |	j        d"k    r|                    d#           |r|d$d% |
|          z   d&z   d'gz  }|r|d(d% |
|          z   d&z   d)gz  }|rQ|                    d*           |D ]$}|                    d+ |
|           d&           %|                    d,           |g d-z  }d.                    |          S )/Nr   r   r   r   r   r   r   r   rd  rR   c                 r    | dnt          t          |           d          }|                    dd          S )zDReturn XML-escaped text suitable for XMP (attributes or text nodes).Nr   T)quoter  z&apos;)_html_escaper^   replace)rd  rc  s     rX   escz0OutputProducer._build_xmp_from_info.<locals>.escg  s6    )BBc!ffD)I)I)IE==h///rZ   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="r.  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	   utcr[  now	isoformatr  r   r   partconformance)rW   r   r   r   r   creator_toolr   cdatecreation_date_utcpdfar~  EPOCHr  
xmp_create
xmp_modify	create_dtpartskeyword_listr   s                      rX   rv  z#OutputProducer._build_xmp_from_infoT  s   	7D117R$)Y55;Hd339r 	j-- 	XF49j$77=2 	"
8S11 	" zHty)T::@b49j$77=2	?D99 eX&& 	K). M5;K;K;M;M 1 < <X\ J Jy$	03 	03 	0 	0 	0 	0 r2r1aEEEl8<((%%)<<J)<<JJ)0SI",,i,@@J	::J	
 	
 	
  	KLLISS5F5FIIIJJJ 	JLLFCC
OOFFFGGGLLFCC
OOFFFGGGLLHcc*ooHHHIII 	DLLB##h--BBBCCC 	H88H--LLLF##l2C2CFFFGGGY 	DLLMs49~~MMMNNN ]T5E1F1F]]]   yA~~BCCC 	+7##e**D{R- E
  	17##g,,FT3 E
  	:LL6777 C CAAAAABBBBLL8999 
 
 
 	

 yyrZ   c                    | j         }	 t          |j        dd          }n*# t          $ r}t	          d|j                   |d }~ww xY wt          |j        t          |dd           t          |dd           t          |dd           t          |dd           t          |dd           |	          }|                     |           |S )
NT)with_tzr   zCould not format date: r   r   r   r   r   )r   r   r   r   r   r   r   )	r  r+   r   	Exceptionr   r   r   r	  rV  )rW   r  r   errorr  s        rX   r\  zOutputProducer._add_info  s    y	#D$6dSSSMM 	 	 	>$*<>> 	 *D)T224400T:t44D)T22T:t44'
 
 
 	(###s   ! 
AAArA   c                     | j         j        r7| j         j        }|                                }|                     |           |S d S rT   )r  rQ   get_encryption_objrV  )rW   encryption_handlerrw  s      rX   r]  zOutputProducer._add_encryption  sI    9& 	!%!<(;;==Gg&&&NtrZ   c                     | j         j        }|sdS |D ]#}|j        r|                     |j                   $t	          |          S )zshould be added in _add_catalogN)r  r#  r  rV  r)   )rW   r#  output_intents      rX   _add_output_intentsz"OutputProducer._add_output_intents  s\    1 	4+ 	E 	EM0 E!!-"CDDD'''rZ   c                     | j         }t          t          |dd           |j        |j        |j                  }|                                 |_        |                     |           |S )Nr  )r  r  r  r  )	r  r  r	  r  r  r  r  r#  rV  )rW   r  r  s      rX   rS  zOutputProducer._add_catalog  sm    y vt,,(n#6	
 
 
 &*%=%=%?%?"+&&&rZ   r  rI  rJ  rK  rL  rM  rN  c           
         | j         }||_        ||_        ||_        ||_        |r=t
          j        t
          j        z   }	t          t          |g          |	          |_
        |j        t          v r(t          |j                  gt          |j                 }
nAt          |j                  dddt          t!          t"          |j                  dz            g}
t%          |
          |_        |rt)          ddi          |_        |j        s|j        ri }|j        r^d |j        D             }t)          dt%          |          i          |d	<   d
 | j         j        D             }|rt%          |          |_        |j        r>g }|j                                        D ]\  }}|j        dk    rt7          d| d          t9          |d          r|j        s^|j        J |j        dz
  }d|cxk    rt=          |j                  k     r,n n)t          |j        |j                 j                  |_        |                    tA          |d          !                    |j"        |j                   d|!                                            |r.t)          dt%          tG          |                    i          |d<   t)          |          |_$        fdtK          | &                                          D             }|r5|j        d         '                                s|(                    dd           |r7t)          dt          |          !                                i          |_)        d S d S )Nr  rJ   rI   d   z/Markedtruec                     g | ]Q}t          |                                                                           d |                                j         RS )r   )r-   basenamerY   rH  ref)r   ro  s     rX   r   z4OutputProducer._finalize_catalog.<locals>.<listcomp>
  se     # # #% !!7!7!9!9::DDFFhhI`I`IbIbIfhh# # #rZ   z/Namesz/EmbeddedFilesc                     g | ]<}|                                 t          |                                j                  =S r_   )globally_enclosedr  rH  r   )r   efs     rX   r   z4OutputProducer._finalize_catalog.<locals>.<listcomp>  sM     % % %++--%BLLNN-..% % %rZ   r   zNamed destination 'z6' was referenced but never set with set_link(name=...)ra  r   Tr   r  r   z/Destsc                     g | ]A\  }}|                                 x| dt                                                     BS )Nr   )r  r   rY   )r   r  pagelabels      rX   r   z4OutputProducer._finalize_catalog.<locals>.<listcomp>6  s^     
 
 
4,,...; 008EOO--..00;;;rZ   z0 <<>>z/Nums)*r  r  r$  r"  r   r   SIGNATURES_EXISTAPPEND_ONLYr   r)   r  	zoom_modeZOOM_CONFIGSr  r   r^   r>   ry   r   r  r   r  rG  named_destinationsr%  r   r  r   r_  ra  r   r  r-   rY   rQ   r   r!  r[  r  r  insertr&  )rW   r  rI  rJ  rK  rL  rM  rN  r  flagszoom_confignames_dict_entriesfile_spec_namesglobal_file_specsdests_namesr   rO  r  r&  r  s                      @rX   r^  z OutputProducer._finalize_catalog  s6    y*';$// 	!2]5NNE$,!3 455% % %K! >\)))**dn-KK )**D//#566K #+;"7"7 	B$,i-@$A$AK! .	=$"9 .	=13" B# #)-)<# # # 8@x8898 8"#34% %"i6% % %!
 % B&./@&A&AKO& )+"&"9"?"?"A"A  JD$'1,,+n$nnn  
 #444 UDM U#/;;;%)%5%9

<<<<S__<<<<<,3DJt?O4P4S,T,TDM  &&$T4888BBUYUk  vA  vDB  E  E  Z  Z  HL  HV  HV  HX  HX  Z  Z     3;!8F;,?,?#@#@A4 4&x0 !)); < <K
 
 
 
$T%>%>%@%@AA
 
 

  	,tz!};;== 	,q(+++ 	&.(;//99;;<' 'K###	 	rZ   r  c              #      K   t          | j                  }d V  | j        |xx         t          | j                  |z
  z  cc<   d S rT   )r   r  rE  )rW   r  	prev_sizes      rX   rf  zOutputProducer._trace_sizeC  sR      $$	*5111S5E5E	5QQ11111rZ   c                     t                               d           | j                                        D ].\  }}t                               d|t	          |                     /d S )Nz4Final size summary of the biggest document sections:z- %s: %s)r  debugrE  r   _sizeof_fmt)rW   r  section_sizes      rX   rh  z(OutputProducer._log_final_sections_sizesI  sg    KLLL#'#E#K#K#M#M 	G 	GE<LLUK,E,EFFFF	G 	GrZ   )r  rF   rR   NrT   r   )Br[   r\   r]   rg   re   r  ry  r9  r^   rg  r,   r;   r   rV  r  rR  r9   r  r  slicer   rT  r   rU  r   r   r   ri   r   r
  r  objectr  r  r1  r5  r9  r#   r$   r"   r=  rC  rJ  rW  r*  rZ  rX  r   r   r<   r   rY  r;  rZ  rv  r   r\  r]  r)   r  r  rS  r^  r   rf  rh  r_   rZ   rX   r  r    sS       \\- - - -A9 A A A AF$*S0 $T $ $ $ $ @D  /7}	       hw&7     */q$   DM    0"Xm-D " " " "R#!%c:o!6R# !%S,%6 7R#  $CN3	R#
 
c7\))	*R# R# R# R#h
"T#z/2 " " " "T#v+%6 3    09tCK0 9Z 9 9 9 9v&S,%6 7 & & & &, $S,%6 7,  $CN3, !j1	,
 
, , , ,:"&sJ"7:	: : : : j1 !%S,%6 7  $CL1	
  $C;)>$>? "#w'="=> 
   (%tC;)>$>? % % % %%tCL1 % % % %$G4= GT G G G GR@!#w'="=>@ !j1@ !%S,%6 7	@
  $C;)>$>?@  $CL1@ 
@ @ @ @D	$Xi%8 	$ 	$ 	$ 	$/	x)*H5J,KK	L/ / / /8N#;    Y c Y  Y  Y  Y v7    (*@!A    (Xh%7 ( ( ( (j    __ %_  	_
 %]3_ #>2_ 'y1_ ##45_ 
_ _ _ _B R R$ R R R ^R
G G G G G GrZ   r  Fr  r  rE  rn   r(  keep_aspect_ratior   pdf_height_to_fliprR   c                     |r|                      ||||          \  }}}}|r|}||z
  |z
  }	n| }||z   }	d||z  dd||z  dd||z  dd|	|z  dd| d          dS )Nzq .2fz 0 0 r   z cm /Ir  z Do Q)scale_inside_box)
r  r  rE  rn   r(  r  r   r  stream_hstream_ys
             rX   stream_content_for_raster_imager  O  s      7**1aA66
1a %)A-2q5	QY7 	 	E!17 	 	I5	 	$u,5	 	3i	 	 	rZ   r,  c           
         d}i }i }d}d}d}t          t          | j                                        d                     }|D ]}|J ||         }	|	|dz   k    r|j        |k    rv|j        ||         d         k    r/|                    |g                               |j                   n(||                                          |}||j        g||<   d}d||<   nB|r|	}|j        g||<   n ||                             |j                   d}n|	}|j        g||<   d}|	}|j        }d}
d}d}|}t          |                                          D ]a\  }}t          |          }||k    r+|s)||vs|d	k     r||v r||= ||
         ||         z   ||
<   ||= n|}
||z   }||v r|d	k    }||= |dz  }_d}bg }t          |                                          D ]\  }}t          t          |                    dk    r8|                    d
| d
|t          |          z   dz
   d
|d                     ]|                    d
| dd

                    d |D                        d           dd
                    |           dS )Nr   r   Fc                     | d         S r|  r_   )items    rX   r   z!_tt_font_widths.<locals>.<lambda>q  s
    tAw rZ   r   r   Tr  r    [ c              3   N   K   | ] }t          t          |                    V  !d S rT   r^   r   r   r(  s     rX   r   z"_tt_font_widths.<locals>.<genexpr>  .      '@'@CFF'@'@'@'@'@'@rZ    ]
r   r   r   )r   r   r   r   r   r8  r  popr   r   r   )r,  rangeidrange_range_intervalprevcid	prevwidthintervalr   r   
cid_mappedprevknextkprevintrird  wscwsrn   s                     rX   r  r  h  s   G#%F&(NGIH &**,,2F2FGGGHHF & &   E]
'A+&& I--$w(:::%%gr2299%:KLLLL7O'')))%G'0%2C&DF7O*.w'' >(G','8&9F7OO7O**5+<===  G$01F7OH%		EEG	B''  2"gg::g:1B;;#''BwwqE"5MF1I5F5Mq		EC77AgG1QJEEGGA'' H H2s2ww<<1HH666QR[1_66r!u667777HHFFFsxx'@'@R'@'@'@@@FFFGGGGrwwqzzrZ   r  c           
      ~   d}i }i }d}d}d}t          |                                           D ]\  }}||dz   k    r||k    rg|||         d         k    r*|                    |g                               |           n#||                                          |}||g||<   d}d||<   n3|r	|}|g||<   n||                             |           d}n
|}|g||<   d}|}|}d}	d}
d}|}t          |                                          D ]a\  }}t          |          }||
k    r+|s)||vs|dk     r||v r||= ||	         ||         z   ||	<   ||= n|}	||z   }
||v r|dk    }||= |
dz  }
_d}bg }t          |                                          D ]\  }}t          t          |                    dk    r8|                    d| d|t          |          z   dz
   d|d                     ]|                    d| d	d                    d
 |D                        d           dd                    |           dS )Nr   r  r   Fr   Tr  r   r  c              3   N   K   | ] }t          t          |                    V  !d S rT   r  r  s     rX   r   z#_cid_font_widths.<locals>.<genexpr>  r  rZ   r  r   r   r   )r   r   r8  r  r  r   r   r   )r  r  r  r  r  r  r  r  rF  r  r  r  r  rd  r  r  rn   s                    rX   r  r    s   G#%F&(NGIHZ--//00  
U7Q;	!!F7OA...%%gr2299%@@@@7O'')))%G'0%&8F7O*.w'' 2!G',gF7OO7O**5111 G$gF7OH		EEG	B''  2"gg::g:1B;;#''BwwqE"5MF1I5F5Mq		EC77AgG1QJEEGGA'' H H2s2ww<<1HH666QR[1_66r!u667777HHFFFsxx'@'@R'@'@'@@@FFFGGGGrwwqzzrZ   r  c                 "    | \  }}d|dd|ddS )Nz[0 0 r  r   r   r_   )r  r  r  s      rX   r  r    s+    $Hi28222)22222rZ   Bnumsuffixc                 b    dD ]%}t          |           dk     r| d| | c S | dz  } &| dd| S )N)r   KiMiGiTiPiEiZii   z3.1fz.1fYi)abs)r  r  units      rX   r  r    sa    >  s88d??...f.....t!!!!!!rZ   pathresource_catalogc                 *   t          |                     |                              d                    }| |_        t	          d          |_        t	          d          |_        t          |                                           |_	        d|_
        |S )zSConverts a PaintedSoftMask into a PDF XObject Form suitable for use as a soft mask.r  r=  rP  Formz5<</S /Transparency /CS /DeviceGray /I true /K false>>)r*   renderr@  r3  r(   rr   rj   r)   get_bounding_boxb_boxr  )r  r  r  s      rX   r  r    sw     4D(E(E(L(LY(W(WXXXGGM	??GL6llGOT224455GMKGMNrZ   r  r?   c                 @   |                      |          }t          |                    d                    }| |_        d|_        t          d          |_        t          d          |_        |                                 }t          |          |_
        d|_        |S )zNConvert a blend group into a Form XObject with an isolated transparency group.r  r=  FrP  r  z+<</S /Transparency /CS /DeviceRGB /I true>>)r  r*   r@  r<  r7  r(   rr   rj   r  r)   r  r  )r  r  streamr  bboxs        rX   r  r  	  s     \\*++Fi(@(@AAAG GG	??GL6llGO!!##DTNNGMAGMNrZ   )Fr   N)r  )rg   loggingr;  abcr   r   collectionsr   r   
contextlibr   r   r	   htmlr
   r|  ior   	fontToolsr   r  annotationsr   r   drawingr   r   drawing_primitivesr   enumsr   r   r   r   errorsr   font_type_3r   r  r   r   r   image_datastructuresr   
line_breakr   outliner   r   r    r   r!   r"   r#   r$   signr%   r&   syntaxr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r1   r   r2   r  utilr3   r4   endesiver5   ImportErrortypingr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   
encryptionrA   rB   rC   rD   rE   r  rF   prefsrG   transitionsrH   	getLoggerr[   r  r  rP   ra   ri   r}   r   r   r   r  r*  r1  r;  r   rT  rY  r  r  r   r  r  r^   r   r=  r  r  ry   rR  r  r  r   r  r   r  r  r  r  r_   rZ   rX   <module>r     sU	     				 $ # # # # # # # 0 0 0 0 0 0 0 0 % % % % % % ' ' ' ' ' ' ' ' ' ' ' ' ' '       ( ( ( ( ( ( 6 6 6 6 6 6 6 6 1 1 1 1 1 1 1 1 ) ) ) ) ) ) V V V V V V V V V V V V ! ! ! ! ! ! " " " " " " 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 6 6 6 6 6 6 Q Q Q Q Q Q Q Q Q Q < < < < < < < < < < < < ) ) ) ) ) ) ) )                            , + + + + + + +   FFF
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  (22222222IIIIIIII++++++++(((((((((((('''''' 
	8	$	$ ") " " " " "s " " "5 5 5 5 5  5 5 5(C C C C Ci C C C.    I   Y
 Y
 Y
 Y
 Y
9 Y
 Y
 Y
x+ + + + +i + + +22 2 2 2 2 2 2 2$/ / / / / / / /:    9   &% % % % %$ % % %# # # # #% # # #*7 *7 *7 *7 *7! *7 *7 *7Z) ) ) ) )$ ) ) ):7 7 7 7 7 7 7 7tk' k' k' k' k'i k' k' k'\
 
 
 
 
9 
 
 
? ? ? ? ?9 ? ? ?- - - - -( - - -`E" E" E" E" E" E" E" E"P c3j)YUVaX aX aX aX aX aX aX aXHIG IG IG IG IG IG IG IGd$ $*. 
  	
    ! 	   2B' Bc B B B BJ<c3h <C < < < <~3eUl(; 3 3 3 3 3
" "U "C "# " " " "

-
'
;J

 
 
 
+:     s   C	 	CC