python (3.11.7)

(root)/
lib/
python3.11/
__pycache__/
mailbox.cpython-311.pyc

e3vdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZddl
mZ	ddlZn
#e$rdZYnwxYwgdZejdZGddZGdd	eZGd
deZGdd
eZGddeZGddeZGddeZGddeZGddejjZGddeZGddeZGddeZ GddeZ!Gd d!eZ"Gd"d#eZ#Gd$d%Z$Gd&d'e$Z%d9d)Z&d*Z'd+Z(d,Z)d-Z*d.Z+Gd/d0e,Z-Gd1d2e-Z.Gd3d4e-Z/Gd5d6e-Z0Gd7d8e-Z1dS):zDRead/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.N)GenericAlias)MailboxMaildirmboxMHBabylMMDFMessageMaildirMessagemboxMessage	MHMessageBabylMessageMMDFMessageErrorNoSuchMailboxError
NotEmptyErrorExternalClashErrorFormatErrorasciiceZdZdZd$dZdZdZdZdZd	Z	d%d
Z
dZdZd
Z
dZdZdZdZdZdZdZdZdZdZdZdZd%dZdZd%dZdZdZdZd Z d!Z!d"Z"d&d#Z#e$e%Z&dS)'rz*A group of messages in a particular place.NTctjtj||_||_dS)zInitialize a Mailbox instance.N)ospathabspath
expanduser_path_factoryselfrfactorycreates    ;/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/mailbox.py__init__zMailbox.__init__%s2W__RW%7%7%=%=>>



c td)$Add message and return assigned key.&Method must be implemented by subclassNotImplementedErrorrmessages  r"addzMailbox.add*!"JKKKr$c td)=Remove the keyed message; raise KeyError if it doesn't exist.r'r(rkeys  r"removezMailbox.remove.r-r$c0||dSN)r2r0s  r"__delitem__zMailbox.__delitem__2sCr$cT	||dS#t$rYdSwxYwz'If the keyed message exists, remove it.N)r2KeyErrorr0s  r"discardzMailbox.discard5sA	KK			DD	s
''c td)>Replace the keyed message; raise KeyError if it doesn't exist.r'r(rr1r+s   r"__setitem__zMailbox.__setitem__<r-r$cR	||S#t$r|cYSwxYw)z9Return the keyed message, or default if it doesn't exist.)__getitem__r8)rr1defaults   r"getzMailbox.get@s?	##C(((			NNN	s&&c|js||Stj||5}||cdddS#1swxYwYdS)z=Return the keyed message; raise KeyError if it doesn't exist.N)rget_message
contextlibclosingget_file)rr1files   r"r?zMailbox.__getitem__Gs}	+##C(((#DMM#$6$677
+4}}T**
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sA&&A*-A*c td)4Return a Message representation or raise a KeyError.r'r(r0s  r"rCzMailbox.get_messageOr-r$cttj||S)zReturn a string representation or raise a KeyError.

        Uses email.message.Message to create a 7bit clean string
        representation of the message.emailmessage_from_bytes	get_bytes	as_stringr0s  r"
get_stringzMailbox.get_stringSs-
's(;(;<<FFHHHr$c td)z8Return a byte string representation or raise a KeyError.r'r(r0s  r"rNzMailbox.get_bytesZr-r$c td)6Return a file-like representation or raise a KeyError.r'r(r0s  r"rFzMailbox.get_file^r-r$c td)Return an iterator over keys.r'r(rs r"iterkeyszMailbox.iterkeysbr-r$cDt|S)zReturn a list of keys.)listrWrVs r"keyszMailbox.keysfsDMMOO$$$r$c#tK|D] }	||}n#t$rYwxYw|V!dS)z%Return an iterator over all messages.NrWr8rr1values   r"
itervalueszMailbox.itervaluesjsb==??		C
S	



KKKK		#
00c*|Sr4)r_rVs r"__iter__zMailbox.__iter__ss   r$cDt|S)z,Return a list of messages. Memory intensive.)rYr_rVs r"valueszMailbox.valuesvsDOO%%&&&r$c#xK|D]"}	||}n#t$rYwxYw||fV#dS)z.Return an iterator over (key, message) tuples.Nr\r]s   r"	iteritemszMailbox.iteritemszsj==??		C
S	



