§
    Ètºf¢†  ã                   óú  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZmZmZmZ ddlmZmZmZ ddlmZmZmZmZ ddlmZmZmZmZ ddlmZ ddl m!Z!m"Z"m#Z# dd	l$m%Z%  G d
„ dej&        ¦  «        Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z, G d„ d¦  «        Z- G d„ dej.        ¦  «        Z/ e0e/de/j1        ¦  «          G d„ dej2        ¦  «        Z2 G d„ dej3        ¦  «        Z4e5dk    r e(¦   «          dS dS )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                   óÞ   — e Zd ZU dZdZg d¢g d¢g d¢g d¢gZeeeee	e
f                                    ed<    ej        dd	i ej        ¦   «          ej        d
¬¦  «        g¬¦  «        Zdd„ZdS )ÚClientOptionszˆ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                 óš   — d| d<   d|v r7|                      dd¦  «        \  }| d<   | d                              d¦  «         || d<   || d<   d S )NÚ Ú
remotePathú:é   ú/ÚhostÚ	localPath)ÚsplitÚrstrip)Úselfr-   r.   s      úY/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/conch/scripts/cftp.pyÚ	parseArgszClientOptions.parseArgs5   sd   € Øˆˆ\ÑØ�$ˆ;ˆ;Ø'+§z¢z°#°qÑ'9Ô'9Ñ$ˆD�$�|Ñ$Ø�Ô×%Ò% cÑ*Ô*Ð*ØˆˆV‰Ø%ˆˆ[ÑÐÐó    ©N)Ú__name__Ú
__module__Ú__qualname__ÚsynopsisÚlongdescr#   r   r   r   ÚstrÚintÚ__annotations__r   ÚCompletionsÚCompleteUserAtHostÚCompleteFilesÚcompDatar3   © r4   r2   r   r      sÜ   € € € € € € ð€Hð
	Bð ð 	WÐVÐVØQÐQÐQØVÐVÐVØMÐMÐMð	<€M�4˜˜X e¨C°¨H¤oÔ6Ô7Ô8ð ð ñ ð !ˆuÔ Ø"Ð$RÐSà$ˆEÔ$Ñ&Ô&ØˆEÔ lÐ3Ñ3Ô3ð
ðñ ô €Hð&ð &ð &ð &ð &ð &r4   r   c                  óB  — t           j        dd …         } d| v r0|                      d¦  «        }| ||dz   …         | z   } | |dz   |dz   …= t          ¦   «         }	  |j        | ¦  «         nB# t
          j        $ r0}t          d|z  ¦  «         t          j        d¦  «         Y d }~nd }~ww xY w|d         r7t           j	        }t          j        t           j        ¦  «         |t           _	        nt          j        ¦   «          t          |¦  «         t          j        ¦   «          d S )Nr+   z-lé   é   z	ERROR: %sr   )ÚsysÚargvÚindexr   ÚparseOptionsr   Ú
UsageErrorÚprintÚexitÚstdoutr   ÚstartLoggingÚstderrÚdiscardLogsÚ	doConnectr   Úrun)ÚargsÚir	   ÚuÚrealouts        r2   rR   rR   >   s   € ÝŒ8�A�B�BŒ<€DØˆt€|€|Ø�JŠJ�tÑÔˆØ�A˜˜A™�IŒ Ñ%ˆØ��Q‘˜˜Q™�ÐÝ‰oŒo€GðØˆÔ˜TÑ"Ô"Ð"Ð"øÝÔð ð ð Ýˆk˜A‰oÑÔÐÝŒ�‰Œˆˆˆˆˆˆøøøøðøøøð ˆu„~ð Ý”*ˆÝÔ�œÑ$Ô$Ð$Ø�Œ
ˆ
åŒÑÔÐÝˆgÑÔÐÝ„K�M„M€M€M€Ms   ÁA) Á)B(Á8&B#Â#B(c                  óœ   — da 	 t          j        ¦   «          n# t          $ r Y nw xY wt	          j        t          j        ¦   «         ¦  «         ‚ )NrD   )Ú
exitStatusr   ÚstopÚBaseExceptionr   Úerrr   ÚFailurerB   r4   r2   ÚhandleErrorr]   T   sT   € à€JðÝŒ‰ŒˆˆøÝð ð ð Øˆðøøøå„G�GŒOÑÔÑÔÐØ	s   „ ˜
%¤%c                 óö  — d| d         v r%| d                               dd¦  «        \  | d<   | d<   | d         }| d         st          j        ¦   «         | d<   | d         sd| d<   nt          | d         ¦  «        | d<   | d         }| d         }t	          ¦   «         }| |_        t          j        }t          j        | d         | |¦  «        }t          j	        ||| ||¦  «         
                    t          ¦  «         d S )Nú@r-   r+   ÚuserÚporté   )r/   ÚgetpassÚgetuserr<   ÚSSHConnectionr	   r   ÚverifyHostKeyÚSSHUserAuthClientr   Ú
addErrbackÚ_ebExit)r	   r-   ra   ÚconnÚvhkÚuaos         r2   rQ   rQ   _   s÷   € Ø
ˆg�fŒoÐÐØ+2°6¬?×+@Ò+@ÀÀaÑ+HÔ+HÑ(ˆ�‰˜ ™Ø�6Œ?€DØ�6Œ?ð ,Ý!œ/Ñ+Ô+ˆ�‰Ø�6Œ?ð /Øˆ�‰ˆå˜g fœoÑ.Ô.ˆ�‰Ø�6Œ?€DØ�6Œ?€DÝ‰?Œ?€DØ€D„LÝ
Ô
€CÝ
Ô
# G¨F¤O°W¸dÑ
CÔ
C€CÝ„O�D˜$ ¨¨cÑ2Ô2×=Ò=½gÑFÔFÐFÐFÐFr4   c                 óÐ   — t          | j        d¦  «        r| j        j        }nt          | ¦  «        }t          |¦  «         	 t	          j        ¦   «          d S # t          $ r Y d S w xY w)NÚvalue)Úhasattrrn   r;   rK   r   rY   rZ   )Úfr!   s     r2   ri   ri   r   sm   € ÝˆqŒw˜Ñ Ô ð ØŒGŒMˆˆå�‰FŒFˆÝ	ˆ!�H„H€HðÝŒ‰ŒˆˆˆøÝð ð ð Øˆˆðøøøs   ÁA Á
A%Á$A%c                  ó   — d S r5   rB   )rS   s    r2   Ú_ignorerr   ~   s   € Ø€Dr4   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚFileWrapperc                 ó€   — || _         d| _        |                     dd¦  «         |                     ¦   «         | _        d S )Nç        r   rD   )rp   ÚtotalÚseekÚtellÚsize©r1   rp   s     r2   Ú__init__zFileWrapper.__init__ƒ   s4   € ØˆŒØˆŒ
Ø	�Šˆq�!‰ŒˆØ—F’F‘H”HˆŒ	ˆ	ˆ	r4   c                 ó,   — t          | j        |¦  «        S r5   )Úgetattrrp   )r1   Úattrs     r2   Ú__getattr__zFileWrapper.__getattr__‰   s   € Ý�t”v˜tÑ$Ô$Ð$r4   N)r6   r7   r8   r|   r€   rB   r4   r2   rt   rt   ‚   s2   € € € € € ðð ð ð%ð %ð %ð %ð %r4   rt   c                   óŠ  — e Zd ZeZdZdZeZd@d„Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdAd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$dBd"„Z%d#„ Z&d$„ Z'd%„ Z(d&„ Z)d'„ Z*d(„ Z+d)„ Z,d*„ Z-d+„ Z.d,„ Z/d-„ Z0d.„ Z1d/„ Z2d0„ Z3d1„ Z4e4Z5d2„ Z6d3„ Z7d4„ Z8d5„ Z9d6„ Z:d7„ Z;d8„ Z<d9„ Z=d:„ Z>d;„ Z?d<„ Z@d=„ ZAd>„ ZBd?„ ZCdS )CÚStdioClientzcftp> ó   
Nc                 óH   — || _         d| _        || _        | rdpd| _        d S )Nr(   r+   r   )ÚclientÚcurrentDirectoryÚfileÚuseProgressBar)r1   r…   rp   s      r2   r|   zStdioClient.__init__•   s1   € ØˆŒØ "ˆÔØˆŒ	Ø#$˜u˜{¨Ð0¨qˆÔÐÐr4   c                 ój   — | j                              d¦  «                             | j        ¦  «         d S )Nr(   )r…   ÚrealPathÚaddCallbackÚ_cbSetCurDir©r1   s    r2   ÚconnectionMadezStdioClient.connectionMade›   s/   € ØŒ×Ò˜RÑ Ô ×,Ò,¨TÔ->Ñ?Ô?Ð?Ð?Ð?r4   c                 ó<   — || _         |                      ¦   «          d S r5   )r†   Ú_newLine©r1   Úpaths     r2   rŒ   zStdioClient._cbSetCurDirž   s   € Ø $ˆÔØ�Š‰Œˆˆˆr4   c                 óŠ   — t          |t          ¦  «        r|                     d¦  «        }| j                             |¦  «        S )Núutf-8)Ú
isinstancer;   ÚencodeÚ	transportÚwrite)r1   Úmsgs     r2   Ú_writeToTransportzStdioClient._writeToTransport¢   s;   € Ý�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCØŒ~×#Ò# CÑ(Ô(Ð(r4   c                 ó
  — | j         j        j        rd S t          |t          ¦  «        r|                     d¦  «        }t          j        d|z  ¦  «         |                     ¦   «         }|s|  	                    ¦   «          d S | j
        r'|                     d¦  «        rd| _        |dd …         }nd| _        |                      |¦  «        }|�6|                     | j        ¦  «         |                     | j        ¦  «         d S d S )Nr”   zgot line %sú-r+   r   )r…   r—   ÚlocalClosedr•   ÚbytesÚdecoder   r™   Úlstripr�   r‡   Ú
