+
    UBil                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
HtHt Rt]'       d$   ^ RI
Ht ]P                  ]],          ]3,          tM]P                  tR R lt/ ^Rb^R	b^R
b^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb^Rb/ ^Rb^Rb^Rb^Rb^Rb^Rb^Rb^R b^R!b^R"b^R#b^R$b^R%b^R&b^R'b^R(b^R)bC^R*^R+^R,^R-^R.^R/^R0/CtR1 R2 lt ! R3 R4]4      tR5 R6 lt ! R7 R8]4      t ! R9 R:]4      t ! R; R<]4      t ! R= R>4      t ! R? R@4      t ! RA RB]],          4      t ! RC RD]4      t  ! RE RF4      t! ! RG RH4      t"RI RJ lt# ! RK RL4      t$R# )M    )annotationsN)Any
NamedTupleF)IOc                    V ^8  d   QhRRRR/# )   sstrreturnbytes )formats   "2/usr/lib/python3.14/site-packages/PIL/PdfParser.py__annotate__r      s     7 73 75 7    c                N    \         P                  V P                  R 4      ,           # )	utf_16_be)codecsBOM_UTF16_BEencode)r	   s   &r   encode_textr      s    +!666r   u   ˘u   ˇu   ˆu   ˙u   ˝u   ˛u   ˚u   ˜u   •u   †u   ‡u   …u   —u   –u   ƒu   ⁄u   ‹u   ›u   −u   ‰u   „u   “u   ”u   ‘u   ’u   ‚u   ™u   ﬁu   ﬂu   Łu   Œu   Šu   Ÿu   Žu   ıu   łu   œu   šu   žu   €c                    V ^8  d   QhRRRR/# )r   br   r   r
   r   )r   s   "r   r   r   I   s     J J5 JS Jr   c                    V R \        \        P                  4       \        P                  8X  d,   V \        \        P                  4      R  P                  R4      # RP	                  R V  4       4      # )Nr    c              3  `   "   T F$  p\         P                  V\        V4      4      x  K&  	  R # 5iN)PDFDocEncodinggetchr).0bytes   & r   	<genexpr>decode_text.<locals>.<genexpr>M   s$     Iqt~))$D	::qs   ,.)lenr   r   decodejoin)r   s   &r   decode_textr)   I   s\    	#3v""#$(;(;;V(()+,33K@@wwIqIIIr   c                      ] tR t^PtRtRtR# )PdfFormatErrorzXAn error that probably indicates a syntactic or semantic error in the
PDF file structurer   N)__name__
__module____qualname____firstlineno____doc____static_attributes__r   r   r   r+   r+   P   s     	r   r+   c               $    V ^8  d   QhRRRRRR/# )r   	conditionboolerror_messager
   r   Noner   )r   s   "r   r   r   W   s!     , ,d ,3 ,4 ,r   c                ,    V '       g   \        V4      hR # r   )r+   )r3   r5   s   &&r   check_format_conditionr8   W   s    ]++ r   c                  ,    ] tR t^\t$ R]R&   R]R&   RtR# )IndirectReferenceTupleint	object_id
generationr   N)r,   r-   r.   r/   __annotations__r1   r   r   r   r:   r:   \   s    NOr   r:   c                  R    ] tR t^atR R ltR R ltR R ltR R ltR	 R
 ltRt	R# )IndirectReferencec                   V ^8  d   QhRR/# r   r   r
   r   )r   s   "r   r   IndirectReference.__annotate__b   s     7 7 7r   c                	:    V P                    R V P                   R2# ) z Rr<   r=   selfs   &r   __str__IndirectReference.__str__b   s    ..!4??"3266r   c                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   rC   e   s     1 15 1r   c                	@    V P                  4       P                  R 4      # us-ascii)rI   r   rG   s   &r   	__bytes__IndirectReference.__bytes__e   s    ||~$$Z00r   c                    V ^8  d   QhRRRR/# r   otherobjectr   r4   r   )r   s   "r   r   rC   h   s     Y YF Yt Yr   c                	    V P                   VP                   Jd   R # \        V\        4      '       g   Q hVP                  V P                  8H  ;'       d    VP                  V P                  8H  # F)	__class__