,		r`cDt|S)z9Return a list of (key, message) tuples. Memory intensive.)rYrfrVs r"itemsz
Mailbox.itemssDNN$$%%%r$c td)9Return True if the keyed message exists, False otherwise.r'r(r0s  r"__contains__zMailbox.__contains__r-r$c td)*Return a count of messages in the mailbox.r'r(rVs r"__len__zMailbox.__len__r-r$c^|D]}||dS)zDelete all messages.N)rZr9r0s  r"clearz
Mailbox.clears899;;		CLL		r$ch	||}n#t$r|cYSwxYw|||S)z3Delete the keyed message and return it, or default.)r8r9)rr1r@results    r"popzMailbox.popsM	#YFF			NNN	S
sc~|D]}|||fcStd)z6Delete an arbitrary (key, message) pair and return it.zNo messages in mailbox)rWrsr8r0s  r"popitemzMailbox.popitemsC==??	5	5C#''''3444r$ct|dr|}n't|dr|}n|}d}|D]\}}	|||<#t$rd}YwxYw|rtddS)z4Change the messages that correspond to certain keys.rfrhFTzNo message with key(s)N)hasattrrfrhr8)rargsourcebad_keyr1r+s      r"updatezMailbox.updates3$$	]]__FF
S'
"
"	YY[[FFF"		LC
#S		



	53444	5	5sAA,+A,c td)&Write any pending changes to the disk.r'r(rVs r"flushz
Mailbox.flushr-r$c td)Lock the mailbox.r'r(rVs r"lockzMailbox.lockr-r$c td)#Unlock the mailbox if it is locked.r'r(rVs r"unlockzMailbox.unlockr-r$c td)Flush and close the mailbox.r'r(rVs r"closez
Mailbox.closer-r$ch	|dS#t$rtdwxYw)Nrz?String input must be ASCII-only; use bytes or a Message instead)encodeUnicodeError
ValueErrorr*s  r"_string_to_byteszMailbox._string_to_bytessK	2>>'***	2	2	2122
2	2s1Fct|tjjrt	j}tj||d}|||	d|
}|dt}|
||jr6|ts|
td
Sd
Sd
St|t t"tjfrt|tjr/t'jdt*d|}t|t r||}|r|dd}|dt}|
||jr6|ts|
td
Sd
Sd
St1|dr-t1|dr"t'jd	t*d|j}d
}	|}|dr|d
d
dz}n"|dr
|d
ddz}|snW|r"|dr
d|dd
z}|dt}|
||}|jr8|r8|ts |
td
Sd
Sd
Sd
St9dt;|z)z%Dump message contents to target file.r
8Use of StringIO input is deprecated, use BytesIO insteads
From s
>From readbufferDUse of text mode files is deprecated, use a binary mode file insteadNT

From s>From Invalid message type: %s)
isinstancerLr+r
ioBytesIO	generatorBytesGeneratorflattenseekrreplacelinesepwrite_append_newlineendswithstrbytesStringIOwarningswarnDeprecationWarninggetvaluerrwrreadline
startswith	TypeErrortype)	rr+targetmangle_from_rgendatalastlinelines	         r"
_dump_messagezMailbox._dump_messagesgu}4551	HZ\\F/00qIICKK   KKNNN;;==D<<w//DLL#
&DMM',B,B
&W%%%%%
&
&
&
&#ubk!:
;
;&	H'2;//
-
*+=qBBB!**,,'3''
9//88
C!//*kBBooeW55GLL!!!#
&G,<,<W,E,E
&W%%%%%
&
&
&
&Wf
%
%	Hw))
)
56H!MMM!.H

 ''))==))-9u,DD]]5))-9u,D0DOOH$=$=0$tABBx/D||E733T"""

 #
&
&9J9J79S9S
&W%%%%%
&
&
&
&
&
&6gFGGGr$NTr4F)'__name__
__module____qualname____doc__r#r,r2r5r9r=rAr?rCrPrNrFrWrZr_rbrdrfrhrkrnrprsrur{r~rrrrrrclassmethodr__class_getitem__r$r"rr"sH44    
LLLLLLLLL+++LLLIIILLLLLLLLL%%%!!!'''&&&LLLLLL
5555555"LLLLLLLLLLLL222O4H4H4H4Hl$L11r$rceZdZdZdZddZdZdZdZd	Z	d
Z
dZdZd
Z
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdS)rzA qmail-style Maildir mailbox.:NTcrt||||tj|jdtj|jdtj|jdd|_tj|jsb|rLtj|jd|j	D]}tj|dnt|ji|_ddd|_d|_
d|_d	S)
zInitialize a Maildir instance.tmpnewcur)rrrr)rrg?N)rr#rrjoinr_pathsexistsmkdirrdr_toc_toc_mtimes
_last_read_skewfactor)rdirnamer r!rs     r"r#zMaildir.__init__sw8887<<
E227<<
E227<<
E22
w~~dj))	5
5U+++ K..00**DHT5))))*)444	#$Q//r$c|}	|||n<#t$r/|t	j|jwxYwt|t|tr>|
}|j|z}||jkrd}nd}d}tj
|j|jd}tj
|j|||z}t|trPt	j|jtj
|j|f		t	j|j|t	j|jn1#t,t.f$rt	j|j|YnwxYwnS#t2$rF}t	j|j|jt4jkrt9d|zd}~wwxYw|S)r&rrz$Name clash with existing message: %sN)_create_tmpr
BaseExceptionrrr2name_sync_closerr
get_subdircolonget_inforbasenamesplitrrutimegetatimeget_datelinkAttributeErrorPermissionErrorrenameOSErrorerrnoEEXISTr)rr+tmp_filesubdirsuffixuniqdestes        r"r,zMaildir.add$sS##%%	w1111			NNIhm$$$		Hg~..	''))FZ'"2"2"4"44F##FFw
..44TZ@@Cw||DJv
>>g~..	LHX]g&&x}55w7G7G7I7IJ
L
L
L

	
)
t,,,	(-((((#O4
/
/
/	(-.....
/			Ihm$$$w%,&&()O+/*0111
	s@-9A&!G;H+HHHH
IAIIctjtj|j||dSr/N)rr2rrr_lookupr0s  r"r2zMaildir.removeNs6
	"',,tz4<<+<+<==>>>>>r$cb	||dS#ttf$rYdSwxYwr7)r2r8FileNotFoundErrorr0s  r"r9zMaildir.discardRsG	KK+,			DD	s..c||}||}||}t|tr|}n|}tj|}|j|vr)|j||jdz}nd}|	|tj
|j|}	tj
|j|||z}
t|trFt	j|	tj
|	|ft	j|	|
dS)r;rrN)rr,rrrrrrrr9rrrrrr)rr1r+old_subpathtemp_keytemp_subpathdominant_subpathrrtmp_pathnew_paths           r"r=zMaildir.__setitem__ZsSll3''88G$$||H--g~..	++ +!122:)))Z"2"8"8"D"DR"HHFFFS7<<
L997<<
FC&LAAg~..	GHXg&&x00'2B2B2D2DE
G
G
G
		(H%%%%%r$c||}ttj|j|d5}|jr||}nt|}dddn#1swxYwYtj|\}}|	||j
|vr3|||j
d|tj
tj|j||S)rIrbNr)ropenrrrrrrr
set_subdirrset_infoset_dategetmtime)rr1subpathfmsgrrs       r"rCzMaildir.get_messageusG,,s##
"',,tz733T
:
:	(a}
(mmA&&$Q''		(	(	(	(	(	(	(	(	(	(	(	(	(	(	(
w}}W--v:LLDJ//3444RW%%bgll4:w&G&GHHIII
s	-BB	Bcttj|j||d5}|tdcdddS#1swxYwYdS)2Return a bytes representation or raise a KeyError.rrN)	rrrrrrrrrrr1rs   r"rNzMaildir.get_bytess
"',,tz4<<+<+<==t
D
D	46688##GU33	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4s-BBBcttj|j||d}t
|S)rSr)rrrrrr
_ProxyFilers   r"rFzMaildir.get_files;dj$,,s*;*;<<dCC!}}r$c#K||jD]-}	||n#t$rY%wxYw|V.dSrUN)_refreshrrr8r0s  r"rWzMaildir.iterkeysss

9		C
S!!!!



IIII		s7
AAc<|||jvSrj)r
rr0s  r"rkzMaildir.__contains__s

dir$cR|t|jSrm)r
lenrrVs r"rnzMaildir.__len__s

49~~r$cdS)"Write any pending changes to disk.NrrVs r"r~z
Maildir.flushs		
r$cdS)rNrrVs r"rzMaildir.lockr$cdS)rNrrVs r"rzMaildir.unlockrr$cdSrNrrVs r"rz
Maildir.closerr$c>g}tj|jD]}t|dkrk|ddkr_tjtj|j|r||dd|S)Return a list of folder names.r.N)rlistdirrrrisdirrappendrrrentrys   r"list_folderszMaildir.list_folderssZ
++	)	)E5zzA~~%(c//w}}RW\\$*e<<==#2

eABBi(((
r$c|ttj|jd|z|jdS)z/Return a Maildir instance for the named folder.rFr r!)rrrrrrrfolders  r"
get_folderzMaildir.get_folders9rw||DJf==#}#%%%	%r$c~tj|jd|z}t	||j}tj|d}tj|s?tjtj|tj	tj
zd|S)z>Create a folder and return a Maildir instance representing it.rr 
maildirfolder)rrrrrrrrrO_CREATO_WRONLY)rr$rrrmaildirfolder_paths     r"
add_folderzMaildir.add_foldersw||DJf55t}555W\\$@@w~~011	HRW/bk1I



r$ctj|jd|z}tjtj|dtjtj|dzD]3}t|dks|ddkrt
d|z4tj|D]f}|dkr^|dkrX|dkrRtjtj||rt
d|d	|gtj|d
D]t\}}}|D]4}tj	tj||5|D]4}tj
tj||5utj
|dS)
-Delete the named folder, which must be empty.rrrrrzFolder contains message(s): %srzFolder contains subdirectory 'z': F)topdownN)rrrrrrrrwalkr2rmdir)rr$rrrootdirsfiless       r"
remove_folderzMaildir.remove_foldersw||DJf55ZT5 9 9::ZT5 9 9::;	O	OE5zzA~~qS#$Dv$MNNN"1Z%%	5	5E~~%5..Ue^^w}}RW\\$66776D#m%+VVUU%4555!#u!=!=!=	4	4D$
5
5	"',,tU334444
4
4dE223333
4
r$c`tj}tjtj|jdD]b}tj|jd|}|tj|z
dkrtj|cdS)zDelete old files in "tmp".ri@N)timerrrrrrr2)rnowrrs    r"cleanz
Maildir.cleansikkZTZ ? ?@@	 	 E7<<
E599DRW%%d+++f44	$	 	 r$rc	vtj}tj}d|vr|dd}d|vr|dd}t	|dt	|dzdzdtjd	tjd
|	}t
j	
|jd|}	tj|nG#t$r:txjdz
c_	t|cYS#t$rYnwxYwYnwxYwt!d|z)
z=Create a file in the tmp subdirectory and open and return it./z\057rz\072z.Mrg.APQrrz&Name clash prevented file creation: %s)r8socketgethostnamerintrgetpidr_countrrrstatr_create_carefullyFileExistsErrorr)rr9hostnamerrs     r"rzMaildir._create_tmpsQikk%''(??''W55H(??''W55H$'HHHHc#'C-.@.@.@.@")++++$+NNNHH>w||DJt44	GDMMMM 			NNaNN
(....."



	!!I!%"&''	's6
C""D&DD&
D D&D  D&%D&ctj|jz
d|jzkrWd}|jD]I}tj|j|}||j|krd}||j|<J|sdSi|_|jD]}|j|}t	j	|D]}tj
||}tj|rB||j
d}tj
|||j|<tj|_dS)z!Update table of contents mapping.FTNr)r8rrrrrrrrrrrrr)rrefreshrmtimerrprs        r"r
zMaildir._refreshsE9;;(1t/?+???G*
1
1((V)<==4+F333"G+0 ((
	&	>	>F;v&DD))
