ó
    Ö›‘h¢†  ã                   óþ  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKJrJrJrJr  SSKJrJrJr  SSKJrJrJrJr  SSKJrJrJrJr  SSKJr  SSK J!r!J"r"J#r#  SS	K$J%r%   " S
 S\RL                  5      r'S r(S r)S r*S r+S r, " S S5      r- " S S\R\                  5      r/\0" \/S\/Rb                  5         " S S\Rd                  5      r2 " S S\Rf                  5      r4\5S:X  a  \(" 5         gg)z0
Implementation module for the I{cftp} command.
é    N)ÚListÚOptionalÚTextIOÚUnion)ÚconnectÚdefaultÚoptions)ÚchannelÚcommonÚ
connectionÚfiletransfer)ÚdeferÚreactorÚstdioÚutils)Úbasic)ÚfailureÚlogÚusage)ÚFilePathc                   óÎ   • \ rS rSr% SrSr/ SQ/ SQ/ SQ/ SQ/r\\\\	\
\4            \S'   \R                  " S	S
0\R                  " 5       \R                   " SS9/S9rSS jrSrg)ÚClientOptionsé   zˆUsage:   cftp [options] [user@]host
         cftp [options] [user@]host[:dir[/]]
         cftp [options] [user@]host[:file [localfile]]
