ó
    6°hÆ`  ã                  óB  • S SK Jr  S SKrS SKrS SKrS SKJrJr  SSKJr  SSK	J
r
JrJrJrJrJr  SSKJrJrJr  \R(                  (       a  S SKJr  S	 rSS
 jr      SS jr " S S5      rS r SS jrS rS r " S S\R<                  5      r  SS jr  SS jr!g)é    )ÚannotationsN)ÚCallableÚOptionalé   )Ú_)ÚerrorÚpycompatÚutilÚwireprototypesÚwireprotov1peerÚwireprotov1server)ÚprocutilÚ
stringutilÚurlutil)ÚSetc                óz   • U (       d  U $ [         R                  " SU 5      (       a  U $ SU R                  SS5      -  $ )z=quote a string for the remote shell ... which we assume is shs   [a-zA-Z0-9@%_+=:,./-]*$s   '%s'ó   's   '\'')ÚreÚmatchÚreplace)Úss    Ú3/usr/lib/python3/dist-packages/mercurial/sshpeer.pyÚ_serverquoter   %   s7   € æØˆÜ	‡x‚xÐ*¨A×.Ñ.ØˆØ�Q—Y‘Y˜t XÓ.Ñ.Ð.ó    c                ó  • U(       az  UR                   (       dh  [        R                  " U5      nU(       aJ  U(       a  U R                  OU R                  nUR                  5        H  nU" [        S5      US5        M     gggg)zUdisplay all data currently available on pipe as remote output.

This is non blocking.ó   remote: ó   
N)Úclosedr   ÚreadpipeÚwarnÚstatusÚ
splitlinesr   )ÚuiÚpiper    r   ÚdisplayÚls         r   Ú_forwardoutputr'   .   s]   € ö �D—K—KÜ×Ò˜dÓ#ˆÞÞ!%�b—g’g¨2¯9©9ˆGØ—\‘\–^�Ùœ˜+›¨¨5Ö1ò $ð ð  €tr   c                ó�   • [        U5      nU " U5      nUc  SnX2:  a(  [        U5      nX2:  a  U " XS 5      nUb  X4-  nX2:  a  M  U$ )zvwrite data with a non blocking function

In case not all data were written, keep writing until everything is
written.
Nr   )ÚlenÚ
memoryview)Ú
write_onceÚdataÚto_writeÚwrittenÚwrotes        r   Ú
_write_allr0   :   sd   € ô �4‹y€HÙ˜Ó€GØ�ØˆØÓÜ˜$ÓˆØÓ Ù˜t H˜~Ó.ˆEð Ñ ØÑ �ð Õ ð €Nr   c                  óp   • \ rS rSrSrS rS rSS jrSS jrS r	S r
S	 rSS jrS r\S 5       rS rSrg
)Ú
doublepipeéS   a  Operate a side-channel pipe in addition of a main one

The side-channel pipe contains server output to be forwarded to the user
input. The double pipe will behave as the "main" pipe, but will ensure the
content of the "side" pipe is properly processed while we wait for blocking
call on the "main" pipe.

If large amounts of data are read from "main", the forward will cease after
the first bytes start to appear. This simplifies the implementation
without affecting actual output of sshpeer too much as we rarely issue
large read for data not yet emitted by the server.

The main pipe is expected to be a 'bufferedinputpipe' from the util module
that handle all the os specific bits. This class lives in this module
because it focus on behavior specific to the ssh protocol.c                ó(   • Xl         X l        X0l        g ©N)Ú_uiÚ_mainÚ_side)Úselfr#   ÚmainÚsides       r   Ú__init__Údoublepipe.__init__d   s   € ØŒØŒ
Ø�
r   c                óº  • [        U R                  [        R                  5      (       a  U R                  R                  (       a  gU R                  R                  5       U R                  R                  5       /n [        R                  " U5      nU R                  R                  5       U;   U R                  R                  5       U;   4$ ! [         a    Un NHf = f)z±wait until some data are available on main or side

return a pair of boolean (ismainready, issideready)

(This will only wait for data if the setup is supported by `util.poll`)
)TT)	Ú
isinstancer7   r
   ÚbufferedinputpipeÚ	hasbufferÚfilenor8   ÚpollÚNotImplementedError)r9   ÚfdsÚacts      r   Ú_waitÚdoublepipe._waiti   sª   € ô �t—z‘z¤4×#9Ñ#9×:Ñ:Ø—
‘
×$×$ð à�z‰z× Ñ Ó" D§J¡J×$5Ñ$5Ó$7Ð8ˆð	Ü—)’)˜C“.ˆCð —
‘
×!Ñ!Ó# sÑ*¨D¯J©J×,=Ñ,=Ó,?À3Ñ,FÐGÐGøô #ó 	àŠCð	ús   Á;C ÃCÃCc                ó&   • U R                  SU5      $ )z4Write as much data as possible in a non blocking wayó   write©Ú_call©r9   r,   s     r   Ú_write_onceÚdoublepipe._write_once   s   € à�z‰z˜( DÓ)Ð)r   c                ó.   • [        U R                  U5      $ )z write all data in a blocking way)r0   rN   rM   s     r   ÚwriteÚdoublepipe.writeƒ   s   € ä˜$×*Ñ*¨DÓ1Ð1r   c                ó„   • U R                  SU5      nUS:w  a'  U(       d   [        U R                  U R                  5        U$ )Ns   readr   ©rL   r'   r6   r8   ©r9   ÚsizeÚrs      r   ÚreadÚdoublepipe.read‡   s4   € Ø�J‰J�w Ó%ˆØ�1‹9žQô ˜4Ÿ8™8 T§Z¡ZÔ0Øˆr   c                ó„   • U R                  SU5      nUS:w  a'  U(       d   [        U R                  U R                  5        U$ )Ns   unbufferedreadr   rT   rU   s      r   ÚunbufferedreadÚdoublepipe.unbufferedread’   s5   € Ø�J‰JÐ(¨$Ó/ˆØ�1‹9žQô ˜4Ÿ8™8 T§Z¡ZÔ0Øˆr   c                ó$   • U R                  S5      $ )Ns   readlinerK   ©r9   s    r   ÚreadlineÚdoublepipe.readline�   s   € Ø�z‰z˜+Ó&Ð&r   Nc                óš  • Ub  U(       a  U R                   R                  (       a(  [        U R                  U R                  5        US:X  a  gg U R                  5       u  p4U(       a   [        U R                  U R                  5        U(       a<  [        U R                   [        R                  " U5      5      nUc  U" 5       $ U" U5      $ M~  )zBcall <methname> on "main", forward output of "side" while blockingrJ   r   r   )	r7   r   r'   r6   r8   rG   Úgetattrr	   Úsysstr)r9   Úmethnamer,   Ú	mainreadyÚ	sidereadyÚmeths         r   rL   Údoublepipe._call    s•   € ð Ñ¦T¨d¯j©j×.?×.?Ü˜4Ÿ8™8 T§Z¡ZÔ0Ø˜8Ó#ØØØØ#'§:¡:£<Ñ ˆIÞÜ˜tŸx™x¨¯©Ô4ÞÜ˜tŸz™z¬8¯?ª?¸8Ó+DÓE�Ø‘<Ù›6�Má ›:Ð%ñ r   c                ó6   • U R                   R                  5       $ r5   )r7   Úcloser^   s    r   rj   Údoublepipe.close³   ó   € Ø�z‰z×ÑÓ!Ð!r   c                ó.   • U R                   R                  $ r5   )r7   r   r^   s    r   r   Údoublepipe.closed¶   s   € à�z‰z× Ñ Ð r   c                ó6   • U R                   R                  5       $ r5   )r7   Úflushr^   s    r   rp   Údoublepipe.flushº   rl   r   )r7   r8   r6   )r,   ÚbytesÚreturnúOptional[int]r5   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r<   rG   rN   rQ   rX   r[   r_   rL   rj   Úpropertyr   rp   Ú__static_attributes__© r   r   r2   r2   S   sO   † ñBò ò
Hô,*ô2ò	ò	ò'ô&ò&"ð ñ!ó ð!õ"r   r2   c                óº  • SnU(       a#  UR                   (       d  SnUR                  5         U(       a#  UR                   (       d  SnUR                  5         U(       aH  UR                   (       d7  Sn U H  nU R                  [        S5      U5        M      UR                  5         U(       a  Ub  U R                  SU-  5        ggg! [        [
        4 a     NCf = f)z)Clean up pipes used by an SSH connection.FTr   Ns.   missing close on SSH connection created at:
%s)r   rj   r!   r   ÚOSErrorÚ
ValueErrorÚ	develwarn)r#   ÚpipeiÚpipeoÚpipeer    Údidsomethingr&   s          r   Ú_cleanuppipesr…   ¾   s«   € à€LÞ�U—\—\ØˆØ�‰ŒÞ�U—\—\ØˆØ�‰Œæ�U—\—\Øˆð	Û�Ø—	‘	œ!˜K›.¨!Ö,ñ ð
 	�‰Œæ˜Ñ(ð 	�‰ÐGÈ$ÑNÕOð )€|øô œÐ$ó 	Ùð	ús   Á2$C ÃCÃCc           
     óÞ   • SUU[         R                  " S[        U5      [        U5      U(       a  SOS4-  5      4-  nU R                  SU-  5        [         R                  " USUS9u  p‰p«X¸Xš4$ )ztCreate an SSH connection to a server.

Returns a tuple of (process, stdin, stdout, stderr) for the
spawned process.
ó   %s %s %ss   %s -R %s serve --stdio%ss	    --hiddenr   ó   running %s
r   )ÚbufsizeÚenv)r   Ú
shellquoter   ÚdebugÚpopen4)r#   ÚsshcmdÚargsÚ	remotecmdÚpathÚsshenvÚremotehiddenÚcmdÚstdinÚstdoutÚstderrÚprocs               r   Ú_makeconnectionr™   Ü   s‚   € ð ØØÜ×ÒØ'ä˜YÓ'Ü˜TÓ"Þ ,‘°#ðñó	
ðñ €Cð ‡H�Hˆ_˜sÑ"Ô#ô
 #+§/¢/°#¸qÀfÑ"MÑ€E�6à˜Ð&Ð&r   c                 ó  • S1n [         R                  R                  [         R                  5       Vs/ s H  nUR	                  5       R
                  PM     nnU R                  SSR                  U5      -  5        U $ s  snf )zoReturn list of capabilities of this client.

Returns a list of capabilities that are supported by this client.
s   partial-pulls   comp=%só   ,)r
   ÚcompenginesÚsupportedwireenginesÚ
CLIENTROLEÚwireprotosupportÚnameÚaddÚjoin)ÚprotoparamsÚeÚcompss      r   Ú_clientcapabilitiesr¦   û   sy   € ð
 #Ð#€Kô ×!Ñ!×6Ñ6´t·±ÔGóâGˆAð 	
×ÑÓ×!Ô!ÙGð 
ð ð ‡O�O�J §¡¨5Ó!1Ñ1Ô2ØÐùòs   ³$A>c                ó€  ^ ^• UU 4S jnT R                  SS5      n[        R                  " [        [        R
                  " 5       5      5      n SS-  nSSS[        U5      -  U/nU(       a.  T R                  S	5        T R                  S
[        U5      -  5        T R                  S5        T R                  S5        [        UR                  SR                  U5      5        UR                  5         [        R                  n	[        R                   " S["        R$                  " U5      -  5      n
SS/nSnUS   (       a³  U(       a¬   UR'                  5       n[)        T TSS9  U
R+                  U5      nU(       a&  UR-                  S5      n	T R                  SU	-  5        OYUS   S:X  a  US:X  a  OIU(       a  T R                  SU5        UR/                  U5        US-  nUS   (       a	  U(       a  M¬  U" 5         [1        5       nU	[        R                  :X  a^  [3        U5       HO  nUR5                  S5      (       d  M  UR7                  US S R9                  S5      S   R9                  5       5          O   U(       d  U" 5         [)        T TSS9  XŸ4$ ! [         a    U" 5          GN³f = f! [         a
    U" 5          NÝf = f)Nc                 ó|   >• [        TTSS9  [        S5      n TR                  SS5      n[        R                  " XS9e)NT©r    s#   no suitable response from remote hgó   uis   ssherrorhint©Úhint)r'   r   Úconfigr   Ú	RepoError)Úmsgr¬   r—   r#   s     €€r   ÚbadresponseÚ&_performhandshake.<locals>.badresponse
  s;   ø€ ô 	�r˜6¨Ò-äÐ6Ó7ˆØ�y‰y˜ Ó0ˆÜ�oŠo˜cÑ-Ð-r   ó   develó   debug.peer-requests   %s-%s)ó(   0000000000000000000000000000000000000000r´   s   hello
s   between
s	   pairs %d
s"   devel-peer-request: hello+between
s&   devel-peer-request:   pairs: %d bytes
s   sending hello command
s   sending between command
r   s   ^upgraded %s (.*)$s   dummyiô  éÿÿÿÿTr©   r   s   protocol upgraded to %s
s   1
r   r   s   capabilities:ó   :)Ú
configboolr	   ÚsysbytesÚstrÚuuidÚuuid4r)   rŒ   r0   rQ   r¢   rp   r~   r   ÚSSHV1r   Úcompiler   Úreescaper_   r'   r   ÚgroupÚappendÚsetÚreversedÚ
startswithÚupdateÚsplit)r#   r•   r–   r—   r°   Ú
requestlogÚtokenÚpairsargÚ	handshakeÚ	protonameÚ
reupgradedÚlinesÚ	max_noiser&   ÚmÚcapss   `  `            r   Ú_performhandshakerÐ   	  s`  ù€ ö
.ð@ —‘˜xÐ)>Ó?€Jô ×Òœc¤$§*¢*£,Ó/Ó0€EðØÐ4Ñ4ˆàØØœC ›MÑ)Øð	
ˆ	ö Ø�H‰HÐ;Ô<Ø�H‰HÐ?Ä#ÀhÃ-ÑOÔPØ
�‰Ð+Ô,Ø
�‰Ð-Ô.ä�5—;‘; §¡¨Ó 3Ô4Ø�‰Œô
 ×$Ñ$€IÜ—’Ð1´J×4GÒ4GÈÓ4NÑNÓO€Jà�(ˆO€EØ€IØ
��)ž	ð	Ø—‘Ó!ˆAÜ˜2˜v¨DÒ1ð × Ñ  Ó#ˆAÞØŸG™G A›J�	Ø—‘Ð5¸	ÑAÔBð ð
 �R‰y˜FÓ" q¨E£zØÞØ—‘˜ aÔ(Ø�L‰L˜ŒOØ˜‰NˆIð1 ��)Ÿ	˜	ñ8 	Œä‹5€Dð ”N×(Ñ(Ó(Ü˜%–ˆAð �|‰|Ð,×-Ó-Ø—‘˜A˜c˜r˜FŸL™L¨Ó.¨qÑ1×7Ñ7Ó9Ô:Ùñ !ö ÙŒô �2�v DÒ)àˆ?Ðøô ó Ù�ðûôD ó 	ÙŽMð	ús2   ÁB#J ÅAJ) Æ J) Æ0/J) ÊJ&Ê%J&Ê)J=Ê<J=c                  ó²   ^ • \ rS rSr  SU 4S jjrS1rS rS rS rS r	SS jr