>
>GLLu--7==##{{4:..q1"$',,vu"="=	$
>)++r$c`	tjtj|j|j|r
|j|Sn#t$rYnwxYw|	|j|S#t$rt
d|zdwxYw)z=Use TOC to return subpath for given key, or raise a KeyError.No message with key: %sN)rrrrrrr8r
r0s  r"rzMaildir._lookup&s	w~~bgll4:ty~FFGG
&y~%
&			D	

	F9S>!	F	F	F4s:;;E	FsAA
A*)A*BB-ct|ds||_		|t|jS#t$rYdSt
$rY4wxYw)z0Return the next message in a one-time iteration.
_onetime_keysTN)rwrWrPnext
StopIterationr8rVs r"rQzMaildir.next4s}t_--	1!%D	
D!34455 


tt



sA
A	AAr)rrrrrr#r,r2r9r=rCrNrFrWrkrnr~rrrr r%r-r6r:rCrr
rrQrr$r"rrs((E((((T???&&&6


444

   




%%%&   F'''0"&"&"&HFFF




r$rcveZdZdZddZdZdZdZdZd	Z	d
Z
dZdZd
Z
dZdZdZdZddZdZdS)_singlefileMailboxzA single-file mailbox.NTct||||	t|jd}n#t$r}|jt
jkr,|rt|jd}nJt|j|jt
jt
j	fvrt|jd}nYd}~nd}~wwxYw||_
d|_d|_d|_
d|_d|_d|_dS)z!Initialize a single-file mailbox.rb+zwb+rNrF)rr#rrrrENOENTrEACCESEROFS_filer	_next_key_pending
_pending_sync_locked_file_length)rrr r!rrs      r"r#z_singlefileMailbox.__init__DstWf555	TZ''AA						w%,&&9TZ//AA,TZ888U\5;777T**		
	
" s5
CA7B;;Cc||||j|j<|xjdz
c_d|_|jdz
S)r&rT)r_append_messagerr[r]r*s  r"r,z_singlefileMailbox.add[sR$($8$8$A$A	$.!!"~!!r$cN|||j|=d|_dS)r/TN)rrr\r0s  r"r2z_singlefileMailbox.removees(SIcN


r$cx|||||j|<d|_dS)r;TN)rrarr\r<s   r"r=z_singlefileMailbox.__setitem__ks8S--g66	#


r$c#pK||jEd{VdSr	)rrrZrVs r"rWz_singlefileMailbox.iterkeysqs=9>>###########r$c<|||jvSr)rrr0s  r"rkz_singlefileMailbox.__contains__vsdir$cR|t|jSr)rrrrVs r"rnz_singlefileMailbox.__len__{s49~~r$cN|jst|jd|_dSdS)rTN)r^
_lock_filerZrVs r"rz_singlefileMailbox.locks1|	 tz"""DLLL	 	 r$cN|jrt|jd|_dSdSrFN)r^_unlock_filerZrVs r"rz_singlefileMailbox.unlocks1<	!$$$ DLLL	!	!r$c	J|js$|jrt|jd|_dS|jJ|jdd|j}||jkrtd|j|fzt|j
}	i}||t|j
D]}|j|\}}|j||||}	|jt!d||jz
}|sn||[||f||<||||_n3#|t)j|jxYwt/||jt)j|j
j}	t)j|j|		t)j|j|j
nH#t8$r;t)j|j
t)j|j|j
YnwxYwt;|j
d|_||_d|_d|_|jrt?|jd	dSdS)
rFNrrIz4Size of mailbox file changed (expected %i, found %i)TrV)dotlock) r\r]_sync_flushrZrrtellr_r_create_temporaryr_pre_mailbox_hooksortedrZ_pre_message_hookrminr_post_message_hookrrr2rrrDst_modechmodrrFrr^rh)
rcur_lennew_filenew_tocr1startstop	new_startrmodes
          r"r~z_singlefileMailbox.flushs}	!
+DJ'''%*"F
y$$$	
1*//##d'''$&?&*&7%A&BCC
C%TZ00	G""8,,,dinn..//
2
2"int
&&&&&x000$MMOO	+!Z__S15
8I8I1I.K.KLLF!NN6***+!*8==??;''1111 (

D	NNIhm$$$H
wtz""*
%%%	1IhmTZ0000	1	1	1Idj!!!IhmTZ00000	1$*e,,
	
"<	2tz5111111	2	2s "D6G0H	-J

AKKcdS),Called before writing the mailbox to file f.Nrrrs  r"rrz$_singlefileMailbox._pre_mailbox_hookrr$cdS)-Called before writing each message to file f.Nrrs  r"rtz$_singlefileMailbox._pre_message_hookrr$cdS,Called after writing each message to file f.Nrrs  r"rvz%_singlefileMailbox._post_message_hookrr$c	|	|jr||jdS#|jwxYw#	|jr||jw#|jwxYwxYwr)r~r^rrZrrVs r"rz_singlefileMailbox.closes	#JJLLL
#<"KKMMM
  """""
  """"	
#<"KKMMM
  """"
  """"s.A+A

A(+C-B"C"B==Cc|j||/	|j|S#t$rtd|zdwxYwdS)z'Return (start, stop) or raise KeyError.NrN)r
_generate_tocr8r0s  r"rz_singlefileMailbox._lookupso9   ?
Jy~%
J
J
J83>??TI
J?s	,A
c6|jdd|j}t|jdkr!|js||j	||j||}|	|jn)#t$r|j|wxYw|j|j|_
|S)z;Append message to mailbox and return (start, stop) offsets.rrI)rZrrprrr\rrrt_install_messagervrtruncater~r_)rr+beforeoffsetss    r"raz"_singlefileMailbox._append_messages
1""ty>>Qt}

""4:...	""4:...++G44G##DJ////			J'''		
 JOO--s
/A	B99&Crr4)rrrrr#r,r2r=rWrkrnrrr~rrrtrvrrrarr$r"rTrTAs  !!!!."""$$$
   

   !!!>2>2>2@	#	#	#JJJJr$rTc:eZdZdZdZdZd
dZd
dZd
dZdZ	d	S)	_mboxMMDFzAn mbox or MMDF mailbox.Tc||\}}|j||jt
d}|j||jz
}||t
d}|	|dd
d|S)rIr$rrNr)rrZrrrrrrp_message_factoryset_fromdecode)rr1r|r}	from_linestringrs       r"rCz_mboxMMDF.get_message	sll3''t
J''))11'3??	
(9(9!9::##FNN7E$B$BCCYqrr]))'22333
r$Fcztj||||S)3Return a string representation or raise a KeyError.)unixfromrK)rr1from_s   r"rPz_mboxMMDF.get_strings8'NN3&&(((1	5	(A(A	Br$c:||\}}|j||s|j|j||jz
}|tdS)rr)rrZrrrrprr)rr1rr|r}rs      r"rNz_mboxMMDF.get_bytessll3''t
	"J!!!
(9(9!9::~~gu---r$c||\}}|j||s|jt	|j|j|S)rS)rrZrr_PartialFilerp)rr1rr|r}s     r"rFz_mboxMMDF.get_file!sgll3''t
	"J!!!DJ
(9(94@@@r$cd}t|tr||}t|trM|dr8|d}|dkr|d|}||dzd}n|}d}nt|tr-|d}d|z}nJt|tj
jr+|}||d}|:dtjtjz}|j}|j|t&z|||j|j|j}||fS)	z1Format a message and blindly write to self._file.Nrrrrr$rsFrom MAILER-DAEMON )rrrrrfind_mboxMMDFMessageget_fromrrLr+r
get_unixfromr8asctimegmtimerZrprrr
_mangle_from_)rr+rnewlineauthorr|r}s       r"rz_mboxMMDF._install_message)s	gs##	5++G44Ggu%%	6'*<*<X*F*F	6ll5))G"}}#HWH-	!'A+,,/#	
!1
2
2	6%%''..w77F 6)II
!6
7
7	6,,..I$%,,W55	.dkmm1L1L1S1S1U1UUI
!!
W,---7DJ0BCCCz  t}r$Nr)
rrrrrrCrPrNrFrrr$r"rrs""MBBBB
....AAAAr$rc.eZdZdZdZdZddZdZdZdS)rzA classic mbox mailbox.TNcXt|_t||||dS)zInitialize an mbox mailbox.N)rrrr#rs    r"r#z
mbox.__init__O* +4w77777r$c:|tdSrrrrs  r"rvzmbox._post_message_hookTs	r$cDgg}}d}|jd	|j}|j}|drzt|t|krB|r+||ttz
n||||d}nU|sC|r+||ttz
n||n|tkrd}nd}ttt|||_t|j|_|j|_
dS)0Generate key-to-(start, stop) table of contents.FrTrN)rZrrprrrrrdict	enumerateziprr[r_)rstartsstopslast_was_emptyline_posrs      r"rzmbox._generate_tocXsxB
	'z((H:&&((Dx((
'u::F++%/XG%<====
X...

h'''!&	
'!+LLCLL!89999LL***!%!&/	'03vu#5#56677	TY JOO--r$r)	rrrrrrr#rvrrr$r"rrFsX!!MO8888
.....r$rc,eZdZdZddZdZdZdZdS)	r	zAn MMDF mailbox.NTcXt|_t||||dS)zInitialize an MMDF mailbox.N)rrrr#rs    r"r#z
MMDF.__init__}rr$c@|dtzdS)rNrrs  r"rtzMMDF._pre_message_hooks 	#g-.....r$cP|tdztzdS)rrNrrs  r"rvzMMDF._post_message_hooks%	--788888r$c.gg}}|jdd}	|}|j}|j}|dt
zr||	|}|j}|j}|dt
zkr+||tt
z
n|s||nn|snttt|||_t|j|_|jdd|j|_
dS)rrTrrIN)rZrrrprrrrrrrrr[r_)rrrnext_posrrs      r"rzMMDF._generate_tocstB
	H:&&((Dz((H2W<==



h'''	'H:..00D#z00H2W<<<XG%<===!X...	
#	$3vu#5#56677	TY
1 JOO--r$r)rrrrr#rtrvrrr$r"r	r	zs[8888
///999.....r$r	ceZdZdZddZdZdZdZdZd	Z	d
Z
dZdZd
Z
dZdZdZdZdZdZdZdZdZdZdZdZdS)rzAn MH mailbox.NTct||||tj|js|rtj|jdtjtjtj	|jdtj
tjztjzdnt|jd|_dS)zInitialize an MH instance.r
.mh_sequencesiFN)rr#rrrrrrrrr*O_EXCLr+rr^rs    r"r#zMH.__init__stWf555w~~dj))	5
5U+++dj/!J!J!#bi!7"+!EuNNOOOO)444r$c|}t|dkrd}nt|dz}tj|jt|}t|}d}	|j	rt|		|||nJ#t$r=|j	rt|t|d}tj|wxYwt!|t"r||||j	rt|n#|j	rt|wwxYw|st|n#|st|wwxYw|S)r&rrFT)rZrmaxrrrrrrEr^rhrrrkrr2rr
_dump_sequences)rr+rZnew_keyrrcloseds       r"r,zMH.addsyy{{t99>>GG$ii!mG7<<
CLL99h''	|
1



$	&&w2222$|($QNNN!FIh'''gy11;((':::<$ OOO<$ OOOO$
A
A
s7E*B0/D<0AC77.D<%E*<EE**E>cPtj|jt	|}	t|d}|tj|dS#t$r-}|j	tj
krtd|zd}~wwxYw)r/rVrNN)rrrrrrrr2rrrWr8)rr1rrrs     r"r2z	MH.removesw||DJC11		T5!!A
GGIIIIdOOOOO			w%,&&83>???		sA..
B%8(B  B%ctj|jt	|}	t|d}n:#t$r-}|jtjkrtd|zd}~wwxYw	|j
rt|	tjtj|tj
tjz|||t!|t"r||||j
rt'|n#|j
rt'|wwxYwt)|dS#t)|wxYw)r;rVrNN)rrrrrrrrrWr8r^rhrr+O_TRUNCrrr
rrkr)rr1r+rrrs      r"r=zMH.__setitem__sUw||DJC11	T5!!AA			w%,&&83>???		
	|
1



$r{RZ'?@@AAA""7A...gy117((#666<$ OOO<$ OOOO$
NNNNNKNNNNs<A
A<(A77A<EA?D-E-EEE+c	|jrAttj|jt
|d}n@ttj|jt
|d}n:#t$r-}|jtj	krtd|zd}~wwxYw|5|jrt|	t|}|jrt|n#|jrt|wwxYwdddn#1swxYwY|D]\}}||vr|||S)rIrVrrNN)r^rrrrrrrrrWr8rhr
rk
get_sequencesrhadd_sequence)rr1rrrrkey_lists       r"rCzMH.get_messages		|
Cdj#c((;;UCCdj#c((;;TBB			w%,&&83>???		
	$	$|
1



$ll<$ OOO<$ OOOO$
	$	$	$	$	$	$	$	$	$	$	$	$	$	$	$#002288::	'	'ND(h  &&&
sBBB
C(B==CD-D.D-DD--D14D1c	|jrAttj|jt
|d}n@ttj|jt
|d}n:#t$r-}|jtj	krtd|zd}~wwxYw|5|jrt|	|
td|jrt|cdddS#|jrt|wwxYw#1swxYwYdS)rrVrrNNr)r^rrrrrrrrrWr8rhrrrrkrr1rrs    r"rNzMH.get_bytess		|
Cdj#c((;;UCCdj#c((;;TBB			w%,&&83>???		
	$	$|
1



$vvxx''77<$ OOO	$	$	$	$	$	$	$	$<$ OOOO$
	$	$	$	$	$	$	$	$	$	$sBBB
C(B==CE
,D.E
.EE

EEc	ttj|jt|d}n:#t$r-}|jtjkrtd|zd}~wwxYwt|S)rSrrNN)rrrrrrrrrWr8rrs    r"rFzMH.get_file,s	RW\\$*c#hh77>>AA			w%,&&83>???		
!}}sAA
A:
(A55A:c|ttdtj|jDS)rUc3\K|]'}|t|V(dSr4)isdigitrA).0rs  r"	<genexpr>zMH.iterkeys.<locals>.<genexpr>9sH::%).:3u::::::::r$)iterrsrrrrVs r"rWzMH.iterkeys7sGF::2:dj3I3I:::::;;	;r$ctjtj|jt|Sr)rrrrrrr0s  r"rkzMH.__contains__<s.w~~bgll4:s3xx@@AAAr$c^tt|Sr)rrYrWrVs r"rnz
MH.__len__@s 4

(()))r$c|jsUttj|jdd|_t|jd|_dSdS)rrrVTN)r^rrrrrrZrhrVs r"rzMH.lockDsT|	 bgll4:GGOODJtz"""DLLL	 	 r$cz|jr3t|jt|j|`d|_dSdSrj)r^rkrZrrVs r"rz	MH.unlockKsF<	!$$$
###
 DLLL		!	!r$cdS)r}NrrVs r"r~zMH.flushSrr$c@|jr|dSdSr)r^rrVs r"rzMH.closeWs'<	KKMMMMM		r$cg}tj|jD]Y}tjtj|j|r||Z|S)r)rrrrrrrrs   r"r zMH.list_folders\sbZ
