
    )i                     B   S SK r S SKrS SKrS SKrS SKJrJrJrJr  S SK	J
r
JrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJrJrJr  SSKJr  SSKJ r   SS	K!J"r"  SS
K#J$r$J%r%J&r&  SSK'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3  SSK4J5r5J6r6J7r7J8r8  SSK9J:r:J;r;J<r<J=r=J>r>  \R~                  " \@5      rA " S S\$5      rB " S S\C5      rD " S S\)5      rE " S S\)5      rF " S S\)5      rG " S S\)5      rH " S S\H5      rI " S S\J5      rK " S S\J5      rL " S  S!\H5      rM " S" S#\M5      rN\7" S$5      rO\7" S%5      rP\7" S&5      rQ " S' S(5      rR " S) S*\R5      rS " S+ S,\S5      rT " S- S.\R5      rU " S/ S05      rV " S1 S2\V5      rW " S3 S4\W5      rX " S5 S65      rY " S7 S8\"5      rZg)9    N)sha256md5sha384sha512)AnyCallableDictIterableIteratorKeysViewListOptionalSequenceTupleTypeUnioncast)default_backend)Cipher
algorithmsmodes   )settings)Arcfour)
NumberTree)PDFSyntaxError	PDFParserPDFStreamParser)DecipherCallablePDFExceptionPDFTypeError	PDFStreamPDFObjectNotFounddecipher_all	int_value	str_value
list_value
uint_value
dict_valuestream_value)PSEOFliteral_nameLITKWD)choplistdecode_textnunpackformat_int_romanformat_int_alphac                       \ rS rSrSrg)PDFNoValidXRef1    N__name__
__module____qualname____firstlineno____static_attributes__r7       T/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/pdfminer/pdfdocument.pyr5   r5   1       r>   r5   c                       \ rS rSrSrSrg)PDFNoValidXRefWarning5   zlLegacy warning for missing xref.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r7   Nr9   r:   r;   r<   __doc__r=   r7   r>   r?   rB   rB   5       
 	r>   rB   c                       \ rS rSrSrg)PDFNoOutlines>   r7   Nr8   r7   r>   r?   rH   rH   >   r@   r>   rH   c                       \ rS rSrSrg)PDFNoPageLabelsB   r7   Nr8   r7   r>   r?   rK   rK   B   r@   r>   rK   c                       \ rS rSrSrg)PDFDestinationNotFoundF   r7   Nr8   r7   r>   r?   rN   rN   F   r@   r>   rN   c                       \ rS rSrSrg)PDFEncryptionErrorJ   r7   Nr8   r7   r>   r?   rQ   rQ   J   r@   r>   rQ   c                       \ rS rSrSrg)PDFPasswordIncorrectN   r7   Nr8   r7   r>   r?   rT   rT   N   r@   r>   rT   c                       \ rS rSrSrSrg)PDFEncryptionWarningR   zqLegacy warning for failed decryption.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r7   NrD   r7   r>   r?   rW   rW   R   rF   r>   rW   c                       \ rS rSrSrSrg)"PDFTextExtractionNotAllowedWarning[   zLegacy warning for PDF that does not allow extraction.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r7   NrD   r7   r>   r?   rZ   rZ   [   rF   r>   rZ   c                       \ rS rSrSrg)PDFTextExtractionNotAllowedd   r7   Nr8   r7   r>   r?   r]   r]   d   r@   r>   r]   c                   4   ^  \ rS rSrS\SS4U 4S jjrSrU =r$ ) PDFTextExtractionNotAllowedErrorh   argsreturnNc                 F   > SSK Jn  U" S[        5        [        TU ]  " U6   g )Nr   )warnzhPDFTextExtractionNotAllowedError will be removed in the future. Use PDFTextExtractionNotAllowed instead.)warningsre   DeprecationWarningsuper__init__)selfrb   re   	__class__s      r?   ri   )PDFTextExtractionNotAllowedError.__init__i   s%    !7	

 	$r>   r7   )r9   r:   r;   r<   objectri   r=   __classcell__rk   s   @r?   r`   r`   h   s     f      r>   r`   ObjStmXRefCatalogc                   v    \ rS rSrS\\\4   4S jrS\\	   4S jr
S\	S\\\	   \	\	4   4S jrS\SS4S	 jrS
rg)PDFBaseXRefz   rc   c                     [         eNNotImplementedErrorrj   s    r?   get_trailerPDFBaseXRef.get_trailer{       !!r>   c                     / $ rw   r7   rz   s    r?   
get_objidsPDFBaseXRef.get_objids~   s    	r>   objidc                     [        U5      erw   )KeyErrorrj   r   s     r?   get_posPDFBaseXRef.get_pos   s    uor>   parserNc                     [         erw   rx   )rj   r   s     r?   loadPDFBaseXRef.load   r}   r>   r7   )r9   r:   r;   r<   r	   strr   r{   r
   intr   r   r   r   r   r   r=   r7   r>   r?   rt   rt   z   s\    "T#s(^ "HSM S U8C=#s+B%C "9 " "r>   rt   c                       \ rS rSrSS jrS\4S jrS\SS4S jrS\SS4S jr	S\
\\4   4S	 jrS\\   4S
 jrS\S\\\   \\4   4S jrSrg)PDFXRef   rc   Nc                      0 U l         0 U l        g rw   offsetstrailerrz   s    r?   ri   PDFXRef.__init__   s    BD')r>   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRef: offsets=%r>r   keysrz   s    r?   __repr__PDFXRef.__repr__   s    &$,,*;*;*=>>r>   r   c                      UR                  5       u  p#UR                  5       nU(       d  M-   UR	                  S5      (       a  UR                  U5        OUR                  S5      n[        U5      S:w  a  SR                  X5      n[        U5      e [        [        U5      u  pg[        XfU-   5       H  n UR                  5       u  pUR                  5       nUR                  S5      n[        U5      S:w  a  SR                  X5      n[        U5      eUu  pnUS	:w  a  Mo  S [        U
5      [        U5      4U R                  U'   M     GML  [        R                  S
U R                  5        U R!                  U5        g ! [         a    [        S5      ef = f! [         a    SR                  X5      n[        U5      ef = f! [         a    [        S5      ef = f)Nz Unexpected EOF - file corrupted?   trailer       z"Trailer not found: {!r}: line={!r}zInvalid line: {!r}: line={!r}   z$Invalid XRef format: {!r}, line={!r}   nzxref objects: %r)nextlinestripr+   r5   
startswithseeksplitlenformatmapr   
ValueErrorranger   logdebugload_trailer)rj   r   poslinef	error_msgstartnobjsr   _pos_bgenno_buse_bs                r?   r   PDFXRef.load   s   I$oo/zz|  z**C 

4 A1v{@GGU	$Y//0!$S! uem4M & 1IQ::<D JJt$q6Q; F M M!I )33*+'D='+SZW&FU# 5) H 			$dll3&!?  I$%GHHI  0;BB6P	$Y//0  M()KLLMs#   )F  F 8"G F'G Gc                     UR                  5       u  p#U[        S5      L d   [        U5      5       eUR                  5       u  p$U R                  R                  [        U5      5        [        R                  SU R                  5        g ! [         a-    UR                  S5      nU(       d  [        S5      eUS   u  p$ N{f = f)Nr   r   zUnexpected EOF - file corruptedr   z
trailer=%r)	nexttokenr.   r   
nextobjectr+   popr5   r   updater)   r   r   )rj   r   r   kwddicxs         r?   r   PDFXRef.load_trailer   s    	'')HQ#j/)33s83)((*HQ 	JsO,		,-  	

1A$%FGGtHQ		s   AB	 	4C ?C c                     U R                   $ rw   r   rz   s    r?   r{   PDFXRef.get_trailer       ||r>   c                 6    U R                   R                  5       $ rw   r   rz   s    r?   r   PDFXRef.get_objids   s    ||  ""r>   r   c                 @     U R                   U   $ ! [         a    e f = frw   )r   r   r   s     r?   r   PDFXRef.get_pos   s(    	<<&& 		s    r   rc   N)r9   r:   r;   r<   ri   r   r   r   r   r   r	   r   r{   r   r   r   r   r   r   r=   r7   r>   r?   r   r      s    *?# ?&"9 &" &"P.9 . .T#s(^ #HSM #S U8C=#s+B%C r>   r   c                   X    \ rS rSrS\4S jr\R                  " S5      rS\	SS4S jr
Srg)	PDFXRefFallback   rc   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRefFallback: offsets=%r>r   rz   s    r?   r   PDFXRefFallback.__repr__   s    .$,,2C2C2EFFr>   z^(\d+)\s+(\d+)\s+obj\br   Nc                 v   UR                  S5          UR                  5       u  p#UR                  S5      (       aC  UR                  U5        U R	                  U5        [
        R                  SU R                  5        g UR                  S5      nU R                  R                  U5      nU(       d  M  UR                  5       u  pg[        U5      n[        U5      n	S X)4U R                  U'   UR                  U5        UR                  5       u  p[        U[         5      (       ay  UR#                  S5      [$        L aa  ['        U5      n US   n[1        UR3                  5       5      n/ n  UR                  5       u  pUR5                  [7        [        U5      5        M3  GM  ! [         a     g f = f! [(         a(    [*        R,                  (       a  [/        SU-  5      eSn Nf = f! [         a     Of = f[9        U[;        U5      S-  5      n[=        U5       H  nUUS-     nUUS4U R                  U'   M     N)	Nr   r   trailer: %rzlatin-1r   NN is not defined: %rr   )r   r   r+   r   r   r   r   r   decode
PDFOBJ_CUEmatchgroupsr   r   r   
isinstancer"   getLITERAL_OBJSTMr*   r   r   STRICTr   r   get_dataappendr   minr   r   )rj   r   r   
line_bytesr   mobjid_sgenno_sr   gennor   objstreamnparser1objsindexobjid1s                     r?   r   PDFXRefFallback.load   s   A$*OO$5! $$Z00C !!&)		-6$$Y/D%%d+A!"WLELE#'"4DLLKK((*HQ#y))cggfo.O%c*sA
 *&//*;<"$#*#5#5#7DcN3 A   ,   ,-Cf-LMMA  3t9>*"1XE!%!)_F,15!+<DLL( &s5   F! 	F1 *4G& !
F.-F.1/G#"G#&
G32G3r7   )r9   r:   r;   r<   r   r   recompiler   r   r   r=   r7   r>   r?   r   r      s4    G# G 56J*=9 *= *=r>   r   c                       \ rS rSrSS jrS\4S jrS\SS4S jrS\	\\
4   4S jrS\\   4S	 jrS
\S\\\   \\4   4S jrSrg)PDFXRefStreami  rc   Nc                 X    S U l         S U l        S U l        S U l        S U l        / U l        g rw   )dataentlenfl1fl2fl3rangesrz   s    r?   ri   PDFXRefStream.__init__	  s,    %)	%)"&"&"&-/r>   c                      SU R                   -  $ )Nz<PDFXRefStream: ranges=%r>)r   rz   s    r?   r   PDFXRefStream.__repr__  s    +t{{;;r>   r   c           	         UR                  5       u  p#UR                  5       u  p$UR                  5       u  p%UR                  5       u  p&[        U[        5      (       a  UR	                  S5      [
        La  [        S5      eUS   nUR	                  SSU45      n[        U5      S-  S:w  a  [        S5      eU R                  R                  [        [        [        [        [        4      [        SU5      5      5        US   u  U l        U l        U l        U R                   b  U R"                  b  U R$                  c   eUR'                  5       U l        U R                   U R"                  -   U R$                  -   U l        UR,                  U l        [0        R3                  S	S
R5                  [7        [8        U R                  5      5      U R                   U R"                  U R$                  5        g )Nr   zInvalid PDF stream spec.SizeIndexr   r   zInvalid index numberWz&xref stream: objid=%s, fields=%d,%d,%dz, )r   r   r   r"   r   LITERAL_XREFr5   r   r   r   extendr   r   r   r   r/   r   r   r   r   r   r   attrsr   r   r   joinr   repr)	rj   r   r   r   r   r   r   sizeindex_arrays	            r?   r   PDFXRefStream.load  s   %%'
%%'
##%'')&),,

60B,0V !;<<f~jj1d)4{a1$ !7884sCx 98A{;STU)/&48TXxx#(<AUUUOO%	hh)DHH4||		4IIc$,-HHHHHH	
 	r>   c                     U R                   $ rw   r   rz   s    r?   r{   PDFXRefStream.get_trailer.  r   r>   c              #   D  #    U R                    H  u  p[        U5       Hx  nU R                  c   eU R                  c   eU R                  U-  nU R                  XDU R                  -    n[	        US U R
                   S5      nUS:X  d  US:X  d  Mr  X-   v   Mz     M     g 7f)Nr   r   )r   r   r   r   r1   r   )rj   r   r   ioffsetentf1s          r?   r   PDFXRefStream.get_objids1  s     "kkNU5\{{...yy,,,qii$++)=>S488_a07bAg)O " * 	s   BB B r   c                 p   SnU R                    H  u  p4X1::  a  XU-   :  a	  X!U-
  -  n  OX$-  nM!     [        U5      eU R                  c   eU R                  c   eU R                  b  U R
                  b  U R                  c   eU R                  U-  nU R                  XUU R                  -    n[        US U R                   S5      n[        X`R                  U R                  U R
                  -    5      n[        X`R                  U R
                  -   S  5      n	US:X  a  S X4$ US:X  a  XS4$ [        U5      e)Nr   r   r   )r   r   r   r   r   r   r   r1   )
rj   r   r   r   r   r	  r
  r  f2f3s
             r?   r   PDFXRefStream.get_pos=  s/   "kkNU~%%-"7& * 5/!{{&&&yy$$$xx#(<AUUUu$ii$++!56S488_a(SDHHtxx$789SDHH,./07">!1WA; 5/!r>   )r   r   r   r   r   r   r   r   )r9   r:   r;   r<   ri   r   r   r   r   r	   r   r{   r   r   r   r   r   r   r=   r7   r>   r?   r   r     sm    0<# <9  4T#s(^ 
HSM 
"S "U8C=#s+B%C "r>   r   c                   v   \ rS rSr% SrSr\\S4   \S'    S S\	\
   S\\\4   S\S	S
4S jjrS!S jrS!S jrS!S jrS	\4S jrS	\4S jrS	\4S jrS\
S	\
4S jrS\
S	\
4S jrS\S	\\
   4S jrS\
S	\\
   4S jrS\
S	\4S jrS\
S	\\
   4S jr S"S\S\S\
S\\\\4      S	\
4
S jjrS\S\S\
S	\
4S jrSrg
)#PDFStandardSecurityHandleriX  s    (N^NuAd NV.. h>/dSiz)r   r   .supported_revisionsdocidparampasswordrc   Nc                 H    Xl         X l        X0l        U R                  5         g rw   )r  r  r  init)rj   r  r  r  s       r?   ri   #PDFStandardSecurityHandler.__init__`  s     

 		r>   c                     U R                  5         U R                  U R                  ;  a  SU R                  -  n[	        U5      eU R                  5         g )NzUnsupported revision: param=%r)init_paramsrr  r  rQ   init_key)rj   r   s     r?   r  PDFStandardSecurityHandler.initi  sE    6611184::EI$Y//r>   c                    [        U R                  R                  SS5      5      U l        [        U R                  S   5      U l        [        U R                  S   S5      U l        [        U R                  S   5      U l        [        U R                  S   5      U l	        [        U R                  R                  SS	5      5      U l
        g )