isinstancer@   r<   r=   rH   rT   s   &&r   __eq__IndirectReference.__eq__h   sS    >>0%!23333$..0XXU5E5E5XXr   c                    V ^8  d   QhRRRR/# rS   r   )r   s   "r   r   rC   n   s     # #F #t #r   c                	    W8X  * # r   r   rZ   s   &&r   __ne__IndirectReference.__ne__n   s    ""r   c                   V ^8  d   QhRR/# r   r   r;   r   )r   s   "r   r   rC   q   s     7 7# 7r   c                	D    \        V P                  V P                  34      # r   )hashr<   r=   rG   s   &r   __hash__IndirectReference.__hash__q   s    T^^T__566r   r   N)
r,   r-   r.   r/   rI   rP   r[   r_   re   r1   r   r   r   r@   r@   a   s!    71Y#7 7r   r@   c                  "    ] tR t^utR R ltRtR# )IndirectObjectDefc                   V ^8  d   QhRR/# rB   r   )r   s   "r   r   IndirectObjectDef.__annotate__v   s     9 9 9r   c                	:    V P                    R V P                   R2# )rE   z objrF   rG   s   &r   rI   IndirectObjectDef.__str__v   s    ..!4??"3488r   r   N)r,   r-   r.   r/   rI   r1   r   r   r   rh   rh   u   s    9 9r   rh   c                  v    ] tR t^ztR R ltR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltRtR# )	XrefTablec                   V ^8  d   QhRR/# r   r   r6   r   )r   s   "r   r   XrefTable.__annotate__{   s     & &$ &r   c                	B    / V n         / V n        ^ R/V n        RV n        R# )r   i   FN)existing_entriesnew_entriesdeleted_entriesreading_finishedrG   s   &r   __init__XrefTable.__init__{   s0     	  	 !"5z %r   c               $    V ^8  d   QhRRRRRR/# )r   keyr;   valuetuple[int, int]r   r6   r   )r   s   "r   r   rq      s!     * *s *? *t *r   c                	    V P                   '       d   W P                  V&   MW P                  V&   WP                  9   d   V P                  V R # R # r   )rv   rt   rs   ru   rH   rz   r{   s   &&&r   __setitem__XrefTable.__setitem__   sI       $)S!).!!#&&&&$$S) 'r   c                    V ^8  d   QhRRRR/# )r   rz   r;   r   r|   r   )r   s   "r   r   rq      s     . .s . .r   c                	r     V P                   V,          #   \         d    T P                  T,          u # i ; ir   )rt   KeyErrorrs   rH   rz   s   &&r   __getitem__XrefTable.__getitem__   s8    	.##C(( 	.((--	.s    66c                    V ^8  d   QhRRRR/# )r   rz   r;   r   r6   r   )r   s   "r   r   rq      s     " "s "t "r   c                	   WP                   9   d?   V P                   V,          ^,          ^,           pV P                   V W P                  V&   R# WP                  9   d2   V P                  V,          ^,          ^,           pW P                  V&   R# WP                  9   d   V P                  V,          pR# RV R2p\        V4      h)   z
object ID z+ cannot be deleted because it doesn't existN)rt   ru   rs   
IndexError)rH   rz   r=   msgs   &&  r   __delitem__XrefTable.__delitem__   s    """))#.q1A5J  %(2  %)))..s3A6:J(2  %(((--c2Jse#NOCS/!r   c                    V ^8  d   QhRRRR/# )r   rz   r;   r   r4   r   )r   s   "r   r   rq      s     G G G Gr   c                	J    WP                   9   ;'       g    WP                  9   # r   )rs   rt   r   s   &&r   __contains__XrefTable.__contains__   s"    +++FFs6F6F/FFr   c                   V ^8  d   QhRR/# rb   r   )r   s   "r   r   rq      s     
 
 
r   c                	    \        \        V P                  P                  4       4      \        V P                  P                  4       4      ,          \        V P
                  P                  4       4      ,          4      # r   )r&   setrs   keysrt   ru   rG   s   &r   __len__XrefTable.__len__   s^    %%**,-$""'')*+$&&++-./
 	
r   c                   V ^8  d   QhRR/# )r   r   zset[int]r   )r   s   "r   r   rq      s     ) )h )r   c                	    \        V P                  P                  4       4      \        V P                  P                  4       4      ,
          \        V P                  P                  4       4      ,          # r   )r   rs   r   ru   rt   rG   s   &r   r   XrefTable.keys   sS    %%**,-D4H4H4M4M4O0PP  %%'() 	)r   c                    V ^8  d   QhRRRR/# )r   f	IO[bytes]r   r;   r   )r   s   "r   r   rq      s     % %y %S %r   c                	   \        \        V P                  P                  4       4      \        V P                  P                  4       4      ,          4      p\        \        V P                  P                  4       4      4      pVP                  4       pVP                  R 4       V'       Ed   Rp\        V4       F$  w  rgVe   V^,           V8X  d   TpK  VRV pW&R p M	  Tp. pVP                  RV^ ,          \        V4      3,          4       V F  p	WP                  9   d,   VP                  RV P                  V	,          ,          4       K>  VP                  ^ 4      p
\        W8H  RV	 RV
 24        V^ ,          pVP                  RWP                  V	,          3,          4       K  	  EK  V#   \         d    ^ p LBi ; i)s   xref
Ns   %d %d
s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)sortedr   rt   r   ru   tellwrite	enumerater&   popr8   r   )rH   r   r   deleted_keys	startxrefprevindexrz   contiguous_keysr<   this_deleted_object_idnext_in_linked_lists   &&          r   r   XrefTable.write   s   c$**//12S9M9M9R9R9T5UUVc$"6"6";";"=>?FFH			d#D'o
<4!8s?D&*6ElO<D . #'GGJ/!"4c/6J!KKL,	 0 00GG.1A1A)1LLM-9-=-=a-@**!;DYK P))?(@B
0.:1o+ GG*.0D0DY0OPQ -$  & 0./+0s   4	F00G ?G )ru   rs   rt   rv   N)r,   r-   r.   r/   rw   r   r   r   r   r   r   r   r1   r   r   r   rn   rn   z   s0    &*."G
)
% %r   rn   c                      ] tR t^t$ R]R&   R R ltR R ltR R ltR	 R
 ltR R lt	]
R R l4       t]! ]! ^!^4      4      R U u0 uF  p \        V 4      kK  	  up ,
          tR R ltRtR# u up i )PdfNamer   namec                    V ^8  d   QhRRRR/# )r   r   zPdfName | bytes | strr   r6   r   )r   s   "r   r   PdfName.__annotate__   s     0 02 0t 0r   c                	    \        V\        4      '       d   VP                  V n        R# \        V\        4      '       d	   Wn        R# VP	                  R 4      V n        R# )rO   N)rY   r   r   r   r   )rH   r   s   &&r   rw   PdfName.__init__   s<    dG$$		DIe$$IJ/DIr   c                   V ^8  d   QhRR/# rB   r   )r   s   "r   r   r      s     , ,S ,r   c                	8    V P                   P                  R 4      # rN   )r   r'   rG   s   &r   name_as_strPdfName.name_as_str   s    yy
++r   c                    V ^8  d   QhRRRR/# rS   r   )r   s   "r   r   r      s        F  t  r   c                	    \        V\        4      ;'       d"    VP                  V P                  8H  ;'       g    WP                  8H  # r   )rY   r   r   rZ   s   &&r   r[   PdfName.__eq__   s:    ug&BB5::+B   ii	 r   c                   V ^8  d   QhRR/# rb   r   )r   s   "r   r   r      s      # r   c                	,    \        V P                  4      # r   )rd   r   rG   s   &r   re   PdfName.__hash__   s    DIIr   c                   V ^8  d   QhRR/# rB   r   )r   s   "r   r   r      s     ? ?# ?r   c                	`    V P                   P                   R \        V P                  4       R2# )())rX   r,   reprr   rG   s   &r   __repr__PdfName.__repr__   s)    ..))*!DO+<A>>r   c                    V ^8  d   QhRRRR/# )r   datar   r   r   r   )r   s   "r   r   r      s     3 35 3W 3r   c                	8    V ! \         P                  V4      4      # r   )	PdfParserinterpret_name)clsr   s   &&r   from_pdf_streamPdfName.from_pdf_stream   s    9++D122r   z#%/()<>[]{}c                   V ^8  d   QhRR/# rL   r   )r   s   "r   r   r      s      5 r   c                	    \        R 4      pV P                   F>  pW P                  9   d   VP                  V4       K&  VP	                  RV,          4       K@  	  \        V4      # )   /s   #%02X)	bytearrayr   allowed_charsappendextendr   )rH   resultr   s   &  r   rP   PdfName.__bytes__   sM    4A&&&a hl+	 
 V}r   )r   N)r,   r-   r.   r/   r>   rw   r   r[   re   r   classmethodr   r   rangeordr   rP   r1   )cs   0r   r   r      sn    
K0, 
? 3 3 b#'=*I=a3q6=*IIM  +Js   A/r   c                  "    ] tR tRtR R ltRtR# )PdfArrayi  c                   V ^8  d   QhRR/# rL   r   )r   s   "r   r   PdfArray.__annotate__  s     D D5 Dr   c                	N    R RP                  R V  4       4      ,           R,           # )s   [     c              3  8   "   T F  p\        V4      x  K  	  R # 5ir   )pdf_repr)r"   xs   & r   r$   %PdfArray.__bytes__.<locals>.<genexpr>  s      ;d!ds   s    ])r(   rG   s   &r   rP   PdfArray.__bytes__  s!    tyy ;d ;;;eCCr   r   N)r,   r-   r.   r/   rP   r1   r   r   r   r   r     s    D Dr   r   c                  :    ] tR tRtR R ltR R ltR R ltRtR	# )
PdfDicti  c               $    V ^8  d   QhRRRRRR/# )r   rz   r
   r{   r   r   r6   r   )r   s   "r   r   PdfDict.__annotate__  s!     1 1s 13 14 1r   c                	~    VR 8X  d#   \         P                  P                  WV4       R# W VP                  R4      &   R# )r   rO   N)collectionsUserDict__setattr__r   r~   s   &&&r   r   PdfDict.__setattr__  s0    &=  ,,T>+0J'(r   c                    V ^8  d   QhRRRR/# )r   rz   r
   r   zstr | time.struct_timer   )r   s   "r   r   r     s      s '= r   c                	     WP                  R 4      ,          p\        T\        4      '       d   \        T4      pTP                  R4      '       Ed   TP                  R4      '       d
   TR,          pRp\        T4      ^8  dL   T^,          p\        TR,          4      ^<,          p\        T4      ^8  d   T\        TR,          4      ,          pRR\        T4      ^,
           p\        P                  ! TR\        T4      ^,            T4      pTR
9   dK   X^<,          pTR	8X  d
   TR,          p\        P                  ! \        P                  ! T4      T,           4      pT#   \         d   p\        T4      ThRp?ii ; i)rO   NDatezD::r   NNZ:      N:      Nz%Y%m%d%H%M%S+)r   -)r   r   AttributeErrorrY   r   r)   endswith
startswithr&   r;   timestrptimegmtimecalendartimegm)rH   rz   r{   erelationshipoffsetr   s   &&     r   __getattr__PdfDict.__getattr__  s;   	-J/0E eU##&E<<%%b	L5zB$RyU5\*R/u:?c%,//F#$4c%j1n5FMM%(9#f+/":FCEz)"3&bLFHOOE$:V$CD-  	- %1,	-s   E! !E=,E88E=c                   V ^8  d   QhRR/# rL   r   )r   s   "r   r   r   (  s      5 r   c                	P   \        R 4      pV P                  4        Fl  w  r#Vf   K  \        V4      pVP                  R4       VP                  \	        \        V4      4      4       VP                  R4       VP                  V4       Kn  	  VP                  R4       \	        V4      # )   <<   
r   s   
>>)r   itemsr   r   r   r   )rH   outrz   r{   s   &   r   rP   PdfDict.__bytes__(  s    **,JC}UOEJJuJJuWS\*+JJtJJu ' 	

7Szr   r   N)r,   r-   r.   r/   r   r  rP   r1   r   r   r   r   r     s    16 r   r   c                  .    ] tR tRtR R ltR R ltRtR# )	PdfBinaryi6  c                    V ^8  d   QhRRRR/# )r   r   zlist[int] | bytesr   r6   r   )r   s   "r   r   PdfBinary.__annotate__7  s      . 4 r   c                	    Wn         R # r   r   )rH   r   s   &&r   rw   PdfBinary.__init__7  s    	r   c                   V ^8  d   QhRR/# rL   r   )r   s   "r   r   r  :  s     B B5 Br   c                	T    R RP                  R V P                   4       4      ,          # )s   <%s>r   c              3  4   "   T F  pR V,          x  K  	  R# 5i)s   %02XNr   r"   r   s   & r   r$   &PdfBinary.__bytes__.<locals>.<genexpr>;  s     !Ay!'A++ys   )r(   r   rG   s   &r   rP   PdfBinary.__bytes__:  s     !Atyy!AAAAr   r  N)r,   r-   r.   r/   rw   rP   r1   r   r   r   r  r  6  s    B Br   r  c                  .    ] tR tRtR R ltR R ltRtR# )	PdfStreami>  c               $    V ^8  d   QhRRRRRR/# )r   
dictionaryr   bufr   r   r6   r   )r   s   "r   r   PdfStream.__annotate__?  s!      7  4 r   c                	    Wn         W n        R # r   )r  r  )rH   r  r  s   &&&r   rw   PdfStream.__init__?  s    $r   c                   V ^8  d   QhRR/# rL   r   )r   s   "r   r   r  C  s     + + +r   c                	l    V P                   R ,          pTR8X  d@    T P                   R,          p\        P                  ! T P                  \        T4      R7      # R\        T4       R2p\        T4      h  \         d    T P                  u # i ; i  \         d    T P                   R,          p Li ; i)s   Filters   FlateDecodes   DL   Length)bufsizezstream filter z unknown/unsupported)r  r   r  zlib
decompressr;   r   NotImplementedError)rH   filterexpected_lengthr   s   &   r   r'   PdfStream.decodeC  s    	__Y/F ^#="&//%"8 ??488S5IJJ"4<.0DEC%c**  	88O	
  ="&//)"<=s"   A5 B 5BBB32B3)r  r  N)r,   r-   r.   r/   rw   r'   r1   r   r   r   r  r  >  s    + +r   r  c                    V ^8  d   QhRRRR/# )r   r   r   r   r   r   )r   s   "r   r   r   S  s        r   c                n   V R J d   R# V RJ d   R# V f   R# \        V \        \        \        \        34      '       d   \        V 4      # \        V \        \        34      '       d   \        V 4      P                  R4      # \        V \        P                  4      '       d5   R\        P                  ! RV 4      P                  R4      ,           R,           # \        V \        4      '       d   \        \        V 4      4      # \        V \        4      '       d   \        \        V 4      4      # \        V \        4      '       d   \        \!        V 4      4      # \        V \
        4      '       dG   V P#                  R	R
4      p V P#                  RR4      p V P#                  RR4      p RV ,           R,           # \        V 4      # )Ts   trueFs   falses   nullrO   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))rY   r   r   r   r  r   r;   floatr
   r   r   struct_timestrftimedictlistr   r   replace)r   s   &r   r   r   S  sB   Dy	
e	
	A(I>	?	?Qx	AU|	$	$1v}}Z((	At''	(	(oq9@@LLtSS	At		WQZ  	At		Xa[!!	As		A''	Au		IIeW%IIdF#IIdF#ax$Qxr   c                      ] tR tRtRtRpR R lltR R ltR R	 ltR
 R ltR R lt	R R lt
R R ltR R ltR R ltR R ltR R ltRqR R lltR R ltR R ltR  R! lt]R" R# l4       tR$ R% ltRqR& R' lltR(tR)tR*tR+t]R,,           t]R-,           tR.tR/t]],           ],           t ]!PD                  ! ]R0,           ],           R1,           ] ,           R2,           ] ,           R3,           ] ,           R4,           ],           R5,           ]!PF                  4      t$]!PD                  ! ]R0,           ],           R6,           ] ,           R2,           ] ,           R3,           ] ,           R4,           ],           ]!PF                  4      t%R7 R8 lt&R9 R: lt']!PD                  ! ]4      t(]!PD                  ! ]R;,           ],           R<,           4      t)]!PD                  ! ]R=,           4      t*]!PD                  ! ]R>,           ],           4      t+],R? R@ l4       t-]!PD                  ! RA4      t.],RrRB RC ll4       t/]!PD                  ! ]RD,           ],           R<,           4      t0]!PD                  ! ]RE,           ],           R<,           4      t1]!PD                  ! ]RF,           ],           R<,           4      t2]!PD                  ! ]RG,           ],           R<,           4      t3]!PD                  ! ]RH,           ],           R<,           4      t4]!PD                  ! ]RI,           4      t5]!PD                  ! ]RJ,           4      t6]!PD                  ! ]RK,           ],           RL,           4      t7]!PD                  ! ]RM,           4      t8]!PD                  ! ]RN,           ],           RN,           ],           RO,           ],           R<,           4      t9]!PD                  ! ]RN,           ],           RN,           ],           RP,           ],           R<,           4      t:]!PD                  ! ]RQ,           ],           R<,           4      t;]!PD                  ! RR],           RS,           ] ,           RT,           4      t<]!PD                  ! ]RU,           4      t=]!PD                  ! ]RV,           ],           R<,           4      t>],RsRW RX ll4       t?]!PD                  ! RY4      t@/ RZR[bR\R]bR^R_bR`RabRbRcbRRRRbR<R<bRdRdb]A! RZ4      R[b]A! R\4      R]b]A! R^4      R_b]A! R`4      Rab]A! Rb4      Rcb]A! RR4      RRb]A! R<4      R<b]A! Rd4      RdbtB],Re Rf l4       tC]!PD                  ! ]Rg,           ] ,           4      tD]!PD                  ! ]R3,           ],           R3,           ],           ],           4      tE]!PD                  ! Rh4      tFRi Rj ltGRtRk Rl lltHRqRm Rn lltIRotJR# )ur   ip  zpBased on
https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
Supports PDF up to 1.4
Nc               0    V ^8  d   QhRRRRRRRRR	R
RR/# )r   filenamez
str | Noner   zIO[bytes] | Noner  zbytes | bytearray | Nonestart_offsetr;   moder
   r   r6   r   )r   s   "r   r   PdfParser.__annotate__v  sF     / // / &	/
 / / 
/r   c                	   V'       d   V'       d   R p\        V4      hWn        W0n        W n        W@n        RV n        RV n        Ve   Vf   \        W4      ;V n        pRV n        VeI   V P                  V4      V n        RV n        V'       g$   \        VR4      '       d   VP                  V n        / V n        V  V  V  V  V P                  '       d   V P                  4        M{^ ;V n        V n        \        4       V n        RV n        \        4       V n        RV n        \        4       V n        . V n        . V n        RV n        RV n        / V n        \5        4       V n        RV P6                  n        V'       d   V P;                  4        R# R# )z4specify buf or f or filename, but not both buf and fFNTr   )RuntimeErrorr9  r  r   r:  should_close_bufshould_close_fileopenget_buf_from_filehasattrr   cached_objectsread_pdf_infofile_size_totalfile_size_thisr   rootroot_refinfoinfo_refpage_tree_rootpages
orig_pages	pages_reflast_xref_section_offsettrailer_dictrn   
xref_tablerv   seek_end)rH   r9  r   r  r:  r;  r   s   &&&&&& r   rw   PdfParser.__init__v  sH    1HCs## 9<( %!&AIh--DFQ%)D"=--a0DH$(D!6 2 2 !<>888 9::D 4#6	DI DM	DI DM"))D24DJ79DO!DN,0D)24D'kDO+/(MMO r   c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r<    s      9 r   c                	    V # r   r   rG   s   &r   	__enter__PdfParser.__enter__  s    r   c                    V ^8  d   QhRRRR/# )r   argsrU   r   r6   r   )r   s   "r   r   r<    s      f  r   c                	&    V P                  4        R # r   )close)rH   rZ  s   &*r   __exit__PdfParser.__exit__  s    

r   c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<    s      t r   c                	F    V P                  4        V P                  4        R # r   )	close_bufrS  rG   s   &r   start_writingPdfParser.start_writing  s    r   c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<    s      4 r   c                	    \        V P                  \        P                  4      '       d   V P                  P                  4        R V n        R # r   )rY   r  mmapr\  rG   s   &r   ra  PdfParser.close_buf  s,    dhh		**HHNNr   c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<    s      t r   c                	    V P                   '       d   V P                  4        V P                  e8   V P                  '       d$   V P                  P	                  4        R V n        R # R # R # r   )r?  ra  r   r@  r\  rG   s   &r   r\  PdfParser.close  sI       NN66$"8"8"8FFLLNDF #9r   c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<    s     $ $$ $r   c                	z    V P                   f   Q hV P                   P                  ^ \        P                  4       R # r   )r   seekosSEEK_ENDrG   s   &r   rS  PdfParser.seek_end  s(    vv!!!Ar{{#r   c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<    s     $ $d $r   c                	\    V P                   f   Q hV P                   P                  R4       R # )Ns	   %PDF-1.4
)r   r   rG   s   &r   write_headerPdfParser.write_header  s"    vv!!!]#r   c                    V ^8  d   QhRRRR/# )r   r	   r
   r   r6   r   )r   s   "r   r   r<    s     * *s *t *r   c                	    V P                   f   Q hV P                   P                  RV R2P                  4       4       R # )Nz% 
)r   r   r   )rH   r	   s   &&r   write_commentPdfParser.write_comment  s3    vv!!!r!BZ&&()r   c                   V ^8  d   QhRR/# )r   r   r@   r   )r   s   "r   r   r<    s      0 r   c                	   V P                   f   Q hV P                  4        V P                  V P                   P                  4       4      V n        V P                  ^ 4      V n        V P                  4        V P                  V P                  \        R4      V P
                  R7       V P                  V P
                  \        R4      \        V P                  4      V P                  R7       V P                  # )N   Catalog)TypePages   Pages)r}  CountKids)r   del_rootnext_object_idr   rI  rO  rewrite_pages	write_objr   r&   rM  rG   s   &r   write_catalogPdfParser.write_catalog  s    vv!!!++DFFKKM:,,Q/t}}7:+>dnnUNN"djj/	 	 	
 }}r   c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<    s      t r   c                	   . p\        V P                  4       F  w  r#V P                  V,          pV P                  VP                   VP                  V\        R 4      ,          4       W0P                  9  d   Kb  / pVP                  4        F  w  rgWuVP                  4       &   K  	  V P                  VR&   V P                  ! R/ VB p\        V P                  4       F  w  rW8X  g   K  WP                  V	&   K  	  K  	  V Fd  pV'       g   K  V P                  V,          pVP                  V P                  9   d   V P                  VP                   VP                  R R4      pKc  	  . V n        R# )s   ParentParentNr   )r   rN  rD  rR  r<   r   r   rM  r	  r   rO  
write_pager    )rH   pages_tree_nodes_to_deleteipage_ref	page_infostringified_page_inforz   r{   new_page_refjcur_page_refpages_tree_node_refpages_tree_nodes   &            r   r  PdfParser.rewrite_pages  s:   %'"$T__5KA++H5I 2 23&--i	8J.KLzz)$&!'oo/
;@coo&78 0 /3nn!(+??I3HIL#,TZZ#8+$0JJqM $9 6& $>%%"&"5"56I"J&00DOOC(;(E(EF&5&9&9)T&J# $> r   c                    V ^8  d   QhRRRR/# )r   new_root_refIndirectReference | Noner   r6   r   )r   s   "r   r   r<    s     
 
4
	
r   c                	h   V P                   f   Q hV'       d   V P                  4        Wn        V P                  '       d"   V P	                  R V P                  4      V n        V P                  P                  V P                   4      p\        V P                  4      pRV P                  RV/pV P                  e   V P                  VR&   V P                  '       d   V P
                  VR&   W n	        V P                   P                  R\        \        V4      4      ,           RV,          ,           4       R # )N   Root   Size   Prev   Infos   trailer
s   
startxref
%d
%%%%EOF)r   r  rI  rJ  r  rK  rR  r   r&   rP  r   r   )rH   r  
start_xrefnum_entriesrQ  s   &&   r   write_xref_and_trailer PdfParser.write_xref_and_trailer  s     vv!!!MMO(M999 NN4;DM__**4662
$//*T]][0
 ((4$($A$AL!999$(MML!(2%GL)*+)J67	
r   c               (    V ^8  d   QhRRRRRRRR/# )r   refzint | IndirectReference | Noneobjsr   dict_objr   r@   r   )r   s   "r   r   r<    s,     : :1::=:KN:	:r   c                	    \        V\        4      '       d   V P                  V,          MTpR V9  d   \        R4      VR &   RV9  d   V P                  VR&   V P
                  ! V.VO5/ VB # )r}     Pager  )rY   r;   rM  r   rO  r  )rH   r  r  r  obj_refs   &&*, r   r  PdfParser.write_page  se     &0S%9%9$**S/s!&w/HV8#!%HX~~g9999r   c               (    V ^8  d   QhRRRRRRRR/# )r   r  r  r  r   r  r   r@   r   )r   s   "r   r   r<    s,      +47EH	r   c                	   V P                   f   Q hV P                   pVf!   V P                  VP                  4       4      pM3VP                  4       VP                  3V P                  VP
                  &   VP                  \        \        V!  4      4       VP                  RR 4      pVe   \        V4      VR&   V'       d   VP                  \        V4      4       V F  pVP                  \        V4      4       K  	  Ve4   VP                  R4       VP                  V4       VP                  R4       VP                  R4       V# )NstreamLengths   stream
s   
endstream
s   endobj
)r   r  r   r=   rR  r<   r   r   rh   r   r&   r   )rH   r  r  r  r   r  objs   &&*,   r   r  PdfParser.write_obj  s     vv!!!FF;%%affh/C./ffh-GDOOCMM*	'-./h-!$VHXGGHX&'CGGHSM" GGK GGFOGG$%	
r   c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<  1  s     ; ;$ ;r   c                	    V P                   f   R # V P                  V P                   P                   V P                  V P                  R,          P                   R # )Nr  )rI  rR  r<   rH  rG   s   &r   r  PdfParser.del_root1  s@    == OODMM334OODIIh/99:r   c                    V ^8  d   QhRRRR/# )r   r   r   r   zbytes | mmap.mmapr   )r   s   "r   r   r<  8  s     	 	Y 	+< 	r   c                	   \        V R 4      '       d   V P                  4       # \        V R4      '       d   V P                  4       #  \        P                  ! V P	                  4       ^ \        P
                  R7      #   \         d     R# i ; i)	getbuffergetvalue)accessr   )rC  r  r  rf  filenoACCESS_READ
ValueError)r   s   &r   rB  PdfParser.get_buf_from_file7  sj    1k"";;= Q
##::<yyQt7G7GHH s   4A; ;B
	B
c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<  C  s     "( "(t "(r   c                	   V P                   f   Q h\        V P                   4      V n        V P                  V P                  ,
          V n        V P                  4        \        V P                  P                  R4      R JR4       V P                  R,          V n	        V P                  f   Q hV P                  P                  RR 4      V n
        \        V P                  V P                  4      4      V n        V P                  f   \        4       V n        M)\        V P                  V P                  4      4      V n        \        RV P                  9   R4       \        V P                  R,          R8H  R4       \        V P                  P                  R4      R JR	4       \        \        V P                  R,          \         4      R
4       V P                  R,          V n        V P"                  f   Q hV P                  V P"                  4      V n        V P'                  V P$                  4      V n        V P(                  R,          V n        R # )Nr  zRoot is missingr     Typez/Type missing in Rootr|  z/Type in Root is not /Catalogr  z/Pages missing in Rootz+/Pages in Root is not an indirect reference:NNN)r  r&   rF  r:  rG  read_trailerr8   rQ  r    rI  rK  r   read_indirectrH  rJ  rY   r@   rO  rL  linearize_page_treerM  rN  rG   s   &r   rE  PdfParser.read_pdf_infoC  s   xx###"488}"22T5F5FF!!'*$68I	
 ))'2}}((())--gt<D..t}}=>	== 	DI 2 24== ABDIw$))35LMIIg*,.M	
 	IIMM(#4/1I	
 	tyy*,=>9	
 8,~~)))"00@--d.A.AB
 **Q-r   c                    V ^8  d   QhRRRR/# )r   r  z
int | Noner   r@   r   )r   s   "r   r   r<  g  s      Z ;L r   c                	     \        \        V P                  P                  4       4      ^,           ^ 4      pVe   V^ 3V P                  VP
                  &   V#   \         d    \        ^^ 4      p L:i ; i)r   )r@   maxrR  r   r  r<   )rH   r  	references   && r   r  PdfParser.next_object_idg  sm    	0)#doo.B.B.D*E*I1MI 4:A;DOOI//0	  	0)!Q/I	0s   4A A10A1s   [][()<>{}/%]s$   [][()<>{}/%\000\011\012\014\015\040]s   [\000\011\012\014\015\040]s#   [\000\011\012\014\015\0400-9a-fA-F]   *   +s   [\000\011\014\040]*s   [\r\n]+s   trailers   <<(.*>>)s	   startxrefs   ([0-9]+)s   %%EOF   $s	   <<(.*?>>)c                   V ^8  d   QhRR/# rp   r   )r   s   "r   r   r<    s     ? ?d ?r   c                	   V P                   f   Q h\        V P                   4      R,
          pWP                  8  d   V P                  pV P                  P	                  V P                   V4      p\        VR JR4       TpV'       d@   TpV P                  P	                  V P                   VP                  4       ^,           4      pKG  V'       g   TpVf   Q hVP                  ^4      p\        VP                  ^4      4      V n	        V P                  V4      V n        \        4       V n        V P                  V P                  R7       RV P                  9   d%   V P                  V P                  R,          4       R # R # )N @  ztrailer end not foundxref_section_offsetr  )r  r&   r:  re_trailer_endsearchr8   startgroupr;   rP  interpret_trailerrQ  rn   rR  read_xref_tableread_prev_trailer)rH   search_start_offsetm
last_matchtrailer_datas   &    r   r  PdfParser.read_trailer  s.   xx###!$((me3!2!22"&"3"3&&txx1DEq}.EF
J##**488QWWY^DAA}}wwqz(+AGGAJ% 22<@#+1N1NOd'''""4#4#4W#=> (r   c                    V ^8  d   QhRRRR/# )r   r  r;   r   r6   r   )r   s   "r   r   r<    s     : :S :T :r   c                	   V P                   f   Q hV P                  VR7      pV P                  P                  V P                   W"R,            4      p\	        VR JR4       Vf   Q hVP                  ^4      p\	        \        VP                  ^4      4      V8H  R4       V P                  V4      pRV9   d   V P                  VR,          4       R # R # )Nr  r  zprevious trailer not foundzGxref section offset in previous trailer doesn't match what was expectedr  )	r  r  re_trailer_prevr  r8   r  r;   r  r  )rH   r  trailer_offsetr  r  rQ  s   &&    r   r  PdfParser.read_prev_trailer  s    xx###--BU-V  ''HH^u&<=
 	q}.JK}}wwqz
O22U	
 --l;l"""<#89 #r   s   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r-  r  s   >>c                    V ^8  d   QhRRRR/# )r   r  r   r   zdict[bytes, Any]r   )r   s   "r   r   r<    s      U 7G r   c           	     	   / p^ p V P                   P                  W4      pV'       ga   V P                  P                  W4      p\        VRJ;'       d    VP	                  4       \        V4      8H  R\        WR 4      ,           4       MfV P                  VP                  ^4      4      p\        V\        4      '       g   Q hV P                  WP	                  4       4      w  rgWbV&   Vf   MTpK  \        RV9   ;'       d    \        VR,          \        4      R4       \        RV9   ;'       d    \        VR,          \        4      R4       V# )r   Nz+name not found in trailer, remaining data: r  z&/Size not in trailer or not an integerr  z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endr8   endr&   r   r   r  rY   r   	get_valuer;   r@   )r   r  trailerr  r  rz   r{   value_offsets   &&      r   r  PdfParser.interpret_trailer  s*   !!,7AOO)),?&TMBBaeeg\1B&BA<012
 $$QWWQZ0Cc5))))"%--eeg"FE CL#!FwDD:gg.>#D4	
 	wRR:gg.>@Q#R?	
 r   s   ([^#]*)(#([0-9a-fA-F]{2}))?c               $    V ^8  d   QhRRRRRR/# )r   rawr   as_textr4   r   zstr | bytesr   )r   s   "r   r   r<    s!     
 
 
 
+ 
r   c                	   R pV P                   P                  V4       F  pVP                  ^4      '       dR   W4P                  ^4      \        P	                  VP                  ^4      P                  R4      4      ,           ,          pKk  W4P                  ^4      ,          pK  	  V'       d   VP                  R4      # \        V4      # )r   rO   zutf-8)re_hashes_in_namefinditerr  r   fromhexr'   r   )r   r  r  r   r  s   &&&  r   r   PdfParser.interpret_name  s    &&//4Awwqzz
Y%6%6qwwqz7H7H7T%UUU
"	 5
 ;;w'';r   s   null(?=s   true(?=s   false(?=s   ([-+]?[0-9]+)(?=s)   ([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=s   \[   ]s   <(s   *)>r0  s   ([-+]?[0-9]+)s   R(?=s   obj(?=s	   endobj(?=r/  s	   %[^\r\n]*s   )*s   stream\r?\ns   endstream(?=c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   r   bytes | bytearray | mmap.mmapr  r;   expect_indirectr  max_nestingr   ztuple[Any, int | None]r   )r   s   "r   r   r<  +  sC     I" I"+I" I" 2	I"
 I" 
 I"r   c                	   V^ 8X  d   R# V P                   P                  W4      pV'       d   VP                  4       pV P                  P                  W4      pV'       Ed   \	        \        VP                  ^4      4      ^ 8  R4       \	        \        VP                  ^4      4      ^ 8  R4       \	        VRJ ;'       g@    V\        \        VP                  ^4      4      \        VP                  ^4      4      4      8H  R4       V P                  WP                  4       V^,
          R7      w  rgVf   VR3# V P                  P                  W4      p\	        VRJR4       Vf   Q hWeP                  4       3# \	        V'       * R4       V P                  P                  W4      pV'       d   \	        \        VP                  ^4      4      ^ 8  R4       \	        \        VP                  ^4      4      ^ 8  R	4       \        \        VP                  ^4      4      \        VP                  ^4      4      4      VP                  4       3# V P                  P                  W4      pV'       Ed   VP                  4       p/ pV P                  P                  W4      pTp	V'       gp   V	f   Q hV P                  WV^,
          R7      w  rV	f   VR3# V P                  WV^,
          R7      w  rWV
&   V	f   VR3# V P                  P                  W4      pKw  VP                  4       p	V P                  P                  W4      pV'       d   VP                  R
4      pVe   \        V\
        4      '       g   RV R2p\!        V4      hWP                  4       VP                  4       V,            pV P"                  P                  WP                  4       V,           4      p\	        VRJR4       Vf   Q hVP                  4       p	\%        \'        V4      V4      V	3# \'        V4      V	3# V P(                  P                  W4      pV'       d   VP                  4       p. pV P*                  P                  W4      pTp	V'       gY   V	f   Q hV P                  WV^,
          R7      w  rVP-                  V4       V	f   VR3# V P*                  P                  W4      pK`  WP                  4       3# V P.                  P                  W4      pV'       d   RVP                  4       3# V P0                  P                  W4      pV'       d   RVP                  4       3# V P2                  P                  W4      pV'       d   RVP                  4       3# V P4                  P                  W4      pV'       d:   \7        V P9                  VP                  ^4      4      4      VP                  4       3# V P:                  P                  W4      pV'       d+   \        VP                  ^4      4      VP                  4       3# V P<                  P                  W4      pV'       d+   \?        VP                  ^4      4      VP                  4       3# V P@                  P                  W4      pV'       d   \C        R VP                  ^4       4       4      p\E        V4      ^,          ^8X  d   VP-                  \G        R4      4       \B        PI                  VPK                  R4      4      VP                  4       3# V PL                  P                  W4      pV'       d    V PO                  WP                  4       4      # R\Q        WV^ ,            4       2p\!        V4      h)r   Nz<indirect object definition: object ID must be greater than 0z;indirect object definition: generation must be non-negativez2indirect object definition different than expected)r  z(indirect object definition end not foundz$indirect object definition not foundz;indirect object reference: object ID must be greater than 0z:indirect object reference: generation must be non-negativer#  z&bad or missing Length in stream dict (r   zstream end not foundTFc              3  6   "   T F  qR 9   g   K  Vx  K  	  R# 5i)s   0123456789abcdefABCDEFNr   r  s   & r   r$   &PdfParser.get_value.<locals>.<genexpr>  s      #%a.G)G:s   
   0rO   zunrecognized object: )NN))
re_commentr  r  re_indirect_def_startr8   r;   r  r@   r  re_indirect_def_endre_indirect_referencere_dict_startr  re_stream_startr    rY   r+   re_stream_endr  r   re_array_startre_array_endr   re_nullre_truere_falser  r   r   re_intre_realr1  re_string_hexr   r&   r   r  r'   re_string_litget_literal_stringr   )r   r   r  r  r  r  rU   object_offsetr   current_offsetrz   r{   
stream_lenr   stream_dataresults
hex_strings   &&&&&            r   r  PdfParser.get_value*  sS    !NN  .UUWF%%++D91"AGGAJ!#N #AGGAJ1$M #4' G G"$S_c!''!*oFGD	 %(MMeeg;? %2 %!F $t|#''--dBA"I = =557?"!G	
 %%++D9"AGGAJ!#M #AGGAJ1$L %S_c!''!*oFOO##D11UUWF%'F%%d3A)/N%111&)mmkAo '4 '# ")!4<'(+kAo )6 )% $s!)!4<'OO))$?UUWN##))$?A#ZZ	2
%Z
C-H-HB:,aPC(--"557QUUWz-AB%%++D%%'J2FG&q}6LM}$}!" +>NN6?N22$$T2UUWFG  &&t4A#N%111(+kAo )6 )% u%!)"D=($$**4@EEG##KKd+= KKd+= LLt,!%%'>!KKd+3--aggaj9:AEEGCCJJT*qwwqz?AEEG++KKd+$aeeg--##D1" #771:# J :"a'!!#d),$$Z%6%6z%BCQUUWLL##D1))$88%d4"+E&F%GHS!!r   sF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))   nr     r      t   	   b      f   r.  c               $    V ^8  d   QhRRRRRR/# )r   r   r  r  r;   r   ztuple[bytes, int]r   )r   s   "r   r   r<    s$     " "0":="	"r   c                	   ^ p\        4       pV P                  P                  W4       EF  pVP                  WVP	                  4        4       VP                  ^4      '       d;   VP                  V P                  VP                  ^4      ^,          ,          4       EMVP                  ^4      '       d3   VP                  \        VP                  ^4      R,          ^4      4       MVP                  ^4      '       d   MVP                  ^4      '       d   VP                  R4       MVP                  ^4      '       d   VP                  R4       V^,          pMUVP                  ^4      '       d?   V^ 8X  d   \        V4      VP                  4       3u # VP                  R4       V^,          pVP                  4       pEK  	  Rp\        V4      h)r   :r   NNr  r/  r-  zunfinished literal string)r   re_lit_str_tokenr  r   r  r  escaped_charsr   r;   r   r  r+   )r   r   r  nesting_depthr   r  r   s   &&&    r   r  PdfParser.get_literal_string  sG    %%..t<AMM$	23wwqzzc//
1>?c!''!*R.!45e$d#" A% =!%%'11d#"UUWF% =& *S!!r   s   xrefs+   ([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c                    V ^8  d   QhRRRR/# )r   r  r;   r   r   )r   s   "r   r   r<    s      3 3 r   c                	   V P                   f   Q hRpV P                  P                  V P                   WP                  ,           4      p\	        VR JR4       Vf   Q hVP                  4       p V P                  P                  V P                   V4      pV'       g   \	        VR4        V# RpVP                  4       p\        VP                  ^4      4      p\        VP                  ^4      4      p\        WUV,           4       F  pV P                  P                  V P                   V4      p\	        VR JR4       Vf   Q hVP                  4       pVP                  ^4      R8H  pV'       d   Kk  \        VP                  ^4      4      p	\        VP                  ^4      4      V	3p
WpP                  9  g   K  WP                  V&   K  	  EK^  )NFzxref section start not foundTzxref subsection start not foundzxref entry not foundr  )r  re_xref_section_startr  r:  r8   r  re_xref_subsection_startr;   r  r   re_xref_entryrR  )rH   r  subsection_foundr  r  first_objectnum_objectsr  is_freer=   	new_entrys   &&         r   r  PdfParser.read_xref_table  s   xx### &&,,HH),=,==
 	q}.LM}}--33DHHfEA&$&G     $UUWFqwwqz?Laggaj/K<)CD&&,,TXXv>&q}6LM}$}''!*,w!$QWWQZJ!$QWWQZ* =I/-6* Er   c               $    V ^8  d   QhRRRRRR/# )r   r  r@   r  r;   r   r   r   )r   s   "r   r   r<    s"      !2  c r   c                	R   V P                   V^ ,          ,          w  r4\        WA^,          8H  RV^,           RV^ ,           RV RV 24       V P                  f   Q hV P                  V P                  W0P                  ,           \        V!  VR7      ^ ,          pWPP                  V&   V# )r   zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )r  r  )rR  r8   r  r  r:  r@   rD  )rH   r  r  r  r=   r{   s   &&&   r   r  PdfParser.read_indirect  s    !__SV4a& *3q6(/#a& J//9l+fXO	

 xx###HH&&&-s3#	  

  $)C r   c                    V ^8  d   QhRRRR/# )r   nodezPdfDict | Noner   zlist[IndirectReference]r   )r   s   "r   r   r<  %  s      "	 r   c                	    Ve   TMV P                   p\        VR,          R8H  R4       . pVR,           FV  pV P                  V4      pVR,          R8X  d   VP                  V4       K5  VP	                  V P                  VR7      4       KX  	  V# )Nr  r  z%/Type of page tree node is not /Pagess   Kidsr  )r3  )rL  r8   r  r   r   r  )rH   r3  	page_noderM  kid
