
    gh'                    f   d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dl
Z
ddlmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZmZmZmZmZmZmZm Z  d
Z!ejD                  jG                  ejD                  jI                  e%      d      Z&d a'da(da)d Z* G d de+      Z,y)    )division)datetimewrapsN   )
TTFontFile)fpdf_charwidths)substrsprintfprint_rUTF8ToUTF16BEUTF8StringToArray)	PY3KpickleurlopenImage
basestringunicode	exceptionbhashpathz1.7.2fontc                     |t               | <   y )N)globals)varvals     a/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/fpdf/fpdf.py
set_globalr   %   s    GIcN    c                      e Zd ZdZdUdZd ZdVdZd Zd Zd Z	dWdZ
dXd	Zd
 Zd Zd Zd Zd Zd ZdYdZd Zd Zd ZdZdZd Zd Zd Zd[dZd[dZd[dZd Zd Zed        Zd\dZ ed]d       Z!edZd        Z"edZd!       Z#d^d"Z$d_d#Z%d$ Z&d% Z'd`d&Z(d' Z)edZd(       Z*edad*       Z+d+ Z,edbd,       Z-edcd-       Z.eddd.       Z/eded/       Z0edZd0       Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6ddd6Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdH ZIdI ZJdJ ZKdK ZLdL ZMdM ZNdN ZOdO ZPdP ZQdQ ZRdR ZSedfdS       ZTedgdT       ZUy))hFPDFzPDF Generation classc                    | j                          i | _        d| _        d| _        d| _        i | _        i | _        d| _        i | _        i | _	        i | _
        i | _        i | _        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k(  rd| _        n;|dk(  rd| _        n.|dk(  rd| _        n!|dk(  rd| _        n| j;                  d|z          t=        |t>              ra|jA                         }|dk(  rd }n4|d!k(  rd"}n,|d#k(  rd$}n$|d%k(  rd&}n|d'k(  rd(}n| j;                  d)|z          |d   | _!        |d   | _"        n.|d   | j8                  z  | _!        |d   | j8                  z  | _"        | jB                  | j8                  z  | _#        | jD                  | j8                  z  | _$        |jA                         }|d*k(  s|d+k(  r*d,| _%        | jB                  | _&        | jD                  | _'        nH|d-k(  s|d.k(  r*d/| _%        | jD                  | _&        | jB                  | _'        n| j;                  d0|z          | jJ                  | _(        | jL                  | j8                  z  | _)        | jN                  | j8                  z  | _*        d1| j8                  z  }| jW                  ||       |d2z  | _,        d3| j8                  z  | _-        | j]                  dd|z         | j_                  d4       | ja                  d       d5| _1        y )6Nr          0 G0 gCourierzCourier-BoldzCourier-ObliquezCourier-BoldOblique	HelveticazHelvetica-BoldzHelvetica-ObliquezHelvetica-BoldObliquezTimes-Romanz
Times-BoldzTimes-ItaliczTimes-BoldItalicSymbolZapfDingbats)couriercourierBcourierI	courierBI	helvetica
helveticaB
helveticaIhelveticaBItimestimesBtimesItimesBIsymbolzapfdingbatsptr   mmgjZ@cmgbX<@ing      R@zIncorrect unit: a3)QO@g33333@a4)
ףp=@r?   a5)gףp=
Oz@rA   letter)d  i  legal)rD   i  zUnknown page format: pportraitPl	landscapeLzIncorrect orientation: gY<@      $@g/$?	fullwidth1.3)2	_dochecksoffsetspagenbufferpagesorientation_changesstatefonts
font_filesdiffsimages
page_linkslinks	in_footerlastwlasthfont_family
font_stylefont_size_pt	underline
draw_color
fill_color
text_color
color_flagwsangle
core_fontskerror
isinstancer   lowerfw_ptfh_ptfwfhdef_orientationw_pth_ptcur_orientationwhset_marginsc_margin
line_widthset_auto_page_breakset_display_modeset_compressionpdf_version)selforientationunitformatmargins        r   __init__zFPDF.__init__,   s1   	
!# 






#,Rc  qF#1AOb  rI!<Zl^=
 :DF4ZDF4ZDF4ZDFJJ)$./fZ(<<>Ft|'&&! !

269:ayDJayDJay'DJay'DJ

466!

466!%%'{J6!$D jjDIjjDI#k!9!$D jjDIjjDIJJ0<=!11yyyyTVV|'TkTVV  1V8,k*Qr   c                 .     t                fd       }|S )z$Decorator to protect drawing methodsc                 z    | j                   s#|j                  d      s| j                  d       y  | g|i |S )N
split_onlyz/No page open, you need to call add_page() first)rQ   getrl   )r   argskwargsfns      r   wrapperz FPDF.check_page.<locals>.wrapper   s7    99VZZ%=

LM$0000r   r   )r   r   s   ` r   
check_pagezFPDF.check_page   s     	r	1 
	1
 r   c                 <    || _         || _        |dk(  r|}|| _        y)zSet left, top and right marginsN)l_margint_marginr_margin)r   lefttoprights       r   ry   zFPDF.set_margins   s#    "9Er   c                 `    || _         | j                  dkD  r| j                  |k  r|| _        yyy)zSet left marginr   N)r   rQ   xr   r   s     r   set_left_marginzFPDF.set_left_margin   s,    99Q;466&=DF );r   c                     || _         y)zSet top marginN)r   r   s     r   set_top_marginzFPDF.set_top_margin   	    r   c                     || _         y)zSet right marginN)r   r   s     r   set_right_marginzFPDF.set_right_margin   r   r   c                 H    || _         || _        | j                  |z
  | _        y)z.Set auto page break mode and triggering marginN)auto_page_breakb_marginrx   page_break_trigger)r   autor   s      r   r|   zFPDF.set_auto_page_break   s!    ! $vr   c                     |dk(  s|dk(  s|dk(  s|dk(  st        |t              s|| _        n| j                  d|z          |dk(  s|dk(  s
|dk(  s|dk(  r|| _        y
| j                  d	|z          y
)zSet display mode in viewer
        
        The "zoom" argument may be 'fullpage', 'fullwidth', 'real',
        'default', or a number, interpreted as a percentage.fullpagerM   realdefaultzIncorrect zoom display mode: single
continuoustwozIncorrect layout display mode: N)rm   r   	zoom_moderl   layout_mode)r   zoomlayouts      r   r}   zFPDF.set_display_mode   s{     t[0D&LD)O[efjku[vDNJJ6t;<8v|3vu}PYHY#DJJ8?@r   c                     || _         y)zSet page compressionN)compress)r   r   s     r   r~   zFPDF.set_compression   	    r   c                     || _         y)zTitle of documentN)title)r   r   s     r   	set_titlezFPDF.set_title   s	    
r   c                     || _         y)zSubject of documentN)subject)r   r   s     r   set_subjectzFPDF.set_subject   	    r   c                     || _         y)zAuthor of documentN)author)r   r   s     r   
set_authorzFPDF.set_author   s	    r   c                     || _         y)zKeywords of documentN)keywords)r   r   s     r   set_keywordszFPDF.set_keywords   r   r   c                     || _         y)zCreator of documentN)creator)r   r   s     r   set_creatorzFPDF.set_creator   r   r   c                     || _         |S )z)Define an alias for total number of pages)str_alias_nb_pages)r   aliass     r   alias_nb_pageszFPDF.alias_nb_pages   s     %r   c                     t        d|z         )zFatal errorzFPDF error: )RuntimeError)r   msgs     r   rl   z
FPDF.error   s    >#-..r   c                     d| _         y)zBegin documentr   NrV   r   s    r   openz	FPDF.open   	    
r   c                     | j                   dk(  ry| j                  dk(  r| j                          d| _        | j	                          d| _        | j                          | j                          y)zTerminate document   Nr   r   )rV   rQ   add_pager]   footer_endpage_enddocr   s    r   closez
FPDF.close   sM    ::q=99a<MMOr   c                    | j                   dk(  r| j                          | j                  }| j                  r| j                  dz   }n| j                  }| j
                  }| j                  }| j                  }| j                  }| j                  }| j                  }	| j                  dkD  r.d| _        | j                          d| _        | j                          | j                  |       | j!                  d       || _        | j!                  t#        d|| j$                  z               |r| j'                  |||       || _        |dk7  r| j!                  |       || _        |dk7  r| j!                  |       || _	        |	| _
        | j)                          | j                  |k7  r/|| _        | j!                  t#        d|| j$                  z               |r| j'                  |||       | j                  |k7  r|| _        | j!                  |       | j                  |k7  r|| _        | j!                  |       || _	        |	| _
        y)	zStart a new pager   Ur   z2 J%.2f wr&   r'   N)rV   r   r`   rc   ra   rb   r{   rd   re   rf   rg   rQ   r]   r   r   
_beginpage_outr   rk   set_fontheader)
r   r   familystylesizelwdcfctccfs
             r   r   zFPDF.add_page   s   ::q=IIK>>OOc)EOOE??????????99Q;DNKKMDNMMO$		%		'(2dff9-.MM&t,u9IIbMu9IIbM??BDOIIghr$&&y12MM&t,??BDOIIbM??BDOIIbMr   c                      y)z4Header to be implemented in your own inherited classN r   s    r   r   zFPDF.header4      r   c                      y)z4Footer to be implemented in your own inherited classNr   r   s    r   r   zFPDF.footer8  r   r   c                     | j                   S )zGet current page number)rQ   r   s    r   page_nozFPDF.page_no<  s    yyr   c                     |dk(  r
