
    KwgE                        d dl Z d dlZ	 d dlmZ 	 e  G d d      Z G d de      Z G d d	e      Z	 G d
 de      Z
 G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d      Z G d d      Z G d d      Z G d d      Z G d  d!      Z ed"      D  cg c]  } |  c} Z ed"      D  cg c]  } |  c} Z ed#      D ]
  Zd$ez  ee<     ed#d"      D ](  Zeed%z
     eed&z
     z  eed'z
     z  eed#z
     z  ee<   *  ed(      D ]
  Zeeee   <     G d) d*      Z G d+ d,      Z G d- d.      Zy#  d dlmZ Y VxY w# e$ r eZY `w xY wc c} w c c} w )/    N)zip_longest)izip_longestc                   R    e Zd ZdZdZdZd Zd Zed        Z	d Z
d Zd Zd	 Zd
 Zy)QRNr   c                 X    | j                   r| j                  |      st        || _        y N)valid
ValueErrordataselfr   s     [/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/barcode/qrencoder.py__init__zQR.__init__*   s!    ::djj.	    c                 ,    t        | j                        S r   lenr   r   s    r   __len__z
QR.__len__/       499~r   c                     | j                   yt        t        |       t        | j                               \  }}|t        | j                         z  t        | j                   d |       z   S Nr   )bitsdivmodr   sum)r   qrs      r   	bitlengthzQR.bitlength2   sR    99c$iTYY013tyy>!C		"1$666r   c                     d|cxk  rdk  rn n| j                   d   S |dk  r| j                   d   S |dk  r| j                   d   S t        d|z         )Nr   
         )      zUnknown version: )
lengthbitsr
   )r   vers     r   getLengthBitszQR.getLengthBits9   sY    s<R<??1%%2X??1%%2X??1%%,s233r   c                 ,    t        | j                        S r   r   r   s    r   	getLengthzQR.getLengthB   r   r   c                 ,    t        | j                        S r   )reprr   r   s    r   __repr__zQR.__repr__E   s    DIIr   c                     |j                  | j                  d       | j                  |      }|r&|j                  t        | j                        |       y y )N   putmoder'   r   r   r   bufferversionlenbitss       r   write_headerzQR.write_headerH   sB    

499a $$W-JJs499~w0 r   c                    | j                  ||       t        t        | j                        g| j                  z   D ]  }d}d}t        | j                        D ]S  }||   	|t        | j                        z  }|| j                  j                  ||         z  }|| j                  |   z  }U |j                  ||        y r   )r6   r   iterr   groupranger   charsindexr   r0   )r   r3   r4   gr   nis          r   writezQR.writeN   s    &'*tDII/$**<= 	 ADA4::& )Q4#TZZ(A))!A$//ADIIaL(D	)
 JJq$	 r   )__name__
__module____qualname__r	   r   r9   r   r   propertyr   r'   r)   r,   r6   r@    r   r   r   r   %   sH    EDE
 7 741
 r   r   c                   X    e Zd Z ej                  d      j
                  ZdZdZdZ	dZ
dZy)QRNumberz[0-9]*$
0123456789)r.      rI   rI   r"   )r          NrA   rB   rC   recompilematchr	   r;   r   r9   r1   r%   rE   r   r   rG   rG   Z   s1    BJJz"((EEDEDJr   rG   c                   X    e Zd Z ej                  d      j
                  ZdZdZdZ	dZ
dZy)
QRAlphaNumz[-0-9A-Z $%*+./:]*$z-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:)      r$   )	         NrL   rE   r   r   rQ   rQ   b   s2    BJJ-.44E<EDEDJr   rQ   c                   (    e Zd ZdZdZdZdZd Zd Zy)
QR8bitByte)   r"   r.   )rY      rZ   c                 `    t        |t              r|j                  d      | _        y || _        y )Nzutf-8)
isinstanceunicodeencoder   r   s     r   r   zQR8bitByte.__init__p   s#    dG$G,DIDIr   c                     | j                  ||       | j                  D ]/  }t        |t              rt	        |      }|j                  |d       1 y )NrY   )r6   r   r\   strordr0   )r   r3   r4   cs       r   r@   zQR8bitByte.writev   sF    &'* 	A!S!FJJq!	r   N)	rA   rB   rC   r   r9   r1   r%   r   r@   rE   r   r   rX   rX   j   s     DEDJr   rX   c                   .    e Zd ZdZdZdZdZd Zd Zd Z	y)	QRKanjirV   r"   rY   rY   r    rJ   c                 b    	 | j                  |      | _        y # t        $ r t        d      w xY w)NzNot valid kanji)unicode_to_qrkanjir   UnicodeEncodeErrorr
   r   s     r   r   zQRKanji.__init__   4    	0//5DI! 	0.//	0    .c           
      "   g }t        |      D ]  \  }}	 |j                  d      }	 t        t        |      \  }}|dz  |z  }d|cxk  rdk  rn n|dz  }|d	z  dz	  d
z  |dz  z   }n7d|cxk  rdk  rn n|dz  }|d	z  dz	  d
z  |dz  z   }nt        d|||dz   d      |j                  |        |S # t        $ r |\  }}Y w xY w# t
        $ r$}t        d|||dz   |j                  d         d }~wt        $ r t        d|||dz   d      w xY w)Nz	shift-jisqrkanjir"   r.   illegal multibyte sequencerY   i@  i           i@  i  i@  		enumerater^   mapra   	TypeErrorri   argsr
   appendr   r   codesr?   rb   des          r   rh   zQRKanji.unicode_to_qrkanji   s\   T? 	CAaGHH[)c1+CAa Q