++	%	%Ew}}RW\\$*e<<==
%

e$$$
r$cvttj|j||jdS)z+Return an MH instance for the named folder.Fr"rrrrrrr#s  r"r%z
MH.get_folderds4"',,tz622-777	7r$ctttj|j||jS)z:Create a folder and return an MH instance representing it.r'rr#s  r"r-z
MH.add_folderis2"',,tz622-)))	)r$cPtj|j|}tj|}|dgkr3tjtj|dn|gkrnt
d|jztj|dS)r/rzFolder not empty: %sN)rrrrrr2rr2)rr$rentriess    r"r6zMH.remove_foldernsw||DJ//*T""'''Ibgll499::::
]] 6 CDDD
r$c
H
i}ttj|jddd5}t|
|D]+}	|d\}}t}|D]}|r#|	t|9d|dD\}}	|t||	dz
fd	t|D||<t||d
kr||=#t$r%t!d|zwxYw	dddn#1swxYwY|S)
z=Return a name-to-key-list dictionary to define each sequence.rrASCIIencodingrc34K|]}t|VdSr4)rA)rxs  r"rz#MH.get_sequences.<locals>.<genexpr>s(*K*Ka3q66*K*K*K*K*K*Kr$-rcg|]}|v|	Srr)rr1all_keyss  r"
<listcomp>z$MH.get_sequences.<locals>.<listcomp>s)%=%=%=S,/8OO&),;OOr$rz"Invalid sequence specification: %sN)rrrrrsetrZrrr,rAr{rangersrrrrstrip)rresultsrrrcontentsrZspecr|r}rs          @r"rzMH.get_sequenceszs
"',,tz?;;S7
S
S
S	5WX499;;''H
5
55%)ZZ__ND(55D ( 0 0@@<<>>@ HHSYY////*K*K4::c??*K*K*KKE4 KKeTAX(>(>????%=%=%=%=F4LL%=%=%=GDM74=))Q..#DM!555%&J&*kkmm'45555
5	5	5	5	5	5	5	5	5	5	5	5	5	5	5	5&s*'F!C6EF/FFFFcDttj|jddd}	tjtj|jtjtjz|	D]\}}t|dkr||dzd}d}tt|D]^}|d	z
|kr|sd
}|dn7|rd}||d|n|d
|z|}_|r&|t|dz|d	t|dS#t|wxYw)z:Set sequences using the given name-to-key-list dictionary.rzr+rrrrNFrTr z %s
)rrrrrrrr+rrhrrrsrrr)r	sequencesrrrZprev
completingr1s        r"
set_sequenceszMH.set_sequencessdj/::D7SSS	HRWQVR[2:%=>>???'oo//
"
"
dt99>>s
###"
!#d)),,

CQw$)))-JGGCLLL#-%*
444 56666,,,DD"GGCII,----GGDMMMM)
",
NNNNNKNNNNsEFFc8|}d}g}|D]y}|dz
|krg|||dzf	tjtj|jt|tj|jt|dztj	tj|jt|n#ttf$r{tjtj|jt|tj|jt|dzYnwxYw|dz
}{|dz|_
t|dkrdS|D])\}}|D]!\}}||vr||||<"*||dS)z?Re-name messages to eliminate numbering gaps. Invalidates keys.rrN)rrWrrrrrrrunlinkrrrr[rrhindexr)	rrrchangesr1rroldrs	         r"packzMH.packs&&((	==??		CQw$TAX///BGBGLLSXX>>GLLS]]CCEEEIbgll4:s3xx@@AAAA	'8GGGIbgll4:s3xx@@ gll4:s4!8}}EEGGGGGG

AIDDw<<1F'oo//	8	8ND(#
8
8S(??47HX^^C001
8	
9%%%%%sA8DB	FFc:|}|}|D]9\}}||vr||||vr|||=:|D]}||vr|g||<
||dS)z;Inspect a new MHMessage and update sequences appropriately.N)rrhrrr)rr+r1pending_sequences
all_sequencesrrsequences        r"rzMH._dump_sequencess#1133**,,
+1133	2	2ND(((($$$$X^^C001)	0	0H},,+.%
h'=)))))r$r)rrrrr#r,r2r=rCrNrFrWrkrnrrr~rr r%r-r6rrrrrr$r"rrsm



   D02$$$*			;;;
BBB***   !!!
777
)))