NVr   RP    OULength(   )r%   r  r   vr  r(   pr&   oulengthrz   s    r?   r  &PDFStandardSecurityHandler.init_paramsq  s    4::>>#q124::c?+DJJsOR04::c?+4::c?+

x <=r>   c                 j    U R                  U R                  5      U l        U R                  c  [        eg rw   )authenticater  keyrT   rz   s    r?   r  #PDFStandardSecurityHandler.init_keyz  s+    $$T]]388&&r>   c                 2    [        U R                  S-  5      $ )N   boolr)  rz   s    r?   is_printable'PDFStandardSecurityHandler.is_printable      DFFQJr>   c                 2    [        U R                  S-  5      $ )N   r4  rz   s    r?   is_modifiable(PDFStandardSecurityHandler.is_modifiable  r8  r>   c                 2    [        U R                  S-  5      $ )N   r4  rz   s    r?   is_extractable)PDFStandardSecurityHandler.is_extractable  s    DFFRK  r>   r0  c                   ^ U R                   S:X  a$  [        U5      R                  U R                  5      $ [	        U R                  5      nUR                  U R                  S   5        [        U5      R                  UR                  5       5      n[        SS5       HA  mSR                  U4S j[        U5       5       5      n[        U5      R                  U5      nMC     X3-  nU$ )Nr   r   r      r>   c              3   B   >#    U  H  n[        UT-  45      v   M     g 7frw   bytes.0cr  s     r?   	<genexpr>7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>       @iUAE8__i   )r  r   encryptPASSWORD_PADDINGr   r   r  digestr   r   iter)rj   r0  hashresultkr  s        @r?   	compute_u$PDFStandardSecurityHandler.compute_u  s    66Q;3<''(=(=>> t,,-DKK

1&S\))$++-8F1b\HH@d3i@@ ++F3 " FMr>   c                 T   XR                   -   S S n[        U5      nUR                  U R                  5        UR                  [        R
                  " SU R                  5      5        UR                  U R                  S   5        U R                  S:  a0  [        [        U 5      R                  (       d  UR                  S5        UR                  5       nSnU R                  S:  a=  U R                  S-  n[        S	5       H  n[        US U 5      R                  5       nM!     US U $ )