A#V#V6za'4/AH=1&&V6za'4/AH=(D!QqS)EG GLLO/	0 ' ! CAa & M(D!QqS!&&)LL G(D!QqS)EG GG4   CB33CCCC	DC//Dc                 n    | j                  ||       | j                  D ]  }|j                  |d        y NrV   r6   r   r0   r   r3   r4   rz   s       r   r@   zQRKanji.write   3    &'* 	AJJq"	r   N)
rA   rB   rC   r   r9   r1   r%   r   rh   r@   rE   r   r   rd   rd   }   s%    DEDJ08r   rd   c                   4    e Zd ZdZdZdZdZd Zd Zd Z	d Z
y	)
QRHanzire   r"   rV   rf   c                 b    	 | j                  |      | _        y # t        $ r t        d      w xY w)NzNot valid hanzi)unicode_to_qrhanzir   ri   r
   r   s     r   r   zQRHanzi.__init__   rj   rk   c           
      "   g }t        |      D ]  \  }}	 |j                  d      }	 t        t        |      \  }}|dz  |z  }d|cxk  rdk  rn n|dz  }|d	z  dz	  d
z  |dz  z   }n7d|cxk  rdk  rn n|dz  }|d	z  dz	  d
z  |dz  z   }nt        d|||dz   d      |j                  |        |S # t        $ r |\  }}Y w xY w# t
        $ r$}t        d|||dz   |j                  d         d }~wt        $ r t        d|||dz   d      w xY w)Ngb2312qrhanzir"   r.   rn   rY   i  i  ro   `   rq   i  i  i  rr   rx   s          r   r   zQRHanzi.unicode_to_qrhanzi   s\   T? 	CAaGHHX&c1+CAa Q
A#V#V6za'4/AH=1&&V6za'4/AH=(D!QqS)EG GLLO/	0 ' ! CAa & M(D!QqS!&&)LL G(D!QqS)EG GGr|   c                     |j                  | j                  d       |j                  dd       | j                  |      }|r&|j                  t        | j                        |       y y )Nr.   r"   r/   r2   s       r   r6   zQRHanzi.write_header   sP    

499a 

1a$$W-JJs499~w0 r   c                 n    | j                  ||       | j                  D ]  }|j                  |d        y r~   r   r   s       r   r@   zQRHanzi.write   r   r   N)rA   rB   rC   r   r9   r1   r%   r   r   r6   r@   rE   r   r   r   r      s*    DEDJ081r   r   c                        e Zd ZdZdZd Zd Zy)QRECI   r   r   r   c                 V    d|cxk  rdk  st        d       t        d      || _        y )Nr   i?B zECI out of range)r
   r   r   s     r   r   zQRECI.__init__   s3    4 & /00 !/00	r   c                 <   | j                  ||       | j                  dk  r|j                  | j                  d       y | j                  dk  r |j                  | j                  dz  d       y | j                  dk  r |j                  | j                  dz  d       y y )	N   rY   i?  i   rZ   i i      r   r   r3   r4   s      r   r@   zQRECI.write   s{    &'*99JJtyy!$YY& JJtyy6)2.YY("JJtyy8+R0 #r   NrA   rB   rC   r1   r%   r   r@   rE   r   r   r   r      s    DJ1r   r   c                        e Zd ZdZdZd Zd Zy)QRStructAppendrI   r   c                     d|cxk  rdk  st        d       t        d      d|cxk  rdk  st        d       t        d      || _        || _        || _        y )Nr   rZ   zpart out of range [1,16]ztotal out of range [1,16])r
   parttotalparity)r   r   r   r   s       r   r   zQRStructAppend.__init__   sg    4~2~788 7885B899 899	
r   c                     | j                  ||       |j                  | j                  d       |j                  | j                  d       |j                  | j                  d       y )Nr.   rY   )r6   r0   r   r   r   r   s      r   r@   zQRStructAppend.write   sH    &'*

499a 

4::q!

4;;"r   Nr   rE   r   r   r   r      s    DJ#r   r   c                        e Zd ZdZdZd Zd Zy)QRFNC1FirstrS   r   c                      y r   rE   r   s    r   r   zQRFNC1First.__init__
  s    r   c                 (    | j                  ||       y r   )r6   r   s      r   r@   zQRFNC1First.write  s    &'*r   Nr   rE   r   r   r   r     s    DJ+r   r   c                   R    e Zd Z ej                  d      j
                  ZdZdZd Z	y)QRFNC1Secondz^([A-Za-z]|[0-9][0-9])$rT   r   c                     | j                  ||       | j                  }t        |      dk(  rt        |      dz   }nt	        |      }|j                  |d       y )Nr"   d   rY   )r6   r   r   ra   intr0   r   s       r   r@   zQRFNC1Second.write  sJ    &'*IIq6Q;AAAA

1ar   N)
rA   rB   rC   rM   rN   rO   r	   r1   r%   r@   rE   r   r   r   r     s(    BJJ0177EDJr   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	g dg d	g d
g d
g d
g d	g dgZ
d Zd Zd Zg dg dg dg dg dgZd Zd Zd Zd ZdZd Zd ZdZd Zd ZdZdZed        Zed        Zy)QRCodec                 X    || _         || _        d | _        d| _        d | _        g | _        y r   )r4   errorCorrectLevelmodulesmoduleCount	dataCachedataList)r   r4   r   s      r   r   zQRCode.__init__   s.    !2r   c                     t        |t              r|}n+t        t        t        t
        fD ]  }	  ||      } n t        | j                  j                  |       d | _	        y # t        $ r Y Cw xY wr   )