|dk(  r|dk(  s|dk(  rt        d|dz        | _        nt        d|dz  |dz  |dz        | _        | j                  dkD  r| j                  | j                         yy)z%Set color for all stroking operationsr   r   z%.3f G     o@z%.3f %.3f %.3f RGN)r   rd   rQ   r   r   rgr   s       r   set_draw_colorzFPDF.set_draw_color@  sl    qDQTadq"u#HQuW5DO#$7%%%PDO99Q;IIdoo& r   c                     |dk(  r
|dk(  r|dk(  s|dk(  rt        d|dz        | _        nt        d|dz  |dz  |dz        | _        | j                  | j                  k7  | _        | j                  dkD  r| j                  | j                         yy)z$Set color for all filling operationsr   r   %.3f gr   %.3f %.3f %.3f rgN)r   re   rf   rg   rQ   r   r   s       r   set_fill_colorzFPDF.set_fill_colorI  s    qDQTadq"u#HQuW5DO#$7%%%PDO$//999Q;IIdoo& r   c                     |dk(  r
|dk(  r|dk(  s|dk(  rt        d|dz        | _        nt        d|dz  |dz  |dz        | _        | j                  | j                  k7  | _        y)zSet color for textr   r   r   r   r   N)r   rf   re   rg   r   s       r   set_text_colorzFPDF.set_text_colorS  s`    qDQTadq"u#HQuW5DO#$7%%%PDO$//9r   c                    | j                  |      }| j                  d   }d}t        |      }| j                  rW|D ]Q  }t	        |      }t        |      |kD  r	|||   z  }%| j                  d   d   r|| j                  d   d   z  }M|dz  }S n)t        d|      D ]  }||j                  ||   d      z  } || j                  z  dz  S )z)Get width of a string in the current fontcwr   descMissingWidthi       @@)normalize_textcurrent_fontlenunifontsubsetordranger   	font_size)r   sr   rw   rI   charis          r   get_string_widthzFPDF.get_string_width[  s    "T"

a& 	4yr7T>DMA''/?**62>BBA HA	 1a[ $RVVAaD^#$&&r   c                     || _         | j                  dkD  r)| j                  t        d|| j                  z               yy)zSet line widthr   r   N)r{   rQ   r   r   rk   )r   widths     r   set_line_widthzFPDF.set_line_widthq  s4    99Q;IIghuTVV|45 r   c           
          | j                  t        d|| j                  z  | j                  |z
  | j                  z  || j                  z  | j                  |z
  | j                  z               y)zDraw a linez%.2f %.2f m %.2f %.2f l SNr   r   rk   rx   )r   x1y1x2y2s        r   linez	FPDF.linew  s]     			'5biDFF@RSUVZV\V\S\^b^d^deg^gimioio]opqr   c                     |r*|r(t        d|| j                  z  || j                  z        }nd}| j                  |       y )Nz[%.3f %.3f] 0 dz[] 0 d)r   rk   r   )r   dash_lengthspace_lengthr  s       r   	_set_dashzFPDF._set_dash|  s8    <);tvv+=|DFF?RSAA		!r   c                 p    | j                  ||       | j                  ||||       | j                          y)zDraw a dashed line. Same interface as line() except:
           - dash_length: Length of the dash
           - space_length: Length of the space between dashesN)r  r  )r   r  r  r  r  r  r  s          r   dashed_linezFPDF.dashed_line  s.    
 	{L1		"b"b!r   c           
          |dk(  rd}n|dk(  s|dk(  rd}nd}| j                  t        d|| j                  z  | j                  |z
  | j                  z  || j                  z  | | j                  z  |             y)	zDraw a rectangleFfFDDFBSz%.2f %.2f %.2f %.2f re %sNr  )r   r   yrw   rx   r   ops          r   rectz	FPDF.rect  sz     #:BD[E4KBB		'5ahq$&&?PQRSWSYSYQY[\Z\]a]c]cZcdfghr   c                 X   |dk(  rd}n|dk(  s|dk(  rd}nd}||dz  z   }||dz  z   }|dz  }	|dz  }
dt        j                  d	      d
z
  z  |	z  }dt        j                  d	      d
z
  z  |
z  }| j                  t        d||	z   | j                  z  | j
                  |z
  | j                  z  ||	z   | j                  z  | j
                  ||z
  z
  | j                  z  ||z   | j                  z  | j
                  ||
z
  z
  | j                  z  || j                  z  | j
                  ||
z
  z
  | j                  z  	             | j                  t        d||z
  | j                  z  | j
                  ||
z
  z
  | j                  z  ||	z
  | j                  z  | j
                  ||z
  z
  | j                  z  ||	z
  | j                  z  | j
                  |z
  | j                  z               | j                  t        d||	z
  | j                  z  | j
                  ||z   z
  | j                  z  ||z
  | j                  z  | j
                  ||
z   z
  | j                  z  || j                  z  | j
                  ||
z   z
  | j                  z               | j                  t        d||z   | j                  z  | j
                  ||
z   z
  | j                  z  ||	z   | j                  z  | j
                  ||z   z
  | j                  z  ||	z   | j                  z  | j
                  |z
  | j                  z  |             y)zDraw a ellipser  r  r  r  r  r         @gUUUUUU?r#   r   z+%.2f %.2f m %.2f %.2f %.2f %.2f %.2f %.2f cz%.2f %.2f %.2f %.2f %.2f %.2f cz"%.2f %.2f %.2f %.2f %.2f %.2f c %sN)mathsqrtr   r   rk   rx   )r   r   r  rw   rx   r   r  cxcyrxrylxlys                r   ellipsezFPDF.ellipse  s    #:BD[E4KBB3Y3YsUsUdiil1n%b(diil1n%b(		'GUDFFNTVVBY.UDFFNTVVRU^TVV3UDFFNTVVRU^TVV3tvvI2.	0 	1
 			';UDFFNTVVRU^TVV3UDFFNTVVRU^TVV3UDFFNTVVBY.0 	1 			';UDFFNTVVRU^TVV3UDFFNTVVRU^TVV3tvvI2.0 	1 			'>UDFFNTVVRU^TVV3UDFFNTVVRU^TVV3UDFFNTVVBY.	 	r   c                    |j                         }|dk(  r&|j                  dd      |j                         z   dz   }|dk(  rd}|j                         }|dk(  rd}||z   }|| j                  v ry|r~t        j
                  j                  |      r|}nt        rft        j
                  j                  t        j
                  j                  t        |            r%t        j
                  j                  t        |      }nzt        rft        j
                  j                  t        j
                  j                  t        |            r%t        j
                  j                  t        |      }nt        d	|z        d}t        d
k(  r&t        j
                  j                  |      d
   dz   }n<t        dk(  r1t        j
                  j                  t        t        |      dz         }nd}|rSt        j
                  j                  |      r4t        |d      }		 t!        j"                  |	      }
|	j%                          nt'               }|j)                  |       t+        t-        |j.                  d
            t+        t-        |j0                  d
            t+        t-        |j2                  d
            |j4                  dt+        t-        |j6                  d
   d
            dt+        t-        |j6                  d   d
            dt+        t-        |j6                  d   d
            dt+        t-        |j6                  d   d
            d	t+        |j8                        t+        t-        |j:                  d
            t+        t-        |j<                  d
            d}t?        j@                  dd|jB                        d|t-        |jD                        t-        |jF                        ||t	        jH                  |      jJ                  |jL                  d	}
|r3	 t        |d      }	t!        jN                  |
|	       |	j%                          ~tY        | d      rt[        t]        d
d            }nt[        t]        d
d            }t_        | j                        dz   |
d   |
d   |
d   |
d   |
d   |
d   |
d   |||d | j                  |<   |
d!   d|d"| j`                  |<   ddi| j`                  |<   yt        |      }	 t!        j"                  |      }
|j%                          d#t_        | j                        dz   i| j                  |<   | j                  |   jc                  |
       td        rtd
}t_        | jf                        }t]        d|dz         D ]  }| jf                  |   td        k(  s|} n |d
k(  r|dz   }td        | jf                  |<   || j                  |   d$<   |
ji                  d%      }|r:tj        d&k(  rd'tl        i| j`                  |<   ytn        tp        d(| j`                  |<   yy# |	j%                          w xY w# tP        $ r* tS               jT                  tT        jV                  k(  s Y +w xY w# |j%                          w xY w))zAdd a TrueType or Type1 fontr$    z.pklarialr0   IBBINzTTF Font file not found: %sr   r#   rb[r   r   ]AscentDescent	CapHeightFlagsFontBBoxItalicAngleStemVr   z[ ()]TTF)	nametyper   uputttffilefontkeyoriginalsizer   wbr   9       r>  r=  r   r?  r@  r   rA  )r  r>  r=  r   r?  r@  r   rA  rB  subsetunifilenamerC  )length1r>  rA  r  difffilenameTrueTyperI  )rI  length2)9rn   replaceupperrW   ospathexistsFPDF_FONT_DIRjoinSYSTEM_TTFONTSr   FPDF_CACHE_MODEsplitextFPDF_CACHE_DIRr   r   r   loadr   r   
getMetricsintroundascentdescent	capHeightflagsbboxitalicAnglestemVdefaultWidthresubfullNameunderlinePositionunderlineThicknessstatst_size
charWidthsdumpIOErrorr   errnoEACCEShasattrlistr  r   rX   updaterJ  rY   r   r>  rC  size1size2)r   r   r   fnameunirB  ttffilenamer=  rH  rr   	font_dictttfr   sbarrfontfilednbr  rK  s                      r   add_fontzFPDF.add_font  s6   RKNN3r*U[[]:VCEg FTME,djj ww~~e$#rww||M5AB ggll=%@ rww||NEBC ggll>5A"#@5#HIID!# gg..{;A>G A% ggll>[)F24 #rww~~k:+t, &BIHHJ l{+!%

A"67"5a#89!$U3==!%<!= YYE#((1+q12E#((1+q12E#((1+q12E#((1+q12	!4
 $'s#7 syy!!45$'c.>.>(B$C  FF7B=!  5 56 6 67*&$&GGK$8$@$@..
	 "!+t4Ir2
 t01U1R[)U1R[)_Q&	&0A!&)9V3DoYt_o$Y/G#DJJw 4=^3L05+(ODOOG$&,e_DOOE"E{H!"KK1	 #&DJJ(9":DJJwJJw&&y1_q"Q$ Azz!}, FQA$(DJJqM./

7#F+ }}Z0HJ&/8,.GDOOH-:?:?/ADOOH-	 W HHJF # "({00ELL@!  A"0  s*   X- 2Y ;Y8 -X?/Y54Y58Z
c                    |j                         }|dk(  r| j                  }|dk(  rd}n|dk(  s|dk(  rd}|j                         }d|v rd| _        |j	                  dd      }nd| _        |d	k(  rd
}|dk(  r| j
                  }| j                  |k(  r| j                  |k(  r| j
                  |k(  ry||z   }|| j                  vr|| j                  v r|t        vrt        j                  j                  t        |      }|dk(  s|dk(  r||j                         z  }t        t        t!        |dz         j#                         |dz   d             |t        vr| j%                  d|z          t'        | j                        dz   }|d| j                  |   ddt        |   d| j                  |<   n| j%                  d|z   dz   |z          || _        || _        || _        || j(                  z  | _        | j                  |   | _        | j                  |   d   dk(  | _        | j0                  dkD  r4| j3                  t5        d| j,                  d   | j
                               yy)z#Select a font; size given in pointsr$   r.  r0   r8   r9   r   r   r   r/  r0  Nr4   z.fontexecz&Could not include font metric file forcorei2   )r  r>  r=  r?  r@  r   zUndefined font: r-  r>  r<  BT /F%d %.2f Tf ETr  )rn   r`   rO  rc   rN  rb   ra   rW   rj   r	   rP  rQ  rT  rS  r  compiler   readrl   r   rk   r  r   r   rQ   r   r   )r   r   r   r   rB  r=  r  s          r   r   zFPDF.set_font5  sC   ||~2:##F7?FX!7Ekkm%<DN--B'EDN$;E7""DV#(>4CTCTVZCZu$**$$//)/1mF;Dw&+*=ekkm+d7l!3!8!8!:DL&QRo5

#KG#STdjj/!#)*&PW@X^bhjp  AH  qI  %J

7#

-f4S8>?DFF{**W-"jj1&9UB99Q;IIg243D3DS3I$J[J[\] r   c                     | j                   |k(  ry|| _         || j                  z  | _        | j                  dkD  r4| j	                  t        d| j                  d   | j                                yy)zSet font size in pointsNr   r  r  )rb   rk   r  rQ   r   r   r   )r   r   s     r   set_font_sizezFPDF.set_font_sizef  sa    d"DFF{99Q;IIg243D3DS3I$J[J[\] r   c                 T    t        | j                        dz   }d| j                  |<   |S )zCreate a new internal linkr   )r   r   )r   r\   )r   rR   s     r   add_linkzFPDF.add_linko  s&    
djj/!


1r   c                 j    |dk(  r| j                   }|dk(  r| j                  }||g| j                  |<   y)z Set destination of internal linkr   N)r  rQ   r\   )r   linkr  rQ   s       r   set_linkzFPDF.set_linku  s4    b5ffA8Dq