Nr#  <Lr   r3  s      r   r:  2   )rN  r   r   r*  structpackr)  r  r  r   PDFStandardSecurityHandlerV4encrypt_metadatarO  r,  r   )rj   r  rQ  rR  r   r   s         r?   compute_encryption_key1PDFStandardSecurityHandler.compute_encryption_key  s    444cr:8}DFFFKKdff-.DJJqM"66Q;4d;LL/066Q;q A2YVBQZ//1 bqzr>   c                 r    UR                  S5      nU R                  U5      nUc  U R                  U5      nU$ )Nlatin1)encodeauthenticate_user_passwordauthenticate_owner_password)rj   r  password_bytesr0  s       r?   r/  'PDFStandardSecurityHandler.authenticate  s:    !2--n=;22>BC
r>   c                 V    U R                  U5      nU R                  U5      (       a  U$ g rw   )r^  verify_encryption_key)rj   r  r0  s      r?   rc  5PDFStandardSecurityHandler.authenticate_user_password  s+    ))(3%%c**Jr>   c                     U R                  U5      nU R                  S:X  a  X R                  :H  $ US S U R                  S S :H  $ )Nr   r>  )rT  r  r+  )rj   r0  r+  s      r?   rh  0PDFStandardSecurityHandler.verify_encryption_key  sB    NN366Q;;"v$$r>   c                 b  ^ XR                   -   S S n[        U5      nU R                  S:  a+  [        S5       H  n[        UR	                  5       5      nM     SnU R                  S:  a  U R
                  S-  nUR	                  5       S U nU R                  S:X  a%  [        U5      R                  U R                  5      nO^U R                  n[        SSS5       HA  mS	R                  U4S
 j[        U5       5       5      n[        U5      R                  U5      nMC     U R                  U5      $ )Nr#  r   rY  rX  r:  r      r>   c              3   B   >#    U  H  n[        UT-  45      v   M     g 7frw   rD  rF  s     r?   rI  IPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>  rK  rL  )rN  r   r  r   rO  r,  r   decryptr*  r   rP  rc  )	rj   r  rQ  r   r   r0  user_passwordrS  r  s	           @r?   rd  6PDFStandardSecurityHandler.authenticate_owner_password  s    444cr:8}66Q;2Y4;;=) 66Q;q AkkmBQ66Q;#CL008M FFM2r2&HH@d3i@@ '
 2 2= A ' ..}==r>   r   r   r   r   c                 &    U R                  XU5      $ rw   )decrypt_rc4)rj   r   r   r   r   s        r?   rq  "PDFStandardSecurityHandler.decrypt  s     d33r>   c                 :   U R                   c   eU R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   n[        U5      nUR	                  5       S [        [        U5      S5       n[        U5      R                  U5      $ )NrW  r   r   r>  )	r0  rZ  r[  r   rO  r   r   r   rq  )rj   r   r   r   r0  rQ  s         r?   ru  &PDFStandardSecurityHandler.decrypt_rc4  s    xx###hhT51"155D%8PQSRS8TT3xkkm/c#c(B/0s|##D))r>   )
r  r0  r,  r*  r)  r  r  r  r+  r(   r   rw   ) r9   r:   r;   r<   rN  r  r   r   __annotations__r   rE  r	   r   r   ri   r  r  r  r5  r6  r;  r?  rT  r^  r   r/  rc  rh  rd  rq  ru  r=   r7   r>   r?   r  r  X  sr   	1  ,2sCx1 NPe_-1#s(^GJ	 d   t  ! !U u u  &S Xe_ 5 Xe_ % %4 %>E >huo >2 +/44 4 	4
 S#X'4 
4* *S * *% *r>   r  c                      ^  \ rS rSr% Sr\\S4   \S'   SU 4S jjrS\	S\
\\\\/\4      4S jr  SS	\S
\S\S\
\\	\4      S\
\	   S\4S jjrS	\S
\S\S\4S jrS	\S
\S\S\4S jrSrU =r$ )r\  i  )r3  .r  rc   c                 0  > [         TU ]  5         SU l        [        U R                  R                  S5      5      U l        [        U R                  S   5      U l        [        U R                  S   5      U l	        [        U R                  R                  SS5      5      U l        U R                  U R                  :w  a  SU R                  -  n[        U5      e0 U l        U R                  R                  5        HM  u  p#U R                  [        US   5      5      nUc  S	U R                  -  n[        U5      eX@R                  U'   MO     U R                   U R                  S
'   U R                  U R                  ;  a  SU R                  -  n[        U5      eg )N   CFStmFStrFEncryptMetadataTz"Unsupported crypt filter: param=%rCFMz%Unknown crypt filter method: param=%rIdentityz Undefined crypt filter: param=%r)rh   r  r,  r)   r  r   cfr,   stmfstrfr5  r]  rQ   cfmitemsget_cfmdecrypt_identity)rj   r   rS  r(  r   rk   s        r?   r  (PDFStandardSecurityHandlerV4.init_params  s=   TZZ^^D12 F!34	 F!34	 $TZZ^^4Et%L M99		!<tzzII$Y//GGMMODA\!E(34AyCdjjP	(33HHQK $  $4499DHH$:TZZGI$Y//r>   namec                 L    US:X  a  U R                   $ US:X  a  U R                  $ g )NV2AESV2)ru  decrypt_aes128rj   r  s     r?   r  $PDFStandardSecurityHandlerV4.get_cfm   s+    4<###W_&&&r>   r   r   r   r   c                     U R                   (       d(  Ub%  UR                  S5      nUb  [        U5      S:X  a  U$ Uc  U R                  nU R                  U   " XU5      $ )Nr   Metadata)r]  r   r,   r  r  )rj   r   r   r   r   r  ts          r?   rq  $PDFStandardSecurityHandlerV4.decrypt  sX     $$):		&!A}aJ!><99Dxx~eD11r>   c                     U$ rw   r7   )rj   r   r   r   s       r?   r  -PDFStandardSecurityHandlerV4.decrypt_identity  s    r>   c                    U R                   c   eU R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   S-   n[        U5      nUR	                  5       S [        [        U5      S5       nUS S nUSS  n[        [        R                  " U5      [        R                  " U5      [        5       S9nUR                  5       R                  U5      $ )NrW  r   r   s   sAlTr>  backend)r0  rZ  r[  r   rO  r   r   r   r   AESr   CBCr   	decryptorr   )	rj   r   r   r   r0  rQ  initialization_vector
ciphertextciphers	            r?   r  +PDFStandardSecurityHandlerV4.decrypt_aes128  s    xx###HHkk$&r*+kk$&r*+  	 3xkkm/c#c(B/0 $Sb	"#Y
NN3II+,#%

 !((44r>   )r  r  r]  r,  r  r  r   )NN)r9   r:   r;   r<   r  r   r   r{  r  r   r   r   rE  r  r	   r   rq  r  r  r=   rn   ro   s   @r?   r\  r\    s    +/sCx/.C HXsC6G6N-O$P  +/"22 2 	2
 S#X'2 sm2 
2 c # U u 5C 5 55 5U 5 5r>   r\  c            	       D  ^  \ rS rSrSrSU 4S jjrS\S\\\	\	\
/\
4      4S jrS\S\\
   4S jrS\S\
4S	 jr SS\
S
\
S\\
   S\
4S jjr SS\
S
\
S\\
   S\
4S jjr SS\
S
\
S\\
   S\
4S jjr\S\
S\	4S j5       rS\
S\
S\
S\
4S jrS\	S\	S\
S\
4S jrSrU =r$ )PDFStandardSecurityHandlerV5i/  )rX     rc   c                   > [         TU ]  5         SU l        [        U R                  S   5      U l        [        U R                  S   5      U l        U R                  S S U l        U R                  SS U l	        U R                  SS  U l
        U R                  S S U l        U R                  SS U l        U R                  SS  U l        g )N   OEUEr#  r'  )rh   r  r,  r&   r  oeuer*  o_hasho_validation_salt
o_key_saltr+  u_hashu_validation_salt
u_key_salt)rj   rk   s    r?   r  (PDFStandardSecurityHandlerV5.init_params3  s    DJJt,-DJJt,-ffSbk!%2&&+ffSbk!%2&&+r>   r  c                 (    US:X  a  U R                   $ g )NAESV3)decrypt_aes256r  s     r?   r  $PDFStandardSecurityHandlerV5.get_cfm@  s    7?&&&r>   r  c                    U R                  U5      nU R                  X R                  U R                  5      nX0R                  :X  a  U R                  X R
                  U R                  5      n[        [        R                  " U5      [        R                  " S5      [        5       S9nUR                  5       R                  U R                  5      $ U R                  X R                  5      nX0R                   :X  a  U R                  X R"                  5      n[        [        R                  " U5      [        R                  " S5      [        5       S9nUR                  5       R                  U R$                  5      $ g )Ns                   r  )_normalize_password_password_hashr  r+  r  r  r   r   r  r   r  r   r  r   r  r  r  r  r  )rj   r  
password_brQ  r  s        r?   r/  )PDFStandardSecurityHandlerV5.authenticateF  s   --h7
"":/E/EtvvN;;&&z??DFFKDt$eii
&;_EVF ##%,,TWW55"":/E/EF;;&&z??CDt$eii
&;_EVF ##%,,TWW55r>   c                 v    U R                   S:X  a  U(       d  gSSKJn  U" U5      nUR                  S5      S S $ )Nr  r>   r   )saslprepzutf-8   )r  	_saslprepr  rb  )rj   r  r  s      r?   r  0PDFStandardSecurityHandlerV5._normalize_passwordX  s6    66Q;+)Hw'--r>   saltvectorc                 p    U R                   S:X  a  U R                  XU5      $ U R                  XSS U5      $ )z4
Compute password hash depending on revision number
rX  r   r:  )r  _r5_password_r6_password)rj   r  r  r  s       r?   r  +PDFStandardSecurityHandlerV5._password_hashb  s;     66Q;$$XV<<  !9f==r>   c                     [        U5      nUR                  U5        Ub  UR                  U5        UR                  5       $ )z%
Compute the password for revision 5
)r   r   rO  )rj   r  r  r  rQ  s        r?   r  )PDFStandardSecurityHandlerV5._r5_passwordl  s8     hDKK{{}r>   c                    [        U5      nUR                  U5        Ub  UR                  U5        UR                  5       n[         [        [        4nS=pxUS:  d  XS-
  :  a~  X-   U=(       d    S-   S-  n	U R                  USS USS U	S9n
X`R                  U
SS 5         nU" U
5      R                  5       nU
[        U
5      S-
     nUS-  nUS:  a  Mt  XS-
  :  a  M~  USS $ )	z%
Compute the password for revision 6
Nr   @   r#  r>   r>  )r0  ivr   r   )r   r   rO  r   r   _aes_cbc_encrypt_bytes_mod_3r   )rj   r  r  r  initial_hashrS  hashesround_nolast_byte_valk1e	next_hashs               r?   r  )PDFStandardSecurityHandlerV5._r6_passwordx  s     h'D!'!&&)#$$m}"}<,&-C0B6B%%!CR&Qr"XB%GA 003B89I!##%Ac!fqjMMMH m}"}< "vr>   input_bytesc                 ,    [        S U  5       5      S-  $ )Nc              3   *   #    U  H	  oS -  v   M     g7f)r   Nr7   )rG  bs     r?   rI  <PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>  s     .+Qq5+s   r   )sum)r  s    r?   r  )PDFStandardSecurityHandlerV5._bytes_mod_3  s     .+..22r>   r0  r  r   c                     [        [        R                  " U5      [        R                  " U5      5      nUR                  5       nUR                  U5      UR                  5       -   $ rw   )r   r   r  r   r  	encryptorr   finalize)rj   r0  r  r   r  r  s         r?   r  -PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sL    
s+UYYr];$$&	%	(:(:(<<<r>   r   r   c                     US S nUSS  nU R                   c   e[        [        R                  " U R                   5      [        R
                  " U5      [        5       S9nUR                  5       R                  U5      $ )Nr>  r  )	r0  r   r   r  r   r  r   r  r   )rj   r   r   r   r  r  r  s          r?   r  +PDFStandardSecurityHandlerV5.decrypt_aes256  sr     $Sb	"#Y
xx###NN488$II+,#%

 !((44r>   )	r,  r  r  r  r  r  r  r  r  r   rw   )r9   r:   r;   r<   r  r  r   r   r   r   rE  r  r/  r  r  r  r  staticmethodr  r  r  r=   rn   ro   s   @r?   r  r  /  sZ    C HXsC6G6N-O$P S Xe_ $.C .E . GK>>%*>4<UO>	> GK

%*
4<UO
	
 GK%*4<UO	0 3% 3C 3 3=E =u =E =e =
	5C 	5 	55 	5U 	5 	5r>   r  c                      \ rS rSr% Sr\\\\S.r\	\
\\   4   \S'      S"S\S\S\S\S	S
4
S jjr\" S5      rS#S\S	S
4S jjrS\S\
S\
S	\4S jrS\S	\\\   \
4   4S jrS\
S\
S	\4S jrS\
S	\4S jr\\\\\\4   rS	\\   4S jrS	\\   4S jr S\S\!\\"4   S	\4S jr#S\!\\"4   S	\4S jr$S\S	\
4S jr%S\S\
S\\&   S	S
4S  jr'S!r(g
)$PDFDocumenti  a4  PDFDocument object represents a PDF document.

Since a PDF file can be very big, normally it is not loaded at
once. So PDF document has to cooperate with a PDF parser in order to
dynamically import the data as processing goes.

Typical usage:
  doc = PDFDocument(parser, password)
  obj = doc.getobj(objid)

)r   r   r3  rX  security_handler_registryr   r  cachingfallbackrc   Nc                    X0l         / U l        / U l        0 U l        SU l        SU l        SU l        0 U l        0 U l        Xl        U R                  R                  U 5        S=U l
        =U l        U l         U R                  U5      nU R                  XU R                  5        U R                   H  nUR)                  5       nU(       d  M  SU;   a=  SU;   a  [+        US   5      n	OSn	U	[-        US   5      4U l        U R/                  U5        SU;   a'  U R                  R'                  [-        US   5      5        SU;   d  M  [-        US   5      U l          O   [1        S5      eU R                  R3                  S	5      [4        La   [6        R8                  (       a  [1        S
5      eg! [         aH    U(       a=  SUl        [#        5       nUR%                  U5        U R                  R'                  U5         GNVf = f)z1Set the document to use a given PDFParser object.NTEncryptID)r>   r>   InfoRootz(No /Root object! - Is this really a PDF?r   zCatalog not found!)r  xrefsinfocatalog
encryptiondecipher_parser_cached_objs_parsed_objsset_documentr6  r;  r?  	find_xrefread_xref_fromr5   r  r   r   r   r{   r'   r)   _initialize_passwordr   r   LITERAL_CATALOGr   r   )
rj   r   r  r  r  r   newxrefxrefr   id_values
             r?   ri   PDFDocument.__init__  s    (*
	')5948;=AC!!$'GKKKD.1D	+..(CTZZ8 JJD&&(GG#7?)'$-8H
  *H#+Z	8J-K"L))(3 		  GFO!<= )'&/:) , !!KLL<<F#?:$%9::C  	+"&)+V$

!!'*	+s   6-F( (AG:9G:   objc                    U R                   c   eU R                   u  p#[        UR                  S5      5      S:w  a  [        SU-  5      e[	        UR                  SS5      5      nU R
                  R                  U5      nUc  [        SU-  5      eU" X#U5      nUR                  U l        UR                  5       U l        UR                  5       U l	        UR                  5       U l
        U R                  c   eSU R                  l        g )NFilterStandardzUnknown filter: param=%rr   r   zUnknown algorithm: param=%rF)r  r,   r   rQ   r%   r  rq  r  r6  r;  r?  r  r  )rj   r  r  r  r(  factoryhandlers          r?   r   PDFDocument._initialize_password  s    ***		(+,
:$%?%%GHHeiiQ'(0044Q7?$%BU%JKK%1#002$224%446||''' %r>   r   r   r   c                 ^   UR                   U R                  ;   a  U R                  UR                      u  pEOMU R                  U5      u  pEU R                  (       a)  UR                   c   eXE4U R                  UR                   '   US-  U-   n XF   nU$ ! [         a    [        SU-  5      ef = f)Nr   zindex too big: %r)r   r  _get_objectsr  
IndexErrorr   )rj   r   r   r   r   r   r  r   s           r?   _getobj_objstmPDFDocument._getobj_objstm  s    <<4,,,))&,,7IT1))&1IT||||///37)!!&,,/EEM	>'C 
  	> !4u!<==	>s   B B,c                    UR                  S5      [        La#  [        R                  (       a  [	        SU-  5      e [        [        US   5      n[        UR                  5       5      nUR                  U 5        / n  UR                  5       u  pVUR                  U5        M%  ! [         a(    [        R                  (       a  [	        SU-  5      eSn Nf = f! [         a     XB4$ f = f)Nr   zNot a stream object: %rr   r   r   )r   r   r   r   r   r   r   r   r   r   r  r   r   r+   )rj   r   r   r   r   r   r   s          r?   r  PDFDocument._get_objects  s    ::f^3$%>%GHH	S&+&A
 !!23D!	!,,.C    	$%;f%DEEA	  	y	s#   B# =&C #/CC
C'&C'r   c                 ~   U R                   c   eU R                   R                  U5        U R                   R                  5       u  p4U R                   R                  5       u  p5U R                   R                  5       u  p6XB:w  aa  / nX`R                  La=  U R                   R                  5       u  p6UR	                  U5        X`R                  La  M=  [        U5      S:  a  US   nXB:w  a  [        SR                  XB5      5      eU[        S5      :w  a  [        SU-  5      eU R                   R                  5       u  p8U$ )Nr   zobjid mismatch: {!r}={!r}r   zInvalid object spec: offset=%r)
r  r   r   KEYWORD_OBJr   r   r   r   r.   r   )	rj   r   r   r   r   r   r   r   r   s	            r?   _getobj_parsePDFDocument._getobj_parse0  s   ||'''#ll,,.\\++-
<<))+ ?A---<<113 --- 1v{2? !<!C!CF!RSS#f+ !AC!GHH<<**,
r>   c                    U R                   (       d  [        S5      e[        R                  SU5        XR                  ;   a  U R                  U   u  p#U$ U R                    H  n UR                  U5      u  pVn Ub-  [        U R                  U5      5      nU R                  XvU5      nO9U R                  Xa5      nU R                  (       a  [        U R                  XU5      n[        U[        5      (       a  UR                  X5          O   [%        U5      e[        R                  SX5        U R&                  (       a  X#4U R                  U'   U$ ! [         a     M  f = f! [         ["        4 a     GM  f = f)zGet object from PDF

:raises PDFException if PDFDocument is not initialized
:raises PDFObjectNotFound if objid does not exist in PDF
zPDFDocument is not initializedzgetobj: objid=%rzregister: objid=%r: %r)r  r    r   r   r  r   r   r*   getobjr
  r  r  r$   r   r"   	set_objidr+   r   r#   r  )rj   r   r   r   r  strmidr   r   s           r?   r  PDFDocument.getobjL  sN    zz?@@		$e,%%%,,U3LS4 
1 

-1\\%-@*VE)!-dkk&.A!B"11&G"00>==".t}}eC"PC!#y11e3! #( (..II.;||,/<!!%(
+    ~. s%   %E:BE"
EE"E76E7c                    ^ SU R                   ;  a  [        eS[        S[        S[        [
        R                     4U4S jjmT" U R                   S   S5      $ )NOutlinesentrylevelrc   c              3   l  >#    [        U 5      n SU ;   a]  SU ;   d  SU ;   aQ  [        [        U S   5      5      nU R                  S5      nU R                  S5      nU R                  S5      nXX4U4v   SU ;   a  SU ;   a  T" U S   US-   5       S h  vN   SU ;   a  T" U S   U5       S h  vN   g  N N7f)	NTitleADestSEFirstLastr   Next)r)   r0   r&   r   )r  r  titledestactionsesearchs         r?   r(  (PDFDocument.get_outlines.<locals>.searchx  s     u%E%%<6U?'	%.(ABE 99V,D"YYs^F4B r::%FeO!%.%!)<<<!%-777 =7s$   BB4B0B4*B2+B42B4r   )r  rH   rm   r   r   r  OutlineType)rj   r(  s    @r?   get_outlinesPDFDocument.get_outlinest  sR    T\\)	& 	 	+:Q:Q1R 	 dll:.22r>   c                     U R                   c   e [        U R                   S   5      nUR
                  $ ! [        [        4 a    [        ef = f)z
Generate page label strings for the PDF document.

If the document includes page labels, generates strings, one per page.
If not, raises PDFNoPageLabels.

The resulting iteration is unbounded.

PageLabels)r  r.  r!   r   rK   labels)rj   page_labelss     r?   get_page_labelsPDFDocument.get_page_labels  sV     ||'''	"$T\\,%?@K !!! h' 	"!!	"s	   5 Acatr0  c                    ^^^  [        U R                  S   5      n[        UT   5      nS[        [
        [        4   S[        4UUU4S jjmT" U5      $ ! [        [        4 a    [        TT45      ef = f)NNamesdrc   c           	        > SU ;   a  [        U S   5      u  pTU:  d  UT:  a  g SU ;   aW  [        U S   5      n[        [        [        [        [
        [        [        4   [        4      [        SU5      5      5      nUT   $ SU ;   a1  [        U S   5       H  nT	" [        U5      5      nU(       d  M  Us  $    [        TT45      e)NLimitsr5  r   Kids)r'   dictr   r   r   r   r   rE  r   r/   r)   r   )
r6  r  k2r   namesrH  r(  r3  r0  lookups
          r?   r=  'PDFDocument.lookup_name.<locals>.lookup  s    1}%ak28rCx!|!!G*-%c5j(93(>"?@(1dBST Sz!{#AfI.Az!}-Aq  / C:&&r>   )r)   r  r!   r   r	   r   r   )rj   r3  r0  r<  d0r=  s    ``  @r?   lookup_namePDFDocument.lookup_name  s|    	't||G45E c
#	'd38n 	' 	' 	'$ bz/ h' 	'C:&&	's   A A4r  c                      U R                  SU5      nU$ ! [         aK    SU R                  ;  a  [        U5      e[	        U R                  S   5      nX;  a  [        U5      eX1   n U$ f = f)NDests)r@  r   r  rN   r)   )rj   r  r   r?  s       r?   get_destPDFDocument.get_dest  sw    
	""7D1C 
  	dll*,T22DLL12B~,T22(C
	s    AA+*A+c                    SnUR                  5        H<  nUR                  5       n[        R                  SU5        US:X  a    OU(       d  M:  UnM>     [	        S5      e[        R                  SU5        Uc   e[        U5      $ )z0Internal function used to locate the first XRef.Nzfind_xref: %rs	   startxrefUnexpected EOFzxref found: pos=%r)revreadlinesr   r   r   r5   r   )rj   r   prevr   s       r?   r  PDFDocument.find_xref  s}     '')D::<DIIot,|#t * !!122		&-4yr>   r   r  c                    UR                  U5        UR                  5          UR                  5       u  pE[
        R                  SX%5        [        U[        5      (       a=  UR                  U5        UR                  5         [        5       nUR                  U5        O9XQR                  L a  UR                  5         [        5       nUR                  U5        UR                  U5        UR                  5       n[
        R                  SU5        SU;   a   [!        US   5      nU R#                  XU5        SU;   a   [!        US   5      nU R#                  XU5        g! [         a    [	        S5      ef = f)z$Reads XRefs from the given location.rG  z"read_xref_from: start=%d, token=%rr   XRefStmPrevN)r   resetr   r+   r5   r   r   r   r   r   r   KEYWORD_XREFr   r   r   r{   r%   r  )rj   r   r   r  r   tokenr  r   s           r?   r  PDFDocument.read_xref_from  s2    	E	3!++-LS 			6EeS!!KKLLN -DIIf+++!9DIIfT""$		-)GI./CU3WGFO,CU31  	3 !122	3s   E E0)r  r  r  r  r  r  r  r  r?  r;  r6  r  )rz  TTry  ))r9   r:   r;   r<   rE   r  r\  r  r  r	   r   r   r{  r   r   r5  ri   r.   r  r  r"   rm   r
  r   r   r  r  r  r   r*  r   r+  r1  r   rE  r@  rD  r  rt   r  r=   r7   r>   r?   r  r    s   
 &%''	NtC.H)I$IJ  :: : 	:
 : 
:x f+KS $ $Y s 3 6 9 tF|S7H1I * S V 8$C $F $L S#sC/0K3h{3 3*"# "$s sEz): s 8U3:. 3 	 c $  (+ 484E 	 r>   r  c                   V    \ rS rSrSr\S\\   4S j5       r\	S\
S\S\4S j5       rSrg	)
r.  i  zOPageLabels from the document catalog.

See Section 8.3.1 in the PDF Reference.
rc   c           	   #   d  #    U R                   n[        U5      S:X  d  US   S   S:w  a4  [        R                  (       a  [	        S5      eUR                  SS0 45        [        US5       H  u  nu  p4[        U5      nUR                  S5      n[        [        UR                  SS5      5      5      n[        UR                  SS5      5      nU[        U5      :X  a  [        R                  " U5      n	OX   u  pX-
  n[        XU-   5      n	U	 H  nU R                  X5      nX~-   v   M     M     g 7f)Nr   z"PageLabels is missing page index 0r   Sr"  r>   St)valuesr   r   r   r   insert	enumerater)   r   r0   r&   r%   	itertoolscountr   _format_page_label)rj   r   nextr   label_dict_unchecked
label_dictstyleprefixfirst_valuerV  endr   range_lengthvaluelabels                  r?   r/  PageLabels.labels  s     v;!vay|q0$%IJJ a!R)5>vq5I1T0E#$89JNN3'E :>>#s+C!DEF#JNN4$;<Ks6{" )2(D"{{,,FG//=n$   6Js   D.D0rd  r_  c                    Uc  SnU$ U[        S5      L a  [        U 5      nU$ U[        S5      L a  [        U 5      R                  5       nU$ U[        S5      L a  [        U 5      nU$ U[        S5      L a  [	        U 5      R                  5       nU$ U[        S5      L a  [	        U 5      nU$ [
        R                  SU5        SnU$ )z+Format page label value in a specific stylerz  Dr!  r  r  azUnknown page label style: %r)r-   r   r2   upperr3   r   warning)rd  r_  re  s      r?   r[  PageLabels._format_page_label   s     =E  c#hJE  c#h$U+113E  c#h$U+E  c#h$U+113E  c#h$U+E  KK6>Er>   r7   N)r9   r:   r;   r<   rE   propertyr   r   r/  r  r   r   r[  r=   r7   r>   r?   r.  r.    sO    
 % % %< # c c  r>   r.  )[rY  loggingr   rZ  hashlibr   r   r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   cryptography.hazmat.backendsr   &cryptography.hazmat.primitives.ciphersr   r   r   rz  r   arcfourr   data_structuresr   	pdfparserr   r   r   pdftypesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   psparserr+   r,   r-   r.   utilsr/   r0   r1   r2   r3   	getLoggerr9   r   r5   SyntaxWarningrB   rH   rK   rN   rQ   rT   UserWarningrW   rZ   r]   r`   r   r   r  rt   r   r   r   r  r\  r  r  r.  r7   r>   r?   <module>r|     s     	  / /     9 L L   ' A A    4 3 U U!	^ 		M 		L 		l 		\ 		 		- 		; 		 		"4 		 'B 	  X6{i." ""Gk GT0=g 0=fM"K M"`J* J*ZG5#= G5Tt5#? t5nR Rj
7 7r>   