r\   r   rG   rQ   rd   rX   r
   r   rw   r   )r   r   newDataconvs       r   addDatazQRCode.addData(  so    dBG!:w
C !"4jG! ! W% " s   A""	A.-A.c                 &    | j                   |   |   S r   )r   )r   rowcols      r   isDarkzQRCode.isDark8  s    ||C %%r   c                     | j                   S r   )r   r   s    r   getModuleCountzQRCode.getModuleCount;  s    r   c                    t        dd      D ]z  }t        j                  || j                        }t	        d |D              }d}| j
                  D ]*  }|dz  }||j                  |      z  }||j                  z  }, ||dz  k  sy |S  S )Nr"   (   c              3   4   K   | ]  }|j                     y wr   )	dataCount).0blocks     r   	<genexpr>z+QRCode.calculate_version.<locals>.<genexpr>B  s      GU Gs   r   r.   rY   )r:   	QRRSBlockgetRSBlocksr   r   r   r'   r   )r   r4   rsBlockstotalDataCountlengthr   s         r   calculate_versionzQRCode.calculate_version>  s    Q| 		G ,,Wd6L6LMH  Gh GGNF )!$,,W55$..() !++		 r   c                     | j                   | j                         | _         | j                  d| j                                y )NF)r4   r   makeImplgetBestMaskPatternr   s    r   makezQRCode.makeL  s3    <<113DLeT4467r   c                    | j                   dz  dz   | _        t        | j                        D cg c]  }dg| j                  z   c}| _        | j	                  dd       | j	                  | j                  dz
  d       | j	                  d| j                  dz
         | j                          | j                          | j                  ||       | j                   dk\  r| j                  |       | j                  d k(  r:t        j                  | j                   | j                  | j                        | _	        | j                  | j                  |       y c c}w )Nr.      Fr   r   )r4   r   r:   r   setupPositionProbePatternsetupPositionAdjustPatternsetupTimingPatternsetupTypeInfosetupTypeNumberr   r   
createDatar   r   mapData)r   testmaskPatternxs       r   r   zQRCode.makeImplQ  s   <<!+b0"'(8(8"9<  4#3#33 <&&q!,&&t'7'7!';Q?&&q$*:*:Q*>?'')!4-LLA  &NNd"#..t||/3/E/E/3}}>DN 	T^^[1<s   E)TTTTTTT)TFFFFFT)TFTTTFTc                    |dk(  rSdgdz  | j                   |dz      ||dz    |dk(  rd| j                   |dz      |dz   <   n5d| j                   |dz      |dz
  <   ndgdz  | j                   |dz
     ||dz    t        | j                        D ]S  \  }}|| j                   ||z      ||dz    |dk(  rd| j                   ||z      |dz   <   <d| j                   ||z      |dz
  <   U y )Nr   Fr   r"   rY   )r   rs   _positionProbePattern)r   r   r   r   r   s        r   r   z QRCode.setupPositionProbePatternm  s   !8.3Wq[DLLQCE*ax-2SU#CE*-2SU#CE* /4Wq[DLLQCE* !;!;< 	3GAt-1DLLQCE*ax-2SU#CE*-2SU#CE*	3r   c                     d}d}t        d      D ]8  }| j                  d|       t        j                  |       }|dk(  s||kD  s5|}|}: |S )Nr   rY   T)r:   r   QRUtilgetLostPoint)r   minLostPointpatternr?   	lostPoints        r   r   zQRCode.getBestMaskPattern  s\    q 	AMM$"++D1IQ,2(	 r   c                    t        d| j                  dz
        D ]  }|dz  dk(  | j                  |   d<    t        j                  t        j
                  ddg      | j                  dz
        | j                  d   d| j                  dz
   y )NrY   r$   r   rR   TFrZ   )r:   r   r   	itertoolsislicecycle)r   r   s     r   r   zQRCode.setupTimingPattern  s    q$**Q./ 	.A"#a%1*DLLOA	.2;2B2BOOT5M*D,<,<r,A3CQ$**Q./r   )TTTTT)TFFFT)TFTFTc                 H   t         j                  | j                        }| j                  dz
  }t	        j
                  ||      D ][  \  }}|dk  r|dk  s||k\  r||k\  r|dk  r!t        | j                        D ]#  \  }}|| j                  ||z   dz
     |dz
  |dz    % ] y )NrY   r$   rI   )	r   getPatternPositionr4   r   r   productrs   _positionAdjustPatternr   )r   posmaxposr   r   r   r   s          r   r   z!QRCode.setupPositionAdjustPattern  s    ''5!!A%!))#s3 	>HCaxSAX3!8$T%@%@A >49=S1Wq[)#a%A6>	>r   c                 n   t         j                  | j                        }t        d      D ]=  }| xr ||z	  dz  dk(  }|| j                  |dz     |dz  | j
                  z   dz
  dz
  <   ? t        d      D ]=  }| xr ||z	  dz  dk(  }|| j                  |dz  | j
                  z   dz
  dz
     |dz  <   ? y )N   r"   rI   rY   )r   getBCHTypeNumberr4   r:   r   r   )r   r   r   r?   mods        r   r   zQRCode.setupTypeNumber  s    &&t||4r 	JA87419/a 7CEHDLLa Q)9)9!9A!=!AB	J r 	JA87419/a 7CEHDLLQ!1!11A59:16B	Jr   c                 ~   | j                   dz  |z  }t        j                  |      }t        d      D ]g  }| xr ||z	  dz  dk(  }|dk  r|| j                  |   d<   +|dk  r|| j                  |dz      d<   F|| j                  | j
                  dz
  |z      d<   i t        d      D ]s  }| xr ||z	  dz  dk(  }|dk  r#|| j                  d   | j
                  |z
  dz
  <   ;|dk  r|| j                  d   d|z
  dz
  dz   <   \|| j                  d   d|z
  dz
  <   u | | j                  | j
                  dz
     d<   y )NrI      r"   rR   rY   rT   )r   r   getBCHTypeInfor:   r   r   )r   r   r   r   r   r?   r   s          r   r   zQRCode.setupTypeInfo  sg   &&!+{:$$T*r 	AA87419/a 7CA%(Q"a%),QU#A&=@T--2Q67:	A r 	2A87419/a 7CA<?Q 0 01 4q 89a%25QQ