0:&&&4*****r$rc|eZdZdZehdZddZdZdZdZ	d	Z
d
ZdZdZ
d
ZdZdZdZdZdS)rzAn Rmail-style Babyl mailbox.>filededitedresentunseendeletedanswered	forwardedNTcNt||||i|_dS)zInitialize a Babyl mailbox.N)rTr#_labelsrs    r"r#zBabyl.__init__s'##D$@@@r$ct||}t|tr||j|<|S)r&)rTr,rr
get_labelsr)rr+r1s   r"r,z	Babyl.addsF $$T733g|,,	5 ' 2 2 4 4DL
r$cbt||||jvr
|j|=dSdSr)rTr2rr0s  r"r2zBabyl.removes=!!$,,,$,S!!!r$ct|||t|tr||j|<dSdS)r;N)rTr=rrrrr<s   r"r=zBabyl.__setitem__sT&&tS':::g|,,	5 ' 2 2 4 4DL	5	5r$c||\}}|j||jt	j}	|j}|dtzks|sn/||tdYt	j}	|j}|tks|sn/||tdV||j	z
}|dksJ|j
|}|td}t||z}	|	
|||jvr |	|j||	S)rIT*** EOOH ***rr)rrZrrrrrrrrprrrset_visibler
set_labels)
rr1r|r}original_headersrvisible_headersnbodyrs
          r"rCzBabyl.get_messagesll3''t

:<<	A:&&((D0000""4<<#?#?@@@		A
*,,	@:&&((Dwd!!$,,w">">???		@
4:??$$$Avvvvzq!!||GU+++4466=>>0022333$,NN4<,---
r$c||\}}|j||jt	j}	|j}|dtzks|sn/||tdY	|j}|tks|sn(|	}||j
z
}|dksJ|j|}|td}||zS)rTrrr)rrZrrrrrrrrrpr)	rr1r|r}rrheadersrrs	         r"rNzBabyl.get_bytess7ll3''t