4r   c                 6   | j                   | j                  vrg | j                  | j                   <   | j                  | j                   xx   || j                  z  | j                  || j                  z  z
  || j                  z  || j                  z  |fgz  cc<   y)zPut a link on the pageN)rQ   r[   rk   ru   )r   r   r  rw   rx   r  s         r   r  z	FPDF.link}  st    yyDOO+)+DOODII&		"$&&1TVV81CAdffHQtvvXVZ'[&]]"r   c                    | j                  |      }| j                  rJ| j                  t        |d            }t	        |      D ]   }| j
                  d   j                  |       " n| j                  |      }t        d|| j                  z  | j                  |z
  | j                  z  |      }| j                  r|dk7  r|d| j                  |||      z   z  }| j                  rd| j                  z   dz   |z   dz   }| j                  |       y)	zOutput a stringFrG  BT %.2f %.2f Td (%s) Tj ETr$   r-  q  QN)r   r   _escaper   r   r   appendr   rk   rx   rc   _dounderlinerg   rf   r   )r   r   r  txttxt2rw  r  s          r   textz	FPDF.text  s     !!#&<<c5 9:D(- 8!!(+22378 <<$D
.qx4668I4
P>>c2gs4$$Qq---A??4??"3&q(-A		!r   Nc                    || j                   }|| j                  }| j                  dk7  r| j                  d       || _        |dk7  r|t        j
                  dz  z  }t	        j                  |      }t	        j                  |      }|| j                  z  }| j                  |z
  | j                  z  }t        d||| |||| | 	      }| j                  |       y y )Nr   Q   z7q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm)r   r  ri   r   r#  picossinrk   rx   r   )r   ri   r   r  cr  r%  r&  s           r   rotatezFPDF.rotate  s    9A9A::q=IIcN
!8TWWS[ EAA466B&&(DFF"BQRSTUWXVXYZ[]^`bdadfhehiAIIaL r   c                     | j                   S )z"Accept automatic page break or not)r   r   s    r   accept_page_breakzFPDF.accept_page_break  s    ###r   c	           
         | j                  |      }| j                  }	| j                  |z   | j                  kD  r| j                  s| j                         r| j                  }
| j                  }|dkD  rd| _        | j                  d       | j                  | j                         |
| _        |dkD  r%|| _        | j                  t        d||	z               |dk(  r&| j                  | j                  z
  | j                  z
  }d}|dk(  s|dk(  rP|dk(  r|dk(  rd}nd}nd}t        d	| j                  |	z  | j                  | j                  z
  |	z  ||	z  | |	z  |      }t        |t               r | j                  }
| j                  }d
|v r;|t        d|
|	z  | j                  |z
  |	z  |
|	z  | j                  ||z   z
  |	z        z  }d|v r;|t        d|
|	z  | j                  |z
  |	z  |
|z   |	z  | j                  |z
  |	z        z  }d|v rA|t        d|
|z   |	z  | j                  |z
  |	z  |
|z   |	z  | j                  ||z   z
  |	z        z  }d|v rA|t        d|
|	z  | j                  ||z   z
  |	z  |
|z   |	z  | j                  ||z   z
  |	z        z  }|dk7  rK|dk(  r"|| j"                  z
  | j%                  |      z
  }n)|dk(  r|| j%                  |      z
  dz  }n| j"                  }| j&                  r|d| j(                  z   dz   z  }| j                  rU| j*                  rHt-        |      D ]   }| j.                  d   j1                  |       " | j3                  t5        dd            }|t        d| j                  |z   |	z  | j                  | j                  d|z  z   d| j6                  z  z   z
  |	z        z  }|j9                  d      }t;        |      }t=        |      D ]z  }||   }d| j3                  t5        |d            z   dz   }|t        d|      z  }|dz   |k  sA| j                  | j                  z   dz  | j>                  z  }|t        d||      z  }| |dz  }|dz  }n| j*                  rJ| j3                  t5        |d            }t-        |      D ]   }| j.                  d   j1                  |       " n| j3                  |      }|t        d| j                  |z   |	z  | j                  | j                  d|z  z   d| j6                  z  z   z
  |	z  |      z  }| j@                  rF|d| jC                  | j                  |z   | j                  d|z  z   d| j6                  z  z   |      z   z  }| j&                  r|dz  }|r[| jE                  | j                  |z   | j                  d|z  z   d| j6                  z  z
  | j%                  |      | j6                  |       |r| j                  |       || _#        |dkD  r-| xj                  |z  c_        |dk(  r| jH                  | _        y y | xj                  |z  c_        y )!zOutput a cellr   0 Tw%.3f Twr$   r   r  r  r  z%.2f %.2f %.2f %.2f re %s rK   z%.2f %.2f m %.2f %.2f l S TRCr"  r  r-  rG  FzBT 0 Tw %.2F %.2F Td [g      ?g333333?()z%s i  z%d(%s) z] TJz ETr  r  N)%r   rk   r  r   r]   r  r   rh   r   r   rv   r   rw   r   rx   rm   r   rz   r  rg   rf   r   r   r   r  r  r   r  splitr   r  rb   rc   r  r  r_   r   )r   rw   rx   r  borderlnalignfillr  rk   r   rh   r  r  r  dxrw  spacetnumtr  txadjr  s                           r   cellz	FPDF.cell  s    !!#&
&&66!8D+++DNNtG]G]G_ffAwwB!t		&!MM$../DF!t		')BqD12a4ffT]]"466)A
7faiQw19BB2466!8TVVDFF]A<MaPQcSTRTUVRVWYZAfZ(ffAffAf}77!TVVAXqL1dffVWXYVYl\]M]^^f}77!TVVAXqL!A#qRVRXRXYZRZ\]Q]^^f}771a1aPQcSTWVZV\V\^_`a^aVbdeUefff}77!TVVQqS\1<LaPQcSTWVZV\V\^_`a^aVbdeUeff7czT]]?4#8#8#==d++C00#5==4'++ D..,S1 <C%%h/66s;<]3%>?W5tvv{a6GSWSYSY\_`a\aSacfimiwiwcwSwIx|}H}~~IIcN1vt <A1Bt||M"e,DEEKB++A1d
 $$&& 01D84;L;LLWYU;;< VU