Q/.1QQ
+	2 6:T%%)*1-r   c           
   #     K   t        j                  t        | j                  dz
  dd      t        ddd            }t	        t        d| j                  dz
              t	        t        j                  t        d      t        d| j                                    t	        t        d| j                              f}t        d	 |D              }t        j                  | j                        }t        t         j                  j                  d
 |D                    }| j                  dz
  }|D ]  }||}}|dk  rd}n|| j                  dz
  k\  rd}nd}||   D ]  }t        d      D ]s  }	||	z
  }	| j                  dk\  r0|dk  r|	| j                  dz
  k\  r/|dk  r|| j                  dz
  k\  rG||v r#|	|v r|dk  r
|	dk  s|	|kD  s|	dk  r
|dk  s||kD  sn|	|f u   y w)Nr"   rR   rS   r   rT   rY   r   c              3   D   K   | ]  }t        t        |              y wr   )listreversed)r   r   s     r   r   z*QRCode._dataPosIterator.<locals>.<genexpr>  s     7QtHQK(7s    c              3   B   K   | ]  }|d z
  |dz
  ||dz   |d z   f  yw)r$   r"   NrE   )r   ps     r   r   z*QRCode._dataPosIterator.<locals>.<genexpr>  s0      13()QqS!A#q!A#qs#13s   rU   r$   )r   chainr:   r   r   tupler   r   r4   setfrom_iterable)
r   colsrowsrrowspposr   r   rowidxr   rb   s
             r   _dataPosIteratorzQRCode._dataPosIterator  s    uT%5%5%91bA$Q20U1d..234Y__U1XuQ8H8H/IJKU1d../02 7$77((69??00 13-113 3 4!!B& 	#C%Dax!((1,,qf&F| #q #AaA||q(7qD,<,<r,A'A$ 1W0@0@20E)E$d{qDy #ba"fF
FbC&L$c(N##	#s   GGNc                 n    | j                   st        | j                               | _         | j                   S r   )_dataPosListr   r   r   s    r   dataPosIteratorzQRCode.dataPosIterator  s-       $T%:%:%< =D   r   c              #   H   K   |D ]  }dD ]  }t        ||z           y w)N)   @       rZ   rY   r.   r$   r"   )bool)r   r   bytebits       r   _dataBitIteratorzQRCode._dataBitIterator  s5      	'D0 '4#:&&'	's    "c                     | j                   st        | j                  |            | _         t        | j                         S r   )_dataBitListr   r	  r8   r   s     r   dataBitIteratorzQRCode.dataBitIterator  s4       $T%:%:4%@ ADD%%&&r   c                     | j                  |      }t        j                  |      }t        | j	                         |d      D ]$  \  \  }}}| |||      z  | j
                  |   |<   & y )NF	fillvalue)r  r   getMaskr   r  r   )r   r   r   r   maskr   r   darks           r   r   zQRCode.mapData  sk    ##D)~~k* +D,@,@,BD6;!= 	;JS#%)DcN%:DLLc"	;r      r   c                    t         j                  | |      }t               }|D ]  }|j                  ||         d}|D ]  }||j                  z  } |j                         |dz  kD  r!t        d|j                         |dz  fz        |j                         dz   |dz  k  r|j                  dd       |j                         dz  dk7  r(|j                  d       |j                         dz  dk7  r(	 |j                         |dz  k\  rnX|j                  t        j                  d       |j                         |dz  k\  rn!|j                  t        j                  d       ot        j                  ||      S )Nr   rY   zcode length overflow. (%d > %d)r.   F)r   r   QRBitBufferr@   r   getLengthInBits	Exceptionr0   putBitr   PAD0PAD1createBytes)r4   r   r   r   r3   r   r   r   s           r   r   zQRCode.createData  s{   ((2CD 	(DJJvw'	(  	.Eeoo-N	.""$~'99=#335~7IJK L L ""$q(NQ,>>JJq!%%'!+q0MM%  %%'!+q0 &&(NQ,>>JJv{{A&&&(NQ,>>JJv{{A&  !!&(33r   c           	         d}d}d}d}g }g }|D ]  }||j                   z  }|j                  }	|j                   |	z
  }
t        ||	      }t        ||
      }|j                  | j                  |||	z           ||	z  }t
        j                  |
      }t        |d   |j                         dz
        }|j                  |      }|j                         dz
  }|j                         }|j                  t        ||z
  |      D cg c]  }|dk\  r|j                  |      nd c}        t        j                  t        | t        |       D cg c]  }|D ]  }||  }}}|S c c}w c c}}w )Nr   r"   )
totalCountr   maxrw   r3   r   getErrorCorrectPolynomialQRPolynomialr)   r   r:   getr   r   r   )r3   r   offset
maxDcCount
maxEcCounttotalCodeCountdcdataecdatar   dcCountecCountrsPolyrawPolymodPolyrLenmLenr?   ddrz   r   s                       r   r  zQRCode.createBytes   s   

 	?Ee...NooG&&0GZ1JZ1JMM&--vg~>?gF55g>F"6":v/?/?/AA/EFGkk&)G##%)D$$&DMM#(d#;> 01AvW[[^1< > ?	?  '__V$k6&:< /r/  / / / >/s    E%
E*)rA   rB   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r   r  r  staticmethodr   r  rE   r   r   r   r     s     & 8
2& 	9888888
3$	C 	+****
	>J;0#B L!