:<<	A:&&((D0000""4<<#?#?@@@		A
	:&&((Dwd	#++--4:??$$$Avvvvzq!!||GU++~r$ctj||dtS)rSr)rrrNrrr0s  r"rFzBabyl.get_file(s.z$..--55eWEEFFFr$c|t}|jD]}||||jt|S)z4Return a list of user-defined labels in the mailbox.)rrrrdr{difference_update_special_labelsrY)rlabels
label_lists   r"rzBabyl.get_labels,sm,--//	&	&JMM*%%%%  !5666F||r$cgg}}|jdd}g}	|}|j}|j}|dtzkrt|t|kr*||ttz
||d|jdddD}||n|dks|dtzkrKt|t|kr*||ttz
n-|s+||ttz
nttt|||_tt||_t|j|_
|jdd	|j|_dS)
rrTsc^g|]*}||+Sr)striprlabels  r"rz'Babyl._generate_toc.<locals>.<listcomp>Cs<:::E+0;;==:%++--:::r$rN,rI)rZrrrprrrrrrrrrr[r_)rrrrlabel_listsrrr!s        r"rzBabyl._generate_toc5sB
	H:&&((Dz((H{W,,,u::F++LLCLL!8999

h'''::+/:+>+>+@+@+D+J+J4+P+P:::""6****DGg,=$=$=u::F++LLCLL!8999
XG4555#	$3vu#5#56677	Ik2233TY
1 JOO--r$cdtz}|dtzz
}|}d|D}|dd|ztzz
}|dz
}||dS)rsBABYL OPTIONS:s
Version: 5c3>K|]}|VdSr4)rr&s  r"rz*Babyl._pre_mailbox_hook.<locals>.<genexpr>Xs*55U%,,..555555r$sLabels:r(r)N)rrrr)rrbabylr!s    r"rrzBabyl._pre_mailbox_hookSsz!G+
((""55f555
dii///'99
	r$c@|dtzdS)rNrrs  r"rtzBabyl._pre_message_hook]s	'!"""""r$c@|tdzdS)rr)Nrrs  r"rvzBabyl._post_message_hookas	'!"""""r$c|j}t|trg}g}|D]6}||jvr||!||7|jd|D]1}|jd|z2|jd|D]4}|jd|zdz5|jtn"|jdtzt|tjjrKtj}tj|dd}|||d	|}|j|d
t|d
ks|snQ|jdtzt|trtj}	tj|	dd}
|
|	|	}|j|d
t|d
ks|snQng|d	|}|j|d
t|d
ks|snQ	|d}|sn4|j|d
tLnt|t.t0tjfrt|tjr/t5jd
t8d|}t|t0r||}|ddz}|dz
dkr|j|d|d
t|jdtz|j|d|d
t|j||dd
tnU|jdtztz|j|d
tntA|drtA|dr"t5jdt8d|j!}|}
d	}	|}|"dr|ddd
z}n"|"dr
|ddd
z}|j|d
t|d
ks|s=|r:d}|jdtz||
nn	|}|sn|"dr|ddtz}nO|"dr|ddtz}n'|"d
r|ddtz}|j|ntGdtI|z|j}||fS)z0Write message contents and return (start, stop).1s, s,, r(s1,,FrTrrrmrrs

rIrNrrrrrrr)%rZrprrrr rrrrrLr+r
rrrrrrrrget_visiblerrrrrrrrrrrwrrrr)rr+r|special_labelsr!r'orig_bufferorig_generatorr
vis_buffer
vis_generatorr
body_startoriginal_pos
first_passr}s                r"rzBabyl._install_messageesK
!!g|,,	/NF ++--
)
)D000"))%0000MM%((((JT"""'
9
9
  !78888JU###
?
?
  !6!=>>>>JW%%%%JVg-...gu}455S	H*,,K"_;;KPQRRN""7+++Q
"++--
  eW!=!=>>>5===	


J_w6777'<00
Z\\
 % > >z5RS T T
%%g&9&9&;&;<<<%..00DJ$$T\\%%A%ABBBu}}D}	  ###&//11DJ$$T\\%%A%ABBBu}}D}	

A$))$//
  w!?!?@@@	
A
%bk!:
;
;3	H'2;//
-
*+=qBBB!**,,'3''
9//88 g..2JA~##
  *!5!=!=eW!M!MNNN
  7!:;;;
  *!5!=!=eW!M!MNNN
  !5!=!=eW!M!MNNNN
  7!:W!DEEE
  !@!@AAAA
Wj
)
)#	Hw))
)
56H!MMM!."<<>>LJ
''))==))-9u,DD]]5))-9u,D
  eW!=!=>>>5===!%*

((7)BCCC\2222

'''))==))/9w.DD]]5))/9w.DD]]5))/9w.D
  &&&
