
    =Og                        	 d dl Z d dlZd dlZd dlZd dlZd dlZ	 d dlZdZn# e$ r dZY nw xY wd dl	m
Z d dlmZ g dZ ej        e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dZdZh dZg dZdddZdZ ej        dg d          Z ej        d g d!          Z d" Z
d# Z!dVd$Z"dVd%Z#dWd&Z$erd' Z% G d( d)          Z&er# G d* d+e&          Z'e(                    d+           ed,k    r,d dl)Z) e)j*        d-.          Z+e+,                    d/d0d1d23           e+,                    d4d5d6d73           e+,                    d8d9d:e-d;ed<ed=>           e+,                    d?d@dAe-dB>           e+,                    dCdDdEddFG           e+.                                Z/e/j0        Z0e/j        se0d:k    reZ0 e&e/j1        e0H          Z2ne0d:k    reZ0 e'e/j1        e0H          Z2e23                                Z4dIe4v re25                                 e26                    e/j6                  \  Z7Z8Z9Z:Z; e<dJe;dKe8dLe9dMe:           dN Z= e> e-e:          e/j?        z
  dOz             Z9e2@                    e9e:          \  Z7ZAeAD ]\  ZBZC e
eCdP                   D                    dQdO          d          ZE e
eCdR                   ZF e-eCd                   ZG e<dSH                    eB e=eEdT           e=eFdU          eG                     e2I                                 dS dS )X    NTF)decode_header)_GLOBAL_DEFAULT_TIMEOUT)NNTP	NNTPErrorNNTPReplyErrorNNTPTemporaryErrorNNTPPermanentErrorNNTPProtocolErrorNNTPDataErrorr   )      )removei   c                       e Zd Z	 d ZdS )r   c                 v    t          j        | g|R   	 |d         | _        d S # t          $ r d| _        Y d S w xY w)Nr   zNo response given)	Exception__init__response
IndexError)selfargss      /usr/lib64/python3.11/nntplib.pyr   zNNTPError.__init__e   sW    4'$''''	0 GDMMM 	0 	0 	0/DMMMM	0s   # 88N)__name__
__module____qualname__r        r   r   r   c   s&        /0 0 0 0 0r   r   c                       e Zd Z	 dS )r   Nr   r   r   r   r   r   r   r   l   s        "Dr   r   c                       e Zd Z	 dS )r   Nr   r   r   r   r   r   p           Dr   r   c                       e Zd Z	 dS )r	   Nr   r   r   r   r	   r	   t   r    r   r	   c                       e Zd Z	 dS )r
   Nr   r   r   r   r
   r
   x   s        ,Dr   r
   c                       e Zd Z	 dS )r   Nr   r   r   r   r   r   |   s         Dr   r   w   i3  >   100101211215220221222224225230231282)subjectfromdatez
message-id
references:bytes:linesr5   r6   )byteslines   
	GroupInfo)grouplastfirstflagArticleInfo)number
message_idr8   c                    	 g }t          |           D ]Z\  }}t          |t                    r+|                    |                    |pd                     E|                    |           [d                    |          S )Nascii )_email_decode_header
isinstancer7   appenddecodejoin)
header_strpartsvencs       r   r   r      s    @E&z22  3a 	LL#.112222LLOOOO775>>r   c                    	 g }| D ]}|d         dk    r'|dd                               d          \  }}}d|z   }n|                     d          \  }}}|                                }t                              ||          }|                    |           t
          }t          |          t          |          k     rt          d          |d t          |                   |k    rt          d          |S )Nr   :   z$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields)	partitionlower_OVERVIEW_FMT_ALTERNATIVESgetrG   _DEFAULT_OVERVIEW_FMTlenr   )r8   fmtlinename_suffixdefaultss          r   _parse_overview_fmtr]      s    $ C  7c>>"122h0055OD!V:DD #nnS11OD!Vzz||)--dD99

4$H
3xx#h--BCCC
>CMM>h&&HIIIJr   c                 *   	 t          t                    }g }| D ]}i }|                    d          ^}}t          |          }t	          |          D ]\  }	}
|	t          |          k    r||	         }|                    d          }|	|k    r`|s^|dz   }|
r<|
d t          |                                                   |k    rt          d          |
r|
t          |          d          nd }
|
|||	         <   |                    ||f           |S )N	rO   z: z?OVER/XOVER response doesn't include names of additional headers)	rV   rU   splitint	enumerate
startswithrR   r   rG   )r8   rW   data_process_func
n_defaultsoverviewrX   fieldsarticle_numbertokensitoken
field_nameis_metadatahs                 r   _parse_overviewro      sG   *++JH 2 2"&**T"2"2^,,!&)) 	# 	#HAuCHH}} QJ$//44KJ{ % GU7CFF7^1133q88' )F G G G*/9c!ffggT"F3q6NN01111Or   c                    	 || dd          }| d d         } t          |d d                   }t          |dd                   }t          |dd                    }t          | d d                   }t          | dd                   }t          | dd                    }|dk     r|dz  }n|dk     r|d	z  }t          j        ||||||          S )
Ni      F   i  d   il  )ra   datetime)date_strtime_strhoursminutessecondsyearmonthdays           r   _parse_datetimer      s     BCC=CRC=!E(1Q3-  G(122,Gx}DB  E
hrssm

C byy	T5#ugwGGGr   c                     	 t          | t          j                  sd}nd                    |           }| j        }|r|dz  }d                    ||           }nd                    ||           }||fS )N000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rv   z{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})rF   rw   formatr}   )dtlegacyry   yrx   s        r   _unparse_datetimer     s     b(+,, I=DDRHH
A CG4;;ArBB4;;ArBBXr   c                 \    	 |t          j                    }|                    | |          S )N)server_hostname)ssl_create_stdlib_contextwrap_socket)sockcontexthostnames      r   _encrypt_onr     s5    	 ?022G""4"BBBr   c                      e Zd ZdZdZeddddefdZd Zd Z	d Z
d	 Zd
 Zd Zd ZeZd Zd Zd8dZd Zd9dZd Zd9dZd9dZd Zd Zd ZdddZdddZd9dddZd Zd Zd Z d  Z!ddd!Z"d" Z#d# Z$d9d$Z%d% Z&d& Z'd9d'Z(d9ddd(Z)d9ddd)Z*d9ddd*Z+d+ Z,ddd,Z-ddd-Z.ddd.Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d:d5Z6d6 Z7e8rd9d7Z9dS dS );r   zutf-8surrogateescapeNFc                    	 || _         || _        |                     |          | _        d | _        	 | j                            d          | _        |                     |           |s|r|                     |||           d S d S #  | j        r| j                                         | j                                          xY w)Nrwb)	hostport_create_socketr   filemakefile
_base_initloginclose)r   r   r   userpassword
readermodeusenetrctimeouts           r   r   zNNTP.__init__;  s    	" 		''00					**511DIOOJ''' 5x 5