kid_objects   &&    r   r  PdfParser.linearize_page_tree%  s     !,D$2E2E	g(*,S	
 W%%C++C0J'"g-S!T55:5FG & r   )r  rD  r   rG  rF  r9  rJ  rK  rP  rN  rL  rM  rO  rH  rI  r?  r@  r:  rQ  rR  )NNNr   rbr   rW   )Nr   )r   )Kr,   r-   r.   r/   r0   rw   rW  r]  rb  ra  r\  rS  rs  rx  r  r  r  r  r  r  staticmethodrB  rE  r  	delimiterdelimiter_or_ws
whitespacewhitespace_or_hexwhitespace_optionalwhitespace_mandatorywhitespace_optional_no_nlnewline_onlynewlinerecompileDOTALLr  r  r  r  re_whitespace_optionalr  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  r1   r   r   r   r   r   p  sC   
/b
$$*:
4:0; 	 	"(H !I>O/J?$t+%, 7L',69RRGZZ
	
	 	 		
 	 	 	 	 		 
	 	 			N jj
	
	 	 		
 	 	 	 	 		 
	 			O?.:"  ZZ(;<jj
-	.
	 	G JJ2V;<M**069<OOPK < 

#BC
 
 jj,{:_LuTUGjj,{:_LuTUGzz-<NQVVWHZZ22_DuLF jj
7	8
	 	G ZZ 3f <=N::1E9:LJJf$'887BM JJ2V;<MJJ
	
	 	 		
 	 	 		 JJ
	
	 	 		
 	 	 		 **m+o=E ##m3g=FJ jj!4!FGOJJ..@5HM I" I"V zzRee 	e 	e	
 	e 	d 	d 	u 	D	5 	D	5 	D	5 	D	5 	D	5 	D	4 	D	4  	E
E!M& " "6 JJ':X'E'OP!zz
	
	 	 		
 	  JJNOMB" r   r   )%
__future__r   r   r   r   rf  rn  rD  r   r%  typingr   r   TYPE_CHECKINGr   r   r
   r   	_DictBaser   r   r)   r>  r+   r8   r:   r@   rh   rn   r   r5  r   r   r  r  r   r   r   r   r   <module>rL     s   "     	 	   "$$S5[#%56I$$I
7*(*(* 	(* 	(	*
 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(*  	(!*" 	(#*$ 	(%*& 	('*( 	()** 	(+*, 	(-*. 	(/*0 	(1*2 	(3*4 	(5*6 	(7*8 	(9*: 	(;*< 	(=*> 	(?*@ 	(A*B 	(C*D 	(E*F 	(((((((S*ZJ	\ 	,
Z 
7. 7(9) 9
[ [|& &RDtCy D
-i -`B B+ +*:C Cr   