+
    šh©jN%  ã                   ón  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHtH	t	H
t
HtHt ^ RIHt RR ltRR ltRR ltR tR tR	 tR
 tR tR tR tR tR t]P6                  ! 4       s^ s]P<                  ! 4       sR t ]3R lt! ! R R4      t"]"! 4       t#R t$R t% ! R R4      t&R t'R t(RR lt)RR lt*R# ) z0
Useful functions used by the rest of paramiko.
N)ÚDEBUGÚ	zero_byteÚ	xffffffffÚmax_byteÚbyte_ordÚbyte_chr)Ú	SSHConfigc           	     ó
  € ^ p^ pV'       g*   \        V 4      ^ 8”  d   \        V ^ ,          4      ^€8¼  d   ^p\        V 4      ^,          '       d<   \        pV'       d   \        pV^\        V 4      ^,          ,
          ,          V ,           p \	        ^ \        V 4      ^4       F8  pV^ ,          \
        P                  ! RWV^,            4      ^ ,          ,           pK:  	  V'       d!   V^^\        V 4      ,          ,          ,          pV# )zPturns a normalized byte string into a long-int
(adapted from Crypto.Util.number)ú>I)Úlenr   r   r   ÚrangeÚstructÚunpack)ÚsÚalways_positiveÚoutÚnegativeÚfillerÚis   &&    ÚH/var/www/html/bestweb/venv/lib/python3.14/site-packages/paramiko/util.pyÚinflate_longr   )   sÂ   € ð €CØ€Hß¤ A£¨¤
´¸!¸A½$³À4Ô1GØˆÜ
ˆ1ƒv�‡z„zÜˆßÜˆFð �aœ#˜a›& 1�*•nÕ%¨Õ)ˆÜ�1”c˜!“f˜aÖ ˆØ�b�yœFŸMšM¨$°°a¸!µe°Ó=¸aÕ@Õ@Šñ !çØˆq�Qœ˜Q›•ZÕ Õ ˆØ€Jó    c                ó6  € \        4       p\        V 4      p V ^ 8w  d<   V R8w  d5   \        P                  ! RV \        ,          4      V,           pV ^ ,          p KB  \        V4       F3  pV ^ 8X  d   V^,          ^ 8w  d    M3V R8X  g   K#  V^,          ^ÿ8w  g   K3   M	  RpV ^ 8X  d   \        pM\        pW#^ ,          R pV'       dW   V ^ 8X  d%   \        V^ ,          4      ^€8¼  d   \        V,           pV R8X  d%   \        V^ ,          4      ^€8  d   \        V,           pV# )zPturns a long-int into a normalized byte string
(adapted from Crypto.Util.number)r
   Néÿÿÿÿ)é    )	ÚbytesÚintr   Úpackr   Ú	enumerater   r   r   )ÚnÚadd_sign_paddingr   r   s   &&  r   Údeflate_longr!   >   sä   € ô 	‹€AÜˆA‹€AØ�Œ6˜˜RœÜ�KŠK˜˜a¤)�mÓ,¨qÕ0ˆØ	ˆb�Šä�qŽ\ˆØ�ŒF˜˜1� œÙØ�ŽG˜!˜A�$ $ž,Ùñ	 ð ˆØ�Œ6Ü‰AäˆAØ	ˆA�$ˆ&ˆ	€AßØ�ŒFœ ! A¥$›¨4Ô/Ü˜A•ˆAØ�ŒGœ( 1 Q¥4›.¨4Ô/Ü˜1•ˆAØ€Hr   c                 ó&  € ^ p. p\        V 4      V^,           8”  d/   VP                  \        WV^,            4      4       V^,          pKE  V\        V 4      8  d   VP                  \        WR 4      4       V Uu. uF  qAV,           NK  	  up# u upi )r   N)r   ÚappendÚformat_binary_line)ÚdataÚprefixÚxr   Úlines   &&   r   Úformat_binaryr)   ]   s}   € Ø	€AØ
€CÜ
ˆd‹)�a˜"•fÔ
Ø�
‰
Ô% d¨q°2­vÐ&6Ó7Ô8Ø	ˆR�ŠØŒ3ˆt‹9„}Ø�
‰
Ô% d¨2 hÓ/Ô0Ù&)Ó*¡c˜d�T�MˆM¡cÑ*Ð*ùÒ*s   Á:Bc           
      óX  € R P                  V  Uu. uF  pRP                  \        V4      4      NK  	  up4      pRP                  V  Uu. uF;  pRP                  \        V4      4      \        V4      ^?,           ^_,          ,          NK=  	  up4      pRP                  W#4      # u upi u upi )Ú z{:02X}Ú z.{:c}..z	{:50s} {})ÚjoinÚformatr   )r%   ÚcÚleftÚrights   &   r   r$   r$   h   s�   € Ø�8‰8¹4Ó@¹4°a�X—_‘_¤X¨a£[Ö1¹4Ñ@ÓA€DØ�G‰GÙJNÓOÉ$ÀQˆ×	Ñ	œ( 1›+Ó	&¬°«°bÕ(8¸RÕ'?×	@Ð	@É$ÑOó€Eð ×Ñ˜dÓ*Ð*ùò	 AùâOs   �#B"Á	AB'c                 óÀ   € R pV  FU  p\        V4      p^ Tu;8:  d   ^8:  d   M MV\        V4      ,          pK4  V\        RP                  V4      4      ,          pKW  	  V# )r   z%{:02X})r   r   Úbr.   )r   r   r/   r   s   &   r   Úsafe_stringr4   p   sT   € Ø