startswithÚignoreErrorsÚ_dispatchCommandr‹   Ú
_cbCommandrh   Ú
_ebCommand)r1   ÚlineÚds      r2   ÚlineReceivedzStdioClient.lineReceived§   sÿ   € ØŒ;Ô Ô,ð 	ØˆFÝ�d�EÑ"Ô"ð 	(Ø—;’;˜wÑ'Ô'ˆDÝŒ� Ñ$Ñ%Ô%Ð%Ø�{Š{‰}Œ}ˆØð 	Ø�MŠM‰OŒOˆOØˆFØŒ9ð 	"˜Ÿš¨Ñ-Ô-ð 	"Ø !ˆDÔØ˜˜˜”8ˆDˆDà !ˆDÔØ×!Ò! $Ñ'Ô'ˆØˆ=Ø�MŠM˜$œ/Ñ*Ô*Ð*Ø�LŠL˜œÑ)Ô)Ð)Ð)Ð)ð ˆ=r4   c                 ó6  — d|v r.|                      dd¦  «        \  }}|                     ¦   «         }n|d}}|                     d¦  «        r*| j        }|dd …         dz   |z                        ¦   «         }n?|                     ¦   «         }t          j        d|z  ¦  «         t          | d|z  d ¦  «        }|�t          j
        ||¦  «        S d|z  }|                      t          j        t          |¦  «        ¦  «        ¦  «         |                      ¦   «          d S )Nú r+   r(   ú!zlooking up cmd %szcmd_%szNo command called `%s')r/   r    r¡   Úcmd_EXECÚstripÚupperr   r™   r~   r   ÚmaybeDeferredr¥   r   r\   ÚNotImplementedErrorr�   )r1   r¦   ÚcommandÚrestrp   ÚerrMsgs         r2   r£   zStdioClient._dispatchCommand»   s  € Ø�$ˆ;ˆ;Ø ŸJšJ s¨AÑ.Ô.‰MˆG�TØ—;’;‘=”=ˆDˆDà  "�TˆGØ×Ò˜cÑ"Ô"ð 	8Ø”ˆAØ˜A˜B˜B”K #Ñ%¨Ñ,×3Ò3Ñ5Ô5ˆDˆDà—m’m‘o”oˆGÝŒGÐ'¨'Ñ1Ñ2Ô2Ð2Ý˜˜h¨Ñ0°$Ñ7Ô7ˆAØˆ=ÝÔ& q¨$Ñ/Ô/Ð/à-°Ñ9ˆFØ�OŠO�GœOÕ,?ÀÑ,GÔ,GÑHÔHÑIÔIÐIØ�MŠM‰OŒOˆOˆOˆOr4   c                 ó  — t          j        |¦  «         |                     t          t          j        t          t          ¦  «        }|t          k    r*|                      |  	                    d¦  «        ¦  «         d S |t          j        k    r2d|j
        j        |j
        j        fz  }|                      |¦  «         d S |t          t          fv r2d|j
        j        |j
        j        fz  }|                      |¦  «         d S d S )Nr(   zremote error %i: %s
zlocal error %i: %s
)r   r™   Útrapr°   r   Ú	SFTPErrorÚOSErrorÚIOErrorrš   Úcmd_HELPrn   ÚcodeÚmessageÚerrnoÚstrerror)r1   rp   Úer³   s       r2   Ú_printFailurezStdioClient._printFailureÏ   så   € ÝŒ�‰
Œ
ˆ
Ø�FŠFÕ&­Ô(>ÅÍÑQÔQˆØÕ#Ò#Ð#Ø×"Ò" 4§=¢=°Ñ#4Ô#4Ñ5Ô5Ð5Ð5Ð5Ø•,Ô(Ò(Ð(Ø,°´´¸a¼g¼oÐ/NÑNˆFØ×"Ò" 6Ñ*Ô*Ð*Ð*Ð*Ø•7�GÐ$Ð$Ð$Ø+¨q¬w¬}¸a¼gÔ>NÐ.OÑOˆFØ×"Ò" 6Ñ*Ô*Ð*Ð*Ð*ð %Ð$r4   c                 ón  — | j         j        j        rd S |                      | j        ¦  «         d| _        | j        ry| j                             ¦   «         }|s | j         j                             ¦   «          d S |                      |¦  «         |  	                    | 
                    ¦   «         ¦  «         d S d S )Nr   )r…   r—   r�   rš   Úpsr¢   r‡   ÚreadlineÚloseConnectionr¨   r­   )r1   Úls     r2   r�   zStdioClient._newLineÛ   s·   € ØŒ;Ô Ô,ð 	ØˆFØ×Ò˜tœwÑ'Ô'Ð'ØˆÔØŒ9ð 	-Ø”	×"Ò"Ñ$Ô$ˆAØð -Ø”Ô%×4Ò4Ñ6Ô6Ð6Ð6Ð6à×&Ò& qÑ)Ô)Ð)Ø×!Ò! !§'¢'¡)¤)Ñ,Ô,Ð,Ð,Ð,ð	-ð 	-r4   c                 ó  — |�it          |t          ¦  «        r|                     d¦  «        }|                      |¦  «         |                     d¦  «        s|                      d¦  «         |                      ¦   «          d S )Nr”   rƒ   )r•   r;   r–   rš   Úendswithr�   )r1   Úresults     r2   r¤   zStdioClient._cbCommandè   sx   € ØÐÝ˜&¥#Ñ&Ô&ð 0ØŸš wÑ/Ô/�Ø×"Ò" 6Ñ*Ô*Ð*Ø—?’? 5Ñ)Ô)ð .Ø×&Ò& uÑ-Ô-Ð-Ø�Š‰Œˆˆˆr4   c                 ó°   — |                       |¦  «         | j        r%| j        s| j        j                             ¦   «          |                      ¦   «          d S r5   )r¿   r‡   r¢   r…   r—   rÃ   r�   r{   s     r2   r¥   zStdioClient._ebCommandñ   sR   € Ø×Ò˜1ÑÔÐØŒ9ð 	3˜TÔ.ð 	3ØŒKÔ!×0Ò0Ñ2Ô2Ð2Ø�Š‰Œˆˆˆr4   c                 óX  — |                       |¦  «        \  }}|                     d¦  «        s|dz  }|r%t          j                             | j        |¦  «        pd}| j                             |¦  «        }|                     | j	        ¦  «         | 
                    | j        ¦  «         |S )Nr,   r(   )Ú_getFilenamerÆ   Úosr’   Újoinr†   r…   ÚopenDirectoryr‹   Ú_cbCdrh   r¥   )r1   r’   r²   ÚnewPathr§   s        r2   Úcmd_CDzStdioClient.cmd_CD÷   sš   € Ø×&Ò& tÑ,Ô,‰
ˆˆdØ�}Š}˜SÑ!Ô!ð 	Ø�C‰KˆDØÐD�2œ7Ÿ<š<¨Ô(=¸tÑDÔDÐJÈˆØŒK×%Ò% gÑ.Ô.ˆØ	�Š�d”jÑ!Ô!Ð!Ø	�Š�T”_Ñ%Ô%Ð%Øˆr4   c                 ó    — |                      ¦   «          | j                             |j        ¦  «        }|                     | j        ¦  «         |S r5   )Úcloser…   rŠ   Únamer‹   Ú	_cbCurDir)r1   Ú	directoryr§   s      r2   rÎ   zStdioClient._cbCd  sB   € Ø�ŠÑÔÐØŒK× Ò  ¤Ñ0Ô0ˆØ	�Š�d”nÑ%Ô%Ð%Øˆr4   c                 ó   — || _         d S r5   ©r†   r‘   s     r2   rÔ   zStdioClient._cbCurDir  s   € Ø $ˆÔÐÐr4   c                 óô   — |                      d d¦  «        \  }}|                      |¦  «        \  }}t          |¦  «        }| j                             |¦  «        }|                     | j        ||¬¦  «         |S )Nr+   )Úgrp©r/   rÊ   r<   r…   ÚgetAttrsr‹   Ú_cbSetUsrGrp)r1   r²   rÙ   r’   r§   s        r2   Ú	cmd_CHGRPzStdioClient.cmd_CHGRP
  óp   € Ø—J’J˜t QÑ'Ô'‰	ˆˆTØ×&Ò& tÑ,Ô,‰
ˆˆdÝ�#‰hŒhˆØŒK× Ò  Ñ&Ô&ˆØ	�Š�dÔ'¨°3ˆÑ7Ô7Ð7Øˆr4   c                 óö   — |                      d d¦  «        \  }}|                      |¦  «        \  }}t          |d¦  «        }| j                             |d|i¦  «        }|                     t          ¦  «         |S )Nr+   é   Úpermissions)r/   rÊ   r<   r…   ÚsetAttrsr‹   rr   )r1   r²   Úmodr’   r§   s        r2   Ú	cmd_CHMODzStdioClient.cmd_CHMOD  sp   € Ø—J’J˜t QÑ'Ô'‰	ˆˆTØ×&Ò& tÑ,Ô,‰
ˆˆdÝ�#�q‰kŒkˆØŒK× Ò  ¨°sÐ';Ñ<Ô<ˆØ	�Š•gÑÔÐØˆr4   c                 óô   — |                      d d¦  «        \  }}|                      |¦  «        \  }}t          |¦  «        }| j                             |¦  «        }|                     | j        ||¬¦  «         |S )Nr+   )ÚusrrÚ   )r1   r²   ræ   r’   r§   s        r2   Ú	cmd_CHOWNzStdioClient.cmd_CHOWN  rÞ   r4   c                 ó¸   — i }|d ur|p|d         |d<   |d ur|p|d         |d<   | j                              ||¦  «        }|                     t          ¦  «         |S )NÚuidÚgid)r…   râ   r‹   rr   )r1   Úattrsr’   ræ   rÙ   Únewr§   s          r2   rÜ   zStdioClient._cbSetUsrGrp"  sk   € ØˆØ �oÐ.¨3Ð>°%¸´,ˆˆE‰
Ø �oÐ.¨3Ð>°%¸´,ˆˆE‰
ØŒK× Ò   sÑ+Ô+ˆØ	�Š•gÑÔÐØˆr4   c                 ó  — |                       |¦  «        \  }}d|v sd|v rp|r:|                       |¦  «        \  }}t          j                             |¦  «        sdS nd}|                      |¦  «        }|                     | j        |¦  «         |S |r|                       |¦  «        \  }}n%t          j                             |¦  «        d         }t          j	        ||f¦  «         t          |dd¦  «        }t          | j        ¦  «                             |¦  «        }| j                             |j        t           j        i ¦  «        }|                     | j        |¦  «         |                     | j        |¦  «         |S )NÚ*ú?z'Wildcard get with non-directory target.r4   r+   Úwbr   )rÊ   rË   r’   ÚisdirÚ_remoteGlobr‹   Ú_cbGetMultipler/   r   r™   Úopenr   r†   Úchildr…   ÚopenFiler   ÚFXF_READÚ_cbGetOpenFilerh   Ú
_ebCloseLf)r1   r²   ÚremoteÚlocalr§   Úlfr’   s          r2   Úcmd_GETzStdioClient.cmd_GET*  sn  € Ø×(Ò(¨Ñ.Ô.‰ˆ�Ø�&ˆ=ˆ=˜C 6˜M˜MØð Ø"×/Ò/°Ñ5Ô5‘��tÝ”w—}’} UÑ+Ô+ð EØDÐDðEð �Ø× Ò  Ñ(Ô(ˆAØ�MŠM˜$Ô-¨uÑ5Ô5Ð5ØˆHØð 	-Ø×+Ò+¨DÑ1Ô1‰KˆE�4�4å”G—M’M &Ñ)Ô)¨!Ô,ˆEÝŒ�˜�Ñ Ô Ð Ý�%˜˜qÑ!Ô!ˆÝ˜Ô-Ñ.Ô.×4Ò4°VÑ<Ô<ˆØŒK× Ò  ¤­LÔ,AÀ2ÑFÔFˆØ	�Š�dÔ)¨2Ñ.Ô.Ð.Ø	�Š�T”_ bÑ)Ô)Ð)Øˆr4   c                 ó0   — |                       d ||¦  «        S r5   )Ú_cbGetMultipleNext)r1   Úfilesrû   s      r2   ró   zStdioClient._cbGetMultipleB  s   € à×&Ò& t¨U°EÑ:Ô:Ð:r4   c                 ó  — t          |t          j        ¦  «        r|                      |¦  «         nA|r?|                      |¦  «         |                     d¦  «        s|                      d¦  «         |sd S |                     d¦  «        d         }t          t          j	         
                    |t          j	                             |¦  «        d         ¦  «        dd¦  «        }t          | j        ¦  «                             |¦  «        }| j                             |j	        t"          j        i ¦  «        }|                     | j        |¦  «         |                     | j        |¦  «         |                     | j        ||¦  «         |S )Nú
r   r+   rð   )r•   r   r\   r¿   rš   rÆ   Úpoprô   rË   r’   rÌ   r/   r   r†   rõ   r…   rö   r   r÷   r‹   rø   rh   rù   ÚaddBothrÿ   )r1   Úresr   rû   rp   rü   r’   r§   s           r2   rÿ   zStdioClient._cbGetMultipleNextF  sL  € Ý�c�7œ?Ñ+Ô+ð 	-Ø×Ò˜sÑ#Ô#Ð#Ð#Øð 	-Ø×"Ò" 3Ñ'Ô'Ð'Ø—<’< Ñ%Ô%ð -Ø×&Ò& tÑ,Ô,Ð,Øð 	ØˆFØ�IŠI�a‰LŒL˜ŒOˆÝ•"”'—,’,˜u¥b¤g§m¢m°AÑ&6Ô&6°qÔ&9Ñ:Ô:¸DÀ!ÑDÔDˆÝ˜Ô-Ñ.Ô.×4Ò4°QÑ7Ô7ˆØŒK× Ò  ¤­LÔ,AÀ2ÑFÔFˆØ	�Š�dÔ)¨2Ñ.Ô.Ð.Ø	�Š�T”_ bÑ)Ô)Ð)Ø	�	Š	�$Ô)¨5°%Ñ8Ô8Ð8Øˆr4   c                 ó.   — |                      ¦   «          |S r5   )rÒ   )r1   rp   rü   s      r2   rù   zStdioClient._ebCloseLfX  s   € Ø
�Š‰
Œ
ˆ
Øˆr4   c                 ó^   — |                      ¦   «                              | j        ||¦  «        S r5   )rÛ   r‹   Ú_cbGetFileSize)r1   Úrfrü   s      r2   rø   zStdioClient._cbGetOpenFile\  s%   € Ø�{Š{‰}Œ}×(Ò(¨Ô)<¸bÀ"ÑEÔEÐEr4   c           
      óX  — t          j        |d         ¦  «        s2|                     ¦   «          |                     ¦   «          d|j        z  S |d         |_        | j        j        j        j        d         }| j        j        j        j        d         }d|_	        g }g }| j
                             ¦   «         }t          |¦  «        D ]2}	|                      d|||d||¦  «        }
|                     |
¦  «         Œ3t          j        |d	¬
¦  «        }|                     | j        ||¦  «         |S )Nrá   zCan't get non-regular file: %srz   r   r   rv   r(   r   r+   ©ÚfireOnOneErrback)ÚstatÚS_ISREGrÒ   rÓ   rz   r…   r—   rj   r	   rw   r   ÚsecondsÚrangeÚ
_cbGetReadÚappendr   ÚDeferredListr‹   Ú
_cbGetDone)r1   rë   r	  rü   Ú
bufferSizeÚnumRequestsÚdListÚchunksÚ	startTimerT   r§   Údls               r2   r  zStdioClient._cbGetFileSize_  s  € ÝŒ|˜E -Ô0Ñ1Ô1ð 	>Ø�HŠH‰JŒJˆJØ�HŠH‰JŒJˆJØ3°b´gÑ=Ð=Ø˜”-ˆŒØ”[Ô*Ô/Ô7¸ÔEˆ
Ø”kÔ+Ô0Ô8¸ÔDˆØˆŒØˆØˆØ”L×(Ò(Ñ*Ô*ˆ	Ý�{Ñ#Ô#ð 	ð 	ˆAØ—’  B¨¨F°A°zÀ9ÑMÔMˆAØ�LŠL˜‰OŒOˆOˆOÝÔ ¸Ð:Ñ:Ô:ˆØ
�Š�t”¨¨BÑ/Ô/Ð/Øˆ	r4   c                 ó\  — d}|D ]a}|dk    r d S ||d         k    rB|                      |¦  «        }|                     |||d         f¦  «         ||d         |z
  fc S |d         }Œbt          | j        j        j        j        d         ¦  «        }|                     |||z   f¦  «         ||fS )Nr   Úeofr+   r   )rH   Úinsertr<   r…   r—   rj   r	   r  )r1   r  ÚendÚchunkrT   ÚbufSizes         r2   Ú_getNextChunkzStdioClient._getNextChunkr  sÆ   € ØˆØð 	ð 	ˆEØ�eŠ|ˆ|Ø��Ø�e˜A”hŠˆØ—L’L Ñ'Ô'�Ø—’˜a # u¨Q¤x Ñ1Ô1Ð1Ø˜U 1œX¨™^Ð,Ð,Ð,Ð,Ø˜”(ˆCˆCÝ�d”kÔ+Ô0Ô8¸ÔFÑGÔGˆØ�Š�s˜C '™MÐ*Ñ+Ô+Ð+Ø�Wˆ~Ðr4   c           	      ó   — |rƒt          |t          j        ¦  «        rit          j        d|z  ¦  «         |}|                     t          ¦  «         |                     |||z   f¦  «        }	||	= |                     |	|df¦  «         në|rét          j        dt          |¦  «        z  ¦  «         | 
                    |¦  «         |                     |¦  «         t          |¦  «        |k    rkt          j        dt          |¦  «        |fz  ¦  «         |                     |||z   f¦  «        }	||	= |                     |	||t          |¦  «        z   f¦  «         |xj        t          |¦  «        z  c_        | j        r|                      ||¦  «         |                      |¦  «        }
|
sd S |
\  }}t          j        d|||z   fz  ¦  «         |                     ||¦  «        }|                     | j        ||||||¦  «         |S )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µ   ÚEOFErrorrH   r  Úlenrx   r˜   rw   rˆ   Ú_printProgressBarr!  Ú	readChunkr  r  )r1   Údatar	  rü   r  Ústartrz   r  ÚreasonrT   r  Úlengthr§   s                r2   r  zStdioClient._cbGetRead€  sö  € Øð 	"•J˜t¥W¤_Ñ5Ô5ð 	"ÝŒGÐ&¨Ñ-Ñ.Ô.Ð.ØˆFØ�KŠK�Ñ!Ô!Ð!Ø—’˜e U¨T¡\Ð2Ñ3Ô3ˆAØ�q�	Ø�MŠM˜!˜e U˜^Ñ,Ô,Ð,Ð,Øð 		"ÝŒGÐ'­#¨d©)¬)Ñ3Ñ4Ô4Ð4Ø�GŠG�E‰NŒNˆNØ�HŠH�T‰NŒNˆNÝ�4‰yŒy˜DÒ Ð Ý”Ð=ÅÀTÁÄÈDÐ@QÑQÑRÔRÐRØ—L’L %¨°©Ð!6Ñ7Ô7�Ø˜1�IØ—’˜a %¨µ°T±´Ñ):Ð!;Ñ<Ô<Ð<ØˆHŒH�˜D™	œ	Ñ!ˆHŒHØÔð 	2Ø×"Ò" 2 yÑ1Ô1Ð1Ø×"Ò" 6Ñ*Ô*ˆØð 	"ØˆFà!‰MˆE�6ÝŒÐ%¨°¸±Ð(?Ñ?Ñ@Ô@Ð@Ø�LŠL˜ Ñ'Ô'ˆØ	�	Š	�$”/ 2 r¨6°5¸&À)ÑLÔLÐLØˆr4   c                 óÖ   — t          j        d¦  «         |                     ¦   «          |                     ¦   «          | j        r|                      d¦  «         d|j        › d|j        › �S )Nzget doner  úTransferred ú to )r   r™   rÒ   rˆ   rš   rÓ   ©r1   Úignoredr	  rü   s       r2   r  zStdioClient._cbGetDonež  se   € ÝŒ�
ÑÔÐØ
�Š‰
Œ
ˆ
Ø
�Š‰
Œ
ˆ
ØÔð 	)Ø×"Ò" 4Ñ(Ô(Ð(Ø4˜bœgÐ4Ð4¨2¬7Ð4Ð4Ð4r4   c                 óÆ  — |                       |¦  «        \  }}d|v sd|v rl|r>|                       |¦  «        \  }}t          j                             | j        |¦  «        }nd}t          j        |¦  «        }|                      ||¦  «        S |r|                       |¦  «        \  }}n%t          j                             |¦  «        d         }|                      ||¦  «        S )a#  
        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Ú_putMultipleFilesr/   Ú_putSingleFile)r1   r²   rû   rú   r   s        r2   Úcmd_PUTzStdioClient.cmd_PUT¦  sâ   € ð ×'Ò'¨Ñ-Ô-‰ˆˆtð �%ˆ<ˆ<˜3 %˜<˜<Øð Ø#×0Ò0°Ñ6Ô6‘�˜ÝœŸš dÔ&;¸VÑDÔD��à�å”I˜eÑ$Ô$ˆEØ×)Ò)¨%°Ñ8Ô8Ð8ð ð 1Ø#×0Ò0°Ñ6Ô6‘�˜˜åœŸš uÑ-Ô-¨aÔ0�Ø×&Ò& u¨fÑ5Ô5Ð5r4   c                 ó6   — |                       d|g|d¬¦  «        S )aB  
        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)r1   rû   rú   s      r2   r3  zStdioClient._putSingleFileÅ  s#   € ð ×&Ò& t¨e¨W°fÀTÐ&ÑJÔJÐJr4   c                 ó0   — |                       d||¦  «        S )aV  
        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.
        Nr7  )r1   r   rú   s      r2   r2  zStdioClient._putMultipleFilesÔ  s   € ð ×&Ò& t¨U°FÑ;Ô;Ð;r4   Fc                 ó<  — t          |t          j        ¦  «        r|                      |¦  «         nk|rit          |t          ¦  «        r|                     d¦  «        }|                      |¦  «         |                     d¦  «        s|                      d¦  «         d}|re|sc	 |                     d¦  «        }t          |d¦  «        }n8# t          $ r+ |                      t          j        ¦   «         ¦  «         d}Y nw xY w|r|¯c|sdS |r|}n\t          j                             |¦  «        d         }t          j                             ||¦  «        }t          j        |||f¦  «         |                      ||¦  «        }	|	                     | j        ||¦  «         |	S )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ô   rZ   rË   r’   r/   rÌ   r   r™   Ú_putRemoteFiler  r8  )
r1   ÚpreviousResultr   r)   r6  ÚcurrentFileÚlocalStreamrú   rÓ   r§   s
             r2   r8  zStdioClient._cbPutMultipleNextã  sº  € õ( �n¥g¤oÑ6Ô6ð 	.Ø×Ò˜~Ñ.Ô.Ð.Ð.Øð 	.Ý˜.­#Ñ.Ô.ð @Ø!/×!6Ò!6°wÑ!?Ô!?�Ø×"Ò" >Ñ2Ô2Ð2Ø!×*Ò*¨5Ñ1Ô1ð .Ø×&Ò& uÑ-Ô-Ð-àˆØð 	#˜Kð 	#ð#Ø#Ÿiši¨™lœl�Ý" ;°Ñ5Ô5��øÝ ð #ð #ð #Ø×"Ò"¥7¤?Ñ#4Ô#4Ñ5Ô5Ð5Ø"���ð#øøøð	 ð 	#˜Kð 	#ð ð 	Ø�4àð 	0ØˆFˆFå”7—=’= Ñ-Ô-¨aÔ0ˆDÝ”W—\’\ *¨dÑ3Ô3ˆFÝŒG�T˜6 :Ð.Ñ/Ô/Ð/à×Ò ¨VÑ4Ô4ˆØ	�	Š	�$Ô)¨5°*Ñ=Ô=Ð=Øˆs   Â#%C	 Ã	2C>Ã=C>c                 ó@  — t           j                             | j        |¦  «        }t          j        t          j        z  t          j        z  }| j         	                    ||i ¦  «        }| 
                    | j        |¦  «         |                     | j        |¦  «         |S )aW  
        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‹   Ú_cbPutOpenFilerh   rù   )r1   r?  r)   rú   Úflagsr§   s         r2   r<  zStdioClient._putRemoteFile  s   € õ ”—’˜dÔ3°ZÑ@Ô@ˆÝÔ&­Ô)?Ñ?Å,ÔBXÑXˆØŒK× Ò  ¨°Ñ3Ô3ˆØ	�Š�dÔ)¨;Ñ7Ô7Ð7Ø	�Š�T”_ kÑ2Ô2Ð2Øˆr4   c                 óŒ  — | j         j        j        j        d         }| j        rt          |¦  «        }g }g }| j                             ¦   «         }t          |¦  «        D ]2}|  	                    d ||||¦  «        }|r| 
                    |¦  «         Œ3t          j        |d¬¦  «        }	|	                     | j        ||¦  «         |	S )Nr   r+   r  )r…   r—   rj   r	   rˆ   rt   r   r  r  Ú_cbPutWriter  r   r  r‹   Ú
_cbPutDone)
r1   r	  rü   r  r  r  r  rT   r§   r  s
             r2   rD  zStdioClient._cbPutOpenFile+  sÆ   € Ø”kÔ+Ô0Ô8¸ÔDˆØÔð 	!Ý˜R‘”ˆBØˆØˆØ”L×(Ò(Ñ*Ô*ˆ	Ý�{Ñ#Ô#ð 	 ð 	 ˆAØ× Ò   r¨2¨v°yÑAÔAˆAØð  Ø—’˜Q‘”�øÝÔ ¸Ð:Ñ:Ô:ˆØ
�Š�t”¨¨BÑ/Ô/Ð/Øˆ	r4   c                 ór  — |                       |¦  «        }|\  }}|                     |¦  «         |                     |¦  «        }	| j        r3|xj        t          |	¦  «        z  c_        |                      ||¦  «         |	r6|                     ||	¦  «        }
|
                     | j	        ||||¦  «         |
S d S r5   )
r!  rx   Úreadrˆ   rw   r$  r%  Ú
writeChunkr‹   rG  )r1   r/  r	  rü   r  r  r  r(  rz   r'  r§   s              r2   rG  zStdioClient._cbPutWrite:  sµ   € Ø×"Ò" 6Ñ*Ô*ˆØ‰ˆˆtØ
�Š�‰ŒˆØ�wŠw�t‰}Œ}ˆØÔð 	2ØˆHŒH�˜D™	œ	Ñ!ˆHŒHØ×"Ò" 2 yÑ1Ô1Ð1Øð 	Ø—’˜e TÑ*Ô*ˆAØ�MŠM˜$Ô*¨B°°F¸IÑFÔFÐFØˆHàˆFr4   c                 ó®   — |                      ¦   «          |                      ¦   «          | j        r|                      d¦  «         d|j        › d|j        › �S )Nr  r,  r-  )rÒ   rˆ   rš   rÓ   r.  s       r2   rH  zStdioClient._cbPutDoneI  sU   € Ø
�Š‰
Œ
ˆ
Ø
�Š‰
Œ
ˆ
ØÔð 	)Ø×"Ò" 4Ñ(Ô(Ð(Ø4˜bœgÐ4Ð4¨2¬7Ð4Ð4Ð4r4   c                 ó.   — t          j        |¦  «         d S r5   )rË   Úchdirr‘   s     r2   Úcmd_LCDzStdioClient.cmd_LCDP  s   € Ý
Œ�‰Œˆˆˆr4   c                 óú   ‡ — ‰                       |¦  «        \  }}‰                       |¦  «        \  }}t          ˆ fd„||f¦  «        \  }}‰ j                             ||¦  «                             t
          ¦  «        S )Nc                 óN   •— t           j                             ‰j        | ¦  «        S r5   ©rË   r’   rÌ   r†   ©Úxr1   s    €r2   ú<lambda>z$StdioClient.cmd_LN.<locals>.<lambda>W  ó   ø€ •b”g—l’l 4Ô#8¸!Ñ<Ô<€ r4   )rÊ   Úmapr…   ÚmakeLinkr‹   rr   )r1   r²   ÚlinkpathÚ
targetpaths   `   r2   Úcmd_LNzStdioClient.cmd_LNS  s�   ø€ Ø×*Ò*¨4Ñ0Ô0‰ˆ�$Ø×,Ò,¨TÑ2Ô2Ñˆ
�DÝ"Ø<Ð<Ð<Ð<¸xÈÐ>Tñ 
ô  
Ñˆ�*ð Œ{×#Ò# H¨jÑ9Ô9×EÒEÅgÑNÔNÐNr4   c                 ó^  — g }|                      ¦   «         }|r…|d         r}|d         d         dk    rk|                     d¦  «        dd …         }|D ]/}|dk    r |j        d¦  «         Œ|dk    r |j        d¦  «         Œ0|r|d         r|d         d         dk    °kd                     |¦  «        }|                      |¦  «        \  }}|s| j        d	z   }n%t          j                             | j        |¦  «        }|                      |¦  «        }| 	                    | j
        |¦  «         |S )
Nr   rœ   r+   rÄ   ÚverboseÚaÚallrª   r,   )r/   r  r  rÌ   rÊ   r†   rË   r’   rò   r‹   Ú_cbDisplayFiles)r1   r²   r	   ÚoptsÚor’   ÚfullPathr§   s           r2   Úcmd_LSzStdioClient.cmd_LS[  sI  € ð ˆØ�zŠz‰|Œ|ˆØð 	*�t˜A”wð 	* 4¨¤7¨1¤:°Ò#4Ð#4Ø—8’8˜A‘;”;˜q˜r˜r”?ˆDØð *ð *�Ø˜’8�8Ø"�G”N 9Ñ-Ô-Ð-Ð-Ø˜#’X�XØ"�G”N 5Ñ)Ô)Ð)øð ð 	*�t˜A”wð 	* 4¨¤7¨1¤:°Ò#4Ð#4ð �xŠx˜‰~Œ~ˆØ×&Ò& tÑ,Ô,‰
ˆˆdØð 	AØÔ,¨sÑ2ˆHˆHå”w—|’| DÔ$9¸4Ñ@Ô@ˆHØ×Ò˜XÑ&Ô&ˆØ	�Š�dÔ*¨GÑ4Ô4Ð4Øˆr4   c                 ó¶   — |                      ¦   «          d|vrd„ |D ¦   «         }d|v rd„ |D ¦   «         }nd„ |D ¦   «         }|sd S d                     |¦  «        S )Nr_  c                 óH   — g | ]}|d                                d¦  «        °|‘Œ S )r   ó   .)r¡   ©Ú.0rp   s     r2   ú
<listcomp>z/StdioClient._cbDisplayFiles.<locals>.<listcomp>w  s-   € ÐCÐCÐC˜1¨Q¨q¬T¯_ª_¸TÑ-BÔ-BÐC�QÐCÐCÐCr4   r]  c                 ó   — g | ]
}|d          ‘ŒS )r+   rB   rh  s     r2   rj  z/StdioClient._cbDisplayFiles.<locals>.<listcomp>y  ó   € Ð)Ð)Ð)˜a�Q�q”TÐ)Ð)Ð)r4   c                 ó   — g | ]
}|d          ‘ŒS ©r   rB   rh  s     r2   rj  z/StdioClient._cbDisplayFiles.<locals>.<listcomp>{  rl  r4   rƒ   )ÚsortrÌ   )r1   r   r	   Úliness       r2   r`  zStdioClient._cbDisplayFilest  s   € Ø�
Š
‰ŒˆØ˜ÐÐØCÐC ÐCÑCÔCˆEØ˜ÐÐØ)Ð) 5Ð)Ñ)Ô)ˆEˆEà)Ð) 5Ð)Ñ)Ô)ˆEØð 	%Ø�4à—:’:˜eÑ$Ô$Ð$r4   c                 óâ   — |                       |¦  «        \  }}t          j                             | j        |¦  «        }| j                             |i ¦  «                             t          ¦  «        S r5   )	rÊ   rË   r’   rÌ   r†   r…   ÚmakeDirectoryr‹   rr   ©r1   r’   r²   s      r2   Ú	cmd_MKDIRzStdioClient.cmd_MKDIR�  sW   € Ø×&Ò& tÑ,Ô,‰
ˆˆdÝŒw�|Š|˜DÔ1°4Ñ8Ô8ˆØŒ{×(Ò(¨¨rÑ2Ô2×>Ò>½wÑGÔGÐGr4   c                 óà   — |                       |¦  «        \  }}t          j                             | j        |¦  «        }| j                             |¦  «                             t          ¦  «        S r5   )	rÊ   rË   r’   rÌ   r†   r…   ÚremoveDirectoryr‹   rr   rs  s      r2   Ú	cmd_RMDIRzStdioClient.cmd_RMDIR†  sU   € Ø×&Ò& tÑ,Ô,‰
ˆˆdÝŒw�|Š|˜DÔ1°4Ñ8Ô8ˆØŒ{×*Ò*¨4Ñ0Ô0×<Ò<½WÑEÔEÐEr4   c                 ó4   — t          j        d|z  ¦  «         d S )Nzmkdir %s©rË   Úsystemr‘   s     r2   Ú
cmd_LMKDIRzStdioClient.cmd_LMKDIR‹  s   € Ý
Œ	�*˜tÑ#Ñ$Ô$Ð$Ð$Ð$r4   c                 óà   — |                       |¦  «        \  }}t          j                             | j        |¦  «        }| j                             |¦  «                             t          ¦  «        S r5   )	rÊ   rË   r’   rÌ   r†   r…   Ú
removeFiler‹   rr   rs  s      r2   Úcmd_RMzStdioClient.cmd_RMŽ  sU   € Ø×&Ò& tÑ,Ô,‰
ˆˆdÝŒw�|Š|˜DÔ1°4Ñ8Ô8ˆØŒ{×%Ò% dÑ+Ô+×7Ò7½Ñ@Ô@Ð@r4   c                 ó4   — t          j        d|z  ¦  «         d S )Nzls %sry  )r1   r²   s     r2   Úcmd_LLSzStdioClient.cmd_LLS“  s   € Ý
Œ	�'˜D‘.Ñ!Ô!Ð!Ð!Ð!r4   c                 óú   ‡ — ‰                       |¦  «        \  }}‰                       |¦  «        \  }}t          ˆ fd„||f¦  «        \  }}‰ j                             ||¦  «                             t
          ¦  «        S )Nc                 óN   •— t           j                             ‰j        | ¦  «        S r5   rR  rS  s    €r2   rU  z(StdioClient.cmd_RENAME.<locals>.<lambda>š  rV  r4   )rÊ   rW  r…   Ú
renameFiler‹   rr   )r1   r²   ÚoldpathÚnewpaths   `   r2   Ú
cmd_RENAMEzStdioClient.cmd_RENAME–  s€   ø€ Ø×)Ò)¨$Ñ/Ô/‰ˆ�Ø×)Ò)¨$Ñ/Ô/‰ˆ�ÝØ<Ð<Ð<Ð<¸wÈÐ>Pñ
ô 
Ñˆ�ð Œ{×%Ò% g¨wÑ7Ô7×CÒCÅGÑLÔLÐLr4   c                 óB   — | j         j                             ¦   «          d S r5   )r…   r—   rÃ   ©r1   r/  s     r2   Úcmd_EXITzStdioClient.cmd_EXITž  s   € ØŒÔ×,Ò,Ñ.Ô.Ð.Ð.Ð.r4   c                 óx   — d| j         j        z  }t          |t          ¦  «        r|                     d¦  «        }|S )NzSFTP version %ir”   )r…   Úversionr•   r;   r–   )r1   r/  r‹  s      r2   Úcmd_VERSIONzStdioClient.cmd_VERSION£  s9   € Ø# d¤kÔ&9Ñ9ˆÝ�g�sÑ#Ô#ð 	.Ø—n’n WÑ-Ô-ˆGØˆr4   c                 ó   — dS )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'.
rB   rˆ  s     r2   r¹   zStdioClient.cmd_HELP©  s   € ðð r4   c                 ó   — | j         S r5   r×   rˆ  s     r2   Úcmd_PWDzStdioClient.cmd_PWDÄ  s   € ØÔ$Ð$r4   c                 ó(   — t          j        ¦   «         S r5   )rË   Úgetcwdrˆ  s     r2   Úcmd_LPWDzStdioClient.cmd_LPWDÇ  s   € ÝŒy‰{Œ{Ðr4   c                 ó8   — | j          | _         d| j         rdpdz  S )Nz%ssing progess bar.ÚUzNot u)rˆ   rˆ  s     r2   Úcmd_PROGRESSzStdioClient.cmd_PROGRESSÊ  s(   € Ø"&Ô"5Ð5ˆÔØ$¨Ô(;Ð(CÀÐ(NÀwÑOÐOr4   c                 óÒ   — | j                              t          j        ¦   «         ¦  «        d         }|sd}|rd|g}t	          j        ||d¬¦  «        S t          j        |¦  «         dS )zb
        Run C{rest} using the user's shell (or /bin/sh if they do not have
        one).
        é   z/bin/shz-cr+   )ÚerrortooN)Ú_pwdÚgetpwnamrc   rd   r   ÚgetProcessOutputrË   rz  )r1   r²   ÚshellÚcmdss       r2   r¬   zStdioClient.cmd_EXECÎ  sr   € ð
 ”	×"Ò"¥7¤?Ñ#4Ô#4Ñ5Ô5°aÔ8ˆØð 	ØˆEØð 	Ø˜$�<ˆDÝÔ)¨%°ÀÐBÑBÔBÐBåŒI�eÑÔÐÐÐr4   c                 ó¨  — t          j        d|z  ¦  «         t          j                             |¦  «        \  }}d|v sd|v rd}nd}|rT|sR| j                             |¦  «        }|                     | j        d¦  «         | 	                    | j
        ||¦  «         n5| j                             |¦  «        }|                     | j        |¦  «         |S )Nzlooking up %srî   rï   r+   r   r(   )r   r™   rË   r’   r/   r…   rÍ   r‹   Ú_cbOpenListrh   Ú_ebNotADirectory)r1   rc  ÚheadÚtailr1  r§   s         r2   rò   zStdioClient._remoteGlobÞ  sÓ   € ÝŒ� (Ñ*Ñ+Ô+Ð+Ý”W—]’] 8Ñ,Ô,‰