&&<<c5(ABD05 @))(3::3?@  <<,DW9466"9a-QUQWQWXZ[\X\Q\]_`d`n`n]nQnIoqrHrswxx~~3t((466"Q$;r$..?P3PQTUUU4		$&&)DFF2a4K4>>0A$A$BWBWX[B\]a]k]klpqIIaL
a4FFAIF1u}}  FFAIFr   c           
      p   | j                  |      }g }| j                  d   }	|dk(  r&| j                  | j                  z
  | j                  z
  }|d| j
                  z  z
  dz  | j                  z  }
|j                  dd      }t        |      }|dkD  r||dz
     dk(  r|dz  }d}|r,|dk(  rd	}d
}d}n d}d|v r|dz  }d|v r|dz  }d|v r|dz   }n|}d}d}d}d}d}d}||k  rE||   }|dk(  r| j                  dkD  rd| _	        |s| j                  d       |s&| j                  ||t        ||||z
        |d||       n|j                  t        ||||z
               |dz  }d}|}d}d}|dz  }|r|dk(  r}|dk(  r	|}|}|dz  }| j                  r%|| j                  |      | j                  z  dz  z  }n||	j!                  |d      z  }||
kD  rI|dk(  r{||k(  r|dz  }| j                  dkD  rd| _	        |s| j                  d       |s&| j                  ||t        ||||z
        |d||       n|j                  t        ||||z
               n|dk(  ra|dkD  r!|
z
  dz  | j                  z  |dz
  z  | _	        nd| _	        |s2| j                  t#        d| j                  | j$                  z               |s&| j                  ||t        ||||z
        |d||       n|j                  t        ||||z
               |dz   }d}|}d}d}|dz  }|r|dk(  r}n|dz  }||k  rE| j                  dkD  rd| _	        |s| j                  d       |r	d|v r|dz  }|s8| j                  ||t        ||||z
        |d||       | j&                  | _        |S |j                  t        ||||z
               |S )z2Output text with automatic or explicit line breaksr   r   r#   r   r$   r   
LTRBLRTLRrK   r  r  r   r  r-  Jr  r  )r   r   rw   r   r   rz   r  rN  r   rh   r   r  r
   r  r   r  r   r   rk   r   )r   rw   rx   r  r  r  r  r   retr   wmaxr  r~  r   b2sepr  jrI   nsnlr  lss                          r   
multi_cellzFPDF.multi_cell  s    !!#&T"a4ffT]]"466)A$--'6
++d2
q6a4AbdGTMEB
qy&=GB&=GB6MfAA


ddA$w7719DG%		&)!IIa&1QqS/!AeDAJJva!A#/1Ab!eA#vA!!T**1->vEERVVAa[ v7!t1wwqy !) IIf-%		!AfQq1oa%E

6!Aac?3cza4%)"Wf$4T^^$CRT$JDG$%DG) IIgi&GH%		!AfQqQ&7!E$G

6!Ac!e#45!eAAb!eA1A dD 7719DG		&!cVmsFAIIa&1QqS/!AeD9==DF 
 JJva!A#'
r   c           
      V   | j                  |      }| j                  d   }| j                  | j                  z
  | j                  z
  }|d| j
                  z  z
  dz  | j                  z  }|j                  dd      }t        |      }d}	d}
d}d}d}|
|k  r\||
   }|d	k(  r| j                  ||t        |||
|z
        dddd|       |
dz  }
d}	|
}d}|dk(  rY| j                  | _        | j                  | j                  z
  | j                  z
  }|d| j
                  z  z
  dz  | j                  z  }|dz  }|d
k(  r|
}	| j                  r%|| j                  |      | j                  z  dz  z  }n||j                  |d      z  }||kD  r^|	dk(  r| j                  | j                  kD  rz| j                  | _        | xj                  |z  c_        | j                  | j                  z
  | j                  z
  }|d| j
                  z  z
  dz  | j                  z  }|
dz  }
|dz  }|
|k(  r|
dz  }
| j                  ||t        |||
|z
        dddd|       n+| j                  ||t        |||	|z
        dddd|       |	dz   }
d}	|
}d}|dk(  rY| j                  | _        | j                  | j                  z
  | j                  z
  }|d| j
                  z  z
  dz  | j                  z  }|dz  }n|
dz  }
|
|k  r\|
|k7  r3| j                  |dz  | j                  z  |t        ||      dddd|       yy)zOutput text in flowing moder   r#   r   r  r$   r   r   r   r  r-  N)r   r   rw   r   r   rz   r  rN  r   r  r
   r   r   r  r   r  )r   rx   r  r  r   rw   r  r  r~  r  r  r  rI   r  r  s                  r   writez
FPDF.writey  s+    !!#&T"
&&
tvv
%$--'6
++d2
q6


ddA$w		!AfQq1oa"Qt<1q5==DFffT]]*4661AAdmmO+V3DNNBDA#v!!T**1->vEERVVAa[ v7vvdmm+#}}	&&.tvv5$--/7F1A !t1IIa&1QqS/!Ab4@IIa&1SU"3Aa1TB!eAq5==DFffT]]*4661AAdmmO+V3DNNBDA1c df a4IIaht~~-aqAa1TJ r   c                    || j                   vrQ|dk(  r6|j                  d      }|s| j                  d|z          t        ||dz         }|j	                         }|dk(  s|dk(  r| j                  |      }	n|dk(  r| j                  |      }	nd}
| j
                  | j                  | j                  g}|D ]  }	  ||      }	d	}
 n |
s7d
|z   }t        | |      s| j                  d|z           t        | |      |      }	d
|z   }t        | |      s| j                  d|z           t        | |      |      }	t        | j                         dz   |	d<   |	| j                   |<   n| j                   |   }	|dk(  r*|dk(  r%|	d   | j                  z  }|	d   | j                  z  }n'|dk(  r||	d   z  |	d   z  }n|dk(  r||	d   z  |	d   z  }|| j                  |z   | j                  kD  rJ| j                  s>| j                         r.| j                   }| j#                  | j$                         || _        | j                  }| xj                  |z  c_        || j                   }| j'                  t)        d|| j                  z  || j                  z  || j                  z  | j*                  ||z   z
  | j                  z  |	d                |r| j-                  |||||       yy#  Y ,xY w)zPut an image on the pager$   .z7image file has no extension and no type was specified: r   jpgjpegpngFT_parsezUnsupported image type: r  r   rw   rx   Nz&q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q)rZ   rfindrl   r
   rn   	_parsejpg	_parsepng	_parsegifrq  getattrr   rk   r  r   r]   r  r   r   rv   r   r   rx   r  )r   r=  r   r  rw   rx   r>  r  posinfosucceed_parsingparsing_functionspfmtds                 r   imagez
FPDF.image  s    t{{"RxJJsOJJXY]]^DQ'DU{dFl^^D)u^^D)
 #(%)^^DNN4>>$R!+ B!$x*.	 ' C"4,

#=d#BC+s+D1DTMtC(JJ9$>?'WT3'-$++&q(DI"DKKT"Da4AqD3iA3iATS	k$s)#ATS	k$s)#A9
T444T^^PTPfPfPhFFd223AFFaKF9A		'B1TVV8AdffHUVW[W]W]U]_c_e_eghijgj_kmqmsms^stxy|t}~IIa!Ad# Ks   9
KK!c                     | j                   | _        t        |t              r | xj                  | j
                  z  c_        y| xj                  |z  c_        y)z,Line Feed; default value is last cell heightN)r   r   rm   r   r  r_   )r   rx   s     r   r  zFPDF.ln   s8     }}a$FFDJJFFFAIFr   c                     | j                   S )zGet x position)r   r   s    r   get_xz
FPDF.get_x	      vvr   c                 F    |dk\  r|| _         y| j                  |z   | _         y)zSet x positionr   N)r   rw   )r   r   s     r   set_xz
FPDF.set_x  s    a4DF66!8DFr   c                     | j                   S )zGet y position)r  r   s    r   get_yz
FPDF.get_y  r  r   c                 h    | j                   | _        |dk\  r|| _        y| j                  |z   | _        y)zSet y position and reset xr   N)r   r   r  rx   )r   r  s     r   set_yz
FPDF.set_y  s*    }}a4DF66!8DFr   c                 H    | j                  |       | j                  |       y)zSet x and y positionsN)r  r  )r   r   r  s      r   set_xyzFPDF.set_xy   s    

1