€CÛˆÜ�Q‹KˆØ�Ž>�c�>Ø”8˜A“;ÕŠCà”1�Y×%Ñ% aÓ(Ó)Õ)ŠCñ ð €Jr   c                 ó  €  V P                  4       #   \         dc    \        T R 4      p\        T^ ,          4      pT^ 8X  d    ^# \	        T4      ^,          pT^€,          '       g   T^,          pT^,          pK#  Tu # i ; i©F)Ú
bit_lengthÚAttributeErrorr!   r   r   )r   ÚnormÚhbyteÚbitlens   &   r   r7   r7   {   ss   € ðØ�|‰|‹~ÐøÜô 	Ü˜A˜uÓ%ˆÜ˜˜a�Ó!ˆØ�AŒ:ÚÜ�T“˜Q•ˆØ˜4—<”<Ø�a�KˆEØ�a�KŠFØŠð	ús   ‚ ’0A?Á A?Á&A?Á>A?c                  óŒ   € R P                  \        P                  ! \        P                  ! 4       !  4      P                  R4      # )r,   Ú
)r-   Ú	tracebackÚformat_exceptionÚsysÚexc_infoÚsplit© r   r   Ú
tb_stringsrD   Š   s-   € Ø�7‰7”9×-Ò-¬s¯|ª|«~Ñ>Ó?×EÑEÀdÓKÐKr   c                óˆ  € \        4       p\        4       p\        V4      ^8”  d
   VR,          pV^ 8”  dŽ   V ! 4       p\        V4      ^ 8”  d   VP                  V4       VP                  \        V4      4       VP                  V4       VP	                  4       p\        V\        V4      4      pWERV ,          pW7,          pK”  V# )aý  
Given a password, passphrase, or other human-source key, scramble it
through a secure hash into some keyworthy bytes.  This specific algorithm
is used for encrypting/decrypting private key files.

:param function hash_alg: A function which creates a new hash object, such
    as ``hashlib.sha256``.
:param salt: data to salt the hash with.
:type bytes salt: Hash salt bytes.
:param str key: human-entered password or passphrase.
:param int nbytes: number of bytes to generate.
:return: Key data, as `bytes`.
:Né   NN)r   r   Úupdater3   ÚdigestÚmin)Úhash_algÚsaltÚkeyÚnbytesÚkeydatarH   Úhash_objÚsizes   &&&&    r   Úgenerate_key_bytesrQ   Ž   s�   € ô ‹g€GÜ‹W€FÜ
ˆ4ƒy�1„}Ø�B�xˆØ
�1Œ*Ù“:ˆÜˆv‹;˜Œ?Ø�O‰O˜FÔ#Ø�‰œ˜#›ÔØ�‰˜ÔØ—‘Ó"ˆÜ�6œ3˜v›;Ó'ˆØ˜%˜4�=Õ ˆØ�ŠØ€Nr   c                ó   € ^ RI Hp V! V 4      # )ab  
Read a file of known SSH host keys, in the format used by openssh, and
return a compound dict of ``hostname -> keytype ->`` `PKey
<paramiko.pkey.PKey>`. The hostname may be an IP address or DNS name.  The
keytype will be either ``"ssh-rsa"`` or ``"ssh-dss"``.