48444445 5	y "	!!!IOOs   AB <Cc                 *   	 d| _         |                                 | _        d | _        |                                  d| _        |r?d| j        vr6|                                  | j        sd | _        |                                  d| _        d| _        d S )Nr   FREADER)		debugging_getrespwelcome_capsgetcapabilitiesreadermode_afterauth_setreadermodetls_onauthenticated)r   r   s     r   r   zNNTP._base_init^  s    	 }} 
 %*! 	'($*44!!!, '!
$$&&&
  #r   c                     | S Nr   r   s    r   	__enter__zNNTP.__enter__  s    r   c                      fd} |            rs	                                    n# t          t          f$ r Y nw xY w |            r                                  d S d S #  |            r                                  w w xY wd S )Nc                  $    t           d          S )Nr   )hasattrr   s   r   <lambda>zNNTP.__exit__.<locals>.<lambda>  s    wtV44 r   )quitOSErrorEOFError_close)r   r   is_connecteds   `  r   __exit__zNNTP.__exit__  s    4444<>> 	""		X&     <>> "KKMMMMM" "<<>> "KKMMMM"	" 	"s!   ' A  ;A  ;A   !Bc                     ||st          d          t          j        d| | j        | j                   t          j        | j        | j        f|          S )Nz0Non-blocking socket (timeout=0) is not supportedznntplib.connect)
