NfcdZgdZdZdZdZdZ ddlmZmZn#e $rdZdZYnwxYwd Z d Z dd Z dd Z ddZddZdZdZdZedkr edSdS)zHConversions to/from quoted-printable transport encoding as per RFC 1521.)encodedecode encodestring decodestring=Ls0123456789ABCDEF)a2b_qpb2a_qpNct|tsJ|dvr|S|dkr|S|tkpd|cxkodknc S)zDecide whether a particular byte ordinal needs to be quoted. The 'quotetabs' flag indicates whether embedded tabs and spaces should be quoted. Note that line-ending tabs and spaces are always encoded, as per RFC 1521.  _ ~) isinstancebytesESCAPE)c quotetabsheaders /usr/lib/python3.11/quopri.py needsquotingrse a  F{{Dyy ; 1tq0000D000011rct|trt|dksJt|}ttt |dzt |dzfzS)zQuote a single character.)rrlenordrHEXrs rquoter $sW a  -CFFAIIII AA E3q"u:s1R4y122 22rFct=|}t|||}||dS|dfd}d} |}|sng} d} |dddkr |dd}d} |D]e} t | f} t | ||rt | } |r| dkr| d P| | f| ||t | } t| tkrG|| dtdz d | tdz d} t| tkG| }(|||| dSdS) avRead 'input', apply quoted-printable encoding, and write to 'output'. 'input' and 'output' are binary file objects. The 'quotetabs' flag indicates whether embedded tabs and spaces should be quoted. Note that line-ending tabs and spaces are always encoded, as per RFC 1521. The 'header' flag indicates whether we are encoding spaces as _ as per RFC 1522.Nrr c |rF|dddvr:||ddt|ddz|zdS|dkr'|t||zdS|||zdS)Nr .)writer )soutputlineEnds rr'zencode..write;s  &2336!! LL3B3%"##--/'9 : : : : : $YY LLqG+ , , , , , LLW % % % % %rrrr%rrs= )r*) r readr'readlinerrr append EMPTYSTRINGjoinr MAXLINESIZE) inputr)rrdataodatar'prevlinelineoutlinestrippedrthislines rrr,szz||ty@@@ U&&&&H~~   9  9DH " "Aqd AAy&11 !HH "!t))t$$$$q!!!!   E(OOO##G,,(mmk)) E(>KM>*F ; ; ; ; A /H (mmk)) ?B h))))))rctt|||Sddlm}||}|}t|||||S)Nr"r BytesIO)r ior;rgetvalue)r(rrr;infpoutfps rrrjsk a9V<<<< 71::D GIIE 4 6*** >>  rc t<|}t||}||dSd} |}|sndt |}}|dkrH||dz |dkr7d} |dz }|dkr)||dz |dvr|dz }|dkr||dz |dvnd} ||kr|||dz} | dkr |r |d z}|dz}n| t kr || z}|dz}n|dz|kr| sd} n|dz|kr)||dz|d zt kr|t z}|d z}n|d z|krnt ||dz|d zrQt ||d z|d zr4|tt||dz|d zfz}|d z}n || z}|dz}||k| s||dzd}|r||dSdS) zRead 'input', apply quoted-printable decoding, and write to 'output'. 'input' and 'output' are binary file objects. If 'header' is true, decode underscore as space (per RFC 1522).Nrrrr r#s rr) r r+r'r,rrishexrunhex) r1r)rr2r3newr5inpartialrs rrrus zz||tF+++ U C~~U#d))1 q55T!A#a%[E))GQqSa%%D1QK833aCa%%D1QK833G!eeQqsU ADyyVyDjac!!fAg1Q3qq1'U1qT!A#ac']f44Fl!AA1qU4!AaC=11eD1QqSM6J6JE5ac!A#g#7#7"9:::!AAAg1Q3q!ee  LLu % % %C78  Srctt||Sddlm}||}|}t||||S)NrAr r:)r r<r;rr=)r(rr;r>r?s rrrsj a'''' 71::D GIIE 4v&&&& >>  rct|tsJd|cxkodkncpd|cxkodkncpd|cxkodkncS)zDReturn true if the byte ordinal 'c' is a hexadecimal digit in ASCII.09afAF)rrrs rrDrDs| a   1         F 1 1 1 1T 1 1 1 1 FTQ5F5F5F5F$5F5F5F5FFrcdd}|D]}t|f}d|cxkrdkrnntd}n`d|cxkrdkrnntddz }n=d |cxkrd krnntd dz }nJd t|z|d zt||z z}|S)z.Get the integer value of a hexadecimal number.r rLrM0rNrOa rPrQFznon-hex digit r)rrrepr)r(bitsrrGs rrErEs D  & & 1$KK 1         CAA Q    $     C AA Q    $     D " AA 2*4772 2 2 2Bw#a&&1*% Krcddl}ddl} ||jddd\}}nt#|j$rg}|j|_t |t dt dt d|dYd}~nd}~wwxYwd}d}|D]\}}|d krd }|d krd }|r2|r0|j|_t d |d|sd g}d} |D]} | d kr |jj } nK t| d} n9#t$r,}|j | d|dd} Yd}~Xd}~wwxYw |rt| |jj nt| |jj || d kr| #| d kr| wwxYw| r|| dSdS)Nr rtdz"usage: quopri [-t | -d] [file] ...z-t: quote tabsz-d: decode; default encoderBFz-tTz-dz -t and -d are mutually exclusive-rbz: can't open (z) )sysgetoptargverrorstderrstdoutprintexitstdinbufferopenOSErrorr'rrclose) r\r]optsargsmsgdecotabsorTstsfilefps rmainrrs_JJJMMM]]38ABB<66 dd <Z  c  2333  *+++   D D""1 99Td 99Td Z  0111   C 3;;!BB $%%      DDD###!FGGG   4r3:,----r3:,d333s{{ s{{    s9&1 B"ABB"D%% E/"EE8F22G__main__)F)FF)__doc____all__rr0rr.binasciir r ImportErrorrr rrrrrDrErr__name__rrrzs=ON ? > >   ''''''''' F FFF 2 2 2333<*<*<*<*|))))VGGG $***\ zDFFFFFs  %%