' L'
; DD4 48  r   r   c                       e Zd ZdZdZdZdZy)QRErrorCorrectLevelr"   r   rI   r$   N)rA   rB   rC   LMQHrE   r   r   r3  r3  >  s    	A	A	A	Ar   r3  c                   ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
QRMaskPatternr   r"   r$   rI   r.   rS   rR   r   N)rA   rB   rC   
PATTERN000
PATTERN001
PATTERN010
PATTERN011
PATTERN100
PATTERN101
PATTERN110
PATTERN111rE   r   r   r9  r9  D  s*    JJJJJJJJr   r9  c            	       6   e Zd Zg g ddgddgddgddgddgg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(Zd)Zd*Zd+Zed,        Zed-        Z	ed.        Z
ed/        Zd0 d1 d2 d3 d4 d5 d6 d7 d8Zed9        Zed:        Zed;        Zed<        Zeg d=fd>       Zed?        Zed@        ZyA)Br   rR   r            "   )rR   rC  &   )rR   r   *   )rR   rD  .   )rR      2   )rR   rE  6   )rR   r  :   )rR   rF  >   )rR   rD  rI  B   )rR   rD  0   F   )rR   rD  rK  J   )rR   rE  rL  N   )rR   rE  8   R   )rR   rE  rM  V   )rR   rF  rN  Z   )rR   rJ  rK  H   ^   )rR   rD  rK  rR  b   )rR   rE  rL  rS  f   )rR   rJ  rL  P   j   )rR   r  rM  T   n   )rR   rE  rM  rV  r   )rR   rF  rN  rW  v   )rR   rD  rK  rR  rZ  z   )rR   rE  rL  rS  r[  ~   )rR   rD  4   rS  h      )rR   rE  rT  rU  l      )rR   rF  <   rV  p      )rR   rE  rM  rV  r`     )rR   rF  rN  rW  ra     )rR   rE  rL  rS  r[  rc     )rR   r   rK  L   r[  r     )rR   rJ  rL  r\  r]        )rR   r  rM  r^  r_        )rR   rD  rL  rU  r_  rk     )rR   rE  rM  rV  r`  rl     i7  i%  iT  c                    | dz  }t         j                  |      t         j                  t         j                        z
  dk\  r|t         j                  t         j                  |      t         j                  t         j                        z
  z  z  }t         j                  |      t         j                  t         j                        z
  dk\  r| dz  |z  t         j                  z  S )Nr    r   )r   getBCHDigitG15G15_MASKr   rz   s     r   r   zQRUtil.getBCHTypeInfo  s    BJ!!!$v'9'9&**'EEJ&**!3!3A!6!'!3!3FJJ!?"@ B DA !!!$v'9'9&**'EEJ "*!V__44r   c                    | dz  }t         j                  |      t         j                  t         j                        z
  dk\  r|t         j                  t         j                  |      t         j                  t         j                        z
  z  z  }t         j                  |      t         j                  t         j                        z
  dk\  r| dz  |z  S )NrJ   r   )r   rx  G18r{  s     r   r   zQRUtil.getBCHTypeNumber  s    BJ!!!$v'9'9&**'EEJ&**!3!3A!6!'!3!3FJJ!?"@ B DA !!!$v'9'9&**'EEJ 
ar   c                 4    d}| dk7  r|dz  }| dz  } | dk7  r|S Nr   r"   rE   )r   digits     r   rx  zQRUtil.getBCHDigit  s0    qyQJEQJD qy r   c                 .    t         j                  | dz
     S Nr"   )r   PATTERN_POSITION_TABLE)r4   s    r   r   zQRUtil.getPatternPosition  s    ,,Wq[99r   c                     | |z   dz  dk(  S Nr$   r   rE   r?   js     r   <lambda>zQRUtil.<lambda>      A{a' r   c                     | dz  dk(  S r  rE   r  s     r   r  zQRUtil.<lambda>      q1uz r   c                     |dz  dk(  S NrI   r   rE   r  s     r   r  zQRUtil.<lambda>  r  r   c                     | |z   dz  dk(  S r  rE   r  s     r   r  zQRUtil.<lambda>  r  r   c                 $    | dz  |dz  z   dz  dk(  S Nr$   rI   r   rE   r  s     r   r  zQRUtil.<lambda>  s    Qa1,1 r   c                 *    | |z  dz  | |z  dz  z   dk(  S r  rE   r  s     r   r  zQRUtil.<lambda>  s     !Qw!A#q(A- r   c                 0    | |z  dz  | |z  dz  z   dz  dk(  S r  rE   r  s     r   r  zQRUtil.<lambda>  %    !a%1A{2a71< r   c                 0    | |z  dz  | |z   dz  z   dz  dk(  S )NrI   r$   r   rE   r  s     r   r  zQRUtil.<lambda>  r  r   )r   r"   r$   rI   r.   rS   rR   r   c                      | j                   |   S r   )r   )clsr   s     r   r  zQRUtil.getMask  s    {++r   c           	          t        dgd      }t        |       D ]2  }|j                  t        dt        j	                  |      gd            }4 |S )Nr"   r   )r!  r:   multiplyQRMathgexp)errorCorrectLengthar?   s      r   r   z QRUtil.getErrorCorrectPolynomial  sN    !a )* 	BA

<FKKN(;Q?AA	Br   c                    d}dg}d }|D ]  }|rt        ||      D cg c]
  \  }}||z   }}}t        ||d      D cg c]  \  }}|dk\  r|xr |dz
  dz    }	}}|t        |	      z  }t        ||d      D cg c]  \  }}|rdn|dz    }}}|} |t        |D cg c]  }|dk\  s	|dz
  dz    c}      z  }|S c c}}w c c}}w c c}}w c c}w )Nr   r  r.   rI   r"   )zipr   r   )
