grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \ 3ã@sNddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl Z ddl Z y ddl Z Wne k r„dZ YnXdddddddd d d d d dddddgZejjdƒZGdd„dƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„dejjƒZGdd „d eƒZGd d!„d!eƒZGd"d „d eƒZGd#d „d eƒZGd$d „d eƒZGd%d „d eƒZ Gd&d'„d'ƒZ!Gd(d)„d)e!ƒZ"d„Z d?Z!dFd@dA„Z"dS)GrNTcCs tjjtjj|ƒƒ|_||_dS)N)ÚosÚpathÚabspathÚ expanduserÚ_pathÚ_factory)ÚselfrÚfactoryÚcreate©rú/usr/lib64/python3.6/mailbox.pyÚ__init__$szMailbox.__init__cCs tdƒ‚dS)Nz&Method must be implemented by subclass)ÚNotImplementedError)rÚmessagerrrÚadd)sz Mailbox.addcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rÚkeyrrrÚremove-szMailbox.removecCs|j|ƒdS)N)r$)rr#rrrÚ __delitem__1szMailbox.__delitem__c Cs(y|j|ƒWntk r"YnXdS)N)r$ÚKeyError)rr#rrrÚdiscard4szMailbox.discardcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#r!rrrÚ __setitem__;szMailbox.__setitem__c Cs$y |j|ƒStk r|SXdS)N)Ú __getitem__r&)rr#ÚdefaultrrrÚget?s z Mailbox.getc Cs6|js|j|ƒStj|j|ƒƒ� }|j|ƒSQRXdS)N)rÚ get_messageÚ contextlibÚclosingÚget_file)rr#Úfilerrrr)Fs zMailbox.__getitem__cCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrr,NszMailbox.get_messagecCstj|j|ƒƒjƒS)N)ÚemailÚmessage_from_bytesÚ get_bytesÚ as_string)rr#rrrÚ get_stringRszMailbox.get_stringcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrr3YszMailbox.get_bytescCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrr/]szMailbox.get_filecCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚiterkeysaszMailbox.iterkeyscCs t|jƒƒS)N)Úlistr6)rrrrÚkeysesz Mailbox.keysc cs@x:|jƒD].}y ||}Wntk r0w YnX|Vq WdS)N)r6r&)rr#ÚvaluerrrÚ itervaluesis  zMailbox.itervaluescCs|jƒS)N)r:)rrrrÚ__iter__rszMailbox.__iter__cCs t|jƒƒS)N)r7r:)rrrrÚvaluesuszMailbox.valuesc csDx>|jƒD]2}y ||}Wntk r0w YnX||fVq WdS)N)r6r&)rr#r9rrrÚ iteritemsys  zMailbox.iteritemscCs t|jƒƒS)N)r7r=)rrrrÚitems‚sz Mailbox.itemscCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrÚ __contains__†szMailbox.__contains__cCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚ__len__ŠszMailbox.__len__cCs x|jƒD]}|j|ƒq WdS)N)r8r')rr#rrrÚclearŽsz Mailbox.clearc Cs0y ||}Wntk r |SX|j|ƒ|S)N)r&r')rr#r*ÚresultrrrÚpop“s   z Mailbox.popcCs*x$|jƒD]}||j|ƒfSWtdƒ‚dS)NzNo messages in mailbox)r6rCr&)rr#rrrÚpopitemœszMailbox.popitemc Csxt|dƒr|jƒ}nt|dƒr(|jƒ}n|}d}x6|D].\}}y |||<Wq6tk rbd}Yq6Xq6W|rttdƒ‚dS)Nr=r>FTzNo message with key(s))Úhasattrr=r>r&)rÚargÚsourceZbad_keyr#r!rrrÚupdate£s     zMailbox.updatecCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚflush´sz Mailbox.flushcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚlock¸sz Mailbox.lockcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚunlock¼szMailbox.unlockcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚcloseÀsz Mailbox.closec Cs,y |jdƒStk r&tdƒ‚YnXdS)Nrz?String input must be ASCII-only; use bytes or a Message instead)ÚencodeÚ UnicodeErrorÚ ValueError)rr!rrrÚ_string_to_bytesÄs zMailbox._string_to_bytesFc Cst|tjjƒrxtjƒ}tjj||dƒ}|j|ƒ|j dƒ|j ƒ}|j dt ƒ}|j |ƒ|jrt|jt ƒ rt|j t ƒ�n†t|tttjfƒ�rt|tjƒr®tjdtdƒ|jƒ}t|tƒrÂ|j|ƒ}|rÒ|j ddƒ}|j dt ƒ}|j |ƒ|joø|jt ƒ �rþ|j t ƒnöt|dƒ�rît|dƒ�r4tjd tdƒ|j}d}xŒ|jƒ}|jd ƒ�r`|dd…d}n|jd ƒ�r||dd…d}|�s„P|�r¦|jdƒ�r¦d|dd…}|j dt ƒ}|j |ƒ|}�q:W|j�rþ|�rþ|jt ƒ �rþ|j t ƒntdt|ƒƒ‚dS)Nró z8Use of StringIO input is deprecated, use BytesIO insteadés From s >From ÚreadÚbufferzDUse of text mode files is deprecated, use a binary mode file insteads éó ésFrom s>From ézInvalid message type: %séþÿÿÿéÿÿÿÿ)Ú isinstancer1r!rÚioÚBytesIOÚ generatorÚBytesGeneratorÚflattenÚseekrSÚreplaceÚlinesepÚwriteÚ_append_newlineÚendswithÚstrÚbytesÚStringIOÚwarningsÚwarnÚDeprecationWarningÚgetvaluerPrErTÚreadlineÚ startswithÚ TypeErrorÚtype) rr!ÚtargetZ mangle_from_rTÚgenÚdataZlastlineÚlinerrrÚ _dump_messageÑsZ                   zMailbox._dump_message)NT)N)N)N)F)#Ú__name__Ú __module__Ú __qualname__rr"r$r%r'r(r+r)r,r5r3r/r6r8r:r;r<r=r>r?r@rArCrDrHrIrJrKrLrPrervrrrrr!s@       c@sÖeZdZdZd5dd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,Zd-d.„Zd/d0„Zd1d2„Zd3d4„ZdS)6rú:NTcCs°tj||||ƒtjj|jdƒtjj|jdƒtjj|jdƒdœ|_tjj|jƒsŽ|r„tj|jdƒx*|jj ƒD]}tj|dƒqnWn t |jƒ‚i|_ dddœ|_ d|_ d|_dS) NÚtmpÚnewÚcur)r{r|r}iÀr)r}r|gš™™™™™¹?)rrrrÚjoinrÚ_pathsÚexistsÚmkdirr<rÚ_tocÚ _toc_mtimesÚ _last_readÚ _skewfactor)rÚdirnamerrrrrrr s  zMaildir.__init__cCs~|jƒ}y|j||ƒWn*tk rB|jƒtj|jƒ‚YnXt|ƒt|t ƒr||j ƒ}|j |j ƒ}||j kr„d}nd}d}tj j|jƒj|j ƒd}tj j|j|||ƒ}t|t ƒrÞtj|jtj j|jƒ|jƒfƒyLytj|j|ƒWn(ttfk �rtj|j|ƒYnXtj|jƒWnNtk �rx}z0tj|jƒ|jtjk�rftd|ƒ‚n‚WYdd}~XnX|S)NÚr|rz$Name clash with existing message: %s)Ú _create_tmprvÚ BaseExceptionrLrr$ÚnameÚ _sync_closer[r Ú get_subdirÚcolonÚget_inforÚbasenameÚsplitr~rÚutimeÚgetatimeÚget_dateÚlinkÚAttributeErrorÚPermissionErrorÚrenameÚOSErrorÚerrnoZEEXISTr)rr!Ztmp_fileÚsubdirÚsuffixÚuniqÚdestÚerrrr"!sB      z Maildir.addcCs tjtjj|j|j|ƒƒƒdS)N)rr$rr~rÚ_lookup)rr#rrrr$KszMaildir.removec Cs,y|j|ƒWnttfk r&YnXdS)N)r$r&ÚFileNotFoundError)rr#rrrr'OszMaildir.discardc CsÊ|j|ƒ}|j|ƒ}|j|ƒ}t|tƒr.|}n|}tjj|ƒ}|j|kr`|j|j|jƒd}nd}|j |ƒtjj |j |ƒ} tjj |j |||ƒ} t|tƒrºtj | tjj | ƒ|jƒfƒtj| | ƒdS)NrWr‡rZ)rŸr"r[r rrr†r�r�r'r~rr‘r’r“r—) rr#r!Z old_subpathZtemp_keyZ temp_subpathZdominant_subpathršr›Ztmp_pathÚnew_pathrrrr(Ws"        zMaildir.__setitem__c Cs¢|j|ƒ}ttjj|j|ƒdƒ� }|jr4|j|ƒ}nt|ƒ}WdQRXtjj|ƒ\}}|j |ƒ|j |kr€|j |j|j ƒdƒ|j tjj tjj|j|ƒƒƒ|S)NÚrbrWrZ)rŸÚopenrrr~rrr r�Ú set_subdirr�Úset_infoÚset_dateÚgetmtime)rr#ZsubpathÚfÚmsgršrŠrrrr,rs    zMaildir.get_messagec Cs8ttjj|j|j|ƒƒdƒ�}|jƒjtdƒSQRXdS)Nr¢rQ) r£rrr~rrŸrSrbrc)rr#r¨rrrr3�szMaildir.get_bytescCs$ttjj|j|j|ƒƒdƒ}t|ƒS)Nr¢)r£rrr~rrŸÚ _ProxyFile)rr#r¨rrrr/†szMaildir.get_filec csH|jƒx:|jD]0}y|j|ƒWntk r8wYnX|VqWdS)N)Ú_refreshr‚rŸr&)rr#rrrr6‹s zMaildir.iterkeyscCs|jƒ||jkS)N)r«r‚)rr#rrrr?•szMaildir.__contains__cCs|jƒt|jƒS)N)r«Úlenr‚)rrrrr@šszMaildir.__len__cCsdS)Nr)rrrrrIŸsz Maildir.flushcCsdS)Nr)rrrrrJ¥sz Maildir.lockcCsdS)Nr)rrrrrK©szMaildir.unlockcCsdS)Nr)rrrrrL­sz Maildir.closecCs`g}xVtj|jƒD]F}t|ƒdkr|ddkrtjjtjj|j|ƒƒr|j|dd…ƒqW|S)NrWrÚ.)rÚlistdirrr¬rÚisdirr~Úappend)rrBÚentryrrrÚ list_folders±s zMaildir.list_folderscCs ttjj|jd|ƒ|jdd�S)Nr­F)rr)rrrr~rr)rÚfolderrrrÚ get_folderºszMaildir.get_foldercCs\tjj|jd|ƒ}t||jd�}tjj|dƒ}tjj|ƒsXtjtj|tj tj Bdƒƒ|S)Nr­)rZ maildirfolderi¶) rrr~rrrr€rLr£ÚO_CREATÚO_WRONLY)rr³rrBZmaildirfolder_pathrrrÚ add_folderÀs zMaildir.add_foldercCs,tjj|jd|ƒ}xTtjtjj|dƒƒtjtjj|dƒƒD](}t|ƒdksZ|ddkr>td|ƒ‚q>WxPtj|ƒD]B}|dkrv|dkrv|dkrvtjjtjj||ƒƒrvtd||fƒ‚qvWx`tj|d d �D]N\}}}x |D]}tj tjj||ƒƒqÜWx |D]}tj tjj||ƒƒqþWqÌWtj |ƒdS) Nr­r|r}rWrzFolder contains message(s): %sr{z%Folder contains subdirectory '%s': %sF)Útopdown) rrr~rr®r¬rr¯Úwalkr$Úrmdir)rr³rr±ÚrootÚdirsÚfilesrrrÚ remove_folderÊs   zMaildir.remove_foldercCs\tjƒ}xNtjtjj|jdƒƒD]4}tjj|jd|ƒ}|tjj|ƒdkr tj|ƒq WdS)Nr{i@ú)Útimerr®rr~rr’r$)rÚnowr±rrrrÚcleanÝs z Maildir.cleanrWcCsÒtjƒ}tjƒ}d|kr$|jddƒ}d|kr8|jddƒ}dt|ƒt|ddƒtjƒtj|f}tj j |j d|ƒ}ytj |ƒWn@t k rÀtjd7_yt|ƒStk rºYnXYnXtd |ƒ‚dS) Nú/z\057rzz\072z%s.M%sP%sQ%s.%srWg€„.Ar{z&Name clash prevented file creation: %s)r¿ÚsocketÚ gethostnamerbÚintrÚgetpidrÚ_countrr~rÚstatr Ú_create_carefullyÚFileExistsErrorr)rrÀZhostnamerœrrrrrˆçs&    zMaildir._create_tmpcCsätjƒ|jd|jkrbd}x<|jD]2}tjj|j|ƒ}||j|krLd}||j|<q$W|sbdSi|_xl|jD]b}|j|}xRtj |ƒD]D}tjj ||ƒ}tjj |ƒrªqŠ|j |j ƒd}tjj ||ƒ|j|<qŠWqpWtjƒ|_dS)NrUFTr)r¿r„r…rƒrrr§rr‚r®r~r¯r�r�)rZrefreshršÚmtimerr±Úprœrrrr«ÿs&    zMaildir._refreshcCszy,tjjtjj|j|j|ƒƒr*|j|SWntk r@YnX|jƒy |j|Stk rttd|ƒ‚YnXdS)NzNo message with key: %s)rrr€r~rr‚r&r«)rr#rrrrŸ#s zMaildir._lookupc CsVt|dƒs|jƒ|_xs   @ rÐc@s>eZdZdZdd„Zddd„Zddd„Zdd d „Zd d „Zd S)Ú _mboxMMDFTcCsp|j|ƒ\}}|jj|ƒ|jjƒjtdƒ}|jj||jjƒƒ}|j|jtdƒƒ}|j |dd…j dƒƒ|S)NórQrXr) rŸrÔrarnrbrcrSrßÚ_message_factoryÚset_fromÚdecode)rr#rèréÚ from_lineÚstringr©rrrr,s z_mboxMMDF.get_messageFcCstj|j|ƒƒj|d�S)N)Úunixfrom)r1r2r3r4)rr#Úfrom_rrrr5sz_mboxMMDF.get_stringcCsJ|j|ƒ\}}|jj|ƒ|s(|jjƒ|jj||jjƒƒ}|jtdƒS)NrQ)rŸrÔrarnrSrßrbrc)rr#rörèrérôrrrr3s   z_mboxMMDF.get_bytescCs<|j|ƒ\}}|jj|ƒ|s(|jjƒt|j|jjƒ|ƒS)N)rŸrÔrarnÚ _PartialFilerß)rr#rörèrérrrr/s   z_mboxMMDF.get_filecCs d}t|tƒr|j|ƒ}t|tƒrf|jdƒrf|jdƒ}|dkr\|d|…}||dd…}q°|}d}nJt|tƒrˆ|jƒjdƒ}d|}n(t|t j j ƒr°|j ƒ}|dk r°|jdƒ}|dkrÎdt jt jƒƒjƒ}|jjƒ}|jj|tƒ|j||j|jƒ|jjƒ}||fS)NsFrom rQrWrïrsFrom MAILER-DAEMON rZ)r[rgrPrhroÚfindÚ_mboxMMDFMessageÚget_fromrMr1r!rÚ get_unixfromr¿ÚasctimeÚgmtimerÔrßrdrcrvÚ _mangle_from_)rr!róÚnewlineZauthorrèrérrrrì&s0         z_mboxMMDF._install_messageN)F)F)F) rwrxryrþr,r5r3r/rìrrrrrîs   rîc@s.eZdZdZdZd dd„Zdd„Zdd„ZdS) rTNcCst|_tj||||ƒdS)N)r rðrîr)rrrrrrrrLsz mbox.__init__cCs|jtƒdS)N)rdrc)rr¨rrrråQszmbox._post_message_hookcCsìgg}}d}|jjdƒx |jjƒ}|jjƒ}|jdƒr|t|ƒt|ƒkrl|rb|j|ttƒƒn |j|ƒ|j|ƒd}q|s¦|r˜|j|ttƒƒn |j|ƒPq|tkr´d}qd}qWtt t ||ƒƒƒ|_ t|j ƒ|_ |jjƒ|_ dS)NFrsFrom T)rÔrarßrnror¬r°rcÚdictÚ enumerateÚzipr‚rÕrÙ)rÚstartsÚstopsZlast_was_emptyÚline_posrurrrrëUs0         zmbox._generate_toc)NT)rwrxryrþrerrårërrrrrCs  c@s.eZdZd dd„Zdd„Zdd„Zd d „ZdS) rNTcCst|_tj||||ƒdS)N)r rðrîr)rrrrrrrrzsz MMDF.__init__cCs|jdtƒdS)Ns)rdrc)rr¨rrrrãszMMDF._pre_message_hookcCs|jtdtƒdS)Ns)rdrc)rr¨rrrråƒszMMDF._post_message_hookcCsægg}}|jjdƒd}xŒ|}|jjƒ}|jjƒ}|jdtƒrž|j|ƒxV|}|jjƒ}|jjƒ}|dtkrˆ|j|ttƒƒPqN|sN|j|ƒPqNWq|sPqWtt t ||ƒƒƒ|_ t|j ƒ|_ |jjddƒ|jjƒ|_ dS)NrsrU)rÔrarnrßrorcr°r¬rrrr‚rÕrÙ)rrrÚnext_posrrurrrrë‡s2          zMMDF._generate_toc)NT)rwrxryrrãrårërrrrrws c@s¾eZdZd/dd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„ZdS)0rNTcCsttj||||ƒtjj|jƒsj|r`tj|jdƒtjtjtjj |jdƒtj tj Btj Bdƒƒn t |jƒ‚d|_dS)NiÀz .mh_sequencesi€F)rrrrr€rr�rLr£r~rµÚO_EXCLr¶rrØ)rrrrrrrr§s z MH.__init__cCsä|jƒ}t|ƒdkrd}n t|ƒd}tjj|jt|ƒƒ}t|ƒ}d}zŠ|j rVt |ƒzfy|j ||ƒWn:t k r¢|j r†t |ƒt|ƒd}tj|ƒ‚YnXt|tƒrº|j||ƒWd|j rÌt |ƒXWd|sÞt|ƒX|S)NrrWFT)r8r¬Úmaxrrr~rrgrÉrØrÛrvr‰rÜr‹r$r[r Ú_dump_sequences)rr!r8Znew_keyr¡r¨Úclosedrrrr"³s6     zMH.addcCsxtjj|jt|ƒƒ}yt|dƒ}Wn>tk r`}z"|jtjkrNt d|ƒ‚n‚WYdd}~XnX|j ƒtj |ƒdS)Nzrb+zNo message with key: %s) rrr~rrgr£r˜r™rÑr&rLr$)rr#rr¨ržrrrr$Õs z MH.removecCsÖtjj|jt|ƒƒ}yt|dƒ}Wn>tk r`}z"|jtjkrNt d|ƒ‚n‚WYdd}~XnXzd|j rrt |ƒz@tj tj|tj tjBƒƒ|j||ƒt|tƒr°|j||ƒWd|j rÂt|ƒXWdt|ƒXdS)Nzrb+zNo message with key: %s)rrr~rrgr£r˜r™rÑr&rØrÛrLr¶ÚO_TRUNCrvr[r r rÜr‹)rr#r!rr¨ržrrrr(ãs$   zMH.__setitem__c Csìy@|jr$ttjj|jt|ƒƒdƒ}nttjj|jt|ƒƒdƒ}Wn>tk r~}z"|jtj krlt d|ƒ‚n‚WYdd}~XnX|�2|jr”t |ƒz t |ƒ}Wd|jr°t |ƒXWdQRXx*|jƒjƒD]\}}||krÊ|j|ƒqÊW|S)Nzrb+r¢zNo message with key: %s)rØr£rrr~rrgr˜r™rÑr&rÛr rÜÚ get_sequencesr>Ú add_sequence)rr#r¨ržr©rŠÚkey_listrrrr,ûs&  zMH.get_messagec CsÄy@|jr$ttjj|jt|ƒƒdƒ}nttjj|jt|ƒƒdƒ}Wn>tk r~}z"|jtj krlt d|ƒ‚n‚WYdd}~XnX|�6|jr”t |ƒz|j ƒj tdƒS|jr´t|ƒXWdQRXdS)Nzrb+r¢zNo message with key: %srQ)rØr£rrr~rrgr˜r™rÑr&rÛrSrbrcrÜ)rr#r¨ržrrrr3s z MH.get_bytescCsfyttjj|jt|ƒƒdƒ}Wn>tk r\}z"|jtjkrJt d|ƒ‚n‚WYdd}~XnXt |ƒS)Nr¢zNo message with key: %s) r£rrr~rrgr˜r™rÑr&rª)rr#r¨ržrrrr/)s z MH.get_filecCsttdd„tj|jƒDƒƒƒS)Ncss|]}|jƒrt|ƒVqdS)N)ÚisdigitrÅ)Ú.0r±rrrú 6szMH.iterkeys..)Úiterrârr®r)rrrrr64sz MH.iterkeyscCstjjtjj|jt|ƒƒƒS)N)rrr€r~rrg)rr#rrrr?9szMH.__contains__cCstt|jƒƒƒS)N)r¬r7r6)rrrrr@=sz MH.__len__cCs2|js.ttjj|jdƒdƒ|_t|jƒd|_dS)Nz .mh_sequenceszrb+T)rØr£rrr~rrÔrÛ)rrrrrJAs zMH.lockcCs(|jr$t|jƒt|jƒ|`d|_dS)NF)rØrÜrÔr‹)rrrrrKHs   z MH.unlockcCsdS)Nr)rrrrrIPszMH.flushcCs|jr|jƒdS)N)rØrK)rrrrrLTszMH.closecCs@g}x6tj|jƒD]&}tjjtjj|j|ƒƒr|j|ƒqW|S)N)rr®rrr¯r~r°)rrBr±rrrr²Ys zMH.list_folderscCsttjj|j|ƒ|jdd�S)NF)rr)rrrr~rr)rr³rrrr´asz MH.get_foldercCsttjj|j|ƒ|jd�S)N)r)rrrr~rr)rr³rrrr·fsz MH.add_foldercCs`tjj|j|ƒ}tj|ƒ}|dgkr:tjtjj|dƒƒn|gkrDntd|jƒ‚tj|ƒdS)Nz .mh_sequenceszFolder not empty: %s)rrr~rr®r$rrº)rr³rZentriesrrrr¾ks  zMH.remove_folderc s i}ttjj|jdƒddd��ä}t|jƒƒ‰xÐ|D]È}yž|jdƒ\}}tƒ}xT|jƒD]H}|jƒrr|j t |ƒƒqVdd„|jdƒDƒ\}} |j t || d ƒƒqVW‡fd d „t |ƒDƒ||<t||ƒd krÒ||=Wq2tk røtd |jƒƒ‚Yq2Xq2WWdQRX|S)Nz .mh_sequencesÚrÚASCII)Úencodingrzcss|]}t|ƒVqdS)N)rÅ)rÚxrrrr„sz#MH.get_sequences..ú-rWcsg|]}|ˆkr|‘qSrr)rr#)Úall_keysrrú †sz$MH.get_sequences..rz"Invalid sequence specification: %s)r£rrr~rÚsetr8r�rr"rÅrHÚrangerâr¬rOrÚrstrip) rZresultsr¨rurŠÚcontentsr8Úspecrèrér)rrr ws&    zMH.get_sequencesc Cs ttjj|jdƒddd�}zàtjtj|jtjtjBƒƒx¾|j ƒD]²\}}t |ƒdkrXqB|j |dƒd}d}xbt t |ƒƒD]R}|d|kr |sÊd }|j d ƒn*|r¼d}|j d ||fƒn|j d |ƒ|}q|W|rê|j t|ƒd ƒqB|j d ƒqBWWdt|ƒXdS)Nz .mh_sequenceszr+r)rrrzFrWTrz%s %sz %sÚ )r£rrr~rrLrŠr¶r r>r¬rdrârrgr‹)rÚ sequencesr¨rŠr8ÚprevZ completingr#rrrÚ set_sequences�s.   zMH.set_sequencesc CsL|jƒ}d}g}xÎ|jƒD]Â}|d|krÔ|j||dfƒy4tjtjj|jt|ƒƒtjj|jt|dƒƒƒWnHt t fk r¸tj tjj|jt|ƒƒtjj|jt|dƒƒƒYnXtj tjj|jt|ƒƒƒ|d7}qW|d|_ t|ƒdkrúdSxB|jƒD]6\}}x*|D]"\}}||k�r|||j|ƒ<�qW�qW|j|ƒdS)NrrW)r r6r°rr”rr~rrgr•r–r—ÚunlinkrÕr¬r>Úindexr") rr r!Zchangesr#rŠrÚoldr|rrrÚpack¬s,      zMH.packcCs||jƒ}|jƒ}x<|jƒD]0\}}||kr6|j|ƒq||kr||j|ƒ=qWx|D]}||krT|g||<qTW|j|ƒdS)N)r r>r°r$r")rr!r#Zpending_sequencesZ all_sequencesrŠrÚsequencerrrr Æs  zMH._dump_sequences)NT)rwrxryrr"r$r(r,r3r/r6r?r@rJrKrIrLr²r´r·r¾r r"r&r rrrrr¤s, "  c@sŒeZdZedddddddhƒZd$d d „Zd d „Zdd„Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zd d!„Zd"d#„ZdS)%rÚunseenÚdeletedZfiledÚansweredÚ forwardedZeditedÚresentNTcCstj||||ƒi|_dS)N)rÐrÚ_labels)rrrrrrrrÛszBabyl.__init__cCs(tj||ƒ}t|tƒr$|jƒ|j|<|S)N)rÐr"r[r Ú get_labelsr-)rr!r#rrrr"às  z Babyl.addcCs"tj||ƒ||jkr|j|=dS)N)rÐr$r-)rr#rrrr$çs  z Babyl.removecCs*tj|||ƒt|tƒr&|jƒ|j|<dS)N)rÐr(r[r r.r-)rr#r!rrrr(ís zBabyl.__setitem__c Csþ|j|ƒ\}}|jj|ƒ|jjƒtjƒ}x4|jjƒ}|dtksJ| rLP|j|jtdƒƒq.Wtjƒ}x0|jjƒ}|tks„| r†P|j|jtdƒƒqlW||jj ƒ}|jj |ƒ}|jtdƒ}t |j ƒ|ƒ} | j |j ƒƒ||jkrú| j|j|ƒ| S)Ns *** EOOH ***rQ)rŸrÔrarnr\r]rcrdrbrßrSr rmÚ set_visibler-Ú set_labels) rr#rèréÚoriginal_headersruZvisible_headersÚnZbodyr©rrrr,ós.       zBabyl.get_messagec Cs¸|j|ƒ\}}|jj|ƒ|jjƒtjƒ}x4|jjƒ}|dtksJ| rLP|j|jtdƒƒq.Wx|jjƒ}|tks|| rdPqdW|j ƒ}||jj ƒ}|jj |ƒ}|jtdƒ}||S)Ns *** EOOH ***rQ) rŸrÔrarnr\r]rcrdrbrmrßrS) rr#rèrér1ruZheadersr2rtrrrr3s$      zBabyl.get_bytescCstj|j|ƒjdtƒƒS)NrQ)r\r]r3rbrc)rr#rrrr/%szBabyl.get_filecCs@|jƒtƒ}x|jjƒD]}|j|ƒqW|j|jƒt|ƒS)N)rŸrr-r<rHÚdifference_updateÚ_special_labelsr7)rÚlabelsZ label_listrrrr.)s  zBabyl.get_labelscCs>gg}}|jjdƒd}g}xÒ|}|jjƒ}|jjƒ}|dtkržt|ƒt|ƒkrf|j|ttƒƒ|j|ƒdd„|jjƒdd…jdƒDƒ}|j|ƒq |dks²|dtkrÖt|ƒt|ƒkrî|j|ttƒƒq |s |j|ttƒƒPq Wtt t ||ƒƒƒ|_ tt |ƒƒ|_ t|j ƒ|_ |jjddƒ|jjƒ|_dS) Nrs cSsg|]}|jƒr|jƒ‘qSr)Ústrip)rÚlabelrrrr@sz'Babyl._generate_toc..rWó,órU)rÔrarnrßrcr¬r°r�rrrr‚r-rÕrÙ)rrrrZ label_listsrrur5rrrrë2s4        zBabyl._generate_toccCsVdt}|dt7}|jƒ}dd„|Dƒ}|ddj|ƒt7}|d7}|j|ƒdS)NsBABYL OPTIONS:s Version: 5css|]}|jƒVqdS)N)rM)rr7rrrrUsz*Babyl._pre_mailbox_hook..sLabels:r8r9)rcr.r~rd)rr¨Zbabylr5rrrráPs zBabyl._pre_mailbox_hookcCs|jdtƒdS)Nó )rdrc)rr¨rrrrãZszBabyl._pre_message_hookcCs|jtdƒdS)Nr9)rdrc)rr¨rrrrå^szBabyl._post_message_hookcCsœ|jjƒ}t|tƒr¼g}g}x0|jƒD]$}||jkr@|j|ƒq&|j|ƒq&W|jjdƒx |D]}|jjd|jƒƒq`W|jjdƒx$|D]}|jjd|jƒdƒqŽW|jjt ƒn|jjdt ƒt|t j j ƒ�r0t jƒ}t jj|ddƒ}|j|ƒ|jdƒx6|jƒ}|jj|jd t ƒƒ|d k�s8| �r P�q W|jjd t ƒt|tƒ�r¼t jƒ} t jj| ddƒ} | j|jƒƒxz| jƒ}|jj|jd t ƒƒ|d k�s²| �r„P�q„WnB|jdƒx6|jƒ}|jj|jd t ƒƒ|d k�sö| �rÈP�qÈWx,|jd ƒ} | �sP|jj| jd t ƒƒ�qW�nZt|ttt jfƒ�r,t|t jƒ�rhtjd td ƒ|jƒ}t|tƒ�r~|j|ƒ}|jdƒd} | ddk�r|jj|d| …jd t ƒƒ|jjd t ƒ|jj|d| …jd t ƒƒ|jj|| d…jd t ƒƒn(|jjd t t ƒ|jj|jd t ƒƒ�n^t |dƒ�rzt |dƒ�rXtjdtd ƒ|j!}|jƒ} d}x–|jƒ}|j"dƒ�rŒ|dd…d }n|j"dƒ�r¨|dd…d }|jj|jd t ƒƒ|d k�sÎ| �rf|�rôd}|jjd t ƒ|j| ƒnP�qfWxŒ|jƒ}|�sP|j"dƒ�r,|dd…t }n:|j"dƒ�rJ|dd…t }n|j"d ƒ�rf|dd…t }|jj|ƒ�qþWnt#dt$|ƒƒ‚|jjƒ}||fS)Nó1s, s,,ó r8s1,,FrrQs *** EOOH ***iz8Use of StringIO input is deprecated, use BytesIO insteadrRs rUrWrnrTzDUse of text mode files is deprecated, use a binary mode file insteadTs rVzInvalid message type: %srZrYrZrYrZrZ)%rÔrßr[r r.r4r°rdrMrcr1r!rr\r]r^r_r`rarnrbÚ get_visiblerSrhrgrirjrkrlrmrPrørErTrfrprq)rr!rèZspecial_labelsr5r7Z orig_bufferZorig_generatorruZ vis_bufferZ vis_generatorrTZ body_startZ original_posZ first_passrérrrrìbsÀ                         zBabyl._install_message)NT)rwrxryÚ frozensetr4rr"r$r(r,r3r/r.rërárãrårìrrrrrÕs     c@s&eZdZddd„Zdd„Zdd„ZdS) rNcCsÒt|tjjƒr4|jtj|ƒƒt|tƒrÎ|j|ƒnšt|tƒrP|jtj |ƒƒn~t|t ƒrl|jtj |ƒƒnbt|t j ƒrŠ|jtj|ƒƒnDt|dƒr¦|jtj|ƒƒn(|dkr¾tjjj|ƒntdt|ƒƒ‚dS)NrSzInvalid message type: %s)r[r1r!rÚ_become_messageÚcopyÚdeepcopyÚ _explain_torhr2rgZmessage_from_stringr\Ú TextIOWrapperZmessage_from_filerEZmessage_from_binary_filerrprq)rr!rrrrÑs      zMessage.__init__cCs8t|dgƒ}x&|jD]}||kr|j||j|<qWdS)NÚ_type_specific_attributes)ÚgetattrÚ__dict__)rr!Z type_specificrŠrrrr?äs  zMessage._become_messagecCst|tƒrdStdƒ‚dS)Nz Cannot convert to specified type)r[rrp)rr!rrrrBës zMessage._explain_to)N)rwrxryrr?rBrrrrrÎs c@sxeZdZdddgZddd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)r Ú_subdirÚ_infoÚ_dateNcCs&d|_d|_tjƒ|_tj||ƒdS)Nr|r‡)rGrHr¿rIrr)rr!rrrrøs zMaildirMessage.__init__cCs|jS)N)rG)rrrrrŒÿszMaildirMessage.get_subdircCs(|dks|dkr||_n td|ƒ‚dS)Nr|r}z!subdir must be 'new' or 'cur': %s)rGrO)rršrrrr¤szMaildirMessage.set_subdircCs"|jjdƒr|jdd…SdSdS)Nz2,rUr‡)rHro)rrrrÚ get_flags s zMaildirMessage.get_flagscCsddjt|ƒƒ|_dS)Nz2,r‡)r~rârH)rÚflagsrrrÚ set_flagsszMaildirMessage.set_flagscCs$|jdjt|jƒƒt|ƒBƒƒdS)Nr‡)rLr~rrJ)rÚflagrrrÚadd_flagszMaildirMessage.add_flagcCs,|jƒr(|jdjt|jƒƒt|ƒƒƒdS)Nr‡)rJrLr~r)rrMrrrÚ remove_flagszMaildirMessage.remove_flagcCs|jS)N)rI)rrrrr“szMaildirMessage.get_datec Cs4yt|ƒ|_Wn tk r.td|ƒ‚YnXdS)Nzcan't convert to float: %s)ÚfloatrIrOrp)rZdaterrrr¦"szMaildirMessage.set_datecCs|jS)N)rH)rrrrrŽ)szMaildirMessage.get_infocCs&t|tƒr||_ntdt|ƒƒ‚dS)Nzinfo must be a string: %s)r[rgrHrprq)rÚinforrrr¥-s zMaildirMessage.set_infocCs¤t|tƒr8|j|jƒƒ|j|jƒƒ|j|jƒƒ�nht|tƒrÄt |jƒƒ}d|kr`|j dƒ|jƒdkrv|j dƒd|krˆ|j dƒd|krš|j dƒd|kr¬|j dƒ|j d t j |jƒƒƒnÜt|tƒ�rt |jƒƒ}d|krî|jd ƒd|k�r|jd ƒd|k�r |jd ƒnˆt|tƒ�r‚t |jƒƒ}d|k�rD|jd ƒd|k�rX|jd ƒd|k�rl|jdƒd|k�r |jdƒnt|tƒ�r�ntdt|ƒƒ‚dS)NÚSÚRr}ÚOÚTÚDÚFÚAz MAILER-DAEMONr(ÚrepliedÚflaggedr)r*ÚPr+z$Cannot convert to specified type: %s)r[r rLrJr¤rŒr¦r“rùrrNrñr¿rýr r r Ú add_labelrrprq)rr!rKrrrrB4sN                           zMaildirMessage._explain_to)N)rwrxryrDrrŒr¤rJrLrNrOr“r¦rŽr¥rBrrrrr ós  c@sVeZdZdgZddd„Zdd„Zddd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)rùÚ_fromNcCsV|jddƒt|tjjƒrF|jƒ}|dk rF|jdƒrF|j|dd…ƒtj||ƒdS)Nz MAILER-DAEMONTzFrom rX)rñr[r1r!rrûror)rr!rõrrrres  z_mboxMMDFMessage.__init__cCs|jS)N)r])rrrrrúnsz_mboxMMDFMessage.get_fromcCs4|dk r*|dkrtjƒ}|dtj|ƒ7}||_dS)NTú )r¿rýrür])rröZtime_rrrrñrs z_mboxMMDFMessage.set_fromcCs|jddƒ|jddƒS)NÚStatusr‡zX-Status)r+)rrrrrJzsz_mboxMMDFMessage.get_flagscCsÚt|ƒ}d \}}x&d D]}||kr||7}|j|ƒqWx&d D]}||kr>||7}|j|ƒq>W|djt|ƒƒ7}y|jd|ƒWn tk r¢|jd|ƒYnXy|jd|ƒWn tk rÔ|jd|ƒYnXdS) Nr‡rSrTrVrWrXr_zX-Status)r‡r‡)rSrT)rVrWrX)rr$r~râÚreplace_headerr&Z add_header)rrKZ status_flagsZ xstatus_flagsrMrrrrL~s&  z_mboxMMDFMessage.set_flagscCs$|jdjt|jƒƒt|ƒBƒƒdS)Nr‡)rLr~rrJ)rrMrrrrN”sz_mboxMMDFMessage.add_flagcCs4d|ksd|kr0|jdjt|jƒƒt|ƒƒƒdS)Nr_zX-Statusr‡)rLr~rrJ)rrMrrrrO˜sz_mboxMMDFMessage.remove_flagc CsÞt|tƒrÐt|jƒƒ}d|kr(|jdƒd|kr:|jdƒd|krL|jdƒd|kr^|jdƒd|krp|jdƒ|d =|d =d j|jƒjƒdd…ƒ}y|j t j t j |d ƒƒƒWnttfk rÊYnX�n t|tƒrø|j|jƒƒ|j|jƒƒnât|tƒ�rZt|jƒƒ}d|k�r$|jdƒd|k�r8|jdƒd|k�rL|jdƒ|d =|d =n€t|tƒ�r¼t|jƒƒ}d|k�r†|jdƒd|k�rš|jdƒd|k�r®|jdƒ|d =|d =nt|tƒ�rÊntdt|ƒƒ‚dS)NrTr}rWrXrSrRrVrUZstatuszx-statusr^rXz%a %b %d %H:%M:%S %Yr(rYrZr)r*z$Cannot convert to specified type: %séûÿÿÿ)r[r rrJr¤rNr~rúr�r¦ÚcalendarZtimegmr¿ZstrptimerOÚ OverflowErrorrùrLrñr r r r\rrprq)rr!rKZ maybe_daterrrrB�s^                          z_mboxMMDFMessage._explain_to)N)N) rwrxryrDrrúrñrJrLrNrOrBrrrrrù`s  rùc@s eZdZdS)r N)rwrxryrrrrr Ñsc@sDeZdZdgZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)r Ú _sequencesNcCsg|_tj||ƒdS)N)rdrr)rr!rrrrÚszMHMessage.__init__cCs|jdd…S)N)rd)rrrrr ßszMHMessage.get_sequencescCst|ƒ|_dS)N)r7rd)rr rrrr"ãszMHMessage.set_sequencescCs6t|tƒr"||jkr2|jj|ƒntdt|ƒƒ‚dS)Nzsequence type must be str: %s)r[rgrdr°rprq)rr'rrrr çs  zMHMessage.add_sequencec Cs*y|jj|ƒWntk r$YnXdS)N)rdr$rO)rr'rrrÚremove_sequenceïszMHMessage.remove_sequencecCsJt|tƒrdt|jƒƒ}d|kr*|jdƒn|jdƒ|jdƒd|krP|jdƒd|krb|jdƒnât|tƒr¾t|jƒƒ}d|krŽ|jdƒn |jd ƒd|krª|jdƒd|kr¼|jd ƒnˆt|tƒræx||jƒD]}|j|ƒqÒWn`t|t ƒ�r(t|jƒƒ}d|k�r|j dƒd|k�rF|j d ƒnt|t ƒ�r6nt d t |ƒƒ‚dS) Nr(r}rRrZrWrYrSÚROrTrXr*z$Cannot convert to specified type: %s)r[r rr r¤rNrùr r r r\rrprq)rr!r r'rrrrBös@                     zMHMessage._explain_to)N) rwrxryrDrr r"r rerBrrrrr Õs c@s^eZdZddgZddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dS)r r-Ú_visibleNcCsg|_tƒ|_tj||ƒdS)N)r-rrgr)rr!rrrr"szBabylMessage.__init__cCs|jdd…S)N)r-)rrrrr.(szBabylMessage.get_labelscCst|ƒ|_dS)N)r7r-)rr5rrrr0,szBabylMessage.set_labelscCs6t|tƒr"||jkr2|jj|ƒntdt|ƒƒ‚dS)Nzlabel must be a string: %s)r[rgr-r°rprq)rr7rrrr\0s  zBabylMessage.add_labelc Cs*y|jj|ƒWntk r$YnXdS)N)r-r$rO)rr7rrrÚ remove_label8szBabylMessage.remove_labelcCs t|jƒS)N)rrg)rrrrr=?szBabylMessage.get_visiblecCst|ƒ|_dS)N)rrg)rZvisiblerrrr/CszBabylMessage.set_visiblecCsjx6|jjƒD](}||kr,|jj|||ƒq |j|=q Wx,dD]$}||kr>||jkr>|||j|<q>WdS)NÚDateÚFromúReply-ToÚToÚCCÚSubject)rirjrkrlrmrn)rgr8r`)rÚheaderrrrÚupdate_visibleGs  zBabylMessage.update_visiblecCsvt|tƒr~t|jƒƒ}d|kr*|jdƒn|jdƒ|jdƒd|ksNd|krX|jdƒd|krj|jdƒd |kr||jd ƒnôt|tƒrØt|jƒƒ}d|kr¨|jd ƒn |jd ƒd |krÄ|jd ƒd|krÖ|jdƒnšt|tƒ�rt|jƒƒ}d|k�r|jdƒd|k�rr|jdƒnXt|t ƒ�rT|j |j ƒƒx<|jƒD]}|j |ƒ�q>Wnt|t ƒ�rbntdt|ƒƒ‚dS)Nr(r}rRr+r,r[r*rSr)rUrfrTrVrXrYz$Cannot convert to specified type: %s)r[r rr.r¤rNrùr r r r/r=r\rrprq)rr!r5r7rrrrBRsF                      zBabylMessage._explain_to)N) rwrxryrDrr.r0r\rhr=r/rprBrrrrr s  c@s eZdZdS)r N)rwrxryrrrrr |sc@s¤eZdZd%dd„Zd&dd„Zd'dd„Zd(dd „Zd)d d „Zd d „Zdd„Z d*dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd „Zd!d"„Zed#d$„ƒZdS)+rªNcCs$||_|dkr|jƒ|_n||_dS)N)rÔrßÚ_pos)rr¨Úposrrrrƒs z_ProxyFile.__init__cCs|j||jjƒS)N)Ú_readrÔrS)rÚsizerrrrS‹sz_ProxyFile.readcCs|j||jjƒS)N)rsrÔÚread1)rrtrrrru�sz_ProxyFile.read1cCs|j||jjƒS)N)rsrÔrn)rrtrrrrn“sz_ProxyFile.readlinecCs>g}x4|D],}|j|ƒ|dk r |t|ƒ8}|dkr Pq W|S)Nr)r°r¬)rÚsizehintrBrurrrÚ readlines—s   z_ProxyFile.readlinesccs x|jƒ}|sdS|VqWdS)N)rn)rrurrrr;¢s z_ProxyFile.__iter__cCs|jS)N)rq)rrrrrߪsz_ProxyFile.tellrcCs4|dkr|jj|jƒ|jj||ƒ|jjƒ|_dS)NrW)rÔrarqrß)rÚoffsetÚwhencerrrra®sz_ProxyFile.seekc Cs0t|dƒr,zt|jdƒr"|jjƒWd|`XdS)NrÔrL)rErÔrL)rrrrrLµs   z_ProxyFile.closecCs2|dkr d}|jj|jƒ||ƒ}|jjƒ|_|S)NrWrZ)rÔrarqrß)rrtÚ read_methodrBrrrrs¾s  z_ProxyFile._readcCs|S)Nr)rrrrÚ __enter__Çsz_ProxyFile.__enter__cGs |jƒdS)N)rL)rÚexcrrrÚ__exit__Ësz_ProxyFile.__exit__cCs |jjƒS)N)rÔÚreadable)rrrrr~Îsz_ProxyFile.readablecCs |jjƒS)N)rÔÚwritable)rrrrrÑsz_ProxyFile.writablecCs |jjƒS)N)rÔÚseekable)rrrrr€Ôsz_ProxyFile.seekablecCs |jjƒS)N)rÔrI)rrrrrI×sz_ProxyFile.flushcCs&t|dƒsdSt|jdƒsdS|jjS)NrÔTr F)rErÔr )rrrrr Ús   z_ProxyFile.closed)N)N)N)N)N)r)rwrxryrrSrurnrwr;rßrarLrsr{r}r~rr€rIÚpropertyr rrrrrª€s"        rªc@s8eZdZd dd„Zdd„Zddd„Zd d „Zd d „ZdS)r÷NcCstj|||ƒ||_||_dS)N)rªrÚ_startÚ_stop)rr¨rèrérrrræsz_PartialFile.__init__cCstj|ƒ|jS)N)rªrßr‚)rrrrrßìsz_PartialFile.tellrcCs<|dkr|j|_d}n|dkr*|j|_d}tj|||ƒdS)NrrWrU)r‚rqrƒrªra)rrxryrrrraðsz_PartialFile.seekcCsB|j|j}|dkrdS|dks0|dks0||kr4|}tj|||ƒS)Nrrï)rƒrqrªrs)rrtrzZ remainingrrrrsús  z_PartialFile._readcCst|dƒr|`dS)NrÔ)rErÔ)rrrrrLs z_PartialFile.close)NN)r)rwrxryrrßrarsrLrrrrr÷ãs    r÷Tc4Csžd}�yZtrpytj|tjtjBƒWnJtk rn}z.|jtjtjtjfkr\t d|j ƒ‚n‚WYdd}~XnX|�r^yt |j dƒ}|j ƒWn:tk rÊ}z|jtjtjfkr¸dS‚WYdd}~XnXy`yt j|j |j dƒd}Wn2ttfk �rt j|j |j dƒd}YnXt j|j ƒWn0tk �r\t j|j ƒt d|j ƒ‚YnXWn8t�r|tj|tjƒ|�r’t j|j dƒ‚YnXdS)NFzlockf: lock unavailable: %sz.lockTzdot lock unavailable: %s)ÚfcntlÚlockfZLOCK_EXZLOCK_NBr˜r™ZEAGAINrÒrÓrrŠràrLrr”r•r–r—r#rÊr$ÚLOCK_UN)r¨rÝZ dotlock_doneržZpre_lockrrrrÛ sH    rÛcCs8trtj|tjƒtjj|jdƒr4tj|jdƒdS)Nz.lock)r„r…r†rrr€rŠr$)r¨rrrrÜ4srÜc Cs8tj|tjtjBtjBdƒ}z t|dƒStj|ƒXdS)Ni¶zrb+)rr£rµrÚO_RDWRrL)rÚfdrrrrÉ;s rÉcCs$td|ttjƒƒtjƒtjƒfƒS)Nz %s.%s.%s.%s)rÉrÅr¿rÃrÄrrÆ)rrrrràCsràcCs$|jƒttdƒr tj|jƒƒdS)NÚfsync)rIrErr‰Úfileno)r¨rrrrÞIs rÞcCst|ƒ|jƒdS)N)rÞrL)r¨rrrr‹Osr‹c@s eZdZdS)rN)rwrxryrrrrrUsc@s eZdZdS)rN)rwrxryrrrrrXsc@s eZdZdS)rN)rwrxryrrrrr[sc@s eZdZdS)rN)rwrxryrrrrr^sc@s eZdZdS)rN)rwrxryrrrrras)T)/rr¿rbrÃr™r@rjr1Z email.messageZemail.generatorr\r-r„Ú ImportErrorÚ__all__rcrMrrrÐrîrrrrr!rr rùr r r r rªr÷rÛrÜrÉràrÞr‹Ú ExceptionrrrrrrrrrÚ sn     h8DB4-3z%mqH_c' *