1r   c                 B   | j                   dk  r| j                          |j                         }|dk(  r|dk(  rd}d}nd}|dk(  rt        | j                         y|dk(  rt        | j                         y|dk(  rt        |d      }|s| j                  d|z          t        r+|j                  | j                  j                  d	             n|j                  | j                         |j                          y|d
k(  r| j                  S | j                  d|z          y)zOutput PDF to some destinationr   r$   zdoc.pdfIr  DrD  zUnable to create output file: latin1r  zIncorrect output destination: )
rV   r   rO  printrS   r   rl   r   r  encode)r   r=  destr  s       r   outputzFPDF.output%  s     ::a<JJLZZ\8Rx9$++& % 3Y$++" ! 3Y4oA

;D@A**845$GGI  3Y;;JJ7<=r   c                     | j                   r)t        |t              rt        s|j	                  d      }|S | j                   s't        |t
              rt        s|j                  d      }|S )z7Check that text input is in the correct format/encodingutf8r  )r   rm   strr   decoder   r  )r   r  s     r   r   zFPDF.normalize_textG  sV     *S#"6t**V$C 
 ##
3(@**X&C
r   c                 d    t        dd      dk7  r!dd l}|j                  |j                  d       y y )Nz%.1f      ?z1.0r   r  )r   locale	setlocale
LC_NUMERIC)r   r  s     r   rO   zFPDF._dochecksR  s1    
 6#%V..s3 &r   c                     t         dz   S )N/)rS  r   s    r   _getfontpathzFPDF._getfontpath[  s    S  r   c                 N	   | j                   }t        | d      rt        | j                  d      }t        t	        |      d      }t        d|dz         D ].  }| j                  |   j                  ||      | j                  |<   0 t        d|dz         D ]A  }| j                  |   j                  | j                  t	        |            | j                  |<   C | j                  dk(  r| j                  }| j                  }n| j                  }| j                  }| j                  rd}nd}t        d|dz         D ]  }| j                          | j                  d       | j                  d       || j                  v r| j                  t        d	||             | j                  d
       | j                   r|| j                   v rd}| j                   |   D ]  }	t        d|	d   |	d   |	d   |	d   z   |	d   |	d   z
        }
|d|
z   dz   z  }t#        |	d   t$              r|d| j'                  |	d         z   dz   z  }f| j(                  |	d      }|d   | j                  v r|}n|}|t        ddd|d   z  z   ||d   | j*                  z  z
        z  } | j                  |dz          | j,                  dkD  r| j                  d       | j                  dt	        | j.                  dz         z   dz          | j                  d       | j                  rIt0        r| j                  |   j3                  d      n| j                  |   }t5        j                  |      }n| j                  |   }| j                          | j                  d|z   dz   t	        t7        |            z   dz          | j9                  |       | j                  d        t7        | j:                        | j<                  d<   | j                  d        | j                  d!       d"}t        d|      D ]  }|t	        dd|z  z         d#z   z  } | j                  |dz          | j                  d$t	        |      z          | j                  t        d	||             | j                  d       | j                  d       y )%Nr   Fr   rH   /Filter /FlateDecode r$   z<</Type /Pagez/Parent 1 0 Rz/MediaBox [0 0 %.2f %.2f]z/Resources 2 0 Rz	/Annots [z%.2f %.2f %.2f %.2fr   r#   r   z%<</Type /Annot /Subtype /Link /Rect [z] /Border [0 0 0]    z/A <</S /URI /URI z>>>>z!/Dest [%d 0 R /XYZ 0 %.2f null]>>r3  rN   z7/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>z
/Contents z 0 R>>endobjr  <</Length >>z1 0 objz<</Type /Pagesz/Kids [z 0 R z/Count )rQ   rq  r   r   r  r  rT   rN  rs   ro   rp   r   _newobjr   rU   r   r[   rm   r   _textstringr\   rk   r   rR   r   r  zlibr   
_putstreamrS   rP   )r   r~  r   r   rR   rt   ru   filterannotsplr   rI   rx   rF   kidsr  s                   r   	_putpageszFPDF._putpages^  s*   994,-!$"9"95AEc"gu-A1bd^ @ $

1 5 5eQ ?

1@ 1RT] U"jjm33D4K4KCPRGT

1U$DDDD==*FFqA &	 ALLNIIo&IIo&D,,,		'"=d4HIII()1#7"//!, dB !6r!uRU2a5A;rRSuUWXYUZ{[DCDHI]]]F!"Q%
3 4T5E5Ebe5L LV SS**RU+Q44#;#;;"A"A(KAaPQRSPTfHUVWXYZW[\`\b\bWbUb ccd 		&*%%		STIIl3tvvax=09:IIh}}6:DJJqM((2

1MM!$JJqMLLNIId6k*,SQ[8=>OOAIIhM&	 P DKK(Q		)		"#q 	%A#a!e*W$$D	%		$s(		)CG#$		'5d4@A		$		(r   c           
         | j                   }| j                  D ]G  }| j                          | j                  d| j                  |   z   dz          | j                  d       I | j                  j                         D ]  \  }}d|v s|d   dk7  s| j                          | j                   | j                  |   d<   d}t        | j                         |z   dd	      }|s| j                  d
       |j                         }|j                          t        |d      dk(  }|s\d|v rXt        |d         dk(  }|rt        |d      }|r7t        ||d            dk(  r#t        |d|d         t        ||d   dz         z   }| j                  dt        t        |            z          |r| j                  d       | j                  dt        |d         z          d|v r#| j                  dt        |d         z   dz          | j                  d       | j                  |       | j                  d        | j                   j                         D 	cg c]  }	|	d	   d   |	d   |	d	   f }
}	|
j#                          |
D ]  \  }}}| j                   d	z   | j                   |   d<   |d   }|d   }|dk(  r| j                          | j                  d       | j                  d|z          | j                  d       |dk7  r|dk7  r| j                  d        | j                  d       | j                  d       |d!k(  s|d"k(  r| j                          | j                  d       | j                  d|z          | j                  d#|z          | j                  d$       | j                  d%t        | j                   d	z         z   d&z          | j                  d't        | j                   d(z         z   d&z          |d)   r<d*|v r'| j                  d+t        ||d*   z         z   d&z          n| j                  d        | j                  d       | j                  d       | j                          |d,   }d-}t%        d.d/      D ]/  }|t        |j'                  t)        |            xs d      d0z   z  }1 | j                  |d1z          | j                  d       | j                          d2|z   }d3D ]  }|d4|d0|d5   |   z  } |d6   }|r3|d7z  }|d!k7  r|d8z  }|d0t        | j                  |   d         z   d&z   z  }| j                  |dz          | j                  d       |dk(  r| j                   d	z   | j                   |   d<   t+               }d9|d   z   }|d:   }|d= |j-                  |d;   |      }t        |      }t/        j0                  |      }|j2                  }| j                          | j                  d       | j                  d<       | j                  d|z   dz          | j                  d=       | j                  d>t        | j                   d	z         z   d?z          | j                  d@t        | j                   d(z         z   d&z          | j                  d       | j                  d       | j                          | j                  d       | j                  dA       | j                  d|z   dz          | j                  dBt        | j                   d(z         z   d&z          | j                  d't        | j                   dCz         z   d&z          |d5   j'                  dD      r| j                  dE|d5   dD   z         | j5                  ||j6                         | j                  dFt        | j                   dGz         z   d&z          | j                  d       | j                  d       | j                          dH}| j                  dt        t        |            z   dz          | j                  |       | j                  d       | j                          | j                  dI       | j                  dJ       | j                  dK       | j                  d       | j                  d       | j                          | j                  dL       | j                  dM|z          dND ]0  }|d5   |   }|dOk(  r
|dGz  }|dPz  }| j                  d4|d0|       2 | j                  dQt        | j                   d(z         z   d&z          | j                  d       | j                  d       d}dRgd/z  d/z  d(z  }|j                         D ]0  \  }}t)        |dSz	        ||d(z  <   t)        |dTz        ||d(z  d	z   <   2 dj9                  |      }t:        r|j=                  dU      }t/        j0                  |      }| j                          | j                  dt        t        |            z   dz          | j                  d       | j                  d       | j                  |       | j                  d       | j                          | j                  dt        t        |            z          | j                  d       | j                  dt        |      z          | j                  d       | j                  |       | j                  d       ~dV|j?                         z   }tA        | |      s| j                  dW|z          | jC                  |        y c c}	w )XNz?<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [z]>>r  r>  r<  rR   r$   r1  r   zFont file not foundz.zrM  r         rI  z
<</Length z/Filter /FlateDecodez	/Length1 z	/Length2 z /Length3 0r  r  r=  r  z<</Type /Fontz/BaseFont /z/Subtype /Type1r*   r+   z/Encoding /WinAnsiEncodingType1rL  z
/Subtype /z/FirstChar 32 /LastChar 255z/Widths  0 Rz/FontDescriptor r#   encrJ  z
/Encoding r   r2  rF     r-  r3  z#<</Type /FontDescriptor /FontName /)r5  r6  r7  Falgsr9  r:  r;  r   z /r   filez
 /FontFile2zMPDFAA+rG  rA  z/Subtype /Type0z/Encoding /Identity-Hz/DescendantFonts [ 0 R]z/ToUnicode z/Subtype /CIDFontType2z/CIDSystemInfo r   r   z/DW %dz/CIDToGIDMap r  aY  /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
1 beginbfrange
<0000> <FFFF> <0000>
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end
endz<</Registry (Adobe)z/Ordering (UCS)z/Supplement 0z<</Type /FontDescriptorz/FontName /r4  r8  iz/FontFile2        r  _putzUnsupported font type: )"rR   rY   r  r   rX   itemsr   r  rl   r  r   r
   r   r  r   r  rW   sortr  r   chrr   