S	 rS
 rSS jrS rSS jrS rS rS rS rS rS rS rSS jrSrU =r$ )Ú	sshv1peeri£  c
                ó2  >• [         T
U ]  XU	S9  X0l        U(       a-  [        U[        R
                  " U5      U5      n[        XU5      nX@l        XPl        X`l        Xpl	        X€l
        SR                  [        R                  " S5      5      U l        X�l        g)aV  Create a peer from an existing SSH connection.

``proc`` is a handle on the underlying SSH process.
``stdin``, ``stdout``, and ``stderr`` are handles on the stdio
pipes for that process.
``caps`` is a set of capabilities supported by the remote.
``autoreadstderr`` denotes whether to automatically read from
stderr and to forward its output.
)r‘   r“   r   r   N)Úsuperr<   Ú_subprocessr2   r
   r@   Ú_pipeoÚ_pipeiÚ_pipeeÚ_capsÚ_autoreadstderrr¢   ÚgetstackframesÚ
_initstackÚ_remotehidden)r9   r#   r‘   r˜   r•   r–   r—   rÏ   Úautoreadstderrr“   Ú	__class__s             €r   r<   Ússhv1peer.__init__¤  s„   ø€ ô* 	‰Ñ˜°\ÐÑBð  Ôö Ü ¤D×$:Ò$:¸6Ó$BÀFÓKˆFÜ˜r¨&Ó1ˆEàŒØŒØŒØŒ
Ø-ÔØŸ(™(¤4×#6Ò#6°qÓ#9Ó:ˆŒØ)Õr   s   batchc                ó.   • U R                   R                  $ r5   )r‘   Úlocr^   s    r   ÚurlÚsshv1peer.urlÔ  s   € Ø�y‰y�}‰}Ðr   c                ó   • g r5   r|   r^   s    r   ÚlocalÚsshv1peer.local×  ó   € Ør   c                ó   • g)NTr|   r^   s    r   ÚcanpushÚsshv1peer.canpushÚ  rè   r   c                ó$   • U R                  5         g r5   ©Ú_cleanupr^   s    r   rj   Ússhv1peer.closeÝ  s   € Ø�‰�r   c                ó   • U R                   $ r5   )rÙ   r^   s    r   ÚcapabilitiesÚsshv1peer.capabilitiesä  s   € Ø�z‰zÐr   c                óD   • [        U R                  U R                  5        g r5   )r'   r#   rØ   r^   s    r   Ú_readerrÚsshv1peer._readerré  s   € Ü�t—w‘w §¡Õ,r   c                ó&   • U R                  5         Uer5   rí   )r9   Ú	exceptions     r   Ú_abortÚsshv1peer._abortì  s   € Ø�‰ŒØˆr   c                ón   • [        U R                  U R                  U R                  U R                  US9  g ©Nr©   )r…   r#   r×   rÖ   rØ   )r9   r    s     r   rî   Ússhv1peer._cleanupð  s"   € Ü�d—g‘g˜tŸ{™{¨D¯K©K¸¿¹È4ÓPr   c                ó6   • U R                  U R                  S9  g rû   )rî   rÜ   r^   s    r   Ú__del__Ússhv1peer.__del__ó  s   € Ø�‰˜4Ÿ?™?ˆÒ+r   c           
     óH  • U R                   R                  (       aÐ  U R                   R                  SS5      (       a¯  U R                   R                  nSnU" XQ-  5        [	        UR                  5       5       Hp  u  pg[        U[        5      (       d  U" US-  U[        U5      4-  5        M5  [	        UR                  5       5       H  u  p‰U" US-  Xh[        U	5      4-  5        M      Mr     U R                   R                  SU-  5        U R                  R                  SU-  5        [        R                  U   u  p«UR                  5       n0 nU H  nUS:X  a  X-S'     OX.   XÞ'   X.	 M     [	        UR                  5       5       H½  u  pïU R                  R                  S	U[        U5      4-  5        [        U[        5      (       a_  UR                  5        HI  u  p‰U R                  R                  S	U[        U	5      4-  5        U R                  R                  U	5        MK     M¢  U R                  R                  U5        M¿     U R                  R                  5         U(       a1  U R                  5       n[         R"                  " U R$                  U5      $ U R$                  $ )
Nr²   r³   s   devel-peer-request: %s
s     %s: %d bytess     %s-%s: %ds   sending %s command
s   %s
ó   *s   %s %d
)r#   Ú	debugflagr·   rŒ   ÚsortedÚitemsr?   Údictr)   rÖ   rQ   r   ÚcommandsrÅ   rp   Ú
_getamountr
   Úcappedreaderr×   )r9   r”   r�   ÚframedÚdbgÚlineÚkeyÚvalueÚdkÚdvÚ_funcÚnamesÚkeysÚwireargsÚkÚvÚamounts                    r   Ú_sendrequestÚsshv1peer._sendrequestö  s  € Ø�7‰7×× §¡×!3Ñ!3ØÐ+÷"
ñ "
ð —'‘'—-‘-ˆCØ.ˆDÙ�‘
ŒOÜ$ T§Z¡Z£\Ö2‘
�Ü! %¬×.Ñ.Ù˜Ð0Ñ0°C¼¸U»Ð3DÑDÖEä"(¨¯©«Ö"7™˜Ù˜D >Ñ1°S¼cÀ"»gÐ4FÑFÖGó #8ñ	 3ð 	�‰�‰Ð-°Ñ3Ô4Ø�‰×Ñ˜' C™-Ô(Ü(×1Ñ1°#Ñ6‰ˆØ�{‰{‹}ˆØˆÛˆAØ�D‹yØ!%˜‘Ùà"™g�‘Ø’Gñ ô ˜8Ÿ>™>Ó+Ö,‰DˆAØ�K‰K×Ñ˜j¨A¬s°1«v¨;Ñ6Ô7Ü˜!œT×"Ñ"ØŸg™gži‘F�BØ—K‘K×%Ñ% j°B¼¸B»°=Ñ&@ÔAØ—K‘K×%Ñ% bÖ)ó (ð —‘×!Ñ! !Ö$ñ -ð 	�‰×ÑÔö Ø—_‘_Ó&ˆFÜ×$Ò$ T§[¡[°&Ó9Ð9à�{‰{Ðr   c                óf   • [         R                  " U5      nU R                  XXR                  ;   S9$ ©N©r	  ©r	   Úbyteskwargsr  Ú_FRAMED_COMMANDS©r9   r”   r�   s      r   Ú_callstreamÚsshv1peer._callstream#  ó1   € Ü×#Ò# DÓ)ˆØ× Ñ  °3×:OÑ:OÑ3OÐ ÐPÐPr   c                óf   • [         R                  " U5      nU R                  XXR                  ;   S9$ r  r  r  s      r   Ú_callcompressableÚsshv1peer._callcompressable'  r"  r   c                ój   • [         R                  " U5      nU R                  XSS9R                  5       $ )NTr  )r	   r  r  rX   r  s      r   rL   Ússhv1peer._call+  s1   € Ü×#Ò# DÓ)ˆØ× Ñ  °4Ð Ð8×=Ñ=Ó?Ð?r   c                ó
  ^• U R                   " U40 UD6nU(       a  SU4$ [        U4S jS5       H  nU R                  U5        M     U R                  SSS9  U R                  5       nU(       a  SU4$ U R                  5       S4$ )Nr   c                 ó&   >• T R                  S5      $ ©Ni   ©rX   ©Úfps   €r   Ú<lambda>Ú%sshv1peer._callpush.<locals>.<lambda>8  ó   ø€ ˜bŸg™g dœmr   T©rp   )rL   ÚiterÚ_writeframedÚ_readframed©r9   r”   r-  r�   rW   Úds     `   r   Ú	_callpushÚsshv1peer._callpush/  s‰   ø€ ð �JŠJ�sÑ#˜dÑ#ˆÞØ˜�6ˆMô Ô+¨SÖ1ˆAØ×Ñ˜aÖ ñ 2à×Ñ˜# TÐÑ*ð
 ×ÑÓˆÞØ˜�6ˆMØ×ÑÓ! 3Ð&Ð&r   c                ó  ^• U R                   " U40 UD6nU(       a"  [        R                  " [        S5      U-  5      e[	        U4S jS5       H  nU R                  U5        M     U R                  SSS9  U R                  $ )Ns   unexpected remote reply: %sc                 ó&   >• T R                  S5      $ r*  r+  r,  s   €r   r.  Ú-sshv1peer._calltwowaystream.<locals>.<lambda>N  r0  r   r   Tr1  )rL   r   ÚAbortr   r2  r3  r×   r5  s     `   r   Ú_calltwowaystreamÚsshv1peer._calltwowaystreamD  st   ø€ ð �JŠJ�sÑ#˜dÑ#ˆÞä—+’+œaÐ >Ó?À!ÑCÓDÐDô Ô+¨SÖ1ˆAØ×Ñ˜aÖ ñ 2à×Ñ˜# TÐÑ*à�{‰{Ðr   c                ó¸  • U R                   R                  5       nUS:X  aO  U R                  (       a  U R                  5         [	        S5      nU R                  [        R                  " US95        U R                  (       a  U R                  5          [        U5      $ ! [         a2    U R                  [        R                  " [	        S5      U5      5         g f = f)Nr   s   check previous remote outputr«   s   unexpected response:)r×   r_   rÚ   rô   r   rø   r   ÚOutOfBandErrorÚintr   ÚResponseError)r9   r&   r¯   s      r   r  Ússhv1peer._getamountT  s    € Ø�K‰K× Ñ Ó"ˆØ�‹:Ø×#×#Ø—‘”ÜÐ3Ó4ˆCØ�K‰Kœ×,Ò,°#Ñ6Ô7Ø××Ø�M‰MŒOð	LÜ�q“6ˆMøÜó 	LØ�K‰Kœ×+Ò+¬AÐ.EÓ,FÈÓJÖKð	Lús   Â
B Â9CÃCc                óh   • U R                  5       nU(       d  gU R                  R                  U5      $ )Nr   )r  r×   rX   )r9   rV   s     r   r4  Ússhv1peer._readframedb  s)   € Ø�‰Ó ˆÞØà�{‰{×Ñ Ó%Ð%r   c                ó  • U R                   R                  S[        U5      -  5        U(       a  U R                   R                  U5        U(       a  U R                   R                  5         U R                  (       a  U R                  5         g g )Ns   %d
)rÖ   rQ   r)   rp   rÚ   rô   )r9   r,   rp   s      r   r3  Ússhv1peer._writeframedi  s\   € Ø�‰×Ñ˜'¤C¨£IÑ-Ô.ÞØ�K‰K×Ñ˜dÔ#ÞØ�K‰K×ÑÔØ××Ø�M‰M�Oð  r   )rÚ   rÙ   rÜ   rØ   r×   rÖ   rÝ   rÕ   ©TF)rs   z
Set[bytes]r5   ©F)ru   rv   rw   rx   r<   r  rã   ræ   rê   rj   rñ   rô   rø   rî   rþ   r  r   r$  rL   r7  r=  r  r4  r3  r{   Ú__classcell__)rß   s   @r   rÒ   rÒ   £  sƒ   ø† ð Ø÷&*ðV 	ðÐòòòòôò
-òôQò,ô+òZQòQò@ò'ò*ò Lò&÷ò r   rÒ   c                óø   •  [        XXE5      u  p‰U[        R                  :X  a  [        U UUUUUU	UUS9	$ [        XX5SS9  [        R                  " [        S5      U-  5      e! [         a    [        XX5SS9  e f = f)aÍ  Make a peer instance from existing pipes.

``path`` and ``proc`` are stored on the eventual peer instance and may
not be used for anything meaningful.

``stdin``, ``stdout``, and ``stderr`` are the pipes connected to the
SSH server's stdio handles.

This function is factored out to allow creating peers that don't
actually spawn a new process. It is useful for starting SSH protocol
servers and clients via non-standard means, which can be useful for
testing.
Nr©   )rÞ   r“   s#   unknown version of SSH protocol: %s)	rÐ   Ú	Exceptionr…   r   r¼   rÒ   r   r®   r   )
r#   r‘   r˜   r•   r–   r—   rÞ   r“   rÊ   rÏ   s
             r   Ú
_make_peerrM  s  sš   € ð.Ü+¨B°vÓF‰ˆ	ð
 ”N×(Ñ(Ó(ÜØØØØØØØØ)Ø%ñ

ð 
	
ô 	�b %°dÒ;Ü�oŠoÜÐ4Ó5¸	ÑAó
ð 	
øô% ó Ü�b %°dÒ;Øðús   ‚A" Á"A9c           
     óp  • [         R                  " UR                  SSS9nUR                  S:w  d  UR                  (       a  UR
                  c,  [        R                  " [        S5      UR                  -  5      e[         R                  " UR                  5        UR                  b  [        R                  " [        S5      5      eU R                  SS5      nU R                  SS5      n[        U R                  S5      5      n	[        R                  " U	5      n
UR
                  =(       d    S	n[        R                   " XvR                  UR"                  UR$                  5      nU(       a£  U(       a  [        R                  " [        S
5      5      eSUU[        R&                  " S[)        U5      [)        U5      4-  5      4-  nU R+                  SU-  5        U R-                  USU
S9nUS:w  a  [        R                  " [        S5      5      e[/        U UUUUU
US9u  nnnn[1        XUUUUUS9nSUR3                  5       ;   a3   UR5                  SSR7                  [9        [;        5       5      5      S9  U$ U$ ! [<         a0    UR?                  5         [        R                  " [        S5      5      ef = f)zaCreate an SSH peer.

The returned object conforms to the ``wireprotov1peer.wirepeer`` interface.
F)Ú
parsequeryÚparsefragments   sshs   couldn't parse location %ss   password in URL not supportedrª   s	   remotecmds   sshenvó   .s8   cannot create remote SSH repositories with extra optionsr‡   s
   %s init %srˆ   s   sshpeer)Ú
blockedtagÚenvironr   s   could not create remote repo)r“   s	   protocapsó    )rÏ   s   capability exchange failed) r   rã   râ   ÚschemeÚhostr‘   r   r®   r   ÚchecksafesshÚpasswdr­   r  Úconfigitemsr   ÚshellenvironÚsshargsÚuserÚportr‹   r   rŒ   Úsystemr™   rM  rñ   rL   r¢   r  r¦   r~   rî   )r#   r‘   ÚcreateÚintentsÚ
createoptsr“   ÚurŽ   r�   Ú	sshaddenvr’   Ú
remotepathr�   r”   Úresr˜   r•   r–   r—   Úpeers                       r   Ú	make_peerrg  £  sZ  € ô 	�Š�D—H‘H¨¸eÑD€AØ‡x�x�6Ó §§¨1¯6©6©>Ü�oŠoœaÐ =Ó>ÀÇÁÑIÓJÐJä×Ò˜Ÿ™Ô"à‡x�xÑÜ�oŠoœaÐ @ÓAÓBÐBà�Y‰Y�u˜fÓ%€FØ—	‘	˜% Ó.€IÜ�R—^‘^ IÓ.Ó/€IÜ×"Ò" 9Ó-€FØ—‘—˜4€Jä×Ò˜F§F¡F¨A¯F©F°A·F±FÓ;€Dæö
 Ü—/’/Üð*óóð ð ØØÜ×ÒØÜ 	Ó*¬L¸Ó,DÐEñFóð
ñ 
ˆð 	�‰� 3Ñ&Ô'Ø�i‰i˜¨
¸FˆiÐCˆØ�!‹8Ü—/’/¤!Ð$CÓ"DÓEÐEä"1Ø
ØØØØØØ!ñ#Ñ€Dˆ%�˜ô Ø
�$˜˜v v¸Lñ€Dð �t×(Ñ(Ó*Ó*ð	DØ�J‰JØ 4§9¡9¬VÔ4GÓ4IÓ-JÓ#Kð ñ ð €Kˆ4€Køô	 ó 	DØ�M‰MŒOÜ—/’/¤!Ð$AÓ"BÓCÐCð	Dús   É0I; É;:J5rI  )r+   z Callable[[bytes], Optional[int]]r,   rr   rs   rt   )NFrH  )NNF)"Ú
__future__r   r   Útypingrº   r   r   Úi18nr   Ú r   r	   r
   r   r   r   Úutilsr   r   r   ÚTYPE_CHECKINGr   r   r'   r0   r2   r…   r™   r¦   rÐ   ÚwirepeerrÒ   rM  rg  r|   r   r   Ú<module>ro     sÁ   ðõ #ã 	Û Û ç %å ÷÷ ÷ñ ð 
××õò
/ô	2ðØ0ðà
ðð ô÷2h"ñ h"òVPð> BGô'ò>òWôtM�×(Ñ(ô Mðn Øô-
ðb CHõKr   