'6gFGGGz  t}r$r)rrrr	frozensetr r#r,r2r=rCrNrFrrrrrtrvrrr$r"rrs''i!B!B!BCCO
"""5558,GGG...<######iiiiir$rc&eZdZdZddZdZdZdS)r
z0Message with mailbox-format-specific properties.Ncht|tjjrU|tj|t|tr||dSdSt|tr)|tj	|dSt|tr)|tj|dSt|tj
r)|tj|dSt|dr)|tj|dS|&tjj|dSt%dt'|z)zInitialize a Message instance.rNr)rrLr+r
_become_messagecopydeepcopy_explain_torrMrmessage_from_stringr
TextIOWrappermessage_from_filerwmessage_from_binary_filer#rrr*s  r"r#zMessage.__init__sgu}455	H  w!7!7888'7++
*##D)))))
*
*

'
'	H  !9'!B!BCCCCC

%
%		H  !:7!C!CDDDDD
!1
2
2	H  !8!A!ABBBBB
Wf
%
%	H  !?!H!HIIIII
_M!**4000006gFGGGr$cnt|dg}|jD]}||vr|j||j|<dS)z0Assume the non-format-specific state of message._type_specific_attributesN)getattr__dict__)rr+
type_specificrs    r"r@zMessage._become_messagesP)DbII
$	=	=D=((&-&6t&<
d#	=	=r$cNt|trdStd)z:Copy format-specific state to message insofar as possible.Nz Cannot convert to specified type)rr
rr*s  r"rCzMessage._explain_tos)gw''	@F>???r$r4)rrrrr#r@rCrr$r"r
r
sU::HHHH&===@@@@@r$r
cdeZdZdZgdZddZdZdZdZdZ	d	Z
d
ZdZdZ
d
ZdZdZdS)rz)Message with Maildir-specific properties.)_subdir_info_dateNcd|_d|_tj|_t||dS)z%Initialize a MaildirMessage instance.rrN)rOrPr8rQr
r#r*s  r"r#zMaildirMessage.__init__s9
Y[[
w'''''r$c|jS)zReturn 'new' or 'cur'.)rOrVs r"rzMaildirMessage.get_subdirs
|r$cP|dks|dkr	||_dStd|z)zSet subdir to 'new' or 'cur'.rrz!subdir must be 'new' or 'cur': %sN)rOr)rrs  r"rzMaildirMessage.set_subdirs2U??foo!DLLL@6IJJJr$cX|jdr|jddSdS)*Return as a string the flags that are set.2,rINr)rPrrVs r"	get_flagszMaildirMessage.get_flags
s/:  &&	:abb>!2r$cZddt|z|_dS))Set the given flags and unset all others.rWrN)rrsrP)rflagss  r"	set_flagszMaildirMessage.set_flagss$BGGF5MM222


r$c|dt|t|zdSz.Set the given flag(s) without changing others.rNr\rrrXrflags  r"add_flagzMaildirMessage.add_flagCrwws4>>#3#344s4yy@AABBBBBr$c|rY|dt|t|z
dSdS)7Unset the given string flag(s) without changing others.rN)rXr\rrr`s  r"remove_flagzMaildirMessage.remove_flagsb>>	GNN2773t~~'7'7#8#83t99#DEEFFFFF	G	Gr$c|jS)z<Return delivery date of message, in seconds since the epoch.)rQrVs r"rzMaildirMessage.get_date!
zr$cr	t||_dS#t$rtd|zdwxYw)z9Set delivery date of message, in seconds since the epoch.zcan't convert to float: %sN)floatrQrr)rdates  r"rzMaildirMessage.set_date%sN	KtDJJJ	K	K	K84?@@dJ	Ks6c|jS)z%Get the message's "info" as a string.)rPrVs r"rzMaildirMessage.get_info,rhr$c|t|tr	||_dStdt	|z)z Set the message's "info" string.zinfo must be a string: %sN)rrrPrr)rinfos  r"rzMaildirMessage.set_info0s:dC  	FDJJJ7$t**DEEEr$ct|trw||||||dSt|trt|}d|vr|
d|dkr|
dd|vr|
dd|vr|
dd|vr|
d|d	tj
|dSt|trpt|}d|vr|d
d|vr|dd|vr|ddSdSt|t rt|}d|vr|d
d|vr|d
d|vr|dd|vr|ddSdSt|t$rdSt'dt)|z)z;Copy Maildir-specific state to message insofar as possible.SRrOTDFA
MAILER-DAEMONr	repliedflaggedr
rr=r$Cannot convert to specified type: %sN)rrr\rXrrrrrrrbrr8rr
rr	add_labelr
rr)rr+r[s   r"rCzMaildirMessage._explain_to7sg~..'	+dnn..///t00111T]]__-----
!1
2
2#	+(())Ee||  %%%  E))  %%%e||  %%%e||  %%%e||  %%%_dk$--//.J.JKKKKK

+
+	+(())E%$$X...e||$$Y///e||$$Y/////|

.
.	+(())E%!!(+++e||!!),,,e||!!*---e||!!+.....|

)
)	+DB MM*++
+r$r4)rrrrrIr#rrrXr\rbrfrrrrrCrr$r"rrs33 = = =((((KKK333CCCGGG
KKKFFF)+)+)+)+)+r$rcLeZdZdZdgZddZdZddZdZdZ	d	Z
d
ZdZdS)
rz/Message with mbox- or MMDF-specific properties._fromNc6|ddt|tjjrH|}|2|dr||ddt||dS)z'Initialize an mboxMMDFMessage instance.rwTNzFrom r)rrrLr+r
rrr#)rr+rs   r"r#z_mboxMMDFMessage.__init__hs

ot,,,gu}455	,++--H#(;(;G(D(D#

hqrrl+++w'''''r$c|jS)z Return contents of "From " line.)r}rVs r"rz_mboxMMDFMessage.get_fromqrhr$cz|1|durtj}|dtj|zz
}||_dS)z>Set "From " line, formatting and appending time_ if specified.NTr)r8rrr})rrtime_s   r"rz_mboxMMDFMessage.set_fromus@}}

S4<....E


r$c\|dd|ddzS)rVStatusrX-Status)rArVs r"rXz_mboxMMDFMessage.get_flags}s)xx"%%R(@(@@@r$ct|}d\}}dD] }||vr||z
}||!dD] }||vr||z
}||!|dt|z
}	|d|n&#t
$r|d|YnwxYw	|d|dS#t
$r|d|YdSwxYw)rZ)rr)rqrr)rtrurvrrrN)rr2rrsreplace_headerr8
add_header)rr[status_flags
xstatus_flagsras     r"r\z_mboxMMDFMessage.set_flagssIE

&,#m	#	#Du}}$T"""#	#	#Du}}%
T"""///
	4,7777	4	4	4OOHl33333	4	7
M:::::	7	7	7OOJ
666666	7s$B B;:B;?C C;:C;c|dt|t|zdSr^r_r`s  r"rbz_mboxMMDFMessage.add_flagrcr$cd|vsd|vrY|dt|t|z
dSdS)rerrrNr_r`s  r"rfz_mboxMMDFMessage.remove_flags`tzT11NN2773t~~'7'7#8#83t99#DEEFFFFF 21r$ct|tr:t|}d|vr|dd|vr|dd|vr|dd|vr|dd|vr|d|d	=|d
=d|dd
}	|	tjtj
|dd
S#ttf$rYd
SwxYwt|t rP||||d
St|t&rtt|}d|vr|dd|vr|dd|vr|d|d	=|d
=d
St|t*rtt|}d|vr|dd|vr|dd|vr|d|d	=|d
=d
St|t.rd
St1dt3|z)zACopy mbox- or MMDF-specific state to message insofar as possible.rrrrurvrqrprtrsstatuszx-statusrNz%a %b %d %H:%M:%S %Yr	rxryr
rrz)rrrrXrrbrrrrcalendartimegmr8strptimer
OverflowErrorrr\rr
rrr{r
rr)rr+r[
maybe_dates    r"rCz_mboxMMDFMessage._explain_tos/g~../	+(())Ee||""5)))e||  %%%e||  %%%e||  %%%e||  %%%!
#$--//"7"7"9"9"##">??J
  z6L2N2N"O"OPPPPP
.




!1
2
2	+dnn..///T]]__-----

+
+	+(())E%$$X...e||$$Y///e||$$Y///!
###

.
.	+(())E%!!(+++e||!!),,,e||!!*---!
###

)
)	+DB MM*++
+s=:D99E
Er4)
rrrrrIr#rrrXr\rbrfrCrr$r"rrcs99!(	((((AAA777,CCCGGG
1+1+1+1+1+r$rceZdZdZdS)rz&Message with mbox-specific properties.Nrrrrrr$r"rr0000r$rc>eZdZdZdgZd
dZdZdZdZdZ	d	Z
dS)r
z$Message with MH-specific properties.
_sequencesNcJg|_t||dS)z!Initialize an MHMessage instance.N)rr
r#r*s  r"r#zMHMessage.__init__s%w'''''r$c |jddS)z4Return a list of sequences that include the message.N)rrVs r"rzMHMessage.get_sequencessqqq!!r$c.t||_dS)z3Set the list of sequences that include the message.N)rYr)rrs  r"rzMHMessage.set_sequencessy//r$ct|tr'||jvr|j|dSdSt	dt|z)z8Add sequence to list of sequences including the message.zsequence type must be str: %sN)rrrrrrrrs  r"rzMHMessage.add_sequencesbh$$	Nt..&&x00000/.;d8nnLMMMr$c^	|j|dS#t$rYdSwxYw)zARemove sequence from the list of sequences including the message.N)rr2rrs  r"remove_sequencezMHMessage.remove_sequencesE	O""8,,,,,			DD	
,,cbt|trt|}d|vr|dn*|d|dd|vr|dd|vr|dd
Sd
St|trt|}d|vr|dn|d	d|vr|dd|vr|d
d
Sd
St|tr.|D]}||d
St|trWt|}d|vr|
dd|vr|
dd
Sd
St|trd
Stdt|z)z6Copy MH-specific state to message insofar as possible.r	rrpryrurxrqROrrrvrrzN)rrrrrrbrr
rrr{r
rr)rr+rrs    r"rCzMHMessage._explain_tospg~.."	+D..0011I9$$""5))))""5)))  %%%I%%  %%%I%%  %%%%%&%
!1
2
2	+D..0011Iy((  &&&&  %%%I%%  %%%I%%  %%%%%&%

+
+
	+ ..00
/
/$$X....
/
/

.
.
	+D..0011I9$$!!(+++I%%!!*-----&%

)
)	+DB MM*++
+r$r4)rrrrrIr#rrrrrCrr$r"r
r
s..!-((((
"""***NNN$+$+$+$+$+r$r
cReZdZdZddgZddZdZdZdZd	Z	d
Z
dZdZd
Z
dS)rz'Message with Babyl-specific properties.r_visibleNcpg|_t|_t||dS)z#Initialize a BabylMessage instance.N)rr
rr#r*s  r"r#zBabylMessage.__init__%s0		
w'''''r$c |jddS)z'Return a list of labels on the message.N)rrVs r"rzBabylMessage.get_labels+s|AAAr$c.t||_dS)z&Set the list of labels on the message.N)rYr)rr!s  r"rzBabylMessage.set_labels/sF||r$ct|tr'||jvr|j|dSdSt	dt|z)z+Add label to list of labels on the message.zlabel must be a string: %sN)rrrrrrrr's  r"r{zBabylMessage.add_label3sbeS!!	HDL((##E*****)(84;;FGGGr$c^	|j|dS#t$rYdSwxYw)z4Remove label from the list of labels on the message.N)rr2rrs  r"remove_labelzBabylMessage.remove_label;sE	L&&&&&			DD	rc*t|jS)z3Return a Message representation of visible headers.r
rrVs r"r4zBabylMessage.get_visibleBst}%%%r$c.t||_dS)z2Set the Message representation of visible headers.Nr)rvisibles  r"rzBabylMessage.set_visibleFs((


r$c|jD]0}||vr"|j|||(|j|=1dD]}||vr||jvr|||j|< dS)z9Update and/or sensibly generate a set of visible headers.)DateFromzReply-ToToCCSubjectN)rrZr)rheaders  r"update_visiblezBabylMessage.update_visibleJsm((**	*	*F~~
,,VT&\BBBBM&))I	5	5F~~&
"="=(,V
f%	5	5r$ct|trt|}d|vr|dn*|d|dd|vsd|vr|dd|vr|dd	|vr|d
dSdSt|trt|}d|vr|dn|dd	|vr|d
d|vr|ddSdSt|trWt|}d|vr|dd|vr|ddSdSt|trU|
||D]}||dSt|trdStdt|z)z9Copy Babyl-specific state to message insofar as possible.r	rrprrr=rrqr
rsrrrrtrvrxrzN)rrrrrrbrr
rrrr4r{r
rr)rr+r!r's    r"rCzBabylMessage._explain_toUsg~..%	+**++F6!!""5))))""5)))  %%%f$$F(:(:  %%%V##  %%%F""  %%%%%#"
!1
2
2	+**++Fv%%  &&&&  %%%F""  %%%V##  %%%%%$#

+
+	+**++F6!!$$X...V##$$Y/////$#

.
.	+ 0 0 2 2333**
)
)!!%((((
)
)

)
)	+DB MM*++
+r$r4)rrrrrIr#rrr{rr4rrrCrr$r"rr s11!*J 7(((($$$HHH&&&)))	5	5	5'+'+'+'+'+r$rceZdZdZdS)rz&Message with MMDF-specific properties.Nrrr$r"rrrr$rceZdZdZddZddZddZddZddZdZ	d	Z
ddZdZd
Z
dZdZdZdZdZdZedZeeZdS)rzA read-only wrapper of a file.Nc\||_|||_dS||_dS)zInitialize a _ProxyFile.N)rZrp_pos)rrposs   r"r#z_ProxyFile.__init__s,
;DIIIDIIIr$cB|||jjSzRead bytes.)_readrZrrsizes  r"rz_ProxyFile.readszz$
000r$cB|||jjSr)rrZread1rs  r"rz_ProxyFile.read1szz$
 0111r$cB|||jjS)zRead a line.)rrZrrs  r"rz_ProxyFile.readlineszz$
 3444r$cvg}|D]3}||||t|z}|dkrn4|S)zRead multiple lines.Nr)rr)rsizehintrrrs    r"	readlinesz_ProxyFile.readlinessR		DMM$#CII%q==E
r$c#BK	|}|sdS|V)zIterate over lines.TN)r)rrs  r"rbz_ProxyFile.__iter__s3	==??D
JJJ		r$c|jS)zReturn the position.)rrVs r"rpz_ProxyFile.tells
yr$rc|dkr|j|j|j|||j|_dS)zChange position.rNrZrrrproffsetwhences   r"rz_ProxyFile.seeksNQ;;JOODI&&&
'''JOO%%			r$ct|dr:	t|jdr|j|`dS#|`wxYwdS)zClose the file.rZrN)rwrZrrVs r"rz_ProxyFile.closesa4!!	
4:w//'J$$&&&JJJDJ		s.AAc|d}|j|j||}|j|_|S)z"Read size bytes using read_method.Nrr)rrread_methodrrs    r"rz_ProxyFile._readsI<D
	"""T""JOO%%	
r$c|S)z$Context management protocol support.rrVs r"	__enter__z_ProxyFile.__enter__sr$c.|dSr4)r)rexcs  r"__exit__z_ProxyFile.__exit__s

r$c4|jSr4)rZreadablerVs r"rz_ProxyFile.readablez""$$$r$c4|jSr4)rZwritablerVs r"rz_ProxyFile.writablerr$c4|jSr4)rZseekablerVs r"rz_ProxyFile.seekablerr$c4|jSr4)rZr~rVs r"r~z_ProxyFile.flushsz!!!r$clt|dsdSt|jdsdS|jjS)NrZTrF)rwrZrrVs r"rz_ProxyFile.closeds=tW%%	4tz8,,	5z  r$r4r)rrrrr#rrrrrbrprrrrrrrrr~propertyrrrrrr$r"rrsQ((111122225555				&&&&%%%%%%%%%"""!!X!$L11r$rc4eZdZdZd	dZdZd
dZdZdZdS)rz&A read-only wrapper of part of a file.NcZt|||||_||_dS)zInitialize a _PartialFile.N)rr#_start_stop)rrr|r}s    r"r#z_PartialFile.__init__s,D!U+++