ValueErrorsysauditr   r   socketcreate_connection)r   r   s     r   r   zNNTP._create_socket  sS    wOPPP	#T49di@@@'DI(>HHHr   c                 d    	 | j         r"t          dt          | j                             | j        S )Nz	*welcome*)r   printreprr   r   s    r   
getwelcomezNNTP.getwelcome  s2    	.
 >A5d4<.@.@AAA|r   c                 b   	 | j         d| _        d | _        	 |                                 \  }}|| _         d|v r-t	          t          t          |d                             | _        d|v r d                    |d                   | _        n# t          t          f$ r
 i | _         Y nw xY w| j         S )NrP   VERSIONIMPLEMENTATION )
r   nntp_versionnntp_implementationcapabilitiesmaxmapra   rI   r	   r   )r   respcapss      r   r   zNNTP.getcapabilities  s    	 : !D'+D$P!..00
d
 "
$$ ),CT)_,E,E(F(FD%#t++/2xx=M8N/O/OD, '(:;      


  zs   B B'&B'c                     	 || _         d S r   )r   )r   levels     r   set_debuglevelzNNTP.set_debuglevel  s    	H
 r   c                     	 t          j        d| |           |t          z   }| j        dk    rt	          dt          |                     | j                            |           | j                                         d S )Nznntplib.putlinerP   z*put*)	r   r   _CRLFr   r   r   r   writeflushr   rX   s     r   _putlinezNNTP._putline  ss    	3	#T4000e|>AuWd4jj999		r   c                     	 | j         rt          dt          |                     |                    | j        | j                  }|                     |           d S )Nz*cmd*)r   r   r   encodeencodingerrorsr   r   s     r   _putcmdzNNTP._putcmd  sS    	0>55$t**555{{4=$+66dr   Tc                 r   	 | j                             t          dz             }t          |          t          k    rt	          d          | j        dk    rt          dt          |                     |st          |r9|dd          t          k    r|d d         }n|dd          t          v r
|d d         }|S )NrP   zline too longz*get*rt   )
r   readline_MAXLINErV   r   r   r   r   r   r   )r   
strip_crlfrX   s      r   _getlinezNNTP._getline  s    	# y!!(A+..t99x000>A'4::&&&#8^ 	!BCCyE!!CRCybcce##CRCyr   c                 F   	 |                                  }| j        rt          dt          |                     |                    | j        | j                  }|d d         }|dk    rt          |          |dk    rt          |          |dvrt          |          |S )Nz*resp*rP   45123)
r   r   r   r   rH   r   r   r   r	   r
   )r   r   cs      r   r   zNNTP._getresp  s    	% }}>654::666{{4=$+66!H88$T***88$T***E>>#D)))r   c                    	 d }	 t          |t          t          f          rt          |d          x}}|                                 }|d d         t
          vrt          |          g }|]dt          z   df}	 |                     d          }||v rn5|	                    d          r
|dd          }|
                    |           OnSd}	 |                                 }||k    rn5|	                    d          r
|dd          }|                    |           P|r|                                 n# |r|                                 w w xY w||fS )Nwbr      .s   .
rP   Fs   ..)rF   strr7   openr   	_LONGRESPr   r   r   rc   r   rG   r   )r   r   
openedFiler   r8   terminatorsrX   
terminators           r   _getlongrespzNNTP._getlongresp  s   	 
 	#$e-- 5$(t$4$44