r  r   score	lastCountlastRowr   r  bchangedscoress
             r   maskScoreRule1vertzQRUtil.maskScoreRule1vert  s   C	 	C,/W,=>SQq1q5>>%gyAF%CAa!V -1Q- % % V$(3GY>?)AB!$1 #$QQ. B	 B G	 	Y9!q&ac!e9:: ?%B
 :s   CC>C"
C
-
C
c                     d}|d   }|dd  D ]E  }|d   |d   }}t        |dd  |dd        D ]"  \  }}||cxk(  r|cxk(  r|k(  rn n|dz  }||}}$ |}G |S )Nr   r"   rI   )r  )	r  r   r  r  r   lastCol0lastCol1col0col1s	            r   maskScoreRule2zQRUtil.maskScoreRule2  s    !*12; 	C!$QhH!#ab'712;7 0
d4787x7QJE%)4(0 G	 r   )TFTTTFTFFFFc                     t        |      }d}|D ]9  }d}t        |      |z
  }||k  s||||z    |k(  r|dz  }||z  }n|dz  }||k  r!; |S )Nr   r   r"   )r   )r  r   r   
patternlenr  r   r  maxjs           r   maskScoreRule3horzQRUtil.maskScoreRule3hor  sy    
 \
 	CAs8j(Dd(q:&'1RKEOAFA d(	 r   c                 v    t        |      dz  }t        d |D              }dt        d|z  |z  dz
        dz  z  S )Nr$   c              3   2   K   | ]  }t        |        y wr   )r   )r   r   s     r   r   z(QRUtil.maskScoreRule4.<locals>.<genexpr>  s     0CH0s   r    r   rK  rS   )r   r   abs)r  r   	cellCountcounts       r   maskScoreRule4zQRUtil.maskScoreRule4  sB    L!O	000Su	1B671<==r   c                    d}|| j                  |j                        z  }|| j                  t        |j                         z  }|| j                  |j                        z  }|| j	                  |j                        z  }|| j	                  t        |j                         z  }|| j                  |j                        z  }|S r   )r  r   r  r  r  r  )r  qrCoder   s      r   r   zQRUtil.getLostPoint  s    	S++FNN;;	S++C,@AA	S''77	S**6>>::	S**3+?@@	S''77	r   N)rA   rB   rC   r  ry  r}  rz  r1  r   r   rx  r   r   classmethodr  r   r  r  r  r  r   rE   r   r   r   r   N  s   )
)	
B) 
B) 
B	)
 
B) 
B) 	) 	) 	) 	) 	) 	) 	) 	) 	)  	!)" 	#)$ 	%)& 	')( 	))* 	+), 	-). 	/)0 	1)2 	3)4 	5)6 	7)8 	!9): 	";)< 	"=)> 	"?)@ 	"A)B 	"C)D 	"E)F 	'G)H 	'I)J 	'K)L 	'M)N 	'O)P 	'Q)VC*CFH5 5       : : (!!'1-<<	
K , ,    (   / $ > >
  r   r   c                   ,    e Zd Zed        Zed        Zy)r  c                 @    | dk  rt        d| z   dz         t        |    S )Nr"   zglog())r  	LOG_TABLEr>   s    r   glogzQRMath.glog  s'    EGaK#-..|r   c                 T    | dk  r| dz  } | dk  r| dk\  r| dz  } | dk\  rt         |    S )Nr   rq      )	EXP_TABLEr  s    r   r  zQRMath.gexp  s>    !eHA !e3hHA 3h|r   N)rA   rB   rC   r1  r  r  rE   r   r   r  r    s(     
  r   r  r  rY   r"   r.   rS   rR   rq   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r!  c                     t        |      dk(  rt        t        |      dz   |z         d}|t        |      k  r$||   dk(  r|dz  }|t        |      k  r	||   dk(  r||d  dg|z  z   | _        y )Nr   /r"   )r   r  num)r   r  shiftr#  s       r   r   zQRPolynomial.__init__  s{    HMCHsNU233s3xCK1$4aKF s3xCK1$4vw<1#e)+r   c                      | j                   |   S r   )r  )r   r<   s     r   r"  zQRPolynomial.get  s    xxr   c                 ,    t        | j                        S r   )r   r  r   s    r   r)   zQRPolynomial.getLength"  s    488}r   c                    dg| j                         |j                         z   dz
  z  }t        | j                               D ]  }t        |j                               D ]l  }|||z   xx   t        j                  t        j	                  | j                  |            t        j	                  |j                  |            z         z  cc<   n  t        |d      S r  )r)   r:   r  r  r  r"  r!  )r   r{   r  r?   r  s        r   r  zQRPolynomial.multiply%  s    cT^^%59:t~~'( 	CA1;;=) CAE