This type of file unfortunately doesn't exist on Windows, but on posix,
it will usually be stored in ``os.path.expanduser("~/.ssh/known_hosts")``.

Since 1.5.3, this is just a wrapper around `.HostKeys`.

:param str filename: name of the file to read host keys from
:return:
    nested dict of `.PKey` objects, indexed by hostname and then keytype
)ÚHostKeys)Úparamiko.hostkeysrS   )ÚfilenamerS   s   & r   Úload_host_keysrV   ­   s   € õ  +á�HÓÐr   c                ó<   € \        4       pVP                  V 4       V# )z�
Provided only as a backward-compatible wrapper around `.SSHConfig`.

.. deprecated:: 2.7
    Use `SSHConfig.from_file` instead.
)r   Úparse)Úfile_objÚconfigs   & r   Úparse_ssh_configr[   Â   s   € ô ‹[€FØ
‡L�L�ÔØ€Mr   c                ó$   € VP                  V 4      # )zE
Provided only as a backward-compatible wrapper around `.SSHConfig`.
)Úlookup)ÚhostnamerZ   s   &&r   Úlookup_ssh_host_configr_   Î   s   € ð �=‰=˜Ó"Ð"r   c                 ó´   € ^^ TrCp^ ^T rvpV^ 8”  d8   WG,          pYRWX,          ,
          rRYcWh,          ,
          rcYtWx,          ,
          rtK>  V^ 8  d	   W1,          pV# )é   rC   )	r'   ÚmÚu1Úu2Úu3Úv1Úv2Úv3Úqs	   &&       r   Úmod_inverserj   Õ   sZ   € à�A�qˆB€BØ�A�qˆB€Bà