r$cFt||jz
S)z*Return the position with respect to start.)rrprrVs r"rpz_PartialFile.tellst$$t{22r$rc|dkr|j|_d}n|dkr|j|_d}t|||dS)z8Change position, possibly with respect to start or stop.rrrIN)rrrrrrs   r"rz_PartialFile.seeksNQ;;DIFF
q[[
DIFff-----r$c|j|jz
}|dkrdS||dks||kr|}t|||S)z;Read size bytes using read_method, honoring start and stop.rr$)rrrr)rrr	remainings    r"rz_PartialFile._readsRJ*	>>3<4!88ti'7'7DdK888r$c.t|dr|`dSdS)NrZ)rwrZrVs r"rz_PartialFile.closes)4!!	


		r$)NNr)	rrrrr#rprrrrr$r"rrso00333....999r$rTcd}	tr	tj|tjtjznT#t$rG}|jt
jt
jt
jfvrtd|j
zd}~wwxYw|r"	t|j
dz}|n8#t$r+}|jt
jt
jfvrYd}~dSd}~wwxYw		tj|j
|j
dzd}tj|j
n;#t t"f$r'tj|j
|j
dzd}YnwxYwdSdS#t&$r1tj|j
td|j
zwxYwdS#trtj|tj|rtj|j
dzxYw)z(Lock file f using lockf and dot locking.Fzlockf: lock unavailable: %sN.lockTzdot lock unavailable: %s)fcntllockfLOCK_EXLOCK_NBrrEAGAINrXrYrrrqrrrrrrrrFr2LOCK_UN)rrndotlock_donerpre_locks     r"rhrhsDL%	
Au}u}<====


7u|U\5;GGG,-J-.V.4555
	1
,QVg-=>>    


7u|U[999FFFFF	


1-GHM16G+;<<<#'L
Ihm,,,,	'8(((IhmQVg-=>>>#'LLL(-,!L#
1
1
1	(-(((()C)**0111
1%	1	1,	*K5=)))	(Iafw&'''
sF4,9F4
B
ABB

F4+B=<F4=
C2C-&F4,C--C22F47$D5E455E-*E4,E--E44;F//F44AG;ctrtj|tjtj|jdzrtj|jdzdSdS)z*Unlock file f using lockf and dot locking.rN)rrrrrrrr2rs r"rkrk9sb&
Au}%%%	w~~afw&''$
	!&7"#####$$r$ctj|tjtjztjzd}	t|dtj|S#tj|wxYw)zCCreate a file if it doesn't exist and open for reading and writing.r)rV)rrr*rO_RDWRr)rfds  r"rErE@sX	rzBI-	95	A	ABD%  
sA  A6c
t|dttjdtjdtjS)zBCreate a temp file based on path and open for reading and writing.r)rErAr8r?r@rrB)rs r"rqrqHsRdddC	4D4D4D4D.4.@.B.B.B.B.0ikkk;<<<r$c|ttdr(tj|dSdS)z0Ensure changes to file f are physically on disk.fsyncN)r~rwrrfilenors r"roroNsIGGIIIr7
r$cLt||dS)z:Close file f, ensuring all changes are physically on disk.N)rorrs r"rrTsNNNGGIIIIIr$ceZdZdZdS)rz"Raised for module-specific errors.Nrrr$r"rrZs,,,,r$rceZdZdZdS)rz:The specified mailbox does not exist and won't be created.Nrrr$r"rr]sDDDDr$rceZdZdZdS)rz>The specified mailbox is not empty and deletion was requested.Nrrr$r"rr`sHHHHr$rceZdZdZdS)rz)Another process caused an action to fail.Nrrr$r"rrc3333r$rceZdZdZdS)rz)A file appears to have an invalid format.Nrrr$r"rrfrr$r)T)2rrr8rr?rrArrL
email.messageemail.generatorrrDtypesrrImportError__all__rrrrrTrrr	rrr+r
rrrr
rrrrrhrkrErqror	Exceptionrrrrrrr$r"<module>rsuJJ
			



				LLLLEEEAAA

*

G
$
$f2f2f2f2f2f2f2f2Rsssssgsssl	F?????"???D1.1.1.1.1.91.1.1.h*.*.*.*.*.9*.*.*.Zn*n*n*n*n*n*n*n*b	vvvvvvvvr"@"@"@"@"@em#"@"@"@Jj+j+j+j+j+Wj+j+j+Zn+n+n+n+n+wn+n+n+b11111"111E+E+E+E+E+E+E+E+P\+\+\+\+\+7\+\+\+~11111"111b2b2b2b2b2b2b2b2J$$$$$:$$$N((((T$$$<<<-----I---EEEEEEEEIIIIIEIII4444444444444%44444s?A	A