fkk&++dhhqk*C*0++aeeAh*@+A C C
C	C C##r   c           
         | j                         |j                         k  r| S t        j                  | j                  d         t        j                  |j                  d         z
  }t	        | j                  |j                        D cg c]3  \  }}|t        j                  t        j                  |      |z         z  5 }}}|| j                  |j                         d  z  }t        |d      j                  |      S c c}}w r   )r)   r  r  r  r  r  r!  r   )r   r{   rationnenr  s         r   r   zQRPolynomial.mod-  s    NNq{{},KDHHQK)FKKa,BB!%%022b FKKB% 788 2 2txx''C#''**	2s   8DN)rA   rB   rC   r   r"  r)   r  r   rE   r   r   r!  r!    s    ,%,r   r!  c                   6   e Zd Zg g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dZd Zed        Zed        Zy)r   )r"   rD     )r"   rD  rZ   )r"   rD  rV   )r"   rD  rT   )r"   ,   rF  )r"   r  rJ  )r"   r  rC  )r"   r  rZ   )r"   rQ  7   )r"   rQ  r  )r$   #   r   )r$   r  rV   )r"   r   r\  )r$   rK  r  )r$   rK  r   )r.      rT   )r"   rh  rg  )r$   C   +   )r$   !   r   r$   rF  rZ   )r$   r  rU   r$   rF  rJ   )r$   rV  D   )r.   r  r!   )r.   r  r  )r.   r  r   )r$   rZ  rS  )r.   1      )r$   r  rK   r.   r  r   )r.   '   rV   r"   r   rK   )r$   y   a   )r$   ri  rG  r$   =   r  )r.   r   r   r$   r#   r  )r.   r   rK   r$   r#   r   )r$   rm  t   )rI   rM  $   r$   ;   %   )r.   r  rZ   r.   r  r   )r.   r  rJ   r.   r  rV   )r$   rV  r  r$   W   E   )r.   r  r  r"   rQ  r  )rR   r  r  r$   r     )rR   r  r   r$   r  rZ   )r.   e   Q   )r"   r\  rK  r.   r  3   )r.   rK  rC  r.   r     )rI   r  rJ   rY   r  rV   )r$   r  \   r$   u   ]   )rR   rM  r  r$   r  r  )r.   rI  r  rR   /      )r   rH  rK   r.   r  r   )r.      k   )rY   r  r  r"   ri  rG  )rY   r  r  r.   -   r  )rJ   r  rU   r.   rF  rJ   )rI      s   r"   rm  r  )r.   r  r   rS   A   r#   )rU   r  rZ   rS   r  r   )rU   r  rJ   rS   r  rV   )rS   m   r  r"   r_  X   )rS   r  r#   rS   rO  rH  )rS   rL  r   r   r  r  )rU   r  rJ   )rS   rb  rZ  r"   {   c   )r   I   r  rI   rR  rI  )r   r  r  r$   r  r  )rI   r  r   rV   rI  rZ   )r"      r  rS   rs  rg  )r    rR  rI  r"   K   r  )r"   rK  rC  r   r  r  )r$   rH  rK   r   r  r   )rS   rn  x   r"      r  )rT   r  r  r.   rQ  r  )r   rK  rC  r"   r  r  )r$   rH  rK   r  r  r   )rI      q   r.   rl  r`  )rI   rQ  r  rU   G   r  )r   r  r  r.   rP  rC  )rT   r  rV   rZ   r   rK   )rI   r  r  rS   rs  rg  )rI   r  r#   rV   r  rH  )r   rL  r   rS   r  r  )r   r  r   r    r  rZ   )r.      r  r.   r  r  )r   r  rH  )r   rK  rC  rR   r  r  )r  rI  rZ   rR   r  r   )r$      o   r      rj  )r   rR  rI  )r   rL  r   rZ   r  r  )rF  r  rV   )r.   r  r  rS      rb  )r.   r  r  rK   ro  rP  )rU   rL  r   rK   r  r  )rZ   r  r   rK   rI  rZ   )rR      r  r.      ra  )rR   r  r  rK   rR  rI  )rU   rL  r   rZ   r  r  )rE  rI  rZ   r$   r  r   )rY   rq  r]  r.   r  r  )rY   r  r  rV   ro  rP  )r   rL  r   rC  r  r  )rC  r  r   rV   rI  rZ   )r    rl  r`  r$      r  )r  rR  rI  r.   r  r  )rJ  rK  rC  rR   r  r  )r  rI  rZ   r.   r  r   )rY   r  rb  r.      r  )rC  r  r  rI   rR  rI  )rY   5   r  rD  rL  r   )rJ   r  r   rJ  rI  rZ   )rI   r  r  r    r  ra  )rI   r  r  r  rR  rI  )r.   rL  r   r  r  r  )rU   r  r   r  rI  rZ   )r   rm  r  r   r  r  )r  r  r  r   rR  rI  )r"   r	  r  r  rL  r   )r  r  r   rD  rI  rZ   )rS   r  r  r    rm  r  )r  r  r  r    ro  rP  )r   rL  r   r  r  r  )r  r  r   r  rI  rZ   )rV   r  r  rI   rm  r  )r$   rR  rI     r  r  )rH  rL  r   r"   r  r  )r  r  r   rJ  rI  rZ   )r   r  r  )r    rR  rI  r  r  r  )r    rL  r   r  r  r  )r  r  r   r  rI  rZ   )r   r  r  r"   rm  r  )rK   rR  rI  r  r  r  )r
  rL  r   r  r  r  )rU   r  r   rI  rI  rZ   )rV   r  r  rR   rm  r  )rK   rR  rI  r  r  r  )r  rL  r   r   r  r  )r  rI  rZ   r"   r  r   )rJ   r  r  r   r  rb  )rJ   r  r  rD  ro  rP  )r  rL  r   rK   r  r  )rC  r  r   r#   rI  rZ   )rR   r  r  rK   r  rb  )rR   r  r  rF  ro  rP  )rI  rL  r   r    r  r  )r$   r  r   r  rI  rZ   )r   r  rb  r.   r  r  )r
  rR  rI  rK   r  r  )r  rL  r   r    r  r  )r   r  r   rI  rI  rZ   )r.   r  rb  r   r  r  )rV   rR  rI  r  r  r  )rP  rL  r   rK   r  r  )rH  r  r   r  rI  rZ   )r  r  r  r.   r  ra  )r   r  r  r   ro  rP  )r  rL  r   rC  r  r  )r    r  r   r  rI  rZ   )r  r  ra  rR      w   )r   r  r  r  ro  rP  )rF  rL  r   rF  r  r  )r  r  r   r  rI  rZ   c                      || _         || _        y r   )r  r   )r   r  r   s      r   r   zQRRSBlock.__init__0  s    $"r   c                 <   t         j                  | |      }|d k(  rt        d| z   dz   |z         t        |      dz  }g }t	        |      D ]N  }||dz  dz      }||dz  dz      }||dz  dz      }t	        |      D ]  }	|j                  t        ||              P |S )Nzbad rs block @ version:z/errorCorrectLevel:rI   r   r"   r$   )r   getRsBlockTabler  r   r:   rw   )