ˆˆdØ�$ˆ;ˆ;˜# ˜+˜+ØˆDˆDàˆDØð 	2˜ð 	2à”×)Ò)¨(Ñ3Ô3ˆAØ�MŠM˜$Ô*¨BÑ/Ô/Ð/Ø�LŠL˜Ô.°°dÑ;Ô;Ð;Ð;à”×)Ò)¨$Ñ/Ô/ˆAØ�MŠM˜$Ô*¨DÑ1Ô1Ð1Øˆr4   c                 ól   — g }|                      ¦   «         }|                     | j        |||¦  «         |S r5   )rJ  r  Ú_cbReadFile)r1   rÕ   r1  r   r§   s        r2   rŸ  zStdioClient._cbOpenListï  s6   € ØˆØ�NŠNÑÔˆØ	�	Š	�$Ô" E¨9°dÑ;Ô;Ð;Øˆr4   c                 óp   — | j                              |¦  «        }|                     | j        |¦  «         |S r5   )r…   rÍ   r‹   rŸ  )r1   r)  r’   r1  r§   s        r2   r   zStdioClient._ebNotADirectoryõ  s3   € ØŒK×%Ò% dÑ+Ô+ˆØ	�Š�dÔ&¨Ñ-Ô-Ð-Øˆr4   c                 ó”  ‡— t          |t          j        ¦  «        s|‰r2 ‰j        d¦  «        Š|                     ˆfd„|D ¦   «         ¦  «         n|                     |¦  «         |                     ¦   «         }|                     | j        ||‰¦  «         |S |}|                     t          ¦  «         | 
                    ¦   «          |S )Nr”   c                 óJ   •— g | ]}t          j         |d          ‰¦  «        ¯|‘Œ S rn  )Úfnmatch)ri  rp   r1  s     €r2   rj  z+StdioClient._cbReadFile.<locals>.<listcomp>þ  s.   ø€ Ð$UÐ$UÐ$U¨1½¼ÈÈ1ÌÈtÑ9TÔ9TÐ$U QÐ$UÐ$UÐ$Ur4   )r•   r   r\   r–   ÚextendrJ  r  r¤  rµ   r#  rÒ   )r1   r   ÚmatchedFilesrÕ   r1  r§   r)  s       `  r2   r¤  zStdioClient._cbReadFileú  sÌ   ø€ Ý˜%¥¤Ñ1Ô1ð 	 Øð +Ø"�t”{ 7Ñ+Ô+�Ø×#Ò#Ð$UÐ$UÐ$UÐ$U°Ð$UÑ$UÔ$UÑVÔVÐVÐVà×#Ò# EÑ*Ô*Ð*Ø—’Ñ Ô ˆAØ�IŠI�dÔ&¨°iÀÑFÔFÐFØˆHàˆFØ�KŠK�Ñ!Ô!Ð!Ø�OŠOÑÔÐØÐr4   c                 ó@   — g d¢}|D ]\  }}||k    r nŒd||z  z  |z   S )N))l           ÚPB)l        ÚTB)i   @ÚGB)i   ÚMB)i   ÚkB)r+   r   z%.1frB   )r1   rz   Ú_abbrevsÚfactorÚsuffixs        r2   Ú_abbrevSizezStdioClient._abbrevSize
  sO   € ð