zncftp is a client for logging into a remote machine and executing commands to send and receive file information)Ú
buffersizeÚBi €  z0Size of the buffer to use for sending/receiving.)Ú	batchfileÚbNz-File to read commands from, or '-' for stdin.)ÚrequestsÚRé   z6Number of requests to make before waiting for a reply.)Ú	subsystemÚsÚsftpz'Subsystem/server program to connect to.ÚoptParametersr   z,Size of send/receive buffer (default: 32768)z
local file)Údescr)ÚdescriptionsÚextraActionsNc                 ó€   • SU S'   SU;   a+  UR                  SS5      u  oS'   U S   R                  S5        XS'   X S'   g )NÚ Ú
remotePathÚ:é   Ú/ÚhostÚ	localPath)ÚsplitÚrstrip)Úselfr.   r/   s      Ú^C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/conch/scripts/cftp.pyÚ	parseArgsÚClientOptions.parseArgs5   sM   € Øˆˆ\ÑØ�$‹;Ø'+§z¡z°#°qÓ'9Ñ$ˆD�|Ñ$Ø�Ñ×%Ñ% cÔ*ØˆV‰Ø%ˆ[Òó    © ©N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚsynopsisÚlongdescr$   r   r   r   ÚstrÚintÚ__annotations__r   ÚCompletionsÚCompleteUserAtHostÚCompleteFilesÚcompDatar4   Ú__static_attributes__r7   r6   r3   r   r      s‡   ‡ ð€Hð
	Bð ò 	WÚQÚVÚMð	<€M�4˜˜X e¨C°¨H¡oÑ6Ñ7Ñ8ó ð × Ò Ø"Ð$RÐSà×$Ò$Ó&Ø×Ò lÑ3ð
ñ€H÷&r6   r   c                  óB  • [         R                  SS  n SU ;   a%  U R                  S5      nXUS-    U -   n XS-   US-   2	 [        5       n UR                  " U 5        US   (       a@  [         R                  n[        R                  " [         R                  5        U[         l	        O[        R                  " 5         [        U5        [        R                   " 5         g ! [
        R                   a.  n[        SU-  5        [         R                  " S5         S nAN½S nAff = f)Nr,   z-lé   é   z	ERROR: %sr   )ÚsysÚargvÚindexr   ÚparseOptionsr   Ú
UsageErrorÚprintÚexitÚstdoutr   ÚstartLoggingÚstderrÚdiscardLogsÚ	doConnectr   Úrun)ÚargsÚir	   ÚuÚrealouts        r3   rV   rV   >   sÛ   € Ü�8‰8�A�Bˆ<€DØˆtƒ|Ø�J‰J�tÓˆØ˜˜A™ˆ Ñ%ˆØ�Q‘˜˜Q™�ÐÜ‹o€GðØ×Ò˜TÔ"ð ˆu‡~Ü—*‘*ˆÜ×ÒœŸ™Ô$ØŒ�
ä�ŠÔÜˆgÔÜ‡K‚K…Møô ×Ñó Üˆk˜A‰oÔÜ�Š��‰ûðús   Á
C ÃDÃ0$DÄDc                  ó¦   • Sq  [        R                  " 5         [        R
                  " [        R                  " 5       5        e ! [         a     N6f = f)NrH   )Ú
exitStatusr   ÚstopÚBaseExceptionr   Úerrr   ÚFailurer7   r6   r3   ÚhandleErrorra   T   sA   € à€JðÜ�ŠŒô ‡G‚GŒG�OŠOÓÔØ	øô ó Ùðús   „A Á
AÁAc                 óÀ  • SU S   ;   a  U S   R                  SS5      u  U S'   U S'   U S   nU S   (       d  [        R                  " 5       U S'   U S   (       d  SU S'   O[        U S   5      U S'   U S   nU S   n[	        5       nXl        [        R                  n[        R                  " U S   X5      n[        R                  " XXU5      R                  [        5        g )NÚ@r.   r,   ÚuserÚporté   )r0   ÚgetpassÚgetuserr@   ÚSSHConnectionr	   r   ÚverifyHostKeyÚSSHUserAuthClientr   Ú
addErrbackÚ_ebExit)r	   r.   re   ÚconnÚvhkÚuaos         r3   rU   rU   _   sÍ   € Ø
ˆg�f‰oÓØ+2°6©?×+@Ñ+@ÀÀaÓ+HÑ(ˆ�‰˜ ™Ø�6‰?€DØ�6�?Ü!Ÿ/š/Ó+ˆ�‰Ø�6�?Øˆ�Šä˜g f™oÓ.ˆ�‰Ø�6‰?€DØ�6‰?€DÜ‹?€DØ„LÜ
×
Ñ
€CÜ
×
#Ò
# G¨F¡O°WÓ
C€CÜ‡O‚O�D ¨cÓ2×=Ñ=¼gÕFr6   c                 óà   • [        U R                  S5      (       a  U R                  R                  nO[        U 5      n[        U5         [        R
                  " 5         g ! [         a     g f = f)NÚvalue)Úhasattrrr   r?   rO   r   r]   r^   )Úfr"   s     r3   rm   rm   r   sP   € Üˆq�w‰w˜× Ñ Ø�G‰G�M‰M‰ä�‹FˆÜ	ˆ!„HðÜ�Š�øÜó Ùðús   Á
A  Á 
A-Á,A-c                  ó   • g r8   r7   )rW   s    r3   Ú_ignorerv   ~   s   € Ør6   c                   ó    • \ rS rSrS rS rSrg)ÚFileWrapperé‚   c                 ól   • Xl         SU l        UR                  SS5        UR                  5       U l        g )Nç        r   rH   )rt   ÚtotalÚseekÚtellÚsize©r2   rt   s     r3   Ú__init__ÚFileWrapper.__init__ƒ   s(   € ØŒØˆŒ
Ø	�‰ˆq�!ŒØ—F‘F“Hˆ�	r6   c                 ó.   • [        U R                  U5      $ r8   )Úgetattrrt   )r2   Úattrs     r3   Ú__getattr__ÚFileWrapper.__getattr__‰   s   € Ü�t—v‘v˜tÓ$Ð$r6   )rt   r   r|   N)r9   r:   r;   r<   r�   r†   rF   r7   r6   r3   rx   rx   ‚   s   † òõ%r6   rx   c                   ó–  • \ rS rSr\rSrSr\rSAS jr	S r
S rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rSBS jrS rS rS rS rS rS rS r S r!S r"S r#S  r$S! r%SCS" jr&S# r'S$ r(S% r)S& r*S' r+S( r,S) r-S* r.S+ r/S, r0S- r1S. r2S/ r3S0 r4S1 r5\5r6S2 r7S3 r8S4 r9S5 r:S6 r;S7 r<S8 r=S9 r>S: r?S; r@S< rAS= rBS> rCS? rDS@rEg)DÚStdioClienté�   zcftp> ó   
Nc                 óf   • Xl         SU l        X l        U(       + =(       a    S=(       d    SU l        g )Nr)   r,   r   )ÚclientÚcurrentDirectoryÚfileÚuseProgressBar)r2   r�   rt   s      r3   r�   ÚStdioClient.__init__•   s'   € ØŒØ "ˆÔØŒ	Ø#$œuŸ{¨×0¨qˆÕr6   c                 ól   • U R                   R                  S5      R                  U R                  5        g )Nr)   )r�   ÚrealPathÚaddCallbackÚ_cbSetCurDir©r2   s    r3   ÚconnectionMadeÚStdioClient.connectionMade›   s%   € Ø�‰×Ñ˜RÓ ×,Ñ,¨T×->Ñ->Õ?r6   c                 ó0   • Xl         U R                  5         g r8   )rŽ   Ú_newLine©r2   Úpaths     r3   r•   ÚStdioClient._cbSetCurDirž   s   € Ø $ÔØ�‰�r6   c                 ó„   • [        U[        5      (       a  UR                  S5      nU R                  R	                  U5      $ )Núutf-8)Ú
isinstancer?   ÚencodeÚ	transportÚwrite)r2   Úmsgs     r3   Ú_writeToTransportÚStdioClient._writeToTransport¢   s2   € Ü�cœ3×ÑØ—*‘*˜WÓ%ˆCØ�~‰~×#Ñ# CÓ(Ð(r6   c                 ó*  • U R                   R                  R                  (       a  g [        U[        5      (       a  UR                  S5      n[        R                  " SU-  5        UR                  5       nU(       d  U R                  5         g U R                  (       a#  UR                  S5      (       a  SU l        USS  nOSU l        U R                  U5      nUb7  UR                  U R                  5        UR!                  U R"                  5        g g )NrŸ   zgot line %sÚ-r,   r   )r�   r¢   ÚlocalClosedr    ÚbytesÚdecoder   r¤   Úlstriprš   r�   Ú
startswithÚignoreErrorsÚ_dispatchCommandr”   Ú
_cbCommandrl   Ú
_ebCommand)r2   ÚlineÚds      r3   ÚlineReceivedÚStdioClient.lineReceived§   sÈ   € Ø�;‰;× Ñ ×,×,ØÜ�dœE×"Ñ"Ø—;‘;˜wÓ'ˆDÜ�Š� Ñ$Ô%Ø�{‰{‹}ˆÞØ�M‰MŒOØØ�9�9˜Ÿ™¨×-Ñ-Ø !ˆDÔØ˜˜�8‰Dà !ˆDÔØ×!Ñ! $Ó'ˆØ‰=Ø�M‰M˜$Ÿ/™/Ô*Ø�L‰L˜Ÿ™Õ)ð r6   c                 ó  • SU;   a%  UR                  SS5      u  p#UR                  5       nOUSp2UR                  S5      (       a&  U R                  nUSS  S-   U-   R	                  5       nO9UR                  5       n[        R                  " SU-  5        [        U SU-  S 5      nUb  [        R                  " XC5      $ SU-  nU R                  [        R                  " [        U5      5      5        U R                  5         g )NÚ r,   r)   Ú!zlooking up cmd %szcmd_%szNo command called `%s')r0   r¬   r­   Úcmd_EXECÚstripÚupperr   r¤   r„   r   ÚmaybeDeferredr±   r   r`   ÚNotImplementedErrorrš   )r2   r²   ÚcommandÚrestrt   ÚerrMsgs         r3   r¯   ÚStdioClient._dispatchCommand»   sÙ   € Ø�$‹;Ø ŸJ™J s¨AÓ.‰MˆGØ—;‘;“=‰Dà  "�TØ×Ñ˜c×"Ñ"Ø—‘ˆAØ˜A˜B�K #Ñ%¨Ñ,×3Ñ3Ó5‰Dà—m‘m“oˆGÜ�GŠGÐ'¨'Ñ1Ô2Ü˜˜h¨Ñ0°$Ó7ˆAØ‰=Ü×&Ò& qÓ/Ð/à-°Ñ9ˆFØ�O‰OœGŸOšOÔ,?ÀÓ,GÓHÔIØ�M‰M�Or6   c                 ó.  • [         R                  " U5        UR                  [        [        R
                  [        [        5      nU[        :X  a!  U R                  U R                  S5      5        g U[        R
                  :X  aA  SUR                  R                  UR                  R                  4-  nU R                  U5        g U[        [        4;   aA  SUR                  R                  UR                  R                  4-  nU R                  U5        g g )Nr)   zremote error %i: %s
zlocal error %i: %s
)r   r¤   Útrapr½   r   Ú	SFTPErrorÚOSErrorÚIOErrorr¥   Úcmd_HELPrr   ÚcodeÚmessageÚerrnoÚstrerror)r2   rt   ÚerÀ   s       r3   Ú_printFailureÚStdioClient._printFailureÏ   sÄ   € Ü�Š�Œ
Ø�F‰FÔ&¬×(>Ñ(>ÄÌÓQˆØÔ#Ó#Ø×"Ñ" 4§=¡=°Ó#4Õ5Ø”,×(Ñ(Ó(Ø,°·±·±¸a¿g¹g¿o¹oÐ/NÑNˆFØ×"Ñ" 6Õ*Ø”7œGÐ$Ó$Ø+¨q¯w©w¯}©}¸a¿g¹g×>NÑ>NÐ.OÑOˆFØ×"Ñ" 6Õ*ð %r6   c                 ó¤  • U R                   R                  R                  (       a  g U R                  U R                  5        SU l        U R                  (       aw  U R                  R                  5       nU(       d%  U R                   R                  R                  5         g U R                  U5        U R                  UR                  5       5        g g )Nr   )r�   r¢   r©   r¥   Úpsr®   r�   ÚreadlineÚloseConnectionr´   rº   )r2   Úls     r3   rš   ÚStdioClient._newLineÛ   s‹   € Ø�;‰;× Ñ ×,×,ØØ×Ñ˜tŸw™wÔ'ØˆÔØ�9�9Ø—	‘	×"Ñ"Ó$ˆAÞØ—‘×%Ñ%×4Ñ4Õ6à×&Ñ& qÔ)Ø×!Ñ! !§'¡'£)Õ,ð r6   c                 óæ   • Ub^  [        U[        5      (       a  UR                  S5      nU R                  U5        UR	                  S5      (       d  U R                  S5        U R                  5         g )NrŸ   r‹   )r    r?   r¡   r¥   Úendswithrš   )r2   Úresults     r3   r°   ÚStdioClient._cbCommandè   sW   € ØÑÜ˜&¤#×&Ñ&ØŸ™ wÓ/�Ø×"Ñ" 6Ô*Ø—?‘? 5×)Ñ)Ø×&Ñ& uÔ-Ø�‰�r6   c                 óÒ   • U R                  U5        U R                  (       a5  U R                  (       d$  U R                  R                  R                  5         U R                  5         g r8   )rÍ   r�   r®   r�   r¢   rÒ   rš   r€   s     r3   r±   ÚStdioClient._ebCommandñ   s>   € Ø×Ñ˜1ÔØ�9�9˜T×.×.Ø�K‰K×!Ñ!×0Ñ0Ô2Ø�‰�r6   c                 ó|  • U R                  U5      u  pUR                  S5      (       d  US-  nU=(       a*    [        R                  R	                  U R
                  U5      =(       d    SnU R                  R                  U5      nUR                  U R                  5        UR                  U R                  5        U$ )Nr-   r)   )Ú_getFilenamerÖ   Úosrœ   ÚjoinrŽ   r�   ÚopenDirectoryr”   Ú_cbCdrl   r±   )r2   rœ   r¿   ÚnewPathr³   s        r3   Úcmd_CDÚStdioClient.cmd_CD÷   s‰   € Ø×&Ñ& tÓ,‰
ˆØ�}‰}˜S×!Ñ!Ø�C‰KˆDØ×Dœ2Ÿ7™7Ÿ<™<¨×(=Ñ(=¸tÓD×JÈˆØ�K‰K×%Ñ% gÓ.ˆØ	�‰�d—j‘jÔ!Ø	�‰�T—_‘_Ô%Øˆr6   c                 ó¦   • UR                  5         U R                  R                  UR                  5      nUR	                  U R
                  5        U$ r8   )Úcloser�   r“   Únamer”   Ú	_cbCurDir)r2   Ú	directoryr³   s      r3   rà   ÚStdioClient._cbCd  s9   € Ø�‰ÔØ�K‰K× Ñ  §¡Ó0ˆØ	�‰�d—n‘nÔ%Øˆr6   c                 ó   • Xl         g r8   ©rŽ   r›   s     r3   rç   ÚStdioClient._cbCurDir  s   € Ø $Õr6   c                 óÔ   • UR                  S S5      u  p!U R                  U5      u  p1[        U5      nU R                  R	                  U5      nUR                  U R                  X2S9  U$ )Nr,   )Úgrp©r0   rÜ   r@   r�   ÚgetAttrsr”   Ú_cbSetUsrGrp)r2   r¿   rî   rœ   r³   s        r3   Ú	cmd_CHGRPÚStdioClient.cmd_CHGRP
  ó^   € Ø—J‘J˜t QÓ'‰	ˆØ×&Ñ& tÓ,‰
ˆÜ�#‹hˆØ�K‰K× Ñ  Ó&ˆØ	�‰�d×'Ñ'¨ˆÑ7Øˆr6   c                 óÒ   • UR                  S S5      u  p!U R                  U5      u  p1[        US5      nU R                  R	                  USU05      nUR                  [        5        U$ )Nr,   é   Úpermissions)r0   rÜ   r@   r�   ÚsetAttrsr”   rv   )r2   r¿   Úmodrœ   r³   s        r3   Ú	cmd_CHMODÚStdioClient.cmd_CHMOD  s]   € Ø—J‘J˜t QÓ'‰	ˆØ×&Ñ& tÓ,‰
ˆÜ�#�q‹kˆØ�K‰K× Ñ  ¨°sÐ';Ó<ˆØ	�‰”gÔØˆr6   c                 óÔ   • UR                  S S5      u  p!U R                  U5      u  p1[        U5      nU R                  R	                  U5      nUR                  U R                  X2S9  U$ )Nr,   )Úusrrï   )r2   r¿   rý   rœ   r³   s        r3   Ú	cmd_CHOWNÚStdioClient.cmd_CHOWN  rô   r6   c                 óÚ   • 0 nUS L=(       a    U=(       d    US   US'   US L=(       a    U=(       d    US   US'   U R                   R                  X%5      nUR                  [        5        U$ )NÚuidÚgid)r�   rø   r”   rv   )r2   Úattrsrœ   rý   rî   Únewr³   s          r3   rñ   ÚStdioClient._cbSetUsrGrp"  sb   € ØˆØ �o×.¨3×>°%¸±,ˆˆE‰
Ø �o×.¨3×>°%¸±,ˆˆE‰
Ø�K‰K× Ñ  Ó+ˆØ	�‰”gÔØˆr6   c                 ó
  • U R                  U5      u  p!SU;   d  SU;   aq  U(       a9  U R                  U5      u  p1[        R                  R                  U5      (       d  gOSnU R	                  U5      nUR                  U R                  U5        U$ U(       a  U R                  U5      u  p1O"[        R                  R                  U5      S   n[        R                  " X#45        [        USS5      n[        U R                  5      R                  U5      nU R                  R                  UR                  [         R"                  0 5      nUR                  U R$                  U5        UR'                  U R(                  U5        U$ )NÚ*Ú?z'Wildcard get with non-directory target.r6   r,   Úwbr   )rÜ   rÝ   rœ   ÚisdirÚ_remoteGlobr”   Ú_cbGetMultipler0   r   r¤   Úopenr   rŽ   Úchildr�   ÚopenFiler   ÚFXF_READÚ_cbGetOpenFilerl   Ú
_ebCloseLf)r2   r¿   ÚremoteÚlocalr³   Úlfrœ   s          r3   Úcmd_GETÚStdioClient.cmd_GET*  s3  € Ø×(Ñ(¨Ó.‰ˆØ�&‹=˜C 6›MÞØ"×/Ñ/°Ó5‘�Ü—w‘w—}‘} U×+Ñ+ØDð ,ð �Ø× Ñ  Ó(ˆAØ�M‰M˜$×-Ñ-¨uÔ5ØˆHÞØ×+Ñ+¨DÓ1‰KˆE�4ä—G‘G—M‘M &Ó)¨!Ñ,ˆEÜ�Š��Ô Ü�%˜˜qÓ!ˆÜ˜×-Ñ-Ó.×4Ñ4°VÓ<ˆØ�K‰K× Ñ  §¡¬L×,AÑ,AÀ2ÓFˆØ	�‰�d×)Ñ)¨2Ô.Ø	�‰�T—_‘_ bÔ)Øˆr6   c                 ó&   • U R                  S X5      $ r8   )Ú_cbGetMultipleNext)r2   Úfilesr  s      r3   r  ÚStdioClient._cbGetMultipleB  s   € à×&Ñ& t¨UÓ:Ð:r6   c                 ó  • [        U[        R                  5      (       a  U R                  U5        O?U(       a8  U R	                  U5        UR                  S5      (       d  U R	                  S5        U(       d  g UR                  S5      S   n[        [        R                  R                  U[        R                  R                  U5      S   5      SS5      n[        U R                  5      R                  U5      nU R                  R!                  UR                  ["        R$                  0 5      nUR'                  U R(                  U5        UR+                  U R,                  U5        UR/                  U R0                  X#5        U$ )NÚ
r   r,   r	  )r    r   r`   rÍ   r¥   rÖ   Úpopr  rÝ   rœ   rÞ   r0   r   rŽ   r  r�   r  r   r  r”   r  rl   r  ÚaddBothr  )r2   Úresr  r  rt   r  rœ   r³   s           r3   r  ÚStdioClient._cbGetMultipleNextF  s  € Ü�cœ7Ÿ?™?×+Ñ+Ø×Ñ˜sÕ#ÞØ×"Ñ" 3Ô'Ø—<‘< ×%Ñ%Ø×&Ñ& tÔ,ÞØØ�I‰I�a‹L˜‰OˆÜ”"—'‘'—,‘,˜u¤b§g¡g§m¡m°AÓ&6°qÑ&9Ó:¸DÀ!ÓDˆÜ˜×-Ñ-Ó.×4Ñ4°QÓ7ˆØ�K‰K× Ñ  §¡¬L×,AÑ,AÀ2ÓFˆØ	�‰�d×)Ñ)¨2Ô.Ø	�‰�T—_‘_ bÔ)Ø	�	‰	�$×)Ñ)¨5Ô8Øˆr6   c                 ó&   • UR                  5         U$ r8   )rå   )r2   rt   r  s      r3   r  ÚStdioClient._ebCloseLfX  s   € Ø
�‰Œ
Øˆr6   c                 óV   • UR                  5       R                  U R                  X5      $ r8   )rð   r”   Ú_cbGetFileSize)r2   Úrfr  s      r3   r  ÚStdioClient._cbGetOpenFile\  s!   € Ø�{‰{‹}×(Ñ(¨×)<Ñ)<¸bÓEÐEr6   c           
      ó„  • [         R                  " US   5      (       d/  UR                  5         UR                  5         SUR                  -  $ US   Ul        U R
                  R                  R                  R                  S   nU R
                  R                  R                  R                  S   nSUl	        / n/ nU R                  R                  5       n[        U5       H)  n	U R                  SX#USXH5      n
UR                  U
5        M+     [        R                   " US	S
9nUR#                  U R$                  X#5        U$ )Nr÷   zCan't get non-regular file: %sr   r   r   r{   r)   r   r,   ©ÚfireOnOneErrback)ÚstatÚS_ISREGrå   ræ   r   r�   r¢   rn   r	   r|   r   ÚsecondsÚrangeÚ
_cbGetReadÚappendr   ÚDeferredListr”   Ú
_cbGetDone)r2   r  r&  r  Ú
bufferSizeÚnumRequestsÚdListÚchunksÚ	startTimerX   r³   Údls               r3   r%  ÚStdioClient._cbGetFileSize_  s   € Ü�|Š|˜E -Ñ0×1Ñ1Ø�H‰HŒJØ�H‰HŒJØ3°b·g±gÑ=Ð=Ø˜‘-ˆŒØ—[‘[×*Ñ*×/Ñ/×7Ñ7¸ÑEˆ
Ø—k‘k×+Ñ+×0Ñ0×8Ñ8¸ÑDˆØˆŒØˆØˆØ—L‘L×(Ñ(Ó*ˆ	Ü�{Ö#ˆAØ—‘  B¨F°A°zÓMˆAØ�L‰L˜ŽOñ $ô ×Ò ¸Ñ:ˆØ
�‰�t—‘¨Ô/Øˆ	r6   c                 óB  • SnU HJ  nUS:X  a    g X#S   :w  a2  UR                  U5      nUR                  XBUS   45        X#S   U-
  4s  $ US   nML     [        U R                  R                  R
                  R                  S   5      nUR                  X"U-   45        X%4$ )Nr   Úeofr,   r   )rL   Úinsertr@   r�   r¢   rn   r	   r0  )r2   r6  ÚendÚchunkrX   ÚbufSizes         r3   Ú_getNextChunkÚStdioClient._getNextChunkr  s¢   € ØˆÛˆEØ�e‹|ÙØ˜A‘h‹Ø—L‘L Ó'�Ø—‘˜a u¨Q¡x Ô1Ø 1™X¨™^Ð,Ò,Ø˜‘(ŠCñ ô �d—k‘k×+Ñ+×0Ñ0×8Ñ8¸ÑFÓGˆØ�‰�s '™MÐ*Ô+Øˆ~Ðr6   c           	      óÂ  • U(       az  [        U[        R                  5      (       a[  [        R                  " SU-  5        UnUR                  [        5        UR                  XUU-   45      n	XI	 UR                  X•S45        OÒU(       aË  [        R                  " S[        U5      -  5        UR                  U5        UR                  U5        [        U5      U:w  aZ  [        R                  " S[        U5      U4-  5        UR                  XUU-   45      n	XI	 UR                  X•U[        U5      -   45        U=R                  [        U5      -  sl        U R                  (       a  U R                  X'5        U R                  U5      n
U
(       d  g U
u  p[[        R                  " SXUU-   4-  5        UR!                  X[5      nUR#                  U R$                  X#XEX·5        U$ )Nzget read err: %sr;  zget read data: %iz#got less than we asked for: %i < %izasking for %i -> %i)r    r   r`   r   r¤   rÃ   ÚEOFErrorrL   r<  Úlenr}   r£   r|   r�   Ú_printProgressBarr@  Ú	readChunkr  r/  )r2   Údatar&  r  r6  Ústartr   r7  ÚreasonrX   r>  Úlengthr³   s                r3   r/  ÚStdioClient._cbGetRead€  st  € Þ”J˜t¤W§_¡_×5Ñ5Ü�GŠGÐ&¨Ñ-Ô.ØˆFØ�K‰KœÔ!Ø—‘˜e¨T¡\Ð2Ó3ˆAØ�	Ø�M‰M˜! U˜^Õ,ÞÜ�GŠGÐ'¬#¨d«)Ñ3Ô4Ø�G‰G�EŒNØ�H‰H�TŒNÜ�4‹y˜DÓ Ü—’Ð=ÄÀTÃÈDÐ@QÑQÔRØ—L‘L %°©Ð!6Ó7�Ø�IØ—‘˜a¨´°T³Ñ):Ð!;Ô<Ø�HŠHœ˜D›	Ñ!�HØ××Ø×"Ñ" 2Ô1Ø×"Ñ" 6Ó*ˆÞØà!‰MˆEÜ�ŠÐ%¨¸±Ð(?Ñ?Ô@Ø�L‰L˜Ó'ˆØ	�	‰	�$—/‘/ 2¨6¸&ÔLØˆr6   c                 óê   • [         R                  " S5        UR                  5         UR                  5         U R                  (       a  U R	                  S5        SUR
                   SUR
                   3$ )Nzget doner  úTransferred ú to )r   r¤   rå   r�   r¥   ræ   ©r2   Úignoredr&  r  s       r3   r2  ÚStdioClient._cbGetDonež  sR   € Ü�Š�
ÔØ
�‰Œ
Ø
�‰Œ
Ø××Ø×"Ñ" 4Ô(Ø˜bŸg™g˜Y d¨2¯7©7¨)Ð4Ð4r6   c                 ó¸  • U R                  U5      u  p!SU;   d  SU;   an  U(       a>  U R                  U5      u  p1[        R                  R                  U R                  U5      nOSn[
        R
                  " U5      nU R                  XC5      $ U(       a  U R                  U5      u  p1O"[        R                  R                  U5      S   nU R                  X#5      $ )zó
Do an upload request for a single local file or a globing expression.

@param rest: Requested command line for the PUT command.
@type rest: L{str}

@return: A deferred which fires with L{None} when transfer is done.
@rtype: L{defer.Deferred}
r  r  r)   r,   )	rÜ   rÝ   rœ   rÞ   rŽ   ÚglobÚ_putMultipleFilesr0   Ú_putSingleFile)r2   r¿   r  r  r  s        r3   Úcmd_PUTÚStdioClient.cmd_PUT¦  s¹   € ð ×'Ñ'¨Ó-‰ˆð �%‹<˜3 %›<ÞØ#×0Ñ0°Ó6‘�ÜŸ™Ÿ™ d×&;Ñ&;¸VÓD‘à�ä—I’I˜eÓ$ˆEØ×)Ñ)¨%Ó8Ð8ö Ø#×0Ñ0°Ó6‘�˜äŸ™Ÿ™ uÓ-¨aÑ0�Ø×&Ñ& uÓ5Ð5r6   c                 ó(   • U R                  SU/USS9$ )a  
Perform an upload for a single file.

@param local: Path to local file.
@type local: L{str}.

@param remote: Remote path for the request relative to current working
    directory.
@type remote: L{str}

@return: A deferred which fires when transfer is done.
NT)Úsingle©Ú_cbPutMultipleNext)r2   r  r  s      r3   rU  ÚStdioClient._putSingleFileÅ  s    € ð ×&Ñ& t¨e¨W°fÀTÐ&ÐJÐJr6   c                 ó&   • U R                  SX5      $ )a  
Perform an upload for a list of local files.

@param files: List of local files.
@type files: C{list} of L{str}.

@param remote: Remote path for the request relative to current working
    directory.
@type remote: L{str}

@return: A deferred which fires when transfer is done.
NrZ  )r2   r  r  s      r3   rT  ÚStdioClient._putMultipleFilesÔ  s   € ð ×&Ñ& t¨UÓ;Ð;r6   c                 óL  • [        U[        R                  5      (       a  U R                  U5        OeU(       a^  [        U[        5      (       a  UR                  S5      nU R                  U5        UR                  S5      (       d  U R                  S5        SnU(       a5  U(       d.   UR                  S5      n[        US5      nU(       a	  U(       d  M.  U(       d  gU(       a  UnOY[        R                  R                  U5      S   n[        R                  R                  X85      n[        R                   " X‡U45        U R#                  WU5      n	U	R%                  U R&                  X#5        U	$ ! [         a)    U R                  [        R                  " 5       5        Sn NÝf = f)a   
Perform an upload for the next file in the list of local files.

@param previousResult: Result form previous file form the list.
@type previousResult: L{str}

@param files: List of local files.
@type files: C{list} of L{str}

@param remotePath: Remote path for the request relative to current
    working directory.
@type remotePath: L{str}

@param single: A flag which signals if this is a transfer for a single
    file in which case we use the exact remote path
@type single: L{bool}

@return: A deferred which fires when transfer is done.
rŸ   r‹   Nr   Úrbr,   )r    r   r`   rÍ   r?   r¡   r¥   rÖ   r  r  r^   rÝ   rœ   r0   rÞ   r   r¤   Ú_putRemoteFiler  r[  )
r2   ÚpreviousResultr  r*   rY  ÚcurrentFileÚlocalStreamr  ræ   r³   s
             r3   r[  ÚStdioClient._cbPutMultipleNextã  sA  € ô( �n¤g§o¡o×6Ñ6Ø×Ñ˜~Õ.ÞÜ˜.¬#×.Ñ.Ø!/×!6Ñ!6°wÓ!?�Ø×"Ñ" >Ô2Ø!×*Ñ*¨5×1Ñ1Ø×&Ñ& uÔ-àˆÞžKð#Ø#Ÿi™i¨›l�Ü" ;°Ó5�ö ŸK˜Kö ØæØ‰Fä—7‘7—=‘= Ó-¨aÑ0ˆDÜ—W‘W—\‘\ *Ó3ˆFÜ�GŠG�T :Ð.Ô/à×Ñ ¨VÓ4ˆØ	�	‰	�$×)Ñ)¨5Ô=Øˆøô# !ó #Ø×"Ñ"¤7§?¢?Ó#4Ô5Ø"’ð#ús   Â(E0 Å00F#Æ"F#c                 óf  • [         R                  R                  U R                  U5      n[        R
                  [        R                  -  [        R                  -  nU R                  R                  X40 5      nUR                  U R                  U5        UR                  U R                  U5        U$ )a  
Do an upload request.

@param localStream: Local stream from where data is read.
@type localStream: File like object.

@param remotePath: Remote path for the request relative to current working directory.
@type remotePath: L{str}

@return: A deferred which fires when transfer is done.
)rÝ   rœ   rÞ   rŽ   r   Ú	FXF_WRITEÚ	FXF_CREATÚ	FXF_TRUNCr�   r  r”   Ú_cbPutOpenFilerl   r  )r2   rd  r*   r  Úflagsr³   s         r3   ra  ÚStdioClient._putRemoteFile  s€   € ô —‘—‘˜d×3Ñ3°ZÓ@ˆÜ×&Ñ&¬×)?Ñ)?Ñ?Ä,×BXÑBXÑXˆØ�K‰K× Ñ  °Ó3ˆØ	�‰�d×)Ñ)¨;Ô7Ø	�‰�T—_‘_ kÔ2Øˆr6   c                 ó´  • U R                   R                  R                  R                  S   nU R                  (       a  [        U5      n/ n/ nU R                  R                  5       n[        U5       H0  nU R                  S XXV5      nU(       d  M  UR                  U5        M2     [        R                  " USS9n	U	R                  U R                  X5        U	$ )Nr   r,   r)  )r�   r¢   rn   r	   r�   rx   r   r-  r.  Ú_cbPutWriter0  r   r1  r”   Ú
_cbPutDone)
r2   r&  r  r4  r5  r6  r7  rX   r³   r8  s
             r3   rj  ÚStdioClient._cbPutOpenFile+  s®   € Ø—k‘k×+Ñ+×0Ñ0×8Ñ8¸ÑDˆØ××Ü˜R“ˆBØˆØˆØ—L‘L×(Ñ(Ó*ˆ	Ü�{Ö#ˆAØ× Ñ   r¨vÓAˆAßˆqØ—‘˜Q–ñ $ô ×Ò ¸Ñ:ˆØ
�‰�t—‘¨Ô/Øˆ	r6   c                 ó`  • U R                  U5      nUu  pxUR                  U5        UR                  U5      n	U R                  (       a/  U=R                  [        U	5      -  sl        U R                  X55        U	(       a0  UR                  Xy5      n
U
R                  U R                  X#XE5        U
$ g r8   )
r@  r}   Úreadr�   r|   rD  rE  Ú
writeChunkr”   rn  )r2   rP  r&  r  r6  r7  r>  rH  r   rG  r³   s              r3   rn  ÚStdioClient._cbPutWrite:  s‰   € Ø×"Ñ" 6Ó*ˆØ‰ˆØ
�‰�ŒØ�w‰w�t‹}ˆØ××Ø�HŠHœ˜D›	Ñ!�HØ×"Ñ" 2Ô1ÞØ—‘˜eÓ*ˆAØ�M‰M˜$×*Ñ*¨B°FÔFØˆHàr6   c                 ó¾   • UR                  5         UR                  5         U R                  (       a  U R                  S5        SUR                   SUR                   3$ )Nr  rM  rN  )rå   r�   r¥   ræ   rO  s       r3   ro  ÚStdioClient._cbPutDoneI  sF   € Ø
�‰Œ
Ø
�‰Œ
Ø××Ø×"Ñ" 4Ô(Ø˜bŸg™g˜Y d¨2¯7©7¨)Ð4Ð4r6   c                 ó0   • [         R                  " U5        g r8   )rÝ   Úchdirr›   s     r3   Úcmd_LCDÚStdioClient.cmd_LCDP  s   € Ü
�Š��r6   c                 óÒ   ^ • T R                  U5      u  p!T R                  U5      u  p1[        U 4S jX#45      u  p#T R                  R                  X#5      R	                  [
        5      $ )Nc                 óX   >• [         R                  R                  TR                  U 5      $ r8   ©rÝ   rœ   rÞ   rŽ   ©Úxr2   s    €r3   Ú<lambda>Ú$StdioClient.cmd_LN.<locals>.<lambda>W  ó   ø€ ”b—g‘g—l‘l 4×#8Ñ#8¸!Ô<r6   )rÜ   Úmapr�   ÚmakeLinkr”   rv   )r2   r¿   ÚlinkpathÚ
targetpaths   `   r3   Úcmd_LNÚStdioClient.cmd_LNS  s_   ø€ Ø×*Ñ*¨4Ó0‰ˆØ×,Ñ,¨TÓ2Ñˆ
Ü"Ü<¸xÐ>Tó 
Ñˆð �{‰{×#Ñ# HÓ9×EÑEÄgÓNÐNr6   c                 óh  • / nUR                  5       nU(       a†  US   (       a|  US   S   S:X  ap  UR                  S5      SS  nU H7  nUS:X  a  UR                  " S5        M  US:X  d  M%  UR                  " S5        M9     U(       a  US   (       a  US   S   S:X  a  Mp  SR                  U5      nU R	                  U5      u  pQU(       d  U R
                  S	-   nO*[        R                  R                  U R
                  U5      nU R                  U5      nUR                  U R                  U5        U$ )
Nr   r¨   r,   rÓ   ÚverboseÚaÚallr·   r-   )r0   r  r0  rÞ   rÜ   rŽ   rÝ   rœ   r  r”   Ú_cbDisplayFiles)r2   r¿   r	   ÚoptsÚorœ   ÚfullPathr³   s           r3   Úcmd_LSÚStdioClient.cmd_LS[  s   € ð ˆØ�z‰z‹|ˆÞ�t˜A—w 4¨¡7¨1¡:°Ó#4Ø—8‘8˜A“;˜q˜r�?ˆDÛ�Ø˜“8Ø—N’N 9Ö-Ø˜#•XØ—N’N 5Ö)ñ	 ö �t˜A—w 4¨¡7¨1¡:°Õ#4ð �x‰x˜‹~ˆØ×&Ñ& tÓ,‰
ˆÞØ×,Ñ,¨sÑ2‰Hä—w‘w—|‘| D×$9Ñ$9¸4Ó@ˆHØ×Ñ˜XÓ&ˆØ	�‰�d×*Ñ*¨GÔ4Øˆr6   c                 ó4  • UR                  5         SU;  a,  U Vs/ s H  o3S   R                  S5      (       a  M  UPM!     nnSU;   a  U Vs/ s H  o3S   PM	     nnOU Vs/ s H  o3S   PM	     nnU(       d  g SR                  U5      $ s  snf s  snf s  snf )NrŒ  r   ó   .rŠ  r,   r‹   )Úsortr­   rÞ   )r2   r  r	   rt   Úliness        r3   r�  ÚStdioClient._cbDisplayFilest  s‹   € Ø�
‰
ŒØ˜ÓÙ %ÓC¢˜1¨q©T¯_©_¸T×-B—Q¡ˆEÐCØ˜ÓÙ#(Ó)¢5˜a�q”T¡5ˆEÐ)ˆEá#(Ó)¢5˜a�q”T¡5ˆEÐ)ÞØà—:‘:˜eÓ$Ð$ùò Dùâ)ùâ)s   ›B»BÁBÁ"Bc                 óÚ   • U R                  U5      u  p[        R                  R                  U R                  U5      nU R
                  R                  U0 5      R                  [        5      $ r8   )	rÜ   rÝ   rœ   rÞ   rŽ   r�   ÚmakeDirectoryr”   rv   ©r2   rœ   r¿   s      r3   Ú	cmd_MKDIRÚStdioClient.cmd_MKDIR�  sP   € Ø×&Ñ& tÓ,‰
ˆÜ�w‰w�|‰|˜D×1Ñ1°4Ó8ˆØ�{‰{×(Ñ(¨¨rÓ2×>Ñ>¼wÓGÐGr6   c                 óØ   • U R                  U5      u  p[        R                  R                  U R                  U5      nU R
                  R                  U5      R                  [        5      $ r8   )	rÜ   rÝ   rœ   rÞ   rŽ   r�   ÚremoveDirectoryr”   rv   rš  s      r3   Ú	cmd_RMDIRÚStdioClient.cmd_RMDIR†  sN   € Ø×&Ñ& tÓ,‰
ˆÜ�w‰w�|‰|˜D×1Ñ1°4Ó8ˆØ�{‰{×*Ñ*¨4Ó0×<Ñ<¼WÓEÐEr6   c                 ó6   • [         R                  " SU-  5        g )Nzmkdir %s©rÝ   Úsystemr›   s     r3   Ú
cmd_LMKDIRÚStdioClient.cmd_LMKDIR‹  s   € Ü
�	Š	�*˜tÑ#Õ$r6   c                 óØ   • U R                  U5      u  p[        R                  R                  U R                  U5      nU R
                  R                  U5      R                  [        5      $ r8   )	rÜ   rÝ   rœ   rÞ   rŽ   r�   Ú
removeFiler”   rv   rš  s      r3   Úcmd_RMÚStdioClient.cmd_RMŽ  sN   € Ø×&Ñ& tÓ,‰
ˆÜ�w‰w�|‰|˜D×1Ñ1°4Ó8ˆØ�{‰{×%Ñ% dÓ+×7Ñ7¼Ó@Ð@r6   c                 ó6   • [         R                  " SU-  5        g )Nzls %sr¢  )r2   r¿   s     r3   Úcmd_LLSÚStdioClient.cmd_LLS“  s   € Ü
�	Š	�'˜D‘.Õ!r6   c                 óÒ   ^ • T R                  U5      u  p!T R                  U5      u  p1[        U 4S jX#45      u  p#T R                  R                  X#5      R	                  [
        5      $ )Nc                 óX   >• [         R                  R                  TR                  U 5      $ r8   r}  r~  s    €r3   r€  Ú(StdioClient.cmd_RENAME.<locals>.<lambda>š  r‚  r6   )rÜ   rƒ  r�   Ú
renameFiler”   rv   )r2   r¿   ÚoldpathÚnewpaths   `   r3   Ú
cmd_RENAMEÚStdioClient.cmd_RENAME–  s^   ø€ Ø×)Ñ)¨$Ó/‰ˆØ×)Ñ)¨$Ó/‰ˆÜÜ<¸wÐ>Pó
Ñˆð �{‰{×%Ñ% gÓ7×CÑCÄGÓLÐLr6   c                 óL   • U R                   R                  R                  5         g r8   )r�   r¢   rÒ   ©r2   rP  s     r3   Úcmd_EXITÚStdioClient.cmd_EXITž  s   € Ø�‰×Ñ×,Ñ,Õ.r6   c                 ó„   • SU R                   R                  -  n[        U[        5      (       a  UR	                  S5      nU$ )NzSFTP version %irŸ   )r�   Úversionr    r?   r¡   )r2   rP  rº  s      r3   Úcmd_VERSIONÚStdioClient.cmd_VERSION£  s6   € Ø# d§k¡k×&9Ñ&9Ñ9ˆÜ�gœs×#Ñ#Ø—n‘n WÓ-ˆGØˆr6   c                 ó   • g)Nae  Available commands:
cd path                         Change remote directory to 'path'.
chgrp gid path                  Change gid of 'path' to 'gid'.
chmod mode path                 Change mode of 'path' to 'mode'.
chown uid path                  Change uid of 'path' to 'uid'.
exit                            Disconnect from the server.
get remote-path [local-path]    Get remote file.
help                            Get a list of available commands.
lcd path                        Change local directory to 'path'.
lls [ls-options] [path]         Display local directory listing.
lmkdir path                     Create local directory.
ln linkpath targetpath          Symlink remote file.
lpwd                            Print the local working directory.
ls [-l] [path]                  Display remote directory listing.
mkdir path                      Create remote directory.
progress                        Toggle progress bar.
put local-path [remote-path]    Put local file.
pwd                             Print the remote working directory.
quit                            Disconnect from the server.
rename oldpath newpath          Rename remote file.
rmdir path                      Remove remote directory.
rm path                         Remove remote file.
version                         Print the SFTP version.
?                               Synonym for 'help'.
r7   r¶  s     r3   rÇ   ÚStdioClient.cmd_HELP©  s   € ðr6   c                 ó   • U R                   $ r8   rë   r¶  s     r3   Úcmd_PWDÚStdioClient.cmd_PWDÄ  s   € Ø×$Ñ$Ð$r6   c                 ó,   • [         R                  " 5       $ r8   )rÝ   Úgetcwdr¶  s     r3   Úcmd_LPWDÚStdioClient.cmd_LPWDÇ  s   € Ü�yŠy‹{Ðr6   c                 óp   • U R                   (       + U l         SU R                   =(       a    S=(       d    S-  $ )Nz%ssing progess bar.ÚUzNot u)r�   r¶  s     r3   Úcmd_PROGRESSÚStdioClient.cmd_PROGRESSÊ  s.   € Ø"&×"5Ñ"5Ô5ˆÔØ$¨×(;Ñ(;×(CÀ×(NÀwÑOÐOr6   c                 óä   • U R                   R                  [        R                  " 5       5      S   nU(       d  SnU(       a  SU/n[        R
                  " X#SS9$ [        R                  " U5        g)zJ
Run C{rest} using the user's shell (or /bin/sh if they do not have
one).
é   z/bin/shz-cr,   )ÚerrortooN)Ú_pwdÚgetpwnamrg   rh   r   ÚgetProcessOutputrÝ   r£  )r2   r¿   ÚshellÚcmdss       r3   r¹   ÚStdioClient.cmd_EXECÎ  sW   € ð
 —	‘	×"Ñ"¤7§?¢?Ó#4Ó5°aÑ8ˆÞØˆEÞØ˜$�<ˆDÜ×)Ò)¨%ÀÑBÐBä�IŠI�eÕr6   c                 óÐ  • [         R                  " SU-  5        [        R                  R	                  U5      u  p#SU;   d  SU;   a  SnOSnU(       a\  U(       dU  U R
                  R                  U5      nUR                  U R                  S5        UR                  U R                  X#5        U$ U R
                  R                  U5      nUR                  U R                  U5        U$ )Nzlooking up %sr  r  r,   r   r)   )r   r¤   rÝ   rœ   r0   r�   rß   r”   Ú_cbOpenListrl   Ú_ebNotADirectory)r2   r�  ÚheadÚtailrS  r³   s         r3   r  ÚStdioClient._remoteGlobÞ  sµ   € Ü�Š� (Ñ*Ô+Ü—W‘W—]‘] 8Ó,‰
ˆØ�$‹;˜# ›+Ø‰DàˆDÞžà—‘×)Ñ)¨(Ó3ˆAØ�M‰M˜$×*Ñ*¨BÔ/Ø�L‰L˜×.Ñ.°Ô;ð ˆð —‘×)Ñ)¨$Ó/ˆAØ�M‰M˜$×*Ñ*¨DÔ1Øˆr6   c                 ód   • / nUR                  5       nUR                  U R                  X1U5        U$ r8   )rr  r  Ú_cbReadFile)r2   rè   rS  r  r³   s        r3   rÔ  ÚStdioClient._cbOpenListï  s.   € ØˆØ�N‰NÓˆØ	�	‰	�$×"Ñ" E°dÔ;Øˆr6   c                 ót   • U R                   R                  U5      nUR                  U R                  U5        U$ r8   )r�   rß   r”   rÔ  )r2   rI  rœ   rS  r³   s        r3   rÕ  ÚStdioClient._ebNotADirectoryõ  s/   € Ø�K‰K×%Ñ% dÓ+ˆØ	�‰�d×&Ñ&¨Ô-Øˆr6   c           	      óÖ  • [        U[        R                  5      (       d�  U(       aV  UR                  " S5      nUR	                  U Vs/ s H&  n[
        R
                  " US   U5      (       d  M$  UPM(     sn5        OUR	                  U5        UR                  5       nUR                  U R                  X#U5        U$ UnUR                  [        5        UR                  5         U$ s  snf )NrŸ   r   )r    r   r`   r¡   ÚextendÚfnmatchrr  r  rÚ  rÃ   rC  rå   )r2   r  ÚmatchedFilesrè   rS  rt   r³   rI  s           r3   rÚ  ÚStdioClient._cbReadFileú  s®   € Ü˜%¤§¡×1Ñ1ÞØ—{’{ 7Ó+�Ø×#Ñ#±Ó$U²¨1¼¿ºÈÈ1ÉÈt×9T§Q±Ñ$UÕVà×#Ñ# EÔ*Ø—‘Ó ˆAØ�I‰I�d×&Ñ&¨ÀÔFØˆHàˆFØ�K‰KœÔ!Ø�O‰OÔØÐùò %Vs   Á#C&Á/C&c                 óD   • / SQnU H  u  p4X:”  d  M    O   SUW-  -  W-   $ )N))l           ÚPB)l        ÚTB)i   @ÚGB)i   ÚMB)i   ÚkB)r,   r   z%.1fr7   )r2   r   Ú_abbrevsÚfactorÚsuffixs        r3   Ú_abbrevSizeÚStdioClient._abbrevSize
  s5   € ò
ˆó '‰NˆFØ�}Ùñ 'ð ˜ ™Ñ'¨&Ñ0Ð0r6   c                 ó¬   • US:”  a3  [        US-  5      nUSU-  -  n[        US-  5      nUSU-  -  nSX#U4-  $ [        US-  5      nUSU-  -  nSX14-  $ )Ni  é<   z%i:%02i:%02iz	%02i:%02i)r@   )r2   ÚtÚhoursÚminss       r3   Ú_abbrevTimeÚStdioClient._abbrevTime  su   € Øˆt‹8Ü˜˜D™“MˆEØ�˜‘ÑˆAÜ�q˜2‘v“;ˆDØ��d‘‰NˆAØ! U°!Ð$4Ñ4Ð4ä�q˜2‘v“;ˆDØ��d‘‰NˆAØ $ Ñ*Ð*r6   c                 ó�  • U R                   R                  5       U-
  nUR                  n [        R                  " S[
        R                  " S[        R                  S5      5      nUS:X  a  SnOXC-  nU(       a  UR                  U-
  U-  nOSnUR                  nUR                  (       a  XAR                  -  S-  n	OSn	SU	U R                  U5      U R                  U5      U R                  U5      4-  n
US	   [        U5      [        U
5      -   S	-   -
  S
-  nSU U U
 3nU R                  U5        g! [         a    SS/n NÞf = f)a£  
Update a console progress bar on this L{StdioClient}'s transport, based
on the difference between the start time of the operation and the
current time according to the reactor, and appropriate to the size of
the console window.

@param f: a wrapper around the file which is being written or read
@type f: L{FileWrapper}

@param startTime: The time at which the operation being tracked began.
@type startTime: L{float}
Ú4Hr   Ú12345679NéP   r{   éd   z%3i%% %s %sps %s r,   r·   Ú)r   r-  r|   ÚstructÚunpackÚfcntlÚioctlÚttyÚ
TIOCGWINSZrÅ   r   ræ   rì  ró  rD  r¥   )r2   rt   r7  Údiffr|   ÚwinSizeÚspeedÚtimeLeftÚfrontÚ
percentageÚbackÚspacesr¾   s                r3   rE  ÚStdioClient._printProgressBar&  s=  € ð �|‰|×#Ñ#Ó%¨	Ñ1ˆØ—‘ˆð	!Ü—m’m D¬%¯+ª+°a¼¿¹ÈÓ*TÓUˆGð �3‹;Ø‰Eà‘LˆEÞØŸ™ ™¨%Ñ/‰HàˆHØ—‘ˆØ�6�6Ø§&¡&™.¨CÑ/‰JàˆJØ"ØØ×Ñ˜UÓ#Ø×Ñ˜UÓ#Ø×Ñ˜XÓ&ð	&
ñ 
ˆð ˜!‘*¤ E£
¬S°«YÑ 6¸Ñ :Ñ;¸sÑBˆØ�u�g˜f˜X d VÐ,ˆØ×Ñ˜wÕ'øô/ ó 	!Ø˜R�jŠGð	!ús   «;D4 Ä4EÅEc                 óD  • UR                  5       nU(       d  gUS   S;   aµ  / n[        U5      n [        S[        U5      5       HŽ  nX   nXAS   :X  a7  SR	                  U5      SR	                  XS-   S 5      R                  5       4s  $ US:X  a/  X	 X   S;  a  [        S	X    35      eUR                  X   5        M{  UR                  X   5        M�     UR                  SS5      n[        U5      S:X  a  US   S4$ US   US   4$ ! [         a    [        S
5      ef = f)a  
Parse line received as command line input and return first filename
together with the remaining line.

@param line: Arguments received from command line input.
@type line: L{str}

@return: Tupple with filename and rest. Return empty values when no path was not found.
@rtype: C{tupple}
)r)   r)   r   z'"r,   r)   NÚ\z'"\zbad quote: \zunterminated quote)	rº   Úlistr.  rD  rÞ   r¬   Ú
IndexErrorr0  r0   )r2   r²   ÚretrX   Úcs        r3   rÜ   ÚStdioClient._getFilenameP  s&  € ð �z‰z‹|ˆÞØØ�‰7�eÓØˆCÜ˜“:ˆDð7Ü˜q¤# d£)Ö,�AØ™�AØ ™G“|Ø!Ÿw™w s›|¨R¯W©W°T¸a¹%¸'°]Ó-C×-JÑ-JÓ-LÐLÒLØ˜d›Ø ˜GØ™7¨'Ó1Ü",¨}¸T¹W¸IÐ-FÓ"GÐGØŸ
™
 4¡7Ö+àŸ
™
 4¡7Ö+ñ -ð �j‰j˜˜qÓ!ˆÜˆs‹8�q‹=Ø�q‘6˜2�:Ðà�q‘6˜3˜q™6�>Ð!øô ó 7Ü Ð!5Ó6Ð6ð7ús   °AD	 ÂAD	 Ä	D)r�   rŽ   r�   r®   r�   r8   )NN)F)Fr9   r:   r;   r<   ÚpwdrÍ  rÐ   Ú	delimiterr   r�   r—   r•   r¥   r´   r¯   rÍ   rš   r°   r±   râ   rà   rç   rò   rú   rþ   rñ   r  r  r  r  r  r%  r@  r/  r2  rV  rU  rT  r[  ra  rj  rn  ro  ry  r‡  r‘  r�  r›  rŸ  r¤  r¨  r«  r³  r·  Úcmd_QUITr»  rÇ   rÀ  rÄ  rÈ  r¹   r  rÔ  rÕ  rÚ  rì  ró  rE  rÜ   rF   r7   r6   r3   r‰   r‰   �   sO  † Ø€Dà	€BØ€Ià€Gô1ò@òò)ò
*ò(ò(
+ò-òòòòò%òòòôòò0;òò$òFòò&òò<5ò6ò>Kò<ô3òjò&òò5òòOòò2%òHò
Fò
%òAò
"òMò/ð €Hòòò6%òòPòò ò"òò
 ò 1ò 
+ò((õT#"r6   r‰   zcmd_?c                   ó   • \ rS rSrS rSrg)ri   iy  c                 ó6   • U R                  [        5       5        g r8   )ÚopenChannelÚ
SSHSessionr–   s    r3   ÚserviceStartedÚSSHConnection.serviceStartedz  s   € Ø×Ñœ›Õ&r6   r7   N)r9   r:   r;   r<   r  rF   r7   r6   r3   ri   ri   y  s   † õ'r6   ri   c                   ó†   • \ rS rSr% Sr\\S'   \R                  r\	\S'   S r
S rS\S\S	S
4S jrS rS rS rS rS rSrg
)r  i~  s   sessionræ   rS   c                 óš  • [         R                  " SU R                  -  5        U R                  R                  S   R                  S5      (       a  SnOSnU R                  R                  X[        R                  " U R                  R                  S   5      SS9nUR                  U R                  5        UR                  [        5        g )Nzsession %s openr!   r-   Úexecr,   )Ú	wantReply)r   r¤   Úidrn   r	   r­   ÚsendRequestr   ÚNSr”   Ú_cbSubsystemrl   rm   )r2   ÚfooÚrequestr³   s       r3   ÚchannelOpenÚSSHSession.channelOpen‚  s›   € Ü�ŠÐ! D§G¡GÑ+Ô,Ø�9‰9×Ñ˜[Ñ)×4Ñ4°S×9Ñ9Ø‰Gà!ˆGØ�I‰I×!Ñ!Øœ6Ÿ9š9 T§Y¡Y×%6Ñ%6°{Ñ%CÓDÐPQð "ð 
ˆð 	
�‰�d×'Ñ'Ô(Ø	�‰”WÕr6   c                 ó–  • [         R                  " 5       U l        U R                  R                  U 5        U R                  R                  U l        S nU R
                  R                  S   (       a*  U R
                  R                  S   nUS:w  a  [        U5      n[        R                  " [        U R                  U5      5      U l        g )Nr   r¨   )r   ÚFileTransferClientr�   ÚmakeConnectionÚdataReceivedrn   r	   r  r   Ú
StandardIOr‰   )r2   r×   rt   Úfns       r3   r!  ÚSSHSession._cbSubsystemŽ  sŽ   € Ü"×5Ò5Ó7ˆŒØ�‰×"Ñ" 4Ô(Ø ŸK™K×4Ñ4ˆÔØˆØ�9‰9×Ñ˜[×)Ø—‘×"Ñ" ;Ñ/ˆBØ�S‹yÜ˜“H�Ü×%Ò%¤k°$·+±+¸qÓ&AÓBˆ�
r6   rð  rG  ÚreturnNc                 óü   • U[         R                  :X  ah  [        R                  " S[	        U5      -  5        U R
                  R                  UR                  SS5      5        U R
                  R                  5         g g )Nzgot %s stderr datarŸ   Úbackslashreplace)	r   ÚEXTENDED_DATA_STDERRr   r¤   rD  rS   r£   r«   Úflush)r2   rð  rG  s      r3   ÚextReceivedÚSSHSession.extReceived™  s]   € Ø”
×/Ñ/Ó/Ü�GŠGÐ(¬3¨t«9Ñ4Ô5ðl �K‰K×Ñ˜dŸk™k¨'Ð3EÓFÔGØ�K‰K×ÑÕðq 0r6   c                 ód   • [         R                  " S5        U R                  R                  5         g )Nzgot eof)r   r¤   r   ÚloseWriteConnectionr–   s    r3   ÚeofReceivedÚSSHSession.eofReceivedÔ  s   € Ü�Š�	ÔØ�
‰
×&Ñ&Õ(r6   c                 ól   • [         R                  " SU -  5        U R                  R                  U 5        g )Nzremote side closed %s)r   r¤   rn   Ú	sendCloser–   s    r3   ÚcloseReceivedÚSSHSession.closeReceivedØ  s&   € Ü�ŠÐ'¨$Ñ.Ô/Ø�	‰	×Ñ˜DÕ!r6   c                 óP   •  [         R                  " 5         g ! [         a     g f = fr8   )r   r]   r^   r–   s    r3   ÚclosedÚSSHSession.closedÜ  s"   € ð	Ü�LŠL�NøÜó 	Ùð	ús   ‚ ˜
%¤%c                 ó8   • U R                   R                  5         g r8   )r   ÚpauseProducingr–   s    r3   ÚstopWritingÚSSHSession.stopWritingâ  s   € Ø�
‰
×!Ñ!Õ#r6   c                 ó8   • U R                   R                  5         g r8   )r   ÚresumeProducingr–   s    r3   ÚstartWritingÚSSHSession.startWritingå  s   € Ø�
‰
×"Ñ"Õ$r6   )r�   r)  r   )r9   r:   r;   r<   ræ   rª   rA   rJ   rS   r   r$  r!  r@   r2  r6  r:  r=  rA  rE  rF   r7   r6   r3   r  r  ~  sY   ‡ Ø€Dˆ%ÓØ—Z‘Z€FˆFÓò
ò	Cð9 ˜Sð 9 ¨ð 9 °$ô 9 òv)ò"òò$õ%r6   r  Ú__main__)6Ú__doc__rý  rà  rg   rS  rÝ   r  r+  rû  rJ   rÿ  Útypingr   r   r   r   Útwisted.conch.clientr   r   r	   Útwisted.conch.sshr
   r   r   r   Útwisted.internetr   r   r   r   Útwisted.protocolsr   Útwisted.pythonr   r   r   Útwisted.python.filepathr   ÚConchOptionsr   rV   ra   rU   rm   rv   rx   ÚLineReceiverr‰   ÚsetattrrÇ   ri   Ú
SSHChannelr  r9   r7   r6   r3   Ú<module>rT     sé   ðñ
ó Û Û Û Û 	Û 
Û Û Û 
Û 
ß 0Ó 0ç :Ñ :ß GÓ Gß 9Ó 9Ý #ß .Ñ .Ý ,ô&�G×(Ñ(ô &òDò,
òGò&	ò	÷%ñ %ôf"�%×$Ñ$ô f"ñR ˆ�W˜k×2Ñ2Ô 3ô'�J×,Ñ,ô 'ô
h%�×#Ñ#ô h%ðV ˆzÓÙ…Eð r6   