r4   r   rsBlockr   r   r?   r  r  r   r  s
             r   r   zQRRSBlock.getRSBlocks4  s    ++G5FGd?5?124EF G GW"v 	>AAEAI&E Q+J Q+I5\ >Ij)<=>		> r   c                 |   |t         j                  k(  rt        j                  | dz
  dz  dz      S |t         j                  k(  rt        j                  | dz
  dz  dz      S |t         j
                  k(  rt        j                  | dz
  dz  dz      S |t         j                  k(  rt        j                  | dz
  dz  dz      S y )Nr"   r.   r   r$   rI   )r3  r4  r   RS_BLOCK_TABLEr5  r6  r7  )r4   r   s     r   r  zQRRSBlock.getRsBlockTableD  s     3 5 55++Wq[A,=,ABB"5"7"77++Wq[A,=,ABB#6#8#88++Wq[A,=,ABB#6#8#88++Wq[A,=,ABBr   N)rA   rB   rC   r  r   r1  r   r  rE   r   r   r   r   7  s6   v 	v 	v 	v 	v 	v 	v 	v  	!v& 	'v( 	)v* 	+v, 	-v2 	3v4 	5v6 	7v8 	9v> 	?v@ 	AvB 	CvD 	EvJ 	KvL 	MvN 	OvP 	QvV 	WvX 	YvZ 	[v\ 	]vb 	cvd 	evf 	gvh 	ivn 	ovp 	qvr 	svt 	uvz 	{v| 	}v~ 	v@ 	AvF 	GvH 	IvJ 	KvL 	MvR 	!SvT 	UvV 	WvX 	Yv^ 	_v` 	avb 	cvd 	 evj 	#kvl 	mvn 	 ovp 	 qvv 	!wvx 	yvz 	{v| 	}vB 	!CvD 	EvF 	 GvH 	 IvN 	#OvP 	 QvR 	 SvT 	 UvZ 	#[v\ 	]v^ 	 _v` 	 avf 	#gvh 	 ivj 	 kvl 	 mvr 	#svt 	 uvv 	 wvx 	!yv~ 	#v@ 	AvB 	 CvD 	 EvJ 	#KvL 	MvN 	 OvP 	QvV 	#WvX 	 YvZ 	![v\ 	!]vb 	#cvd 	 evf 	!gvh 	 ivn 	#ovp 	 qvr 	 svt 	!uvz 	${v| 	 }v~ 	 v@ 	 AvF 	#GvH 	 IvJ 	 KvL 	!MvR 	$SvT 	 UvV 	 WvX 	!Yv^ 	#_v` 	 avb 	 cvd 	!evj 	$kvl 	!mvn 	!ovp 	!qvv 	$wvx 	 yvz 	 {v| 	!}vB 	CvD 	!EvF 	!GvH 	!IvN 	$OvP 	!QvR 	!SvT 	!UvZ 	$[v\ 	!]v^ 	 _v` 	 avf 	$gvh 	!ivj 	!kvl 	!mvr 	$svt 	 uvv 	!wvx 	 yv~ 	$v@ 	!AvB 	!CvD 	!EvJ 	$KvL 	!MvN 	!OvP 	!QvV 	$WvX 	 YvZ 	![v\ 	!]vb 	$cvd 	!evf 	!gvh 	!ivNp#   
 
r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)r  c                      g | _         d| _        y r   )r3   r   r   s    r   r   zQRBitBuffer.__init__R  s    r   c                 p    dj                  | j                  D cg c]  }t        |       c}      S c c}w )N.)joinr3   r`   )r   r>   s     r   r,   zQRBitBuffer.__repr__V  s'    xx5AQ5665s   3c                 H    |dz  }| j                   |   d|dz  z
  z	  dz  dk(  S )NrY   r   r"   )r3   )r   r<   bufIndexs      r   r"  zQRBitBuffer.getY  s1    A:++h'A	M:q@QFFr   c                 d    t        |      D ]"  }| j                  |||z
  dz
  z	  dz  dk(         $ y r  )r:   r  )r   r  r   r?   s       r   r0   zQRBitBuffer.put]  s:    v 	AAKKCFQJN39a?@	Ar   c                     | j                   S r   )r   r   s    r   r  zQRBitBuffer.getLengthInBitsa  s    {{r   c                    | j                   dz  }t        | j                        |k  r| j                  j                  d       |r'| j                  |xx   d| j                   dz  z	  z  cc<   | xj                   dz  c_         y )NrY   r   r  r"   )r   r   r3   rw   )r   r  r  s      r   r  zQRBitBuffer.putBitd  se    ;;!#t{{x'KKq!KK!dt{{Q&?A!qr   N)	rA   rB   rC   r   r,   r"  r0   r  r  rE   r   r   r  r  Q  s"    7GAr   r  )rM   r   r   r   r]   	NameErrorr`   r   rG   rQ   rX   rd   r   r   r   r   r   r   r3  r9  r   r  r:   r  r  r?   r!  r   r  )r   s   0r   <module>r     s  0 
 6%
3  3 jr   &+b +Z2b 2l1B 1&#R #&+" +2 \ \~
 
 m m^  c
#1Q#	c
#1Q#		q A6IaL	q# 9Aa!e$yQ'77a!e$%'0Q'78IaL9 
s !A Iil!, ,BX Xt k!655  GV $#s(   E E) <	E7	E<E&)E43E4