ð 
ð 
ˆð 'ð 	ð 	‰NˆF�FØ�fŠ}ˆ}Ø�ð à˜ ™Ñ'¨&Ñ0Ð0r4   c                 óÈ   — |dk    r<t          |dz  ¦  «        }|d|z  z  }t          |dz  ¦  «        }|d|z  z  }d|||fz  S t          |dz  ¦  «        }|d|z  z  }d||fz  S )Ni  é<   z%i:%02i:%02iz	%02i:%02i)r<   )r1   ÚtÚhoursÚminss       r2   Ú_abbrevTimezStdioClient._abbrevTime  s�   € ØˆtŠ8ˆ8Ý˜˜D™‘M”MˆEØ�˜‘ÑˆAÝ�q˜2‘v‘;”;ˆDØ��d‘‰NˆAØ! U¨D°!Ð$4Ñ4Ð4å�q˜2‘v‘;”;ˆDØ��d‘‰NˆAØ $¨ Ñ*Ð*r4   c                 óv  — | j                              ¦   «         |z
  }|j        }	 t          j        dt          j        dt          j        d¦  «        ¦  «        }n# t          $ r ddg}Y nw xY w|dk    rd}n||z  }|r|j
        |z
  |z  }nd}|j        }|j
        r||j
        z  dz  }	nd}	d|	|                      |¦  «        |                      |¦  «        |                      |¦  «        fz  }
