a DOgŢ @sddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddlm Z e dZ e e dBZe d Zee BZee d Zee d Zee d Be d Zee BZee d BZee BZee dZddhZeeBZddZedejejBZGdddeZ Gddde Z!Gddde Z"Gddde Z#Gddde Z$Gddde!Z%Gd d!d!e Z&Gd"d#d#e Z'Gd$d%d%e Z(Gd&d'd'e Z)Gd(d)d)e)Z*Gd*d+d+e!Z+Gd,d-d-e Z,Gd.d/d/e Z-Gd0d1d1e Z.Gd2d3d3e Z/Gd4d5d5e Z0Gd6d7d7e Z1Gd8d9d9e Z2Gd:d;d;e Z3Gdd?d?e Z5Gd@dAdAe Z6GdBdCdCe Z7GdDdEdEe Z8GdFdGdGe Z9GdHdIdIe Z:GdJdKdKe Z;GdLdMdMe#ZGdRdSdSe Z?GdTdUdUe Z@GdVdWdWe@ZAGdXdYdYe ZBGdZd[d[e ZCGd\d]d]e ZDGd^d_d_e ZEGd`dadae ZFGdbdcdceFZGGdddedeeFZHGdfdgdge ZIGdhdidie ZJGdjdkdke ZKGdldmdmeKZLGdndodoeLZMGdpdqdqe ZNGdrdsdseOZPGdtduduePZQGdvdwdwePZRGdxdydyeQZSGdzd{d{e jTZUeRd d|ZVeRd}d~ZWeRddZXedYdZe j[Z\edYe]dZej^Z_edj`ZaedYe]dZej^ZbedYe]dZej^ZcedYe]dZej^ZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZdd„ZddĄZddƄZddȄZddʄZdd̄Zdd΄ZddЄZdd҄ZddԄZddքZdd؄ZddڄZdd܄ZddބZddZddZddZddZddZddZddZddZddZddZddZddZddZdS)N) hexdigits) itemgetter)_encoded_words)errors)utilsz (z ()<>@,:;.\"[].z."(z/?=z*'%%  cCs dt|dddddS)N"\\\z\")strreplacevaluer?/opt/alt/python39/lib64/python3.9/email/_header_value_parser.py quote_stringbsrz =\? # literal =? [^?]* # charset \? # literal ? [qQbB] # literal 'q' or 'b', case insensitive \? # literal ? .*? # encoded word \?= # literal ?= cseZdZdZdZdZfddZddZfddZe d d Z e d d Z d dZ e ddZ e ddZddZdddZdddZdddZZS) TokenListNTcstj|i|g|_dSN)super__init__defects)selfargskw __class__rrr{szTokenList.__init__cCsddd|DS)Ncss|]}t|VqdSrr.0xrrr z$TokenList.__str__..joinrrrr__str__szTokenList.__str__csd|jjtSNz{}({})formatr__name__r__repr__r)rrrr/s zTokenList.__repr__cCsddd|DS)Nr css|]}|jr|jVqdSrrr"rrrr%r&z"TokenList.value..r'r)rrrrszTokenList.valuecCstdd|D|jS)Ncss|] }|jVqdSr) all_defectsr"rrrr%r&z(TokenList.all_defects..)sumrr)rrrr0szTokenList.all_defectscCs |dSNr)startswith_fwsr)rrrr3szTokenList.startswith_fwscCstdd|DS)Ncss|] }|jVqdSr) as_ew_allowed)r#partrrrr%r&z*TokenList.as_ew_allowed..)allr)rrrr4szTokenList.as_ew_allowedcCsg}|D]}||jq|Sr)extendcomments)rr8tokenrrrr8szTokenList.commentscCs t||dS)Npolicy)_refold_parse_treerr;rrrfoldszTokenList.foldr cCst|j|ddS)Nindent)printppstrrr@rrrpprintszTokenList.pprintcCsd|j|dS)Nr r?)r(_pprCrrrrBszTokenList.ppstrccszd||jj|jV|D]4}t|ds:|d|Vq||dEdHq|jrdd|j}nd}d||VdS)Nz{}{}/{}(rEz* !! invalid element in token list: {!r}z z Defects: {}r z{}){})r-rr. token_typehasattrrEr)rr@r9ZextrarrrrEs  z TokenList._pp)r )r )r )r. __module__ __qualname__rFsyntactic_breakew_combine_allowedrr*r/propertyrr0r3r4r8r>rDrBrE __classcell__rrrrrus&        rc@s$eZdZeddZeddZdS)WhiteSpaceTokenListcCsdSN rr)rrrrszWhiteSpaceTokenList.valuecCsdd|DS)NcSsg|]}|jdkr|jqS)comment)rFcontentr"rrr r&z0WhiteSpaceTokenList.comments..rr)rrrr8szWhiteSpaceTokenList.commentsN)r.rHrIrLrr8rrrrrNs rNc@seZdZdZdS)UnstructuredTokenList unstructuredNr.rHrIrFrrrrrTsrTc@seZdZdZdS)PhrasephraseNrVrrrrrWsrWc@seZdZdZdS)WordZwordNrVrrrrrYsrYc@seZdZdZdS)CFWSListcfwsNrVrrrrrZsrZc@seZdZdZdS)AtomatomNrVrrrrr\sr\c@seZdZdZdZdS)Tokenr9FN)r.rHrIrFZ encode_as_ewrrrrr^sr^c@seZdZdZdZdZdZdS) EncodedWord encoded-wordN)r.rHrIrFctecharsetlangrrrrr_sr_c@s4eZdZdZeddZeddZeddZdS) QuotedString quoted-stringcCs"|D]}|jdkr|jSqdSNbare-quoted-stringrFrrr$rrrrRs zQuotedString.contentcCs>g}|D]*}|jdkr&|t|q||jqd|S)Nrgr )rFappendrrr()rresr$rrr quoted_values  zQuotedString.quoted_valuecCs"|D]}|jdkr|jSqdSrfrhrr9rrrstripped_values zQuotedString.stripped_valueN)r.rHrIrFrLrRrlrnrrrrrds  rdc@s$eZdZdZddZeddZdS)BareQuotedStringrgcCstddd|DS)Nr css|]}t|VqdSrr!r"rrrr%r&z+BareQuotedString.__str__..)rr(r)rrrr*szBareQuotedString.__str__cCsddd|DS)Nr css|]}t|VqdSrr!r"rrrr%r&z)BareQuotedString.value..r'r)rrrrszBareQuotedString.valueN)r.rHrIrFr*rLrrrrrrosroc@s8eZdZdZddZddZeddZedd Zd S) CommentrQcs(dtdgfddDdgggS)Nr rcsg|]}|qSr)quoter"r)rrrSr&z#Comment.__str__..))r(r1r)rr)rr* szComment.__str__cCs2|jdkrt|St|ddddddS)NrQr rrz\(rrz\))rFrr)rrrrrrqs z Comment.quotecCsddd|DS)Nr css|]}t|VqdSrr!r"rrrr%r&z"Comment.content..r'r)rrrrRszComment.contentcCs|jgSr)rRr)rrrr8szComment.commentsN) r.rHrIrFr*rqrLrRr8rrrrrp s rpc@s4eZdZdZeddZeddZeddZdS) AddressListz address-listcCsdd|DS)NcSsg|]}|jdkr|qS)addressrFr"rrrrS)r&z)AddressList.addresses..rr)rrr addresses'szAddressList.addressescCstdd|DgS)Ncss|]}|jdkr|jVqdSrtNrF mailboxesr"rrrr%-s z(AddressList.mailboxes..r1r)rrrry+s zAddressList.mailboxescCstdd|DgS)Ncss|]}|jdkr|jVqdSrwrF all_mailboxesr"rrrr%2s z,AddressList.all_mailboxes..rzr)rrrr|0s zAddressList.all_mailboxesN)r.rHrIrFrLrvryr|rrrrrs#s  rsc@s4eZdZdZeddZeddZeddZdS) AddressrtcCs|djdkr|djSdS)NrgrouprF display_namer)rrrr:szAddress.display_namecCs4|djdkr|dgS|djdkr*gS|djSNrmailboxinvalid-mailboxrxr)rrrry?s  zAddress.mailboxescCs:|djdkr|dgS|djdkr0|dgS|djSrr{r)rrrr|Gs   zAddress.all_mailboxesN)r.rHrIrFrLrryr|rrrrr}6s  r}c@s(eZdZdZeddZeddZdS) MailboxList mailbox-listcCsdd|DS)NcSsg|]}|jdkr|qS)rrur"rrrrSUr&z)MailboxList.mailboxes..rr)rrrrySszMailboxList.mailboxescCsdd|DS)NcSsg|]}|jdvr|qS))rrrur"rrrrSYs z-MailboxList.all_mailboxes..rr)rrrr|WszMailboxList.all_mailboxesNr.rHrIrFrLryr|rrrrrOs  rc@s(eZdZdZeddZeddZdS) GroupList group-listcCs |r|djdkrgS|djSNrrrxr)rrrryaszGroupList.mailboxescCs |r|djdkrgS|djSrr{r)rrrr|gszGroupList.all_mailboxesNrrrrrr]s  rc@s4eZdZdZeddZeddZeddZdS) Groupr~cCs|djdkrgS|djSNrrxr)rrrryrszGroup.mailboxescCs|djdkrgS|djSrr{r)rrrr|xszGroup.all_mailboxescCs |djSr2)rr)rrrr~szGroup.display_nameN)r.rHrIrFrLryr|rrrrrrns  rc@sLeZdZdZeddZeddZeddZedd Zed d Z d S) NameAddr name-addrcCst|dkrdS|djSNr)lenrr)rrrrs zNameAddr.display_namecCs |djSN local_partr)rrrrszNameAddr.local_partcCs |djSrdomainr)rrrrszNameAddr.domaincCs |djSr)router)rrrrszNameAddr.routecCs |djSr addr_specr)rrrrszNameAddr.addr_specN r.rHrIrFrLrrrrrrrrrrs    rc@s@eZdZdZeddZeddZeddZedd Zd S) AngleAddrz angle-addrcCs"|D]}|jdkr|jSqdSN addr-spec)rFrrirrrrs zAngleAddr.local_partcCs"|D]}|jdkr|jSqdSrrFrrirrrrs zAngleAddr.domaincCs"|D]}|jdkr|jSqdS)N obs-route)rFdomainsrirrrrs zAngleAddr.routecCs<|D]2}|jdkr|jr"|jSt|j|jSqdS)Nrz<>)rFrrrrirrrrs   zAngleAddr.addr_specN) r.rHrIrFrLrrrrrrrrrs   rc@seZdZdZeddZdS)ObsRoutercCsdd|DS)NcSsg|]}|jdkr|jqSrrr"rrrrSr&z$ObsRoute.domains..rr)rrrrszObsRoute.domainsN)r.rHrIrFrLrrrrrrsrc@sLeZdZdZeddZeddZeddZedd Zed d Z d S) MailboxrcCs|djdkr|djSdSNrrrr)rrrrszMailbox.display_namecCs |djSr2rr)rrrrszMailbox.local_partcCs |djSr2rr)rrrrszMailbox.domaincCs|djdkr|djSdSr)rFrr)rrrrsz Mailbox.routecCs |djSr2rr)rrrrszMailbox.addr_specNrrrrrrs    rc@s,eZdZdZeddZeZZZZ dS)InvalidMailboxrcCsdSrrr)rrrrszInvalidMailbox.display_nameNrrrrrrs rcs(eZdZdZdZefddZZS)DomainrFcsdtjSNr r(rrsplitr)rrrrsz Domain.domain)r.rHrIrFr4rLrrMrrrrrsrc@seZdZdZdS)DotAtomdot-atomNrVrrrrrsrc@seZdZdZdZdS) DotAtomTextz dot-atom-textTNr.rHrIrFr4rrrrrsrc@seZdZdZdZdS) NoFoldLiteralzno-fold-literalFNrrrrrrsrc@sDeZdZdZdZeddZeddZeddZed d Z d S) AddrSpecrFcCs |djSr2rr)rrrr szAddrSpec.local_partcCst|dkrdS|djS)Nr)rrr)rrrrs zAddrSpec.domaincCs<t|dkr|djS|dj|dj|djS)Nrrrr)rrrstriplstripr)rrrrs  zAddrSpec.valuecCsLt|j}t|t|tkr*t|j}n|j}|jdurH|d|jS|S)N@)setrr DOT_ATOM_ENDSrr)rZnamesetZlprrrrs   zAddrSpec.addr_specN) r.rHrIrFr4rLrrrrrrrrrs   rc@seZdZdZdZdS) ObsLocalPartzobs-local-partFNrrrrrr(srcs4eZdZdZdZeddZefddZZS) DisplayNamez display-nameFcCst|}t|dkr|jS|djdkr4|dn*|ddjdkr^t|ddd|d<|djdkrv|n*|ddjdkrt|ddd|d<|jS)Nrr[rr)rrrrFpop)rrkrrrr3s   zDisplayName.display_namecsd}|jrd}n|D]}|jdkrd}qt|dkr|rd}}|djdks`|ddjdkrdd}|djdks|ddjdkrd}|t|j|StjSdS) NFTrerr r[rPr)rrFrrrrr)rrqr$ZpreZpostrrrrDs   zDisplayName.value) r.rHrIrFrKrLrrrMrrrrr.s  rc@s,eZdZdZdZeddZeddZdS) LocalPartz local-partFcCs&|djdkr|djS|djSdS)Nrre)rFrlrr)rrrr]s zLocalPart.valuecCstg}t}d}|dtgD]}|jdkr,q|r\|jdkr\|djdkr\t|dd|d<t|t}|r|jdkr|djdkr|t|ddn |||d}|}qt|dd}|jS)NFrr[dotrr)DOTrFr isinstancerjr)rrkZlastZ last_is_tltokZis_tlrrrrds(     zLocalPart.local_partN)r.rHrIrFr4rLrrrrrrrXs  rcs4eZdZdZdZefddZeddZZS) DomainLiteralzdomain-literalFcsdtjSrrr)rrrrszDomainLiteral.domaincCs"|D]}|jdkr|jSqdS)Nptextrhrirrrips zDomainLiteral.ip) r.rHrIrFr4rLrrrMrrrrr|s rc@seZdZdZdZdZdS) MIMEVersionz mime-versionN)r.rHrIrFmajorminorrrrrrsrc@s4eZdZdZdZdZdZeddZeddZ dS) Parameter parameterFus-asciicCs|jr|djSdSr) sectionednumberr)rrrsection_numberszParameter.section_numbercCsf|D]\}|jdkr|jS|jdkr|D]4}|jdkr*|D] }|jdkr<|jSqsrc@seZdZdZdZdZdS)ContentTransferEncodingzcontent-transfer-encodingFZ7bitN)r.rHrIrFr4rarrrrrDsrc@seZdZdZdZdS) HeaderLabelz header-labelFNrrrrrrJsrc@seZdZdZdZddZdS)MsgIDzmsg-idFcCst||jSr)rlinesepr=rrrr>Ssz MsgID.foldN)r.rHrIrFr4r>rrrrrOsrc@seZdZdZdS) MessageIDz message-idNrVrrrrrXsrc@seZdZdZdS)InvalidMessageIDzinvalid-message-idNrVrrrrr\src@seZdZdZdS)HeaderheaderNrVrrrrr`srcsreZdZdZdZdZfddZfddZddZe dd Z dfd d Z d dZ e ddZ ddZZS)TerminalTcst||}||_g|_|Sr)r__new__rFr)clsrrFrrrrrnszTerminal.__new__csd|jjtSr+r,r)rrrr/tszTerminal.__repr__cCst|jjd|jdS)N/)rArr.rFr)rrrrDwszTerminal.pprintcCs t|jSr)listrr)rrrr0zszTerminal.all_defectsr c s2d||jj|jt|js"dn d|jgS)Nz {}{}/{}({}){}r z {})r-rr.rFrr/rrCrrrrE~sz Terminal._ppcCsdSrrr)rrrpop_trailing_wsszTerminal.pop_trailing_wscCsgSrrr)rrrr8szTerminal.commentscCst||jfSr)rrFr)rrr__getnewargs__szTerminal.__getnewargs__)r )r.rHrIr4rKrJrr/rDrLr0rErr8rrMrrrrrhs     rc@s eZdZeddZddZdS)WhiteSpaceTerminalcCsdSrOrr)rrrrszWhiteSpaceTerminal.valuecCsdS)NTrr)rrrr3sz!WhiteSpaceTerminal.startswith_fwsNr.rHrIrLrr3rrrrrs rc@s eZdZeddZddZdS) ValueTerminalcCs|Srrr)rrrrszValueTerminal.valuecCsdS)NFrr)rrrr3szValueTerminal.startswith_fwsNrrrrrrs rc@s eZdZeddZddZdS)EWWhiteSpaceTerminalcCsdSrrr)rrrrszEWWhiteSpaceTerminal.valuecCsdSrrr)rrrr*szEWWhiteSpaceTerminal.__str__N)r.rHrIrLrr*rrrrrs rc@s eZdZdS)_InvalidEwErrorN)r.rHrIrrrrrsrr,list-separatorrzroute-component-markerz([{}]+)r z[^{}]+z[\x00-\x20\x7F]cCs>t|}|r|jt|t|r:|jtddS)Nz*Non-ASCII characters found in header token)_non_printable_finderrrjrZNonPrintableDefectrrr)xtextZnon_printablesrrr_validate_xtexts  r cCst|d^}}g}d}d}tt|D]L}||dkrJ|rDd}d}nd}q&|rTd}n|||vrdq||||q&|d}d|d||dg||fS)NrFr Tr ) _wsp_splitterrangerrjr()rendcharsZfragment remainderZvcharsescapehad_qpposrrr_get_ptext_to_endcharss$   rcCs.|}t|dt|t|d}||fS)Nfws)rrr)rZnewvaluerrrrget_fwssrc Cst}|ds td||dddd^}}||ddkrXtd|d|}t|dkr|dtvr|dtvr| ddkr|dd^}}|d|}t|dkr|j t d ||_ d|}ztd|d\}}}} Wn(ttfy(td |j Yn0||_||_|j | |r|dtvrpt|\} }| | qBt|d^} }t| d } t| | | d|}qB|r|dtvr|j t d ||fS) N=?z"expected encoded word but found {}rz?=rr r?zwhitespace inside encoded wordz!encoded word format invalid: '{}'vtextz.missing trailing whitespace after encoded-word)r_ startswithrHeaderParseErrorr-rr(rrcountrrjrra_ewr ValueErrorKeyErrorrrbrcr7WSPrr rr ) rZewrrZremstrrestrrbrcrr9charsrrrrget_encoded_wordsd                r#cCsBt}|r>|dtvr0t|\}}||qd}|drzt|\}}Wn(tydd}YntjyvYnr0d}t |dkr|dj dkr|j t dd}|rt |dkr|d j d krt |dd|d<||qt|d^}}|rt|r|d^}}t|d }t|||d |}q|S) NrTrFrrz&missing whitespace before encoded wordrr`rr )rTr rrjrr#rrrrrFrrrr rfc2047_matchersearch partitionrr r()rrUr9valid_ewZhave_wsrrrrrrget_unstructuredAsH           r)cCs*t|d\}}}t|d}t|||fS)Nz()r)rrr rr_rrr get_qp_ctexts  r,cCs*t|d\}}}t|d}t|||fS)Nr r)rrr r*rrr get_qcontents  r-cCsNt|}|std||}|t|d}t|d}t|||fS)Nzexpected atext but found '{}'atext)_non_atom_end_matcherrrr-r~rrr )rmr.rrr get_atexts r1cCsp|ddkrtd|t}|dd}|rT|ddkrTt|\}}|||r@|ddkr@|dtvrt|\}}n|dddkr(d}z&t|\}}|j t dd }Wn tjyt|\}}Yn0|r4t |dkr4|d j d kr4|d j d kr4t |d d |d <n t|\}}||qT|s`|j t d||fS||ddfS)Nrr zexpected '"' but found '{}'rrrFz!encoded word inside quoted stringTrrr$r`z"end of header inside quoted string)rrr-ror-rjr rr#rrrrFr)rZbare_quoted_stringr9r(rrrget_bare_quoted_stringsJ            r2cCs|r |ddkr td|t}|dd}|r|ddkr|dtvr\t|\}}n&|ddkrvt|\}}n t|\}}||q2|s|j t d||fS||ddfS)Nrrzexpected '(' but found '{}'rrrzend of header inside comment) rrr-rpr r get_commentr,rjrr)rrQr9rrrr3s&      r3cCsPt}|rH|dtvrH|dtvr0t|\}}n t|\}}||q||fSr2)rZ CFWS_LEADERr rr3rj)rr[r9rrrget_cfwss   r5cCspt}|r,|dtvr,t|\}}||t|\}}|||rh|dtvrht|\}}||||fSr2)rdr4r5rjr2)rZ quoted_stringr9rrrget_quoted_strings      r6cCst}|r,|dtvr,t|\}}|||rL|dtvrLtd||drzt |\}}Wqtjyt |\}}Yq0n t |\}}|||r|dtvrt|\}}||||fS)Nrzexpected atom but found '{}'r) r\r4r5rj ATOM_ENDSrrr-rr#r1)rr]r9rrrget_atoms&       r8cCst}|r|dtvr&td||rt|dtvrtt|\}}|||r&|ddkr&|t|dd}q&|dturtdd|||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'rrrz4expected atom at end of dot-atom-text but found '{}')rr7rrr-r1rjr)rZ dot_atom_textr9rrrget_dot_atom_text2s     r9cCst}|dtvr(t|\}}|||drfzt|\}}Wqrtjybt|\}}Yqr0n t|\}}|||r|dtvrt|\}}||||fS)Nrr) rr4r5rjrr#rrr9)rZdot_atomr9rrr get_dot_atomEs        r:cCs|dtvrt|\}}nd}|s,td|ddkrFt|\}}n*|dtvrdtd|n t|\}}|dur|g|dd<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.r z1Expected 'atom' or 'quoted-string' but found '{}')r4r5rrr6SPECIALSr-r8)rleaderr9rrrget_word^s"    r=cCst}zt|\}}||Wn&tjyF|jtdYn0|r|dtvr|ddkr|t|jt d|dd}qHzt|\}}WnBtjy|dt vrt |\}}|jt dnYn0||qH||fS)Nzphrase does not start with wordrrzperiod in 'phrase'rzcomment found without atom) rWr=rjrrrr PHRASE_ENDSrObsoleteHeaderDefectr4r5)rrXr9rrr get_phrases4           r@c Cspt}d}|dtvr"t|\}}|s6td|zt|\}}WnZtjyzt|\}}Wn4tjy|ddkr|dtvrt }Yn0Yn0|dur|g|dd<| ||r0|ddks|dtvr0t t ||\}}|j dkr|j tdn|j td||d<z|jdWn&tyf|j tdYn0||fS) Nrz"expected local-part but found '{}'r invalid-obs-local-partzrrjget_obs_local_partrrFrrr?rencoderZNonASCIILocalPartDefect)rrr<r9obs_local_partrrrget_local_partsJ         rFcCst}d}|r&|ddks*|dtvr&|ddkrj|rL|jtd|td}|dd}q nD|ddkr|t|dd|dd}|jtd d}q |r|d jd kr|jtd zt |\}}d}Wn2tj y|dt vrt |\}}Yn0||q |djd ksV|djd krh|djd krh|jtd|d jd ks|d jd kr|djd kr|jtd|jrd|_||fS)NFrr rzinvalid repeated '.'Trmisplaced-specialz/'\' character outside of quoted-string/ccontentrrzmissing '.' between wordsr[z!Invalid leading '.' in local partr$z"Invalid trailing '.' in local partrA) rr>rrjrrrrrFr=rr4r5)rrEZlast_non_ws_was_dotr9rrrrCsj                  rCcCs@t|d\}}}t|d}|r0|jtdt|||fS)Nz[]rz(quoted printable found in domain-literal)rrrrjrr?r )rrrrrr get_dtexts   rHcCs,|rdS|td|tdddS)NFz"end of input inside domain-literal]domain-literal-endT)rjrrr)rdomain_literalrrr_check_for_early_dl_endsrLcCsjt}|dtvr(t|\}}|||s6td|ddkrRtd||dd}t||rp||fS|tdd|dt vrt |\}}||t |\}}||t||r||fS|dt vrt |\}}||t||r||fS|ddkrtd||tdd |dd}|rb|dtvrbt|\}}||||fS) Nrzexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'rzdomain-literal-startrIz4expected ']' at end of domain-literal but found '{}'rJ) rr4r5rjrrr-rLrr rrH)rrKr9rrrget_domain_literalsH                    rNcCspt}d}|dtvr"t|\}}|s6td||ddkrvt|\}}|durd|g|dd<||||fSzt|\}}Wn tjyt |\}}Yn0|r|ddkrtd|dur|g|dd<|||rh|ddkrh|j t d|dj dkr(|d|dd<|rh|ddkrh|t t |d d\}}||q(||fS) Nrzexpected domain but found '{}'rMrzInvalid Domainrz(domain is not a dot-atom (contains CFWS)rr)rr4r5rrr-rNrjr:r8rr?rFr)rrr<r9rrr get_domain?sD         rOcCs|t}t|\}}|||r,|ddkrF|jtd||fS|tddt|dd\}}||||fS)Nrrz#addr-spec local part with no domainaddress-at-symbolr)rrFrjrrrrrO)rrr9rrr get_addr_speces    rQcCst}|rj|ddks"|dtvrj|dtvrFt|\}}||q|ddkr|t|dd}q|rz|ddkrtd||tt |dd\}}|||r>|ddkr>|t|dd}|sq>|dtvrt|\}}|||ddkr|tt |dd\}}||q|sNtd|ddkrltd||t dd ||ddfS) Nrrrrz(expected obs-route domain but found '{}'z%end of header while parsing obs-route:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker) rr4r5rj ListSeparatorrrr-RouteComponentMarkerrOr)rZ obs_router9rrr get_obs_routeusF               rUc Cst}|dtvr(t|\}}|||r8|ddkrHtd||tdd|dd}|ddkr|tdd|jt d|dd}||fSzt |\}}Wnvtjy,z"t |\}}|jt d Wn&tjytd |Yn0||t |\}}Yn0|||rZ|ddkrZ|dd}n|jt d |tdd|r|dtvrt|\}}||||fS) Nrzangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr) rr4r5rjrrr-rrrrQrUr?)rZ angle_addrr9rrrget_angle_addrsT                rXcCs<t}t|\}}||dd|jdd|_||fSr)rr@r7r)rrr9rrrget_display_names  rYcCst}d}|dtvr6t|\}}|s6td||ddkr|dtvr^td|t|\}}|s~td||dur|g|ddd<d}||t |\}}|dur|g|dd<||||fS)Nrz!expected name-addr but found '{}'rV) rr4r5rrr-r>rYrjrX)rZ name_addrr<r9rrr get_name_addrs6        rZc Cst}zt|\}}WnJtjy`zt|\}}Wn$tjyZtd|Yn0Yn0tdd|jDr|d|_| |||fS)Nzexpected mailbox but found '{}'css|]}t|tjVqdSr)rrrr"rrrr%szget_mailbox..r) rrZrrrQr-anyr0rFrj)rrr9rrr get_mailboxs  r\cCsdt}|r\|d|vr\|dtvrD|t|dd|dd}qt|\}}||q||fS)NrrGr)rr>rjrr@)rrZinvalid_mailboxr9rrrget_invalid_mailboxs    r]cCst}|r|ddkrzt|\}}||Wntjy:d}|dtvrt|\}}|rt|ddvr|||jtdn@t |d\}}|dur|g|dd<|||jt dnb|ddkr|jtdnBt |d\}}|dur|g|dd<|||jt dYn0|r|ddvr|d}d|_ t |d\}}| ||jt d|r|ddkr|t |d d}q||fS) Nr;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listrrrr)rr\rjrrr4r5rr?r]rrFr7rS)rZ mailbox_listr9r<rrrrget_mailbox_list sX                 r_cCst}|s$|jtd||fSd}|r|dtvrt|\}}|sl|jtd||||fS|ddkr||||fSt|\}}t|j dkr|dur||| ||jt d||fS|dur|g|dd<||||fS)Nzend of header before group-listrzend of header in group-listr^zgroup-list with empty entries) rrrjrrr4r5r_rr|r7r?)rZ group_listr<r9rrrget_group_listYs>           r`cCs t}t|\}}|r"|ddkr2td||||tdd|dd}|r|ddkr|tdd||ddfSt|\}}|||s|jt dn|ddkrtd ||tdd|dd}|r|dt vrt |\}}||||fS) NrrRz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrr^zgroup-terminatorzend of header in groupz)expected ';' at end of group but found {}) rrYrrr-rjrr`rrr4r5)rr~r9rrr get_group~s8          rac Cstt}zt|\}}WnJtjy`zt|\}}Wn$tjyZtd|Yn0Yn0||||fS)Nzexpected address but found '{}')r}rarrr\r-rj)rrtr9rrr get_addresss rbc Cst}|rzt|\}}||Wn$tjyL}zd}|dtvrt|\}}|rj|ddkr|||jtdnFt |d\}}|dur|g|dd<|t |g|jt dnh|ddkr|jtdnHt |d\}}|dur|g|dd<|t |g|jt dWYd}~n d}~00|r|ddkr|dd}d|_ t |d\}}| ||jt d|r|tdd|d d}q||fS) Nrrz"address-list entry with no contentzinvalid address in address-listzempty element in address-listrrr r)rsrbrjrrr4r5rr?r]r}rrFr7r)rZ address_listr9errr<rrrrget_address_listsX              rdcCst}|std||ddkr6td||tdd|dd}t|\}}|||rx|ddkrtd||tdd ||ddfS) Nz'expected no-fold-literal but found '{}'rrMz;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startrrIz9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)rrrr-rjrrH)rZno_fold_literalr9rrrget_no_fold_literals.    recCst}|r,|dtvr,t|\}}|||r<|ddkrLtd||tdd|dd}zt|\}}Wn\tjyz"t |\}}|j t dWn$tjytd|Yn0Yn0|||r|ddkr<|j t d |r4|dd kr4|td d |dd}||fS|tdd |dd}zt|\}}Wntjyzt |\}}Wnrtjy}zVz"t|\}}|j t d Wn&tjytd|Yn0WYd}~n d}~00Yn0|||r0|dd kr0|dd}n|j t d|td d |r||dtvr|t|\}}||||fS)NrrVzexpected msg-id but found '{}'z msg-id-startrzobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'rzmsg-id with no id-rightrWz msg-id-endrPzobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)rr4r5rjrrr-rr9rCrr?rrerO)rZmsg_idr9errr get_msg_ids~             &    rgc Cst}zt|\}}||WnNtjyn}z4t|}t|}|jtd |WYd}~n&d}~00|r|jtd ||S)NzInvalid msg-id: {!r}zUnexpected {!r}) rrgrjrrr)rrrr-)rZ message_idr9Zexrrrparse_message_idKs  rhcCst}|s |jtd|S|dtvrXt|\}}|||sX|jtdd}|r|ddkr|dtvr||d7}|dd}q\|s|jtd ||t |dnt ||_ |t |d |r|dtvrt|\}}|||r|ddkrT|j dur:|jtd |rP|t |d|S|t dd |dd}|r|dtvrt|\}}|||s|j dur|jtd |Sd}|r|dtvr||d7}|dd}q|s*|jtd ||t |dnt ||_ |t |d |rn|dtvrnt|\}}|||r|jtd |t |d|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr rrz1Expected MIME major version number but found {!r}r digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rrrjrHeaderMissingRequiredValuer4r5isdigitrr-rintrr)rZ mime_versionr9rirrrparse_mime_versiongs                        rmcCsdt}|r\|ddkr\|dtvrD|t|dd|dd}qt|\}}||q||fS)Nrr^rGr)rr>rjrr@)rZinvalid_parameterr9rrrget_invalid_parameters    rncCsNt|}|std||}|t|d}t|d}t|||fS)Nzexpected ttext but found '{}'ttext)_non_token_end_matcherrrr-r~rrr )rr0rorrr get_ttexts  rqcCst}|r,|dtvr,t|\}}|||rL|dtvrLtd|t|\}}|||r|dtvrt|\}}||||fSNrzexpected token but found '{}') r^r4r5rj TOKEN_ENDSrrr-rq)rZmtokenr9rrr get_tokens       rtcCsNt|}|std||}|t|d}t|d}t|||fS)Nz expected attrtext but found {!r}r)_non_attribute_end_matcherrrr-r~rrr rr0rrrr get_attrtexts  rwcCst}|r,|dtvr,t|\}}|||rL|dtvrLtd|t|\}}|||r|dtvrt|\}}||||fSrr) rr4r5rjATTRIBUTE_ENDSrrr-rwrrr9rrr get_attributes       rzcCsNt|}|std||}|t|d}t|d}t|||fS)Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherrrr-r~rrr rvrrrget_extended_attrtext s r}cCst}|r,|dtvr,t|\}}|||rL|dtvrLtd|t|\}}|||r|dtvrt|\}}||||fSrr) rr4r5rjEXTENDED_ATTRIBUTE_ENDSrrr-r}ryrrrget_extended_attribute# s      rcCst}|r|ddkr&td||tdd|dd}|rR|dsbtd|d}|r|dr||d7}|dd}qf|ddkr|dkr|jtd t ||_ |t|d ||fS) Nr*zExpected section but found {}zsection-markerrz$Expected section number but found {}r 0z'section number has an invalid leading 0ri) rrrr-rjrrkrZInvalidHeaderErrorrlr)rrrirrr get_section9 s,     rcCst}|stdd}|dtvr0t|\}}|sDtd||ddkr^t|\}}n t|\}}|dur|g|dd<||||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r ) rrrr4r5r-r6rrj)rvr<r9rrr get_valueW s"      rc Cst}t|\}}|||r,|ddkrL|jtd|||fS|ddkrz t|\}}d|_||Wntj yYn0|st d|ddkr|t dd|dd}d|_ |dd krt d |t d d |dd}d}|r*|dt vr*t |\}}||d}|}|j rD|rD|dd krDt|\}}|j}d }|jdkr|r|ddkrd}n$t|\}} | r| ddkrd}n(zt|\}} Wn Yn 0| sd}|r.|jtd|||D](} | jdkrg| dd<| }q(q|}nd}|jtd|r^|ddkr^d}n t|\}}|j r~|jdkr|r|ddkr|||dur|}||fS|jtd|s|jtd|||dur||fSn|dur>|D]} | jdkrq"q| jdk|| | j|_|ddkr\t d||t dd|dd}|r|ddkrt|\}}|||j|_|r|ddkrt d||t dd|dd}|durbt} |r\|dtvrt|\}}n2|dd krBt d d}|dd}n t|\}}| |q| }n t|\}}|||dur|}||fS)Nrr^z)Parameter contains name ({}) but no valuerTzIncomplete parameterzextended-parameter-markerr=zParameter not followed by '='parameter-separatorr F'z5Quoted string value for extended parameter is invalidrgzZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimitersr{rz=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)rrzrjrrrr-rrrrrr4r5r6rnrrwr}rFrrrbrcrr rr-) rrr9r<rZappendtoZqstringZ inner_valueZ semi_validr!trrrr get_parameterm s                                             rc Cspt}|rlzt|\}}||Wntjy}zd}|dtvrTt|\}}|sr|||WYd}~S|ddkr|dur|||jtdn@t |\}}|r|g|dd<|||jtd |WYd}~n d}~00|rJ|ddkrJ|d}d|_ t |\}}| ||jtd ||r|t dd|d d}q|S) Nrr^zparameter entry with no contentzinvalid parameter {!r}rrz)parameter with invalid trailing text {!r}rr)rrrjrrr4r5rrrnr-rFr7r)rZmime_parametersr9rcr<rrrrparse_mime_parameters sJ              rcCs|rV|ddkrV|dtvr>|t|dd|dd}qt|\}}||q|s^dS|tdd|t|dddS)Nrr^rGrr)r>rjrr@r)Z tokenlistrr9rrr_find_mime_parameters/ s   rc Cst}d}|s$|jtd|Szt|\}}Wn:tjyn|jtd|t |||YS0|||r|ddkr|jtd|rt |||S|j |_ |tdd|dd}zt|\}}Wn<tjy&|jtd |t |||YS0|||j |_|sL|S|dd kr|jtd ||` |`t |||S|td d |t|dd|S) NFz"Missing content type specificationz(Expected content maintype but found {!r}rrzInvalid content typezcontent-type-separatorrz'Expected content subtype but found {!r}r^zrr@)rZ cte_headerr9rrr&parse_content_transfer_encoding_header s4        rcCsDd}|r@|dr@|ddtvr@|dd}|ddd|d<|S)Nr r)r )linesZwsprrr_steal_trailing_WSP_if_exists s  rcCs|jp tj}|jrdnd}dg}d}d}d}tdd}t|} | r| d} | |ur`|d8}q>t| } |s| jdkrt |  }n t |  }z| ||} Wn4t ytd d | jDrd } nd} d }Yn0| jd krt| |||q>|r|s| js|d}d}| jr|| j|ddt|j } |j| vr|t| |t|dkrjt|}|||d| 7<q>t| dst| | } nt| |||| j| }d}q>t| |t|dkr|d| 7<q>| jr"t| d|kr"t|}|s| r"||| d}q>t| dsZt| }| jsP|d7}|||| } q>| jrz|sz| d| d }q>t|}|s| r||| q>|d| 7<q>|j||jS)Nutf-8rr rFwrap_as_ew_blockedrrcss|]}t|tjVqdSr)rrrr"rrrr% sz%_refold_parse_tree.. unknown-8bitTrr:rrD)Zmax_line_lengthsysmaxsizeutf8rrrrrF SPECIALSNL isdisjointNLSETrDrr[r0_fold_mime_parametersr4rJr>rrrrjrG _fold_as_ewrKr3insertr()Z parse_treer;maxlenrrlast_ewrZ want_encodingZend_ew_not_allowedrr5tstrrbZ encoded_partnewlineZnewpartsrrrr< s                 r<cCs|dur<|rZ TSPECIALSrsZ ASPECIALSrxr~rrrcompileVERBOSE MULTILINEr%rrrNrTrWrYrZr\r^r_rdrorprsr}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrSrTr-r(rr rmatchr/findallr rprur|r rrr#r)r,r-r1r2r3r5r6r8r9r:r=r@rFrCrHrLrNrOrQrUrXrYrZr\r]r_r`rarbrdrergrhrmrnrqrtrwrzr}rrrrrrrrrrr<rrrrrrFs0           C  "   !*$ V +         1C+ "&'/'&).9%7ED49/kA