ˆqŒ&Ø�HˆØ˜"�&•[ˆBØ˜"�&•[ˆBØ˜"�&•[ŠBØ	ˆA„vØ
�ˆØ€Ir   c                  óô   €  \         P                  #   \         d[    \        ;_uu_ 4        \        ^,          s\        \         n        RRR4       M  + '       g   i     M; i\         P                  u # i ; i)ra   N)Ú_g_thread_dataÚidr8   Ú_g_thread_lockÚ_g_thread_counterrC   r   r   Úget_thread_idrp   é   sT   € ð!Ü× Ñ Ð øÜô !ßŽ^Ü Õ"ÐÜ 1ŒNÔ÷ �^�^ˆ^úô × Ñ Ò ð	!ús&   ‚ ’A7«AÁ	A7ÁA!ÁA7Á6A7c                óT  € \         P                  ! R4      p\        VP                  4      ^ 8”  d   R# VP	                  V4       \        V R4      p\         P                  ! V4      pRpVR,          pVP                  \         P                  ! VR4      4       VP                  V4       R# )zGsend paramiko logs to a logfile,
if they're not already going somewhereÚparamikoNÚaz>%(levelname)-.3s [%(asctime)s.%(msecs)03d] thr=%(_threadid)-3dz %(name)s: %(message)sz%Y%m%d-%H:%M:%S)
ÚloggingÚ	getLoggerr   ÚhandlersÚsetLevelÚopenÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)rU   ÚlevelÚloggerÚfÚhandlerÚfrms   &&    r   Úlog_to_filer‚   ô   sŠ   € ô ×Ò˜zÓ*€FÜ
ˆ6�?‰?Ó˜aÔÙØ
‡O�O�EÔÜˆX�sÓ€AÜ×#Ò# AÓ&€GØ
J€CØÐ#Õ#€CØ×Ñœ×*Ò*¨3Ð0AÓBÔCØ
×Ñ�gÖr   c                   ó&   a € ] tR tRt o R tRtV tR# )ÚPFilteri  c                ó$   € \        4       Vn        R # ©T)rp   Ú	_threadid)ÚselfÚrecords   &&r   ÚfilterÚPFilter.filter  s   € Ü(›?ˆÔÙr   rC   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rŠ   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r„   r„     s   ø‡ € ÷ð r   r„   c                 ó\   € \         P                  ! V 4      pVP                  \        4       V# ©N)rt   ru   Ú	addFilterÚ_pfilter)Únamer~   s   & r   Ú
get_loggerr™     s%   € Ü×Ò˜tÓ$€FØ
×Ñ”XÔØ€Mr   c                 óØ   € \        V 4      \        V4      8w  d   R # ^ p\        \        V 4      4       F1  pV\        W,          4      \        W,          4      ,          ,          pK3  	  V^ 8H  # r6   )r   r   r   )rs   r3   Úresr   s   &&  r   Úconstant_time_bytes_eqrœ     sP   € Ü
ˆ1ƒv”�Q“ÔÙØ
€Cä”3�q“6Ž]ˆØŒx˜�‹~¤¨­£Õ.Õ.Šñ à�!‰8€Or   c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚClosingContextManageri  c                ó   € V # r•   rC   )rˆ   s   &r   Ú	__enter__ÚClosingContextManager.__enter__  s   € Øˆr   c                ó&   € V P                  4        R # r•   )Úclose)rˆ   ÚtypeÚvaluer>   s   &&&&r   Ú__exit__ÚClosingContextManager.__exit__!  s   € Ø�
‰
Žr   rC   N)rŒ   r�   rŽ   r�   r    r¦   r�   r‘   r’   s   @r   rž   rž     s   ø‡ € ò÷ð r   rž   c                 ó,   € \        V \        W4      4      # r•   )ÚmaxrI   )ÚminimumÚvalÚmaximums   &&&r   Úclamp_valuer­   %  s   € Üˆwœ˜CÓ)Ó*Ð*r   c                óˆ   €  \        V 4      #   \         d*     T P                  4       u #   \         d    T u u # i ; ii ; i)z2
Coerce to bytes if possible or return unchanged.
)r3   Ú	TypeErrorÚasbytesr8   )r   s   &r   r°   r°   )  sJ   € ðô �‹tˆøÜô 	ð	ð —9‘9“;ÒøÜô 	ð ŒHð		úð	ús$   ‚
 �A™+¨A«=¸A¼=½Ac                ó®   € \        V \        4      '       d   V # \        V \        4      '       d   V P                  V4      # \	        R\        V 4       24      h)zcast unicode or bytes to bytesúExpected unicode or bytes, got )Ú
isinstancer   ÚstrÚencoder¯   r¤   ©r   Úencodings   &&r   r3   r3   ?  sG   € ä�!”U×ÒØˆÜ	�A”s×	Ò	Ø�x‰x˜Ó!Ð!äÐ9¼$¸q»'¸ÐCÓDÐDr   c                ó®   € \        V \        4      '       d   V P                  V4      # \        V \        4      '       d   V # \	        R\        V 4       24      h)z cast bytes or unicode to unicoder²   )r³   r   Údecoder´   r¯   r¤   r¶   s   &&r   Úurº   J  sG   € ä�!”U×ÒØ�x‰x˜Ó!Ð!Ü	�A”s×	Ò	ØˆäÐ9¼$¸q»'¸ÐCÓDÐDr   r6   r†   )r,   )Úutf8)+Ú__doc__r@   r   r>   Ú	threadingrt   Úparamiko.commonr   r   r   r   r   r   Úparamiko.configr   r   r!   r)   r$   r4   r7   rD   rQ   rV   r[   r_   rj   Úlocalrl   ro   ÚLockrn   rp   r‚   r„   r—   r™   rœ   rž   r­   r°   r3   rº   rC   r   r   Ú<module>rÂ      sÓ   ðñ&ó
 Û Û Û Û ÷÷ õ &ôô*ô>+ò+òòòLòò>ò*	ò#òð —’Ó"€ØÐ Ø—’Ó!€ò!ð !&ô ÷ ñ ñ ‹9€òò÷ñ ò+òô,EöEr   