|d	         t          |¦  «        t          |
¦  «        z   d	z   z
  d
z  }d|› |› |
› �}|                      |¦  «         dS )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   rv   éd   z%3i%% %s %sps %s r+   rª   ú)r   r  rw   ÚstructÚunpackÚfcntlÚioctlÚttyÚ
TIOCGWINSZr·   rz   rÓ   r´  rº  r$  rš   )r1   rp   r  Údiffrw   ÚwinSizeÚspeedÚtimeLeftÚfrontÚ
percentageÚbackÚspacesr±   s                r2   r%  zStdioClient._printProgressBar&  st  € ð Œ|×#Ò#Ñ%Ô%¨	Ñ1ˆØ”ˆð	!Ý”m D­%¬+°a½¼ÈÑ*TÔ*TÑUÔUˆGˆGøÝð 	!ð 	!ð 	!Ø˜R�jˆGˆGˆGð	!øøøà�3Š;ˆ;ØˆEˆEà˜D‘LˆEØð 	Øœ ™¨%Ñ/ˆHˆHàˆHØ”ˆØŒ6ð 	Ø !¤&™.¨CÑ/ˆJˆJàˆJØ"ØØ×Ò˜UÑ#Ô#Ø×Ò˜UÑ#Ô#Ø×Ò˜XÑ&Ô&ð	&
ñ 
ˆð ˜!”*¥ E¡
¤
­S°©Y¬YÑ 6¸Ñ :Ñ;¸sÑBˆØ,�uÐ,˜fÐ, dÐ,Ð,ˆØ×Ò˜wÑ'Ô'Ð'Ð'Ð's   ¥3A ÁA*Á)A*c                 óì  — |                      ¦   «         }|sdS |d         dv �rg }t          |¦  «        }	 t          dt          |¦  «        ¦  «        D ]Á}||         }||d         k    rId                     |¦  «        d                     ||dz   d…         ¦  «                             ¦   «         fc S |dk    rA||= ||         dvrt          d	||         › �¦  «        ‚|                     ||         ¦  «         Œ¦|                     ||         ¦  «         ŒÂn# t          $ r t          d
¦  «        ‚w xY w|                     dd¦  «        }t          |¦  «        dk    r
|d         dfS |d         |d         fS )aW  
        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  r$  rÌ   r    Ú