makeSubsetr  r   codeToGlyph_putTTfontwidthsmaxUnirT  r   r  rn   method_existsr  ) r   nfrJ  r=  r  r   r  
compressedr   r   flistidxrk   r>  r   r  r  rK  rz  fontnamerG  ttfontstream
ttfontsize
fontstreamr  toUnikdvcidtogidmapccglyphr  s                                    r   	_putfontszFPDF._putfonts  s	   66JJ 	 DLLNIIWX\XbXbcgXhhinnoIIh		 
 ..0 	$ID~$v,%"7+/66%c*t((*4/Q7JJ45VVX	"4OT1
!i4&7QL#-F#D^#d4	?&;"<c"A#D4	?;F4YXYHY<ZZ		,s3t9~56II45		+c$y/&::;$IIk#d9o*>>}LM		$%		(#9	$: 15

0@0@0BC1!A$s)AaD1&CC

 l	JC$#vvaxDJJqM#fDfDV|		/*		-,-		+,>dN&:II:;		$		(#w$
"2		/*		-,-		,t+,		78		*S]269:		,S]:6AB;~		,s2d6l?/C"CF"JK		">?		$		(#:r# 4As266#a&>.Q/33A4 		!C% 		(#7<x :Aafa99A:f|OAW}3s3tx8=>>vEEA		!D&!		(#%-%)VVaZ

1c" l)DL8h1I"~~d9ovF .
!]]<8
!oo 		/*		+,		-(2R78		12		.TVVaZ@7JK		-#dffqj/9FBC		$		(# 		/*		23		-(2R78		+c$&&1*o=FG		,s466A:>GHL$$^4IIhfn)EEF%%dCJJ7		/C
O;fDE		$		(# ( 		,SZ84?@&		(# 		/0		+,		/*		$		(# 		34		-(23y 3BVR(AgEGII2q123 		-#dffqj/9FBC		$		(# !%hnS02!,!2!2!4 >IB(+EQJK1%,/,=K1q)> !ggk2"-"4"4X">K"mmK8		,S-=)>>CD		01		$,		(# 		,S_)==>		01		+J78		$
+		(# 4::<'$T#.JJ8=>Yl	 Ds   mc                 N   |d   r)t         j                  j                  |d         d   dz   }nd }|rrt         j                  j                  |      rSt	        |d      }	 t        j                  |      }|j                          |d   }|d   }|d   }|d   }	|d	   }
|d
   }d}nd}i }i }d}d}	d}
d}|dz   }t        ||      D ]G  }|dk(  rt|rrt         j                  j                  |      sS	 t	        |d      }i }||d<   ||d<   |	|d<   |
|d	<   ||d
<   ||d<   t        j                  ||       |j                          |d   |   dk(  r|d   |   }|dk(  rd}|dkD  r||d   vs|sd|vs|d   s||d   k7  s||dz   k(  rx||	k(  rQ|||   d   k(  r"|j                  |g       j                  |       n||   j!                          |}|	|g||<   d}
d||<   n,|
r	|}|g||<   n||   j                  |       d}
n
|}|g||<   d}
|}|}	J d}d}d}t#        |j%                               D ]T  \  }}t'        |      }||k(  r$|s"||vs|dk  r||v r||= ||   ||   z   ||<   ||= n|}||z   }||v r|dkD  }||= |dz  }Sd}V g }t#        |j%                               D ]  \  }}t'        t)        |            dk(  r-|j                  d|d|t'        |      z   dz
  d|d          J|j                  d|ddj+                  |D cg c]  }t-        t/        |             c}      d        | j1                  ddj+                  |      z         y # |j                          w xY w# t        $ r* t               j                  t        j                  k(  s Y ]w xY wc c}w )NrH  r   z
.cw127.pklr1  rangeidr  prevcid	prevwidthintervalrange_intervalr  r  r   Fr   rD  r   i  r  rG  dwTr   r-  z [ z ]
z/W [%s]r$   )rP  rQ  rW  rR  r   r   rY  r   r  rm  rn  r   ro  rp  
setdefaultr  popsortedr  r   setrT  r  r[  r   )r   r   r!  
cw127fnamerr   ry  r3  range_r4  r5  r6  r7  startcidcwlencidr  prevknextkprevintrk   rh   cwsrw   rx   s                           r   r   zFPDF._putTTfontwidths{  s!   ))$}*=>qALPJJ"''..4j$'B"KKO	
	*Gw'F	*G!+.I ,H&'78NHGFNGIHH
 5) /	"Cczj
1Kj$/B "I+2Ii(+2Ii(-6Ik*,4Ij)2@I./)/Ig&KK	2.HHJ T
31$JsOEc	s$x.8D T$ZET$Z4GGaK(*!VG_Q%77"--gr:AA%H"7O//1&-G/8%.@F7O#'26w/$&)G/4gF7O"7O2259#(!G',gF7O$H!	_/	"` FLLN+ 	 EArb'CU
7A4G3QR7'&q) &uq	 9u1IGE^#7"1%
	   FLLN+ 	TEArCG!1s2w;?BqEBC1chhR7PCF7P.QRS		T
 			)bggaj()y 
@  $;,,< =v 8Qs%   M /AM,N"M),/NNc                     d}| j                   rd}| j                  j                         D cg c]  }|d   d   |d   f }}|j                          |D ]!  \  }}| j	                  |       |d= d|v s|d= # y c c}w )Nr$   r  r   r  datasmask)r   rZ   r  r  	_putimage)r   r  r   r  r&  r  s         r   
_putimageszFPDF._putimages  s    ==*F'+{{'8'8':;!ad3i!;;	 	"HCNN4 V$M		" <s   A:c                    d|v rJ| j                          | j                  |d<   | j                  d       | j                  d       | j                  dt        |d         z          | j                  dt        |d         z          |d	   d
k(  rX| j                  dt        t	        t        |d         dz        dz
        z   dz   t        | j                  dz         z   dz          n0| j                  d|d	   z          |d	   dk(  r| j                  d       | j                  dt        |d         z          d|v r| j                  d|d   z          d|v r| j                  d|d   z   dz          d|v rut        |d   t              rbd}t        dt        |d               D ].  }|t        |d   |         dz   t        |d   |         z   dz   z  }0 | j                  d|z   dz          d |v r-| j                  d!t        | j                  dz         z   d"z          | j                  d#t        t        |d               z   dz          | j                  |d          | j                  d$       d |v r8d%t        |d         z   }|d   |d   d&d'|d   ||d    d(}| j                  |       |d	   d
k(  r| j                          | j                  xr d)xs d}| j                  rt        j                  |d         }n|d   }| j                  d*|z   d#z   t        t        |            z   dz          | j                  |       | j                  d$       y y y )+NrG  rR   z<</Type /XObjectz/Subtype /Imagez/Width rw   z/Height rx   csIndexedz!/ColorSpace [/Indexed /DeviceRGB palr   r   r-  r  z/ColorSpace /
DeviceCMYKz/Decode [1 0 1 0 1 0 1 0]z/BitsPerComponent bpcr  z	/Filter /dpz/DecodeParms <<r  trnsr$   r   z/Mask [r3  rH  z/SMask r  r   r  z5/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns 
DeviceGrayr  )rw   rx   rL  rP  r  rQ  rG  r  r  )r  rR   r   r  r[  r   rm   rr  r  r  rI  r   r  )r   r  rR  r  rQ  rH  r  rN  s           r   rI  zFPDF._putimage  s2   T>LLNffDIII()II'(IIiDI./IIjT#Y/0Dz9$		=c#c$u+FVWXFXBYZ[B[>\\]``adeiekeklmemannovvw		/$t*45:|+II9:II*3tE{+;;<d{		+d3i/0t|		+d4j84?@~*T&\4"@qT&\!23 LA#d6l1o.s23tF|A3GGKKDL		)D.,-$		)c$&&(m3f<=IIjSf%6!77<=OODL)IIh$LsSWX[S\~]"3id3i|TU\`ad\emoy}  F  zG  Hu%Dz9$B+BHb==d5k2CUC		$v+j0SX>tCD$		(# %E r   c                     | j                   j                         D cg c]  }|d   |d   f }}|j                          |D ]4  \  }}| j                  dt	        |      z   dz   t	        |      z   dz          6 y c c}w )Nr  rR   z/Ir-  r  )rZ   valuesr  r   r  )r   r   r  r&  rR   s        r   _putxobjectdictzFPDF._putxobjectdict  sv    &*kk&8&8&:;afQsV_;;	 	7ECIId3s8mC'A.v56	7 <s   A:c                    | j                  d       | j                  d       | j                  j                         D cg c]  }|d   |d   f }}|j                          |D ]4  \  }}| j                  dt	        |      z   dz   t	        |      z   dz          6 | j                  d       | j                  d	       | j                          | j                  d       y c c}w )
Nz-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]z/Font <<r  rR   z/Fr-  r  r  z/XObject <<)r   rW   rU  r  r  rV  )r   r   r  r&  rR   s        r   _putresourcedictzFPDF._putresourcedict#  s    		AB		*&*jj&7&7&9:afQsV_::	 	7ECIId3s8mC'A.v56	7		$		- 		$ ;s   Cc                 0   | j                          | j                          t        | j                        | j                  d<   | j                  d       | j                  d       | j                          | j                  d       | j                  d       y )Nr#   z2 0 objr  r  r  )r1  rJ  r   rS   rP   r   rX  r   s    r   _putresourceszFPDF._putresources/  sf    DKK(Q		)		$		$		(r   c           	      &   | j                  d| j                  dt        z   dz         z          t        | d      r-| j                  d| j                  | j                        z          t        | d      r-| j                  d| j                  | j
                        z          t        | d      r-| j                  d	| j                  | j                        z          t        | d
      r-| j                  d| j                  | j                        z          t        | d      r-| j                  d| j                  | j                        z          | j                  d| j                  dt        j                         j                  d      z         z          y )Nz
/Producer zPyFPDF z http://pyfpdf.googlecode.com/r   z/Title r   z	/Subject r   z/Author r   z
/Keywords r   z	/Creator z/CreationDate zD:z%Y%m%d%H%M%S)r   r  FPDF_VERSIONrq  r   r   r   r   r   r   nowstrftimer   s    r   _putinfozFPDF._putinfo:  s/   		,t//	,0FGg0ghhi4 IIi 0 0 <<=4	"IIk$"2"24<<"@@A4!IIj!1!1$++!>>?D$IIl4#3#3DMM#BBC4	"IIk$"2"24<<"@@A		"4#3#3D9P9PQ_9`4`#aabr   c                 X   | j                  d       | j                  d       | j                  dk(  r| j                  d       n| j                  dk(  r| j                  d       nc| j                  dk(  r| j                  d       nBt        | j                  t              s(| j                  t	        d	| j                  d
z               | j
                  dk(  r| j                  d       y | j
                  dk(  r| j                  d       y | j
                  dk(  r| j                  d       y y )Nz/Type /Catalogz/Pages 1 0 Rr   z/OpenAction [3 0 R /Fit]rM   z/OpenAction [3 0 R /FitH null]r   z$/OpenAction [3 0 R /XYZ null null 1]z%/OpenAction [3 0 R /XYZ null null %s]d   r   z/PageLayout /SinglePager   z/PageLayout /OneColumnr   z/PageLayout /TwoColumnLeft)r   r   rm   r   r   r   r   s    r   _putcatalogzFPDF._putcatalogH  s    		"#		.!>>:%II01^^[(II67^^V#II<=DNN:6IIgEdnnUXFXYZX%II/0|+II./u$II23 %r   c                 @    | j                  d| j                  z          y )Nz%PDF-)r   r   r   s    r   
_putheaderzFPDF._putheaderZ  s    		'$***+r   c                    | j                  dt        | j                  dz         z          | j                  dt        | j                        z   dz          | j                  dt        | j                  dz
        z   dz          y )Nz/Size r   z/Root r  z/Info )r   r  rR   r   s    r   _puttrailerzFPDF._puttrailer]  s_    		(3tvvax=()		(3tvv;&v-.		(3tvvax=(/0r   c                    | j                          | j                          | j                          | j                          | j	                  d       | j                          | j	                  d       | j	                  d       | j                          | j	                  d       | j                          | j	                  d       | j	                  d       t        | j                        }| j	                  d       | j	                  dt        | j                  dz         z          | j	                  d       t        d| j                  dz         D ]*  }| j	                  t        d| j                  |                , | j	                  d	       | j	                  d       | j                          | j	                  d       | j	                  d
       | j	                  |       | j	                  d       d| _        y )Nr  r  r  xrefz0 r   z0000000000 65535 f z%010d 00000 n trailer	startxrefz%%EOFr   )rd  r
  rZ  r  r   r_  rb  r   rS   r  rR   r  r   rP   rf  rV   )r   or  s      r   r   zFPDF._enddocb  sg   		$		$		(		$		$		(
dkk
		&		$DFF1H&'		'(q" 	AAIIg.t||A?@	A 			)		$		$		+		!		'
r   c                    | xj                   dz  c_         d| j                  | j                   <   d| _        | j                  | _        | j
                  | _        d| _        |s| j                  }n;|d   j                         }|| j                  k7  rd| j                  | j                   <   || j                  k7  r|dk(  rE| j                  | _        | j                  | _        | j                   | _        | j$                  | _        nD| j                  | _        | j                  | _        | j$                  | _        | j                   | _        | j&                  | j(                  z
  | _        || _        y y )Nr   r$   r#   r   rH   )rQ   rT   rV   r   r   r   r  r`   rs   rO  rU   rv   ro   rt   rp   ru   rq   rw   rr   rx   r   r   )r   r   s     r   r   zFPDF._beginpage  s   		1	 

499
}}}},,K#A,,.KD00045((3,,,C**	**	wwww**	**	wwww$(FF4==$8D#!,D  -r   c                     d| _         y Nr   r   r   s    r   r   zFPDF._endpage  r   r   c                     | xj                   dz  c_         t        | j                        | j                  | j                   <   | j	                  t        | j                         dz          y )Nr   z 0 obj)rR   r   rS   rP   r   r  r   s    r   r  zFPDF._newobj  sC    	 -TVV		#dff+h&'r   c                 l   | j                   d   }| j                   d   }| j                  |      | j                  |j                  d      z  z   }t	        d|| j
                  z  | j                  ||dz  | j                  z  z
  z
  | j
                  z  || j
                  z  | dz  | j                  z        S )Nr?  r@  r-  z%.2f %.2f %.2f %.2f re fr   )	r   r  rh   countr   rk   rx   r  rb   )r   r   r  r  r?  r@  rw   s          r   r  zFPDF._dounderline  s    T"T"



$TWWSYYs^%;
;1!DFF(DFFAbiPTP^P^F^D^<_aeagag;ghijnjpjphprtqtu{q{  }A  }N  }N  rN  O  	Or   c           
         	 t        |d      }	 t        j                  d|j                  d            \  }}|dk7  s|dk  rt	        d      |dk(  rt	        d      |d	k(  s|d
k\  r|dk  s
|dk\  r|dk  rnt        j                  d|j                  d            \  }|dkD  r|j                  |dz
        nd}|dk\  r|dk  s|dk\  r|dk  s|dk\  r|dk  s
|dk\  r1|dk  r,t        j
                  d|      \  }}}	}
|
dk(  rdn|
dk(  rdnd}n	 j                  d       |j                         }|j                          	d |d!S # t        $ r+ | j                  d|dt        t                            Y mw xY w)"Nr1  BBr#   r     zNo JPEG marker found   zNo JPEG SOF marker found               z>Hr$                        z>BHHBr   	DeviceRGBr  rO  rS  !Missing or incorrect image file: 	. error: r   	DCTDecode)rw   rx   rL  rP  r  rG  )r   structunpackr  SyntaxErrorunpack_from	Exceptionrl   r  r   seekr   )r   rK  r  
markerHigh	markerLowdataSizerG  rP  heightr  layerscolspaces               r   r  zFPDF._parsejpg  s   	hXt$A(.dAFF1I(F%
I%T)9%&<==$&%&@AA4' D(Y$-> D(Y$-> &dAFF1I >IH3;a<166(Q,/RD"d*yD/@"d*yD/@"d*yD/@"d*yD/@5;5G5GQU5V2VUF28A+;TZ^_T_Leq' & 
 	
q	vvx		f(TXYY  	hJJ8UXYbYdUefg	hs   DE 1E<;E<c           
         t         | j                  d       	 t        j                  |      }t        j                  dd      }|j
                  }|j                          d|j                  v r!|j                  ||j                  d          n|j                  |       | j                  |      }t        j                  |       |S # t        $ r, | j                  d|dt        t                            Y S w xY w)	NzPIL is required for GIF supportFz.png)deletesuffixtransparency)r  r  r  )r   rl   r   tempfileNamedTemporaryFiler=  r   r  saver  rP  unlinkr  r  r   )r   rK  imr  tmpr  s         r   r  zFPDF._parsegif  s    =JJ89	H%B
 ++5HA&&CGGI(BGGN,CD>>#&DIIcN  	hJJ8UXYbYdUefg 	hs   C	 	1C>=C>c           	         |j                  d      s|j                  d      rt        |      }nt        |d      }|s| j                  d|z          |j	                  d      j                  d      }d}t        s|j                  d      }||k7  r| j                  d|z          |j	                  d	       |j	                  d	      j                  d      }|d
k7  r| j                  d|z          | j                  |      }| j                  |      }t        |j	                  d            }|dkD  r| j                  d|z          t        |j	                  d            }	|	dk(  s|	d	k(  rd}
n)|	dk(  s|	dk(  rd}
n|	dk(  rd}
n| j                  d|z          t        |j	                  d            dk7  r| j                  d|z          t        |j	                  d            dk7  r| j                  d|z          t        |j	                  d            dk7  r| j                  d|z          |j	                  d	       d}
dk(  r|dz  }n|dz  }|dt        |      z   dz   t        |      z   dz   z  }d}d}t        r
t               n	t               }d}|d k7  rY| j                  |      }|j	                  d	      j                  d      }|dk(  r#|j	                  |      }|j	                  d	       n|d k(  r|j	                  |      }|	dk(  rt        t        |dd            g}no|	dk(  rBt        t        |dd            t        t        |dd            t        t        |d!d            g}n(|j                  d"j                  d            }|d#k7  r|g}|j	                  d	       nE|d$k(  r&||j	                  |      z  }|j	                  d	       n|d%k(  rn|j	                  |d	z          |d k7  rY|
dk(  r|s| j                  d&|z          |j                          |||
|d'|||d(}|	d	k\  r;t        j                   |      }t#        d      }t#        d      }|	d	k(  rd|z  }t%        |      D ]  }d|z   |z  }|t#        ||         z  }|t#        ||         z  }t        ||dz   |      }t'        j(                  d)j                  d*      t&        j*                  +      }t'        j(                  d,j                  d*      t&        j*                  +      }||j-                  d- |      z  }||j-                  d. |      z  } nd	|z  }t%        |      D ]  }d|z   |z  }|t#        ||         z  }|t#        ||         z  }t        ||dz   |      }t'        j(                  d/j                  d*      t&        j*                  +      }t'        j(                  d0j                  d*      t&        j*                  +      }||j-                  d1 |      z  }||j-                  d2 |      z  } ~t        j.                  |      }t        j.                  |      |d3<   | j0                  d4k  rd4| _        ||d5<   |S )6Nzhttp://zhttps://r1  zCan't open image file: r  r  u	   PNG

zNot a PNG file: r  IHDRzIncorrect PNG file: r   z16-bit depth not supported: r   rS  r#   r  r  r   rM  zUnknown color type: zUnknown compression method: zUnknown filter method: zInterlacing not supported: z/Predictor 15 /Colors 31z /BitsPerComponent z
 /Columns r$   PLTEtRNS   r  r   IDATIENDzMissing palette in FlateDecode)rw   rx   rL  rP  r  rQ  rN  rR  z(.).ascii)r`  z.(.)c                 $    | j                  d      S rn  groupms    r   <lambda>z FPDF._parsepng.<locals>.<lambda>H      
 r   c                 $    | j                  d      S rn  r  r  s    r   r  z FPDF._parsepng.<locals>.<lambda>I  r  r   z(...).z...(.)c                 $    | j                  d      S rn  r  r  s    r   r  z FPDF._parsepng.<locals>.<lambda>T  r  r   c                 $    | j                  d      S rn  r  r  s    r   r  z FPDF._parsepng.<locals>.<lambda>U  r  r   rH  z1.4rG  )
startswithr   r   rl   r  r  r   	_freadintr   r  bytesr
   findr  r   r  
decompressr   r  re  r  DOTALLrf  r   r   )r   r=  r  magic	signaturechunkrw   rx   rP  ctr  rQ  rN  rR  rG  rR   r>  r  r  r  coloralphalengthr  r  re_cre_as                              r   r  zFPDF._parsepng  s   ??9%)D4=q4oAJJ056q	  *6	!1!1(!;Y)JJ)$./	q	q	  *&=JJ-d23
..

..
q	Nq5JJ5d:;qvvay>q5BE!HUb!e HUHJJ-d23qvvay>1JJ5d:;qvvay>1JJ056qvvay>1JJ4T9:	q	#{"GBGB
!#c(*<7A>rAAUW#%
4innQA!!(+DV|FF1Iq	v&&)q5fQqm,.DUfQqm,S!A-?F1QqM@RSDv}}X67CBw!Vq	vaffQiq	vqs5 4i6 YsJJ,T12		!2TW_ceq5??4(DbEEbEE1u1q BAV8Q,CQtCy\)EQtCy\)E!$Av6D::fmmG&<BIIND::fmmG&<BIINDTXX&:DAAETXX&:DAAEB 1q BAV8Q,CQtCy\)EQtCy\)E!$Av6D::hoog&>biiPD::hoog&>biiPDTXX&:DAAETXX&:DAAEB =='D MM%0DM  5(#( Vr   c                 b    	 t        j                  d|j                  d            d   S #  Y y xY w)Nz>Ir  r   )r  r  r  )r   r  s     r   r  zFPDF._freadint^  s/    	==qvvay1!44	s   '* .c                 0    d| j                  |      z   dz   S )Nr  r  )r  r   r  s     r   r  zFPDF._textstringe  s    4<<?"3&&r   c                     |j                  dd      j                  dd      j                  dd      j                  dd      S )	N\z\\r  z\)r  z\(r  z\r)rN  r  s     r   r  zFPDF._escapei  s<    yyf%--c%8@@UKSSTXY^__r   c                 j    | j                  d       | j                  |       | j                  d       y )Nstream	endstream)r   r  s     r   r  zFPDF._putstreamm  s%    		(		!		+r   c                 r   t         r"t        |t              r|j                  d      }nCt         s"t        |t              r|j                  d      }nt        |t              st        |      }| j                  dk(  r%| j                  | j                  xx   |dz   z  cc<   y | xj                  |dz   z  c_        y )Nr  r#   r  )r   rm   r  r  r   r  r   r  rV   rT   rQ   rS   r  s     r   r   z	FPDF._outr  s    Jq%("A*Q0"AAz*AA::q=JJtyy!1T6)!KK4Kr   c                 v   |dz  }|}dddddddd	d
dddd}| j                  d       |}	t        |	      dz  dk7  rd|	z   }	d|	j                         z   dz   }	t        dt        |	      d      D ]  }
|	|
   }|	|
dz      }||j	                         vrt        d|z        ||j	                         vrt        d|z        d}t        dt        ||               D ]  }|||   |   ||   |   z   z  } t        dt        |            D ]1  }||   dk(  r|}n|}|dz  dk(  r| j                  ||||d       ||z  }3  y)z/Barcode I2of5 (numeric), adds a 0 if odd lenght      @nnwwnwnnnwnwnnwwwnnnnnwnwwnwnnnwwnnnnnwwwnnwnnwnwnnnwn)0r  r  r  456789AZr   r#   r  AAZAr   zChar "%s" invalid for I25: r$   rR   r  N)r   r   rn   r  keysr   r   )r   r  r   r  rw   rx   narrowwidebar_charcoder  char_bar
char_spaceseqr  barr{   s                    r   interleaved2of5zFPDF.interleaved2of5  s    S W7W7W4dD 	At9q=A:D djjl"T)q#d)Q' 	 AAwHacJx}}."$AH$LMM0"$AJ$NOO C1c(8"456 Gx)!,x
/CA/FFFG QC)  s8s?!'J!%J 7a<IIaJ37Z 	 r   c                    ||dz  d}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$i d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQ
}| j                  dR       |j                         D ]Z  }||vrt        dS|z        t        ||         D ]-  \  }	}
|	dTz  dRk(  r| j	                  ||||
   |d!       |||
   z  }/ ||dU   z  }\ yV)WzBarcode 3of9r  )rw   rR   r  	nnnwwnwnnr  	wnnwnnnnwr  	nnwwnnnnwr  	wnwwnnnnnr  	nnnwwnnnwr  	wnnwwnnnnr  	nnwwwnnnnr  	nnnwnnwnwr  	wnnwnnwnnr  	nnwwnnwnnr  	wnnnnwnnwr  	nnwnnwnnwr  	wnwnnwnnnr  	nnnnwwnnwE	wnnnwwnnnr  	nnwnwwnnnG	nnnnnwwnwH	wnnnnwwnnr  	nnwnnwwnnr  	nnnnwwwnnK	wnnnnnnwwrK   	nnwnnnnwwM	wnwnnnnwnN	nnnnwnnwwO	wnnnwnnwnrH   	nnwnwnnwnr  	nnnnnnwwwr  	wnnnnnwwnr  	nnwnnnwwnr  	nnnnwnwwnr   	wwnnnnnnwV	nwwnnnnnwW	wwwnnnnnnX	nwnnwnnnw	wwnnwnnnn	nwwnwnnnn	nwnnnnwnw	wwnnnnwnn	nwwnnnwnn	nwnnwnwnn	nwnwnwnnn	nwnwnnnwn	nwnnnwnwn	nnnwnwnwn)
Yr  -r  r-  *$r  +%r   zInvalid char "%s" for Code39r#   rR   N)r   rO  r   	enumerater   )r   r  r   r  rw   rx   dimcharsr  r  r}  s              r   code39zFPDF.code39  s\    AbD!

!;
03[

!;
03[
 
 ";
 14[
 	
 ";	
 14[	

 

 ";

 14[
 
 ";
 14[
 
 ";
 14[
 
 ";
 14[
 
 ";
 14[
 
 ";
 14[
 
 ";
 14[
 
 $/[;[;[;
" 	A 	A~"#AA#EFF!%(+ 1q5A:IIaCFAs3SV SMA	r   )rH   r;   A4)r   )r   )r   )z{nb})r$   )r   r   )FF)r   r   )r$   r$   F)r$   r   )r   r   )NN)r   r$   r   r   r$   r   r$   )r$   r   r  r   F)r$   r$   )NNr   r   r$   r$   )r  rL   )g      ?g      @)V__name__
__module____qualname____doc__r   r   ry   r   r   r   r|   r}   r~   r   r   r   r   r   r   rl   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r   r+  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rO   r  r
  r1  r   rJ  rI  rV  rX  rZ  r_  rb  rd  rf  r   r   r   r  r  r  r  r  r  r  r  r  r   r  r,  r   r   r   r!   r!   )   s   aF.A
/:x'';',6 r r   i i " "HwAr/^b^"^     "$ Z Zx o ob AK AKF @$ @$D  
 D4!GRRhf*P
",$\7
	c4$,1
B-:(OZB*un'`
  -  - `  r   r!   )-
__future__r   r   	functoolsr   r#  ro  rP  sysr  r  re  r  ttfontsr   rW   r	   phpr
   r   r   r   r   py3kr   r   r   r   r   r   r   r   r   r\  rQ  rT  dirname__file__rS  rV  rX  rU  r   objectr!   r   r   r   <module>r;     s           2 2 2 2  " K K [ [ [ RWW__X6v>e6 er   