T==??DBQBxy(($T***E#e|V4%==//D{**u-- (#ABBxJJt$$$% 
 "
'==??Dz))u-- (#ABBxLL&&&'  #  """  #  """"# U{s   DD2 2Ec                 V    	 |                      |           |                                 S r   )r   r   r   s     r   	_shortcmdzNNTP._shortcmd  s'    	,T}}r   c                 X    	 |                      |           |                     |          S r   r   r   )r   rX   r   s      r   _longcmdzNNTP._longcmd!  s-    	0T  &&&r   c                      	                       |                                |          \  }}| fd|D             fS )Nc                 P    g | ]"}|                     j        j                  #S r   )rH   r   r   ).0rX   r   s     r   
<listcomp>z'NNTP._longcmdstring.<locals>.<listcomp>.  s;     ( ( ( kk$-== ( ( (r   r   )r   rX   r   r   lists   `    r   _longcmdstringzNNTP._longcmdstring'  sf    	 	T&&t,,
d ( ( ( ("&( ( ( ( 	(r   c                     	 	 | j         S # t          $ r Y nw xY w	 |                     d          \  }}t          |          }n# t          $ r t
          d d          }Y nw xY w|| _         |S )NzLIST OVERVIEW.FMT)_cachedoverviewfmtAttributeErrorr   r]   r	   rU   )r   r   r8   rW   s       r   _getoverviewfmtzNNTP._getoverviewfmt1  s    	8	** 	 	 	D		---.ABBKD%
 &e,,CC	 " 	+ 	+ 	+'*CCC	+
 #&
s   
 
A AAc                     d |D             S )Nc                 D    g | ]}t          |                                 S r   )r:   r`   )r   rX   s     r   r   z#NNTP._grouplist.<locals>.<listcomp>D  s%    ;;;T	4::<<(;;;r   r   )r   r8   s     r   
_grouplistzNNTP._grouplistB  s    ;;U;;;;r   c                     	 i }|                      d          \  }}|D ]}|                                ^}}|||<   ||fS )NCAPABILITIES)r   r`   )r   r   r   r8   rX   rY   ri   s          r   r   zNNTP.capabilitiesF  sZ    	 )).99e 	  	 D JJLLMD6DJJTzr   )r   c                l   	 t          |t          j        t          j        f          s,t          d                    |j        j                            t          || j        dk               \  }}d                    ||          }| 	                    ||          \  }}|| 
                    |          fS )NAthe date parameter must be a date or datetime object, not '{:40}'rq   zNEWGROUPS {0} {1})rF   rw   r3   	TypeErrorr   	__class__r   r   r   r   r  )r   r3   r   rx   ry   cmdr   r8   s           r   	newgroupszNNTP.newgroupsT  s    	 $ >?? 	?$fT^%<==? ? ? /tT5F5JKK(!((8<<))#t44eT__U++++r   c                :   	 t          |t          j        t          j        f          s,t          d                    |j        j                            t          || j        dk               \  }}d                    |||          }| 	                    ||          S )Nr  rq   zNEWNEWS {0} {1} {2})
rF   rw   r3   r	  r   r
  r   r   r   r   )r   r;   r3   r   rx   ry   r  s          r   newnewszNNTP.newnewsd  s    	 $ >?? 	?$fT^%<==? ? ? /tT5F5JKK(#**5(HEE""3---r   c                x    	 |d|z   }nd}|                      ||          \  }}||                     |          fS )NzLIST ACTIVE LIST)r   r  )r   group_patternr   commandr   r8   s         r   r   z	NNTP.listt  sP    	 $$}4GGG))'488eT__U++++r   c                 x   t          j        d          }|                     d|z             \  }}|                    d          s|                     d|z             \  }}i }|D ]O}|                    |                                          }|r$|                    dd          \  }	}
|s|
c S |
||	<   P|r||fS dS )Nz^(?P<group>[^ 	]+)[ 	]+(.*)$zLIST NEWSGROUPS r(   zXGTITLE rP   rq   rD   )recompiler   rc   searchstripr;   )r   r  
return_allline_patr   r8   groupsraw_linematchrY   descs              r   _getdescriptionszNNTP._getdescriptions  s    :>??))*<}*LMMeu%% 	J --j=.HIIKD% 	$ 	$HOOHNN$4$455E $"[[A..
d!  KKK#t 	< 2r   c                 0    	 |                      |d          S )NFr  )r   r;   s     r   descriptionzNNTP.description  s    		7 $$UE222r   c                 0    	 |                      |d          S )NTr   )r   r  s     r   descriptionszNNTP.descriptions  s    5$$]D999r   c                    	 |                      d|z             }|                    d          st          |          |                                }dx}x}}t	          |          }|dk    rD|d         }|dk    r6|d         }|dk    r(|d         }|dk    r|d                                         }|t          |          t          |          t          |          |fS )NzGROUP r'   r   rP   rq   r   rr   )r   rc   r   r`   rV   rR   ra   )r   rY   r   wordscountr=   r<   ns           r   r;   z
NNTP.group  s    	 ~~ho..u%% 	' &&&

   JJq55!HE1uuaq55 8D1uu$Qx~~//SZZUSYY<<r   c                0    	 |                      d|          S )NHELP)r   )r   r   s     r   helpz	NNTP.help  s    	 ""64000r   c                     	 |                     d          st          |          |                                }t          |d                   }|d         }|||fS )N22rP   rq   )rc   r   r`   ra   )r   r   r%  art_numrA   s        r   