IndexErrorr  r/   )r1   r¦   ÚretrT   Úcs        r2   rÊ   zStdioClient._getFilenameP  s•  € ð �zŠz‰|Œ|ˆØð 	Ø�6Ø�Œ7�eÐÑØˆCÝ˜‘:”:ˆDð7Ý˜q¥# d¡)¤)Ñ,Ô,ð 
,ð 
,�AØ˜Qœ�AØ˜D œG’|�|Ø!Ÿwšw s™|œ|¨R¯WªW°T¸!¸a¹%¸'¸'´]Ñ-CÔ-C×-JÒ-JÑ-LÔ-LÐLÐLÐLÐLØ˜dš˜Ø  ˜GØ œ7¨'Ð1Ð1Ý",Ð-F¸TÀ!¼WÐ-FÐ-FÑ"GÔ"GÐGØŸ
š
 4¨¤7Ñ+Ô+Ð+Ð+àŸ
š
 4¨¤7Ñ+Ô+Ð+Ð+ð
,øõ ð 7ð 7ð 7Ý Ð!5Ñ6Ô6Ð6ð7øøøà�jŠj˜˜qÑ!Ô!ˆÝˆs‰8Œ8�qŠ=ˆ=Ø�q”6˜2�:Ðà�q”6˜3˜qœ6�>Ð!s   ¶A;D Â2A#D ÄD0r5   )NN)F)Dr6   r7   r8   Ú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  r  r4  r3  r2  r8  r<  rD  rG  rH  rO  r[  rd  r`  rt  rw  r{  r~  r€  r†  r‰  Úcmd_QUITrŒ  r¹   r�  r’  r•  r¬   rò   rŸ  r   r¤  r´  rº  r%  rÊ   rB   r4   r2   r‚   r‚   �   sÐ  € € € € € Ø€Dà	€BØ€Ià€Gð1ð 1ð 1ð 1ð@ð @ð @ðð ð ð)ð )ð )ð
*ð *ð *ð(ð ð ð(
+ð 
+ð 
+ð-ð -ð -ðð ð ðð ð ðð ð ðð ð ð%ð %ð %ðð ð ðð ð ðð ð ðð ð ð ðð ð ð0;ð ;ð ;ðð ð ð$ð ð ðFð Fð Fðð ð ð&ð ð ðð ð ð<5ð 5ð 5ð6ð 6ð 6ð>Kð Kð Kð<ð <ð <ð3ð 3ð 3ð 3ðjð ð ð&ð ð ðð ð ð5ð 5ð 5ðð ð ðOð Oð Oðð ð ð2%ð %ð %ðHð Hð Hð
Fð Fð Fð
%ð %ð %ðAð Að Að
"ð "ð "ðMð Mð Mð/ð /ð /ð €Hðð ð ðð ð ð6%ð %ð %ðð ð ðPð Pð Pðð ð ð ð ð ð"ð ð ðð ð ð
 ð  ð  ð 1ð 1ð 1ð 
+ð 
+ð 
+ð((ð ((ð ((ðT#"ð #"ð #"ð #"ð #"r4   r‚   zcmd_?c                   ó   — e Zd Zd„ ZdS )re   c                 óH   — |                       t          ¦   «         ¦  «         d S r5   )ÚopenChannelÚ
SSHSessionr�   s    r2   ÚserviceStartedzSSHConnection.serviceStartedz  s    € Ø×Ò�™œÑ&Ô&Ð&Ð&Ð&r4   N)r6   r7   r8   rÜ  rB   r4   r2   re   re   y  s#   € € € € € ð'ð 'ð 'ð 'ð 'r4   re   c                   ót   — e Zd ZU dZeed<   ej        Zeed<   d„ Z	d„ Z
dededd	fd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd	S )rÛ  s   sessionrÓ   rO   c                 óz  — t          j        d| j        z  ¦  «         | j        j        d                              d¦  «        rd}nd}| j                             | |t          j        | j        j        d         ¦  «        d¬¦  «        }| 	                    | j
        ¦  «         |                     t          ¦  «         d S )Nzsession %s openr    r,   Úexecr+   )Ú	wantReply)r   r™   Úidrj   r	   r¡   ÚsendRequestr   ÚNSr‹   Ú_cbSubsystemrh   ri   )r1   ÚfooÚrequestr§   s       r2   ÚchannelOpenzSSHSession.channelOpen‚  s¯   € ÝŒÐ! D¤GÑ+Ñ,Ô,Ð,ØŒ9Ô˜[Ô)×4Ò4°SÑ9Ô9ð 	"ØˆGˆGà!ˆGØŒI×!Ò!Ø�'�6œ9 T¤YÔ%6°{Ô%CÑDÔDÐPQð "ñ 
