
    dgd              	          S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	rS SK
r
S SKrS SKrS SKrS SKJr  S SKJr  S SKJr  SrS rS rS5S jr " S	 S
\5      rS rS r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\ \5      r! " S S\5      r" " S S\"\ \\5      r# " S S \"\ \5      r$ " S! S"\5      r% " S# S$\"\ \\%5      r& " S% S&\5      r' " S' S(\%5      r( " S) S*\(5      r) " S+ S,\%\"\\'\5      r* " S- S.\)\*5      r+ " S/ S0\5      r, " S1 S2\,\(\\'\5      r- " S3 S4\)\-5      r.g)6    N)ALCLog)ALChacks)_
   c                    U R                   (       d  g  UR                  5       (       d:  [        R                  " [        S5      5        [        R
                  " [        5        g g ! [        [        4 a    [        R
                  " [        5         g [         aK  n[        R                  " [        S5      [        U5      -  5        [        R
                  " S5         S nAg S nAff = f)NAbortingzConfirmation failed: %s   )confirmr   errorr   sysexitBREAK_APT_EXIT_CODEKeyboardInterruptEOFError	Exceptionstr)configfrontendexs      ;/usr/lib/python3/dist-packages/apt_listchanges/frontends.pyconfirm_or_exitr   3   s    >>!!LL:'HH() " x( &$% Q01CG;<s   AA$ $*C$	C$ACC$c                 F   [         R                  " [        S5      U R                  US.-  5        [        R
                  R                  S5      nSUl        [        R
                  R                  Ul	        [        R                  R                  5       nU R                  S:X  a  [        U 5      R                  X!5      nSUS'   SUS	'   UR                  5       (       a  UR!                  5       (       a  UO[        R"                  R%                  X#5      US
'   U R                  US'   UR'                  X5         [(        R*                  " / SQUR-                  5       SS9  g ! [.         a9  n[         R0                  " [        S5      U R                  US.-  5         S nAg S nAff = f)Nz Mailing %(address)s: %(subject)s)addresssubjectzutf-88bithtmlztext/html; charset=utf-8zContent-Typezauto-generatedzAuto-SubmittedSubjectTo)/usr/sbin/sendmailz-oiz-tT)inputcheckz.Failed to send mail to %(address)s: %(errmsg)s)r   errmsg)r   infor   email_addressemailcharsetCharsetbody_encodingQPheader_encodingmessageMessageemail_formatr   convert_to_htmlisasciiisprintableheaderHeaderset_payload
subprocessrunas_bytesr   warning)r   changesr   r&   r+   r   s         r   mail_changesr9   A   sc   
KK45"00WEF G mm##G,G"G#mm..Gmm##%Gf$v,..w@"< 0G$__..73F3F3H3H "$||227D I ((GDM)H:$--/t	= HqIJ#)#7#72FG 	H 	HHs   6&E 
F '/FF c                    [         R                  R                  S5      (       d*  U(       a"  [        R                  " [        S5      U-  5        gU R                  (       d*  U(       a"  [        R                  " [        S5      U-  5        gg)zlCheck if the mail frontend is usable.
When the second parameter is given print an appropriate error message r   z9The mail frontend needs an installed 'sendmail', using %sFzDThe mail frontend needs an e-mail address to be configured, using %sT)ospathexistsr   r   r   r$   )r   replacementFrontends     r   can_send_emailsr?   [   st     77>>.//LLMN%&' LL ) *,?@A     c                       \ rS rSrSrSrg)EUnknownFrontendo   ziException class to notify callers of make_frontend() that invalid
frontend was given in the configuration N)__name__
__module____qualname____firstlineno____doc____static_attributes__rD   r@   r   rB   rB   o   s    /r@   rB   c                 <   S[        S5      -   S-   SR                  [        S[        U5      5       Vs/ s H  nSUS-    SX    S3PM     sn5      -   [        S5      -   nS	 H8  n [	        U 5      R                  U5      nU(       d    OU[        U5      S-
     s  $    [        R                  " [        S5      U R                  -  5        U R                  $ s  snf ! [         a6  n[        R                  " [        S
5      [        U5      -  5         SnAM  SnAff = f)z+Utility function used for testing purposes 
z$Available apt-listchanges frontends: r     r	   z. z*Choose a frontend by entering its number: )r	         	Error: %sNzUsing default frontend: %s)r   joinrangelen
ttyconfirmttyaskintr   r   r   r   r#   r   )r   	frontendsipromptresponser   s         r   _select_frontendr\   t   s   A<==D
3y>242Q acU"Y\N"-24 	55 	

678F
 	3!&)008HS]1_--  KK./&//AB??4  	3LL;#b'122	3s#   C
&!C	C
D%+DDc                    [         [        [        [        [        [
        [        [        [        S S S.nSS/nU R                  (       a-  [        U [        [        UR                  5       5      5      5      nOU R                  n[        U[         5      (       a  U$ US:X  a  g XC;   a  OU R"                  S:  a  [%        U 5      (       a  SnOg U R"                  S:X  a  US:w  d  [%        U S5      (       d  SnOUS:X  a  [%        U S	5      (       d  S	nUS
;   aU  S[&        R(                  ;  aA  UR+                  S5      (       a  USS  OS	n[,        R.                  " [1        S5      SU0-  5        US:X  a   [3        SS /S9nUR4                  X$'   X@l        XB;  a  [>        eX$   " X5      $ ! [6         a\  nU R8                  (       a  U R:                  (       a
  SnSU l        OS	n[,        R.                  " [1        S5      XFS.-  5         S nAN|S nAff = f)N)textpagerdebconfmailsysloglogbrowserxterm-pagerxterm-browsergtknonerb   rc   rh   rO   ra   r	   r^   r_   )rg   re   rf   DISPLAYzxterm-   z1$DISPLAY is not set, falling back to %(frontend)sr   rg   z!apt_listchanges.AptListChangesGtk)fromlistFz|The gtk frontend needs a working python3-gi,
but it cannot be loaded. Falling back to %(frontend)s.
The error is: %(errmsg)s)r   r"   ) text_frd	pager_frddebconf_frdmail_frd
syslog_frdlog_frdbrowser_frdxterm_pager_frdxterm_browser_frdselect_frontendr\   sortedlistkeysr   
isinstanceFrontendquietr?   r;   environ
startswithr   r   r   
__import__gtk_frdImportErrorapt_modefrontend_from_envr
   rB   )r   packages_countrX   frontends_no_overridenamerg   r   s          r   make_frontendr      s   !#'!%' /"3
I 
 tINN4D/E(FG$!!v~ $ 
	6""D 
	6>!@!@D 6>/&'"B"BD::BJJ&#x8848gDLLNO&-. / 5=8 !D+/&2"%++	" O?622'  8??v'?'? "D%*FN"D 1 2 $(678 88s   .F" "
H,AHHc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )base   c                 .   > [         TU ]  5         Xl        g N)super__init__r   )selfr   args	__class__s      r   r   base.__init__   s    r@   c                     U$ r   rD   r   r^   s     r   _renderbase._render   s    r@   )r   )rE   rF   rG   rH   r   r   rJ   __classcell__r   s   @r   r   r      s     r@   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )titled   c                 .   > [         TU ]  " U6   SU l        g )Nzapt-listchanges output)r   r   titler   r   r   s     r   r   titled.__init__   s    $-
r@   c                     Xl         g r   r   )r   r   s     r   	set_titletitled.set_title   s    
r@   r   )rE   rF   rG   rH   r   r   rJ   r   r   s   @r   r   r      s    . r@   r   c                   J   ^  \ rS rSrU 4S jrS	S jrS rS rS rS r	Sr
U =r$ )
rz      c                 0   > [         TU ]  X5        X l        g r   )r   r   r   )r   r   r   r   s      r   r   Frontend.__init__   s    0,r@   c                     g r   rD   r   diffs     r   update_progressFrontend.update_progress       r@   c                     g r   rD   r   s    r   progress_doneFrontend.progress_done   r   r@   c                     g r   rD   r   s     r   display_outputFrontend.display_output   r   r@   c                     gNFrD   r   s    r   needs_tty_stdinFrontend.needs_tty_stdin       r@   c                     gNTrD   r   s    r   r
   Frontend.confirm      r@   )r   r	   )rE   rF   rG   rH   r   r   r   r   r   r
   rJ   r   r   s   @r   rz   rz      s&    - r@   rz   c                       \ rS rSrS rSrg)rn   i  c                    SS K nSS KnS[        R                  ;  d  [        R                  S   S:w  a  g UR                  UR                  UR
                  S5      nUR                  [        R                  S   5        UR                  5       nUR                  5         UR                  XUS9n[        R                  " SS9 n[        R                  " UR                  5       S5        UR                  S	5        UR                  S
5       HB  nUR!                  5       (       a  UR                  SU-   S
-   5        M1  UR                  S5        MD     UR#                  5         UR%                  SUR&                  5        UR                  5         S S S 5        UR)                  S5        UR+                  SSU R,                  5        UR+                  SSU R.                  5        UR1                  S5        UR3                  SSS5        UR5                  SS5        UR7                  5         UR                  5         g ! , (       d  f       N= f)Nr   DEBIAN_FRONTENDpassthroughDEBCONF_PIPE)readwriteapt-listchanges-tmp)prefixi  s   Template: apt-listchanges/info
Type: title
Description: NEWS

Template: apt-listchanges/title
Type: title
Description: ${title}

Template: apt-listchanges/news
Type: note
Description: ${packages_count} packages
rL   rN   z .
x_loadtemplatefilezapt-listchanges/infozapt-listchanges/titler   zapt-listchanges/newsr   seenfalsehigh)socketr`   r;   r|   AF_UNIXSOCK_STREAMconnectmakefilecloseDebconftempfileNamedTemporaryFilefchmodfilenor   splitstripflushcommandr   r#   substr   r   settitlefsetr    go)	r   r^   r   dcsockdcfddbtmplines	            r   r   debconf_frd.display_output  s   BJJ.::'(M9}}V^^V-?-?CRZZ/0}}

ZZTZ.((0EF#IIcjjlE*II - . 

4(::<<IIdTkD01IIf%	 )
 IIKJJ+SXX6IIK+ G, 	&'
('4::>
')94;N;NO
+,
&8
/0


; GFs   C
H55
IrD   NrE   rF   rG   rH   r   rJ   rD   r@   r   rn   rn     s    (r@   rn   c                   &    \ rS rSrS rS rS rSrg)rU   i3  c                    [         R                  R                  5       (       a<  [         R                  R                  5       (       a  [	        U5      R                  5       $ [        R                  " 5       n[        SSSS9 nUR                  UR                  U5      5        UR                  5         UR                  UR                  5       5      R                  5       sS S S 5        $ ! , (       d  f       g = f)Nz/dev/ttyzrb+r   )	buffering)r   stdinisattystdoutr    rstripr   system_encodingopenr   to_bytesr   
from_bytesreadline)r   rZ   encttys       r   rV   ttyconfirm.ttyask4  s    99#**"3"3"5"5=''))&&(*eq1SIIcll6*+IIK>>#,,.188: 211s    AC''
C5c                    [         R                  R                  5         U R                  S[	        S5      -   5      nUS:H  =(       d9    [
        R                  " [        R                  " [        R                  5      U5      $ )Nzapt-listchanges: zDo you want to continue? [Y/n] rM   )
r   r   r   rV   r   researchlocalenl_langinfoYESEXPR)r   r[   s     r   r
   ttyconfirm.confirm>  sa    
 	

;;!$E"FFH2~ 56+=+=fnn+M+3"5 	5r@   c                 .    U R                   R                  $ r   )r   r
   r   s    r   r   ttyconfirm.needs_tty_stdinI  s    {{"""r@   rD   N)rE   rF   rG   rH   rV   r
   r   rJ   rD   r@   r   rU   rU   3  s    ;	5#r@   rU   c                   $    \ rS rSrSS jrS rSrg)simpleprogressiN  c                     U R                   R                  S:  a  g [        U S5      (       d*  SU l        [        R
                  " [        S5      S-   5        g g )Nr	   message_printedReading changelogsz...)r   r{   hasattrr  r   r#   r   r   s     r   r   simpleprogress.update_progressO  sI    ;;q t.//#$D KK./%78 0r@   c                     g r   rD   r   s    r   r   simpleprogress.progress_doneW  r   r@   )r  Nr   rE   rF   rG   rH   r   r   rJ   rD   r@   r   r   r   N  s    9r@   r   c                       \ rS rSrSrg)ro   i[  rD   NrE   rF   rG   rH   rJ   rD   r@   r   ro   ro   [      r@   ro   c                       \ rS rSrS rSrg)prepend_titlei_  c                     U R                   R                  (       d  U$ U R                  S-   [        U R                  5      S-  -   S-   U-   $ )NrL   -z

)r   r   r   rT   r   s     r   r   prepend_title._render`  sG    {{!!KzzD C

Oc$9: 	r@   rD   N)rE   rF   rG   rH   r   rJ   rD   r@   r   r  r  _  s    r@   r  c                       \ rS rSrS rSrg)rl   ig  c                     [         R                  R                  [        R                  " 5       R                  U R                  U5      5      5        g r   )r   r   r   r   r   	as_stringr   r   s     r   r   text_frd.display_outputh  s5    

$$&00d1CD	Fr@   rD   Nr   rD   r@   r   rl   rl   g  s    Fr@   rl   c                       \ rS rSrS rSrg)rp   im  c                     SS K nUR                  UR                  S9  UR                  [        R                  " 5       R                  U R                  U5      5      5        UR                  5         g )Nr   )facility)rb   openlog
LOG_DAEMONr   r   r  r   closelog)r   r^   rb   s      r   r   syslog_frd.display_outputn  sL     1 12h..0::4<<;MNOr@   rD   Nr   rD   r@   r   rp   rp   m  s    r@   rp   c                   R   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
rU =r$ )RunCommandMixiniv  c                 J   > [         TU ]  " U6   SU l        SU l        S U l        g )NTrM   )r   r   waitsuffixr   r   s     r   r   RunCommandMixin.__init__w  s'    $	 r@   c                    U R                   (       d  [        R                  " 5       S:w  a  g [        R                  " SU R
                  U R                  5       S9 n UR                  U R                  R                  U R                  U5      5      5        UR                  5         U R                  UR                  5       5        [        R                  " UR                  5       5      R                  n[         R"                  " S5        [$        R&                  " U R)                  5       UR*                  /-   U R-                  5       U R/                  5       S9 nUR                  5       nUS:w  a-  [1        [3        S5      [5        UR6                  5      US.-  5      e S S S 5        [9        SS	5       HM  nU[        R                  " UR                  5       5      R                  :w  a    O[         R"                  " S
5        MO     U R;                  U5         S S S 5        U R                   (       d  [<        R>                  " S5        g g ! , (       d  f       N= f! U R;                  U5        f = f! , (       d  f       N^= f)Nr   r   )r   r  dirg?)
preexec_fnenv-Command %(cmd)s exited with status %(status)dcmdstatusr	   r   g      ?) r  r;   forkr   r   r  
get_tmpdirr   r   r   r   r   fchown_tmpfiler   fstatst_atimetimesleepr4   Popenget_commandr   get_preexec_fnget_environOSErrorr   r   r   rS   _close_temp_filer   r   )r   r^   r   atimeprocessr(  _is          r   r   RunCommandMixin.display_output  s    yyRWWY!^((,T[[OO%'*-+		$((++DLL,>?@		##CJJL1.77 

3%%((*chhZ7#'#6#6#8 ,,.0 4;$\\^F{%MN&)',,&76JKL L #0  2,B 6 ? ??JJsO '
 %%c*E'H yyHHQK -0 0( %%c*E' 's?   I*C:IAIA%I I*
I	II''I**
I8c                 F     UR                  5         g ! [         a     g f = fr   )r   FileNotFoundError)r   r   s     r   r5   RunCommandMixin._close_temp_file  s"    	IIK  		s    
  c                     U R                   $ r   r   r   s    r   r1  RunCommandMixin.get_command      ||r@   c                     g r   rD   r   r   s     r   r+  RunCommandMixin.fchown_tmpfile  r   r@   c                     g r   rD   r   s    r   r*  RunCommandMixin.get_tmpdir  r   r@   c                     g r   rD   r   s    r   r2  RunCommandMixin.get_preexec_fn  r   r@   c                     g r   rD   r   s    r   r3  RunCommandMixin.get_environ  r   r@   )r   r  r  )rE   rF   rG   rH   r   r   r5  r1  r+  r*  r2  r3  rJ   r   r   s   @r   r  r  v  s1    -^ r@   r  c                       \ rS rSrS rSrg)rq   i  c           	      P   [         R                  " 5       R                  U R                  U5      5      n[	        U R
                  R                  S5       nU R
                  R                  (       a  [        R                  " U R
                  R                  5      U l
        [        R                  " U R                  5       [        R                  UU R                  5       U R!                  5       S9 nUR#                  UR%                  5       S9  UR&                  S:w  a7  [)        [+        S5      [-        UR.                  5      UR&                  S.-  5      e S S S 5        OUR1                  UR%                  5       5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nab)r   r   r#  r$  )r    r   r%  r&  )r   r   r  r   r   r   rc   filtershlexr   r   r4   r0  r1  PIPEr2  r3  communicateencode
returncoder4  r   r   r   r   )r   r^   outputfr7  s        r   r   log_frd.display_output  s7   ))+55dll46HI$++//4(A{{!!${{4;;+=+=>%%((**//!#'#6#6#8 ,,.0 4;''fmmo'>))Q.%MN&)',,&7)0););==> > /0 0 ( )(0 0 )(s&   BF/A%F(F
F	F
F%r>  Nr   rD   r@   r   rq   rq     s    )r@   rq   c                   $    \ rS rSrSS jrS rSrg)FancyProgressMixini  c                    U(       d  g [        U S5      (       d  SU l        SU l        U =R                  U-  sl        [        S5      S[	        U R                  S-  U R
                  -  5       S3-   n[        U5      U l        [        R                  R                  US-   5        [        R                  R                  5         g )Nprogressr   r  ... d   %)r  rY  line_lengthr   rW   r   rT   r   r   r   r   )r   r   r   s      r   r   "FancyProgressMixin.update_progress  s    tZ((DM D%&3t}}s*T-@-@@AB!DEt9

%

r@   c                 6   [        U S5      (       a  [        R                  R                  SU R                  -  S-   5        [        R                  R                  [        S5      S-   [        S5      -   S-   5        [        R                  R                  5         g g )Nr^   r]  r  rZ  DonerL   )r  r   r   r   r^  r   r   r   s    r   r    FancyProgressMixin.progress_done  s|    4''JJS4#3#33d:;JJQ34#$&'i0267 8JJ	 (r@   )r^  rY  Nr   r  rD   r@   r   rW  rW    s    r@   rW  c                   L   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )
runcommand_drop_privsi  c                   > [         TU ]  " U6   U R                  5       U l        U R	                  5       U l        U R                  (       aD  [        R                  " [        S5      U R                  R                  U R
                  S.-  5        g g )Nz2Found user: %(user)s, temporary directory: %(dir)s)userr"  )
r   r   _find_user_pw_user_pw_find_tmpdir_tmpdirr   debugr   pw_namer   s     r   r   runcommand_drop_privs.__init__  sn    $**,((*==LLFG==00FGH r@   c                     U R                   (       a@  [        R                  " XR                   R                  U R                   R                  5        g g r   )ri  r;   fchownpw_uidpw_gidrB  s     r   r+  $runcommand_drop_privs.fchown_tmpfile  s0    ==IIfmm22DMM4H4HI r@   c                     U R                   $ r   )rk  r   s    r   r*   runcommand_drop_privs.get_tmpdir   r@  r@   c                 8   ^  T R                   (       d  g U 4S jnU$ )Nc                  4  >  [         R                  " TR                  R                  5        [         R                  " TR                  R
                  5        g ! [         a5  n [        R                  " [        S5      [        U 5      -  5         S n A g S n A ff = f)NrQ   )r;   setgidri  rr  setuidrq  r   r   r   r   r   )r   r   s    r   preexec5runcommand_drop_privs.get_preexec_fn.<locals>.preexec  s`    7		$--../		$--../ 7Q{^c"g5667s   AA 
B"+BB)ri  )r   rz  s   ` r   r2  $runcommand_drop_privs.get_preexec_fn  s    }}	7 r@   c                 @   U R                   (       d  g [        R                  nU R                   R                  US'   U R                   R                  US'   S H  nU R                   R
                  X'   M     U R                  (       a  S H  nU R                  X'   M     U$ )NHOMESHELL)USERNAMEUSERLOGNAME)TMPDIRTMPTEMPDIRTEMP)ri  r;   r|   pw_dirpw_shellrm  rk  )r   newenvenvvars      r   r3  !runcommand_drop_privs.get_environ  sw    }}--v--00w5F!]]22FN 6<<>!% ?r@   c           	         [         R                  " 5       S:w  a  g S nS Hn  nU[         R                  ;   d  M   [         R                  U   nUR                  5       (       d  [        R
                  " U5      O[        R                  " U5      n  O   U(       a  UR                  (       a  U$ [        R                  " [        S5      5        g ! [         a)  n[        [        S5      U[        U5      S.-  5      UeS nAff = f)Nr   )APT_LISTCHANGES_USER	SUDO_USERr  z9Error getting user from variable '%(envvar)s': %(errmsg)s)r  r"   z1Cannot find suitable user to drop root privileges)r;   getuidr|   isdigitpwdgetpwnamgetpwuidr   RuntimeErrorr   r   rq  r   r7   )r   pwdatar  rg  r   s        r   rh  #runcommand_drop_privs._find_user_pw  s    99;!GF#	I::f-D7;||~~S\\$/ \\$/  H fmmMqLMN ! I& ' (%+s2w?@A GIIIs   AC
C>$C99C>c                    U R                   (       d  g [        R                  " 5       n[        R                  [        R
                  -  [        R                  -  n[        R                  " U R                   R                  S5         [        R                  " X5      (       a  U[        R                  " S5        $ U/nUR                  S5      (       ai  USS [        U R                   R                  5      -   n[        R                  " X5      (       a  U[        R                  " S5        $ UR                  U5        US:w  aF  Sn[        R                  " X5      (       a  U[        R                  " S5        $ UR                  U5        [        [        S5      U R                   R                   [        U5      S.-  5      e! [        R                  " S5        f = f)Nr   z/0z/tmpzJNone of the following directories is accessible by user %(user)s: %(dirs)s)rg  dirs)ri  r   
gettempdirr;   R_OKW_OKX_OKsetreuidrq  accessry  endswithr   appendr  r   rm  )r   tmpdirflagschecked_tmpdirss       r   rj  "runcommand_drop_privs._find_tmpdir4  s]   }}$$&"''!BGG+
DMM((!,	yy''* IIaL)  &hO t$$"DMM,@,@(AA99V++! IIaL  &&v.99V++! IIaL  &&v. 0 1==00/112 2 IIaLs    F> 9AF> *5F> 6AF> >G)rk  ri  )rE   rF   rG   rH   r   r+  r*  r2  r3  rh  rj  rJ   r   r   s   @r   re  re    s-    HJ
0 r@   re  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )
XtermMixiniU  c                    > [         TU ]  " U6   [        R                  U l        SU l        [        R                  " U R                  R                  SS5      5      U l
        g )NFxtermzx-terminal-emulator)r   r   r;   P_NOWAITmoder  rN  r   r   getr  r   s     r   r   XtermMixin.__init__V  sG    $KK		[[*", -
r@   c                 T    U R                   SU R                  S/-   U R                  -   $ )Nz-Tz-e)r  r   r   r   s    r   r1  XtermMixin.get_command]  s%    zzT4::t44t||CCr@   c                     gr   rD   r   s    r   r   XtermMixin.needs_tty_stdin`  r   r@   )r  r  r  )	rE   rF   rG   rH   r   r1  r   rJ   r   r   s   @r   r  r  U  s    -D r@   r  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )rm   id  c                    > [         TU ]  " U6   U R                  5         [        R                  " U R
                  R                  SS5      5      U l        SU l        [        R                  " 5       U l        g )Nr_   zsensible-pagerz.txt)r   r   _setup_less_variablerN  r   r   r  r   r  r   r   r   r   s     r   r   pager_frd.__init__f  sS    $!!#{{4;;??7<L#MN++-r@   c                    S[        SS5      -  n[        R                  R                  SS5      nU(       d  U[        R                  S'   g SU;   d  SU;   a  US-  nS	U;   d  S
U;   a  US-  nUS-   U-   [        R                  S'   g )Nz	-P?e(%s)$zpress q to quitzDo not translate the 'q'.LESSrM   Ez--QUIT-Az -+EFz--quit-iz -+Fra  )r   r;   r|   r  )r   rZ   lesss      r   r  pager_frd._setup_less_variablem  s     q!2!< > >zz~~fb)!'BJJv $;*,FND$;*,FND!CZ&0

6r@   c                     gr   rD   r   s    r   r   pager_frd.needs_tty_stdin  r   r@   r   r   r  )	rE   rF   rG   rH   r   r  r   rJ   r   r   s   @r   rm   rm   d  s    .1( r@   rm   c                       \ rS rSrSrg)rs   i  rD   Nr	  rD   r@   r   rs   rs     r
  r@   rs   c                      \ rS rSr\R
                  " S\R                  5      r\R
                  " S\R                  5      rSr	\R
                  " S\R                  5      r
\R
                  " S\R                  5      rSr\R
                  " S5      rS	r\R
                  " S
5      rSr\R
                  " S5      rS rS rS rS rS rSrg)r   i  z(?:lp:?\s+\#\d+(?:,\s*\#\d+)*)z(?P<linktext>#(?P<bugnum>\d+))z@<a href="https://launchpad.net/bugs/\g<bugnum>">\g<linktext></a>zE(?:closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*|(?<!">)#\d+)z(?P<linktext>#?(?P<bugnum>\d+))z=<a href="https://bugs.debian.org/\g<bugnum>">\g<linktext></a>z#\bC(VE|AN)-(19|20|21)\d\d-\d{4,7}\bzH<a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=\g<0>">\g<0></a>zs([a-zA-Z0-9_\+\-\.]+)@(([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)z <a href="mailto:\g<0>">\g<0></a>zf(ht|f)tps?\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&;%\$#\=~])*c                 F    U R                  U5        U R                  U5      $ r   )r   r   )r   r   r^   s      r   r.   html.convert_to_html  s    u||D!!r@   c                 f    UR                  SS5      R                  SS5      R                  SS5      $ )N&z&amp;<z&lt;>z&gt;)replacer   s     r   _html_encodehtml._html_encode  s.    WS'"WS&!WS&!	"r@   c                 b  ^  T R                  U5      nT R                  R                  U 4S jU5      nT R                  R                  U 4S jU5      nT R                  R                  T R
                  U5      nT R                  R                  T R                  U5      nUR                  U5        g )Nc                 n   > TR                   R                  TR                  U R                  S5      5      $ Nr   )	lp_bug_resub
lp_bug_fmtgroupmr   s    r   <lambda>#html._render_text.<locals>.<lambda>  s"    dnn((!''!*Er@   c                 n   > TR                   R                  TR                  U R                  S5      5      $ r  )bug_rer  bug_fmtr  r  s    r   r  r    s     dkkoodllAGGAJ?r@   )	r  lp_bug_stanza_rer  bug_stanza_recve_recve_fmtemail_re	email_fmtr   )r   htmltextr^   s   `  r   _render_texthtml._render_text  s      &$$((EtM!!%%?G{{t||T2}}  6tr@   c           	      j   SnU R                   R                  U5       H~  nU R                  XX4R                  5        5        UR	                  5       nUR                  5       nUS   S;   a
  US S nUS-  nUR                  SU SU R                  U5       S35        M     U R                  XUS  5        g )Nr   r  ).,;?'r	   z	<a href="z">z</a>)url_refinditerr  startendr  r   r  )r   r  r   prevposmatchurls         r   _render_linehtml._render_line  s    [[))$/EhW[[](CDiikG++-C2w44#2h1NNYse2d.?.?.D-ETJK 0 	(N3r@   c                 \   [         R                  " 5       nUR                  S5        UR                  U R                  5        UR                  S5        UR	                  S5       H%  nU R                  X#5        UR                  S5        M'     UR                  S5        UR                  5       $ )Nzs<html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>z6</title>
        </head>

        <body>
        <pre>rL   z</pre></body></html>)ioStringIOr   r   r   r  getvalue)r   r^   r  r   s       r   r   html._render  s    ;;=  	 	tzz"  	 JJt$Dh-NN4  % 	-.  ""r@   rD   N)rE   rF   rG   rH   r   compileIr  r  r  r  r  r  r  r  r  r  r  r.   r  r  r  r   rJ   rD   r@   r   r   r     s     zz"CRTTJ

<bddCIJJJ	M ZZ:BDDAFNGZZ>?F!G zz	ABH 4IZZ	45F""
4#r@   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )rr   i  c                    > [         TU ]  " U6   [        R                  " U R                  R                  SS5      5      U l        SU l        [        R                  " 5       U l
        g )Nrd   zsensible-browserz.html)r   r   rN  r   r   r  r   r  r   utf8_encodingr   r   s     r   r   browser_frd.__init__  sL    ${{4;;??)$+ ,))+r@   c                     gr   rD   r   s    r   r   browser_frd.needs_tty_stdin  r   r@   r  )rE   rF   rG   rH   r   r   rJ   r   r   s   @r   rr   rr     s    , r@   rr   c                       \ rS rSrSrg)rt   i  rD   Nr	  rD   r@   r   rt   rt     r
  r@   rt   r   )/r   r;   r   r.  r4   r   email.messager%   email.headeremail.charsetr  r  rN  r   apt_listchangesr   r   apt_listchanges.ALChacksr   r   r   r9   r?   r   rB   r\   r   r   r   rz   rn   rU   r   ro   r  rl   rp   r  rq   rW  re  r  rm   rs   r   rr   rt   rD   r@   r   <module>r     s  4  	 	       	 
   " $ &  H4(/y /
(T3n T v **( *Z# #6
T 
	~x 	F F}nj( F Nd Nb)m^X )( .`O `F& 
<NB	j) 	L#6 L#^
$-z;M
	
K 	r@   