_statparsezNNTP._statparse  s[    	*t$$ 	' &&&

eAh--1X
Wj((r   c                 X    	 |                      |          }|                     |          S r   )r   r.  )r   rX   r   s      r   _statcmdzNNTP._statcmd  s(    =~~d##t$$$r   c                     	 |r(|                      d                    |                    S |                      d          S )NzSTAT {0}STAT)r0  r   )r   message_specs     r   statz	NNTP.stat  sC    	  	)==!2!2<!@!@AAA==(((r   c                 .    	 |                      d          S )NNEXTr0  r   s    r   nextz	NNTP.next      I}}V$$$r   c                 .    	 |                      d          S )NLASTr7  r   s    r   r<   z	NNTP.last  r9  r   c                     	 |                      ||          \  }}|                     |          \  }}}|t          |||          fS r   )r   r.  r?   )r   rX   r   r   r8   r-  rA   s          r   _artcmdzNNTP._artcmd  sK    @mmD$//e$(OOD$9$9!gz[*e<<<<r   c                d    	 |d                     |          }nd}|                     ||          S )NzHEAD {0}HEADr   r=  r   r3  r   r  s       r   headz	NNTP.head  =    	 ###L11CCC||C&&&r   c                d    	 |d                     |          }nd}|                     ||          S )NzBODY {0}BODYr@  rA  s       r   bodyz	NNTP.body  rC  r   c                d    	 |d                     |          }nd}|                     ||          S )NzARTICLE {0}ARTICLEr@  rA  s       r   articlezNNTP.article  s=    	 #&&|44CCC||C&&&r   c                 .    	 |                      d          S )NSLAVE)r   r   s    r   slavez
NNTP.slave$  s    	 ~~g&&&r   c                    	 t          j        d          |                     d                    ||          |          \  }}fd|fd|D             fS )Nz^([0-9]+) ?(.*)
?zXHDR {0} {1}c                 b                         |           }|r|                    dd          n| S )NrP   rq   )r  r;   )rX   mpats     r   remove_numberz NNTP.xhdr.<locals>.remove_number5  s-    		$A$%/1771a===4/r   c                 &    g | ]} |          S r   r   )r   rX   rQ  s     r   r   zNNTP.xhdr.<locals>.<listcomp>8  s#    <<<dmmD))<<<r   )r  r  r   r   )r   hdrr   r   r   r8   rP  rQ  s         @@r   xhdrz	NNTP.xhdr*  s    	 j-..)).*?*?S*I*I4PPe	0 	0 	0 	0 	0 <<<<e<<<<<r   c                    	 |                      d                    ||          |          \  }}|                                 }|t          ||          fS )NzXOVER {0}-{1})r   r   r  ro   )r   startendr   r   r8   rW   s          r   xoverz
NNTP.xover:  s]    	 ))/*@*@*L*L*.0 0e""$$_UC0000r   c                *   	 d| j         v rdnd}t          |t          t          f          r!|\  }}|d                    ||pd          z  }n
||dz   |z   }|                     ||          \  }}|                                 }|t          ||          fS )NOVERXOVERz {0}-{1}rD   r   )r   rF   tupler   r   r   r  ro   )	r   r3  r   r  rV  rW  r   r8   rW   s	            r   overz	NNTP.overH  s    	  $*,,ff'lUDM22 	+%JE3:$$UCI2666CC%)l*C))#t44e""$$_UC0000r   c                 Z   	 |                      d          }|                    d          st          |          |                                }t	          |          dk    rt          |          |d         }t	          |          dk    rt          |          |t          |d           fS )NDATE111rq   rP      )r   rc   r   r`   rV   r   r   )r   r   elemr3   s       r   r3   z	NNTP.datec  s    	
 ~~f%%u%% 	' &&&zz||t99>>%%%Awt99??%%%_T40000r   c                 B   |                      |          }|                    d          st          |          t          |t          t
          f          r|                                }|D ]m}|                    t                    s|	                    d          t          z   }|                    d          rd|z   }| j
                            |           n| j
                            d           | j
                                         |                                 S )N3r9   r   s   .
)r   rc   r   rF   r7   	bytearray
splitlinesendswithr   rstripr   r   r   r   )r   r  fr   rX   s        r   _postz
NNTP._postt  s    ~~g&&s## 	' &&&a%+,, 	A
  	" 	"D=='' 4{{7++e3t$$ #d{IOOD!!!!	!!!	}}r   c                 0    	 |                      d|          S )NPOST)rj  )r   datas     r   postz	NNTP.post  s    	1 zz&$'''r   c                 V    	 |                      d                    |          |          S )Nz	IHAVE {0})rj  r   )r   rA   rm  s      r   ihavez
NNTP.ihave  s,    	O zz+,,Z88$???r   c                     	 | j         r| j                                          | ` | j                                         d S # | j                                         w xY wr   )r   r   r   r   s    r   r   zNNTP._close  sX    	y 	!!!IIOODIOOs	   "? Ac                     	 	 |                      d          }|                                  n# |                                  w xY w|S )NQUIT)r   r   )r   r   s     r   r   z	NNTP.quit  sC    	1	>>&))DKKMMMMDKKMMMMs	   - Ac                    | j         rt          d          |s|st          d          	 |rF|sDdd l}|                                }|                    | j                  }|r|d         }|d         }n# t
          $ r Y nw xY w|sd S |                     d|z             }|                    d          rM|st          |          |                     d|z             }|                    d          st          |          d | _
        |                                  | j        r:d	| j
        vr3|                                  d | _
        |                                  d S d S d S )
NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedr   rq   zauthinfo user 381zauthinfo pass 281r   )r   r   netrcauthenticatorsr   r   r   rc   r   r	   r   r   r   r   )r   r   r   r   rw  credentialsauthr   s           r   r   z
NNTP.login  s    	31222 	KH 	KIK K K
		 ' '#kkmm"11$)<< '7D#AwH 	 	 	D	  	F~~.566??5!! 	3 3$T***~~&6&ABBu-- 3,T222
 $ 	#)C)C!!!DJ  """""		# 	#)C)Cs   AA4 4
B Bc                     	 |                      d          | _        d S # t          $ r Y d S t          $ r.}|j                            d          rd| _        n Y d }~d S d }~ww xY w)Nzmode reader480T)r   r   r	   r   r   rc   r   )r   es     r   r   zNNTP._setreadermode  s    
	>>-88DLLL! 	 	 	DD! 	 	 	z$$U++ ,0)) *)))))	s    
A"	A"#AA"c                    	 | j         rt          d          | j        rt          d          |                     d          }|                    d          r|| j                                         t          | j        || j	                  | _        | j        
                    d          | _        d| _         d | _        |                                  d S t          d          )NzTLS is already enabled.z+TLS cannot be started after authentication.STARTTLS382r   TzTLS failed to start.)r   r   r   r   rc   r   r   r   r   r   r   r   r   r   )r   r   r   s      r   starttlszNNTP.starttls  s    
 { < !:;;;! P !NOOO>>*--Du%% 
8	!!!'	7DIFF	 I..u55	" "
$$&&&&& 6777r   )Tr   )NNT):r   r   r   r   r   	NNTP_PORTr   r   r   r   r   r   r   r   r   debugr   r   r   r   r   r   r   r   r  r  r   r  r  r   r  r!  r#  r;   r*  r.  r0  r4  r8  r<   r=  rB  rF  rI  rL  rT  rX  r]  r3   rj  rn  rp  r   r   r   r   	_have_sslr  r   r   r   r   r   +  s        HF"+$ 50! ! ! !F #  #  #D  	" 	" 	"I I I    ,   E       "   , , , ,\  ' ' ' '( ( ( (  "< < <   '+ , , , , ,  ,0 . . . . . ,t , , , , ,  .3 3 3: : := = =4   1 1 1 1 1) ) )% % %
) ) ) )% % %% % %= = = ='d ' ' ' ' ''d ' ' ' ' '' ' ' ' ' '' ' ' &* = = = = =  )- 1 1 1 1 1 *. 1 1 1 1 161 1 1"  *( ( (@ @ @    '# '# '# '#R    8	8 	8 	8 	8 	8 	88 8r   r   c                   8     e Zd Zedddddef fd	Z fdZ xZS )NNTP_SSLNFc	           	      f    	 || _         t                                          |||||||           d S r   )ssl_contextsuperr   )
r   r   r   r   r   r  r   r   r   r
  s
            r   r   zNNTP_SSL.__init__  sG      +DGGT4x%w0 0 0 0 0r   c                     t                                          |          }	 t          || j        | j                  }|S #  |                                  xY wr   )r  r   r   r  r   r   )r   r   r   r
  s      r   r   zNNTP_SSL._create_socket  sU    77))'22D"4)949EE
 	

s   A A)r   r   r   NNTP_SSL_PORTr   r   r   __classcell__)r
  s   @r   r  r    sh        &3$#e3		0 		0 		0 		0 		0 		0	 	 	 	 	 	 	 	 	r   r  __main__zJ        nntplib built-in demo - display the latest articles in a newsgroup)r!  z-gz--groupzgmane.comp.python.generalz3group to fetch messages from (default: %(default)s))defaultr*  z-sz--serverznews.gmane.ioz+NNTP server hostname (default: %(default)s)z-pz--portr   zNNTP port number (default: z / ))r  typer*  z-nz--nb-articles
   z2number of articles to fetch (default: %(default)s)z-Sz--ssl
store_truezuse NNTP over SSL)actionr  r*  )r   r   r  Grouphaszarticles, rangetoc                 L    t          |           |k    r| d |dz
           dz   } | S )Nrr   z...)rV   )slims     r   cutr  6  s,    q66C<<(37(e#Ar   rP   r2   <r1   z{:7} {:20} {:42} ({})   *   r   )F)Jr  r   collectionsrw   r   warningsr   r  ImportErroremail.headerr   rE   r   __all___deprecatedr   r   r   r   r   r   r	   r
   r   r  r  r   rU   rS   r   
namedtupler:   r?   r]   ro   r   r   r   r   r  rG   argparseArgumentParserparseradd_argumentra   
parse_argsr   r   serverr  r   r   r  r;   r   r&  r=   r<   rY   r   r  r   nb_articlesrX  	overviewsartnumr]  r`   authorr1   r8   r   r   r   r   r   <module>r     s`  B 
			       



 JJJ II    III
 ? > > > > > * * * * * *    Xg . . . . 0 0 0 0 0	 0 0 0	 	 	 	 	Y 	 	 		 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 		 	 	 		 	 	 	 	I 	 	 	 	  	 O O O 
    	"K";#E#E#EG G	 %k$]%F%F%FH H
	 	 	  2   :H H H H,   4  C
C 
C 
CK8 K8 K8 K8 K8 K8 K8 K8\      4   . NN: zOOO$X$ 2N O O OF
i1LR  T T T
j/J  L L L
hFOiiQ^Q^Q^_  a a a
orQ  S S S
glE0  2 2 2D9D8 22::DDdk---2:: DH$+D111DT	

%&WWTZ%8%8"D%d	E'4'8%tLLL  
 CD		D,,q011EggeT**OD)!  tF|,,223::1=-Y00DN##%,,cc&"ooss7B'7'7@ @ 	 	 	 	 FFHHHHHa s   " ,,