ô 
ˆð 	
�Š�dÔ'Ñ(Ô(Ð(Ø	�Š•WÑÔÐÐÐr4   c                 óZ  — t          j        ¦   «         | _        | j                             | ¦  «         | j        j        | _        d }| j        j        d         r'| j        j        d         }|dk    rt          |¦  «        }t          j	        t          | j        |¦  «        ¦  «        | _        d S )Nr   rœ   )r   ÚFileTransferClientr…   ÚmakeConnectionÚdataReceivedrj   r	   rô   r   Ú
StandardIOr‚   )r1   rÇ   rp   Úfns       r2   rä  zSSHSession._cbSubsystemŽ  s‘   € Ý"Ô5Ñ7Ô7ˆŒØŒ×"Ò" 4Ñ(Ô(Ð(Ø œKÔ4ˆÔØˆØŒ9Ô˜[Ô)ð 	Ø”Ô" ;Ô/ˆBØ�SŠyˆyÝ˜‘H”H�ÝÔ%¥k°$´+¸qÑ&AÔ&AÑBÔBˆŒ
ˆ
ˆ
r4   r·  r'  ÚreturnNc                 ó   — |t           j        k    rmt          j        dt	          |¦  «        z  ¦  «         | j                             |                     dd¦  «        ¦  «         | j                             ¦   «          d S d S )Nzgot %s stderr datar”   Úbackslashreplace)	r   ÚEXTENDED_DATA_STDERRr   r™   r$  rO   r˜   rŸ   Úflush)r1   r·  r'  s      r2   ÚextReceivedzSSHSession.extReceived™  sw   € Ø•
Ô/Ò/Ð/ÝŒGÐ(­3¨t©9¬9Ñ4Ñ5Ô5Ð5ðl ŒK×Ò˜dŸkšk¨'Ð3EÑFÔFÑGÔGÐGØŒK×ÒÑÔÐÐÐðq 0Ð/r4   c                 ó`   — t          j        d¦  «         | j                             ¦   «          d S )Nzgot eof)r   r™   r   ÚloseWriteConnectionr�   s    r2   ÚeofReceivedzSSHSession.eofReceivedÔ  s,   € ÝŒ�	ÑÔÐØŒ
×&Ò&Ñ(Ô(Ð(Ð(Ð(r4   c                 óh   — t          j        d| z  ¦  «         | j                             | ¦  «         d S )Nzremote side closed %s)r   r™   rj   Ú	sendCloser�   s    r2   ÚcloseReceivedzSSHSession.closeReceivedØ  s4   € ÝŒÐ'¨$Ñ.Ñ/Ô/Ð/ØŒ	×Ò˜DÑ!Ô!Ð!Ð!Ð!r4   c                 óP   — 	 t          j        ¦   «          d S # t          $ r Y d S w xY wr5   )r   rY   rZ   r�   s    r2   ÚclosedzSSHSession.closedÜ  s8   € ð	ÝŒL‰NŒNˆNˆNˆNøÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ —
%¤%c                 ó8   — | j                              ¦   «          d S r5   )r   ÚpauseProducingr�   s    r2   ÚstopWritingzSSHSession.stopWritingâ  s   € ØŒ
×!Ò!Ñ#Ô#Ð#Ð#Ð#r4   c                 ó8   — | j                              ¦   «          d S r5   )r   ÚresumeProducingr�   s    r2   ÚstartWritingzSSHSession.startWritingå  s   € ØŒ
×"Ò"Ñ$Ô$Ð$Ð$Ð$r4   )r6   r7   r8   rÓ   rž   r=   rF   rO   r   rç  rä  r<   ró  rö  rù  rû  rþ  r  rB   r4   r2   rÛ  rÛ  ~  sÎ   € € € € € € Ø€Dˆ%ÐÐÑØ”Z€FˆFÐÐÑð
ð 
ð 
ð	Cð 	Cð 	Cð9 ˜Sð 9 ¨ð 9 °$ð 9 ð 9 ð 9 ð 9 ðv)ð )ð )ð"ð "ð "ðð ð ð$ð $ð $ð%ð %ð %ð %ð %r4   rÛ  Ú__main__)6Ú__doc__rÃ  r¨  rc   r1  rË   rÕ  r  rÁ  rF   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   rR   r]   rQ   ri   rr   rt   ÚLineReceiverr‚   Úsetattrr¹   re   Ú
SSHChannelrÛ  r6   rB   r4   r2   ú<module>r     s±  ðð
ð ð €€€Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø 
€
€
€
Ø 
€
€
€
Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø #Ð #Ð #Ð #Ð #Ð #Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð&ð &ð &ð &ð &�GÔ(ñ &ô &ð &ðDð ð ð,
ð 
ð 
ðGð Gð Gð&	ð 	ð 	ð	ð 	ð 	ð%ð %ð %ð %ð %ñ %ô %ð %ðf"ð f"ð f"ð f"ð f"�%Ô$ñ f"ô f"ð f"ðR €ˆ�W˜kÔ2Ñ 3Ô 3Ð 3ð'ð 'ð 'ð 'ð '�JÔ,ñ 'ô 'ð 'ð
h%ð h%ð h%ð h%ð h%�Ô#ñ h%ô h%ð h%ðV ˆzÒÐØ€C�E„E€E€E€Eð Ðr4   