Ë
    ¾�jW^  ã                  óf  — d dl m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 d dlmZmZ d dlmZ d dlmZ d dlmZmZ d d	l­ d d
lmZ d dlmZmZmZm Z  d dl!m"Z" d dl#m$Z$ dZ% ejL                  e'«      Z( G d„ d«      Z) G d„ d«      Z*y# e$ r	 d dlmZ Y Œuw xY w)é    )ÚannotationsN)ÚListÚOptionalÚUnionÚoverload)ÚLiteral)ÚImageÚUnidentifiedImageError)Ú
deprecated)ÚShellReturnRaw)ÚAdbConnectionÚ
BaseClient)Ú*)ÚStrOrPathLike)Ú	StopEventÚadb_pathÚget_free_portÚlist2cmdline)Ú__version__)ÚAdbErroriX  c                  ó  — e Zd ZdZ	 d5	 	 	 	 	 d6d„Zd„ Zed7d„«       Zdef	 	 	 	 	 d8d„Z	d9d„Z
d:d„Zd:d	„Zd:d
„Zd:d„Zed;d„«       Zd„ Zed<d„«       Zd„ Zd=d„Zeeddf	 	 	 	 	 	 	 	 	 d>d„«       Zededdœ	 	 	 	 	 	 	 	 	 d?d„«       Zedefddœ	 	 	 	 	 	 	 	 	 d@d„«       Zededf	 	 	 	 	 	 	 dAd„«       Zdeddf	 	 	 	 	 	 	 	 	 dBd„Zeefdddœ	 	 	 	 	 	 	 dCd„«       Zeefdddœ	 	 	 	 	 	 	 dDd„«       Zeeddf	 	 	 	 	 dEd„«       Zedddf	 	 	 	 	 	 	 dFd„ZefdGd „ZefdGd!„ZdHdId"„ZdJd#„ZdKd$„ZdLdMd%„ZdNd&„ZdHdOd'„ZdNd(„ZdPd)„Z dQd*„Z!dRd+„Z" e#d,d-e$d.¬/«      dSd0„«       Z%	 	 	 	 	 	 dTd1„Z&d2„ Z'dUd3„Z(	 	 	 	 dV	 	 	 	 	 	 	 	 	 dWd4„Z)y)XÚ
BaseDevicezBasic operation for a deviceNc                óˆ   — || _         || _        || _        i | _        i | _        |s|st        d«      ‚| j                  «        y)z 
        Args:
            client (BaseClient): AdbClient instance
            serial (str): device serial
            transport_id (int): transport_id
        z)serial, transport_id must set atleast oneN)Ú_clientÚ_serialÚ_transport_idÚ_propertiesÚ	_featuresr   Ú_prepare)ÚselfÚclientÚserialÚtransport_ids       úV/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/adbutils/_device_base.pyÚ__init__zBaseDevice.__init__)   sC   € ð ˆŒØˆŒØ)ˆÔØˆÔØˆŒá™lÜÐFÓGÐGà�‰�ó    c                 ó   — y)zrewrite in sub classN© ©r    s    r$   r   zBaseDevice._prepare=   s   � r&   c                ó   — | j                   S ©N)r   r)   s    r$   r"   zBaseDevice.serial@   s   € à�|‰|Ðr&   c                ó  — | j                   j                  |¬«      }|r‰| j                  r3|j                  d| j                  › d|› �«       |j	                  «        |S | j
                  r3|j                  d| j
                  › d|› �«       |j	                  «        |S t        d«      ‚| j                  r0|j                  d| j                  › �«       |j	                  «        |S | j
                  rŽ| j                   j                  «       dk\  rA|j                  d| j
                  › �«       |j	                  «        |j                  d	«       |S |j                  d
| j
                  z   «       |j	                  «        |S t        d«      ‚)N©Útimeoutzhost-transport-id:ú:zhost-serial:zshould not reach herezhost:transport-id:é)   zhost:tport:serial:é   zhost:transport:)	r   Úmake_connectionr   Úsend_commandÚ
check_okayr   ÚRuntimeErrorÚserver_versionÚread)r    Úcommandr.   Úcs       r$   Úopen_transportzBaseDevice.open_transportD   sY  € ð �L‰L×(Ñ(°Ð(Ó9ˆáØ×!Ò!Ø—‘Ð!3°D×4FÑ4FÐ3GÀqÈÈ	ÐRÔSØ—‘”ð0 ˆð/ —’Ø—‘ ¨d¯l©l¨^¸1¸W¸IÐFÔGØ—‘”ð* ˆô' #Ð#:Ó;Ð;à×!Ò!Ø—‘Ð!3°D×4FÑ4FÐ3GÐHÔIØ—‘”ð ˆð —’ð —<‘<×.Ñ.Ó0°BÒ6Ø—N‘NÐ%7¸¿¹°~Ð#FÔGØ—L‘L”NØ—F‘F˜1”Ið ˆð	 —N‘NÐ#4°t·|±|Ñ#CÔDØ—L‘L”Nð ˆô #Ð#:Ó;Ð;r&   c                óp   — | j                  |«      5 }|j                  «       cd d d «       S # 1 sw Y   y xY wr+   )r:   Úread_string_block)r    Úcmdr9   s      r$   Ú_get_with_commandzBaseDevice._get_with_commandg   s3   € Ø× Ñ  Ó%ð 	)¨Ø×&Ñ&Ó(÷	)÷ 	)ò 	)ús   ’,¬5c                ó$   — | j                  d«      S )z/return device state {offline,bootloader,device}z	get-state©r>   r)   s    r$   Ú	get_statezBaseDevice.get_statek   s   € à×%Ñ% kÓ2Ð2r&   c                ó$   — | j                  d«      S )z1return the real device id, not the connect serialzget-serialnor@   r)   s    r$   Úget_serialnozBaseDevice.get_serialnoo   s   € à×%Ñ% nÓ5Ð5r&   c                ó$   — | j                  d«      S )zexample return: usb:12345678Yzget-devpathr@   r)   s    r$   Úget_devpathzBaseDevice.get_devpaths   s   € à×%Ñ% mÓ4Ð4r&   c                óf   — | j                  d«      }t        |j                  d«      «      | _        |S )z„
        Return example:
            'abb_exec,fixed_push_symlink_timestamp,abb,stat_v2,apex,shell_v2,fixed_push_mkdir,cmd'
        Úfeaturesú,)r>   ÚsetÚsplitr   )r    rG   s     r$   Úget_featureszBaseDevice.get_featuresw   s.   € ð
 ×)Ñ)¨*Ó5ˆÜ˜XŸ^™^¨CÓ0Ó1ˆŒØˆr&   c                ób   — | j                  «       | j                  «       | j                  «       dœS )N)ÚserialnoÚdevpathÚstate)rC   rE   rA   r)   s    r$   ÚinfozBaseDevice.info€   s0   € ð ×)Ñ)Ó+Ø×'Ñ'Ó)Ø—^‘^Ó%ñ
ð 	
r&   c                ó8   — dj                  | j                  «      S )NzAdbDevice(serial={}))Úformatr"   r)   s    r$   Ú__repr__zBaseDevice.__repr__ˆ   s   € Ø%×,Ñ,¨T¯[©[Ó9Ð9r&   c                ó   — t        | «      S r+   )ÚPropertyr)   s    r$   ÚpropzBaseDevice.prop‹   s   € ä˜‹~Ðr&   c           	     ó¼  — | j                   rt        «       d| j                   gn
t        «       g}|j                  |«       	 t        j                  |t        j
                  t        j                  ¬«      j                  d«      S # t        j                  $ rD}|j                  dd«      r(t        d||j                  j                  dd¬«      «      ‚Y d	}~y	d	}~ww xY w)
z˜Run adb command use subprocess and get its content

        Returns:
            string of output

        Raises:
            EnvironmentError
        z-s)ÚstdinÚstderrúutf-8Úraise_errorTÚ
subprocessÚignore©ÚerrorsN)r   r   Úextendr\   Úcheck_outputÚDEVNULLÚSTDOUTÚdecodeÚCalledProcessErrorÚgetÚEnvironmentErrorÚoutput)r    ÚargsÚkwargsÚcmdsÚes        r$   Ú
adb_outputzBaseDevice.adb_output�   s²   € ð 48·<²<”“
˜D $§,¡,Ñ/ÄhÃjÀ\ˆØ�‰�DÔð	Ü×*Ñ*ØœJ×.Ñ.´z×7HÑ7Hôç‰f�W‹oðøô ×,Ñ,ò 	Ø�z‰z˜-¨Ô.Ü&Ø  $¨¯©¯©¸È¨Ó(Qóð ô /ûð	ús   ÁAB ÂCÂ:CÃCc                ó°   — t        |t        t        f«      rt        |«      }| j	                  «       }|j                  d|z   «       |j                  «        |S )z¹Open a shell connection to the device

        Args:
            cmdargs (str | list | tuple): command args

        Returns:
            AdbConnection: shell connection object
        zshell:)Ú
isinstanceÚlistÚtupler   r:   r3   r4   )r    Úcmdargsr9   s      r$   Ú
open_shellzBaseDevice.open_shell¤   sI   € ô �g¤¤e˜}Ô-Ü" 7Ó+ˆGØ×ÑÓ!ˆØ	�‰�x 'Ñ)Ô*Ø	�‰ŒØˆr&   rZ   Tc                 ó   — y r+   r(   ©r    rr   Ústreamr.   ÚencodingÚrstrips         r$   ÚshellzBaseDevice.shell´   s   € ð r&   F)rv   r.   rx   c                ó   — y r+   r(   ru   s         r$   ry   zBaseDevice.shell¾   s   € ð r&   )rx   c                ó   — y r+   r(   ru   s         r$   ry   zBaseDevice.shellÉ   s   € ð r&   c                 ó   — y r+   r(   )r    rr   rv   r.   rx   s        r$   ry   zBaseDevice.shellÔ   s   € ð r&   c                óH  — t        |t        t        f«      rt        |«      }| j	                  |«      }|r|S |r|j
                  j                  |«       	 |j                  |¬«      }|j                  «        |r|r|j                  «       S |S |S # |j                  «        w xY w)aÌ  Run shell inside device and get it's content

        Args:
            rstrip (bool): strip the last empty line (Default: True)
            stream (bool): return stream instead of string output (Default: False)
            timeout (float): set shell timeout
            encoding (str): set output encoding (Default: utf-8), set None to make return bytes
            rstrip (bool): strip the last empty line, only work when encoding is set

        Returns:
            string of output when stream is False
            AdbConnection when stream is True

        Raises:
            AdbTimeout

        Examples:
            shell("ls -l")
            shell(["ls", "-l"])
            shell("ls | grep data")
        ©rw   )
ro   rp   rq   r   rs   ÚconnÚ
settimeoutÚread_until_closeÚcloserx   )r    rr   rv   r.   rw   rx   r9   rh   s           r$   ry   zBaseDevice.shellÝ   s’   € ô: �g¤¤e˜}Ô-Ü" 7Ó+ˆGØ�O‰O˜GÓ$ˆÙØˆHÙØ�F‰F×Ñ˜gÔ&ð	Ø×'Ñ'°Ð'Ó:ˆFð �G‰GŒIÙÙ&,�6—=‘=“?Ð8°&Ð8Øˆøð �G‰G�Iús   ÁB ÂB!)rx   Úv2c                ó   — y r+   r(   ©r    rr   r.   rw   rx   rƒ   s         r$   Úshell2zBaseDevice.shell2  s   € ð r&   c                ó   — y r+   r(   r…   s         r$   r†   zBaseDevice.shell2  s   € ð r&   c                 ó   — y r+   r(   )r    rr   r.   rx   rƒ   s        r$   r†   zBaseDevice.shell2!  s   € ð r&   c           
     ó  — t        |t        t        f«      rt        |«      }|r^| j                  s-t        | j                  «       j                  d«      «      | _        d| j                  vrd}t        j                  d«       |r| j                  ||«      }n| j                  ||«      }|rÔt        |j                  |j                  |j                  j!                  |d¬«      |j"                  j!                  |d¬«      |j$                  j!                  |d¬«      ¬«      }|r]|j                  j'                  «       |_        |j"                  j'                  «       |_        |j$                  j'                  «       |_        |S )a"  
        Run shell command with detail output
        Args:
            cmdargs (str | list | tuple): command args
            timeout (float): set shell timeout, seconds
            encoding (str): set output encoding (Default: utf-8), set None to make return bytes
            rstrip (bool): strip the last empty line, only work when encoding is set
            shell_v2 (bool): attempt to use the shell_v2 protocol (and fail if not supported by device)

        Returns:
            ShellOutput

        Raises:
            AdbTimeout
        rH   Úshell_v2Fz.shell_v2 specified but not supported by deviceÚreplacer^   ©r8   Ú
returncoderh   rY   Ústdout)ro   rp   rq   r   r   rI   rK   rJ   ÚloggerÚwarningÚ	_shell_v2Ú	_shell_v1ÚShellReturnr8   r�   rh   rd   rY   rŽ   rx   )r    rr   r.   rw   rx   rƒ   Úresults          r$   r†   zBaseDevice.shell2*  s/  € ô. �g¤¤e˜}Ô-Ü" 7Ó+ˆGáØ—>’>Ü!$ T×%6Ñ%6Ó%8×%>Ñ%>¸sÓ%CÓ!D�”Ø §¡Ñ/Ø�Ü—‘ÐOÔPáØ—^‘^ G¨WÓ5‰Fà—^‘^ G¨WÓ5ˆFáÜ ØŸ™Ø!×,Ñ,Ø—}‘}×+Ñ+¨H¸YÐ+ÓGØ—}‘}×+Ñ+¨H¸YÐ+ÓGØ—}‘}×+Ñ+¨H¸YÐ+ÓGôˆFñ Ø &§¡× 4Ñ 4Ó 6�”Ø &§¡× 4Ñ 4Ó 6�”Ø &§¡× 4Ñ 4Ó 6�”Øˆr&   c                ó"  — t        |t        «      sJ ‚d}|d|› d�z   }| j                  ||d d¬«      }|j                  |j	                  «       «      }|dk(  rt        d||«      ‚t        ||t        |«      z   d  «      }|d | }t        |||¬«      S )	NzX4EXIT:z; echo z$?F)r.   rw   rx   éÿÿÿÿzshell output invalid)r8   r�   rh   )	ro   Ústrry   ÚrfindÚencoder   ÚintÚlenr   )r    rr   r.   ÚMAGICÚnewcmdrh   Úrindexr�   s           r$   r’   zBaseDevice._shell_v1^  s¡   € Ü˜'¤3Ô'Ð'Ð'ØˆØ˜W U G¨2Ð.Ñ.ˆØŸ
™
 6°7ÀTÐRW˜
ÓXˆØ—‘˜eŸl™l›nÓ-ˆØ�RŠ<ÜÐ1°6¸6ÓBÐBÜ˜ ¬¨U«Ñ 3Ð 5Ð6Ó7ˆ
Ø˜˜�ˆÜ g¸*ÈVÔTÐTr&   c                óò  — | j                  |¬«      }	 |j                  d|› �«       |j                  «        t        j                  «       }t        j                  «       }t        j                  «       }d}	 |j                  d«      }|d   }	t        j                  |dd d¬«      }
|
dk(  rŒ7|j                  |
«      }|	dk(  r#|j                  |«       |j                  |«       n3|	d	k(  r#|j                  |«       |j                  |«       n|	d
k(  r|d   }nŒ£t        |||j                  «       |j                  «       |j                  «       ¬«      |j                  «        S # |j                  «        w xY w)Nr-   z	shell,v2:éÿ   é   r   é   Úlittle)Ú	byteorderé   é   rŒ   )r:   r3   r4   ÚioÚBytesIOÚ
read_exactrš   Ú
from_bytesÚwriter   Úgetvaluer‚   )r    rr   r.   r9   Ústdout_bufferÚstderr_bufferÚoutput_bufferÚ	exit_codeÚheaderÚmsg_idÚlengthÚdatas               r$   r‘   zBaseDevice._shell_v2j  sL  € Ø×Ñ¨ÐÓ0ˆð!	Ø�N‰N˜Y w iÐ0Ô1Ø�L‰LŒNÜŸJ™J›LˆMÜŸJ™J›LˆMÜŸJ™J›LˆMØˆIàØŸ™ a›�Ø ™�ÜŸ™¨¨q°¨¸x˜ÓH�Ø˜Q’;Øà—|‘| FÓ+�Ø˜Q’;Ø!×'Ñ'¨Ô-Ø!×'Ñ'¨Õ-Ø˜q’[Ø!×'Ñ'¨Ô-Ø!×'Ñ'¨Õ-Ø˜q’[Ø $ Q¡�IØð! ô" "ØØ$Ø$×-Ñ-Ó/Ø$×-Ñ-Ó/Ø$×-Ñ-Ó/ôð �G‰G�IøˆA�G‰G�Iús   ”D?E$ Å$E6c                ón   — d}|r|dz  }|d|› d|› �z  }| j                  |«      }|j                  «        y )NÚforwardz	:norebindr/   ú;©r:   r‚   )r    ÚlocalÚremoteÚnorebindr=   r9   s         r$   r¶   zBaseDevice.forward�  sD   € ØˆÙØ�;ÑˆCØ��5�'˜˜6˜(Ð#Ñ#ˆØ×Ñ Ó$ˆØ	�‰�	r&   c                óŒ  — t        |t        «      rdt        |«      z   }| j                  «       D ]j  }|j                  | j
                  k(  sŒ|j                  |k(  sŒ-|j                  j                  d«      sŒIt        |j                  t        d«      d «      c S  t        «       }| j                  dt        |«      z   |«       |S )z(forward remote port to local random portútcp:N)ro   rš   r—   Úforward_listr"   r   rº   r¹   Ú
startswithr›   r   r¶   )r    rº   ÚfÚ
local_ports       r$   Úforward_portzBaseDevice.forward_port—  s    € ä�fœcÔ"Øœc &›kÑ)ˆFØ×"Ñ"Ó$ò 	3ˆAà—‘˜DŸL™LÓ(Ø—H‘H Ó&Ø—G‘G×&Ñ& vÕ.ä˜1Ÿ7™7¤3 v£; =Ð1Ó2Ò2ð	3ô #“_ˆ
Ø�‰�Vœc *›oÑ-¨vÔ6ØÐr&   c                ó¤  — d}| j                  |«      5 }|j                  «       }g }|j                  «       D ]8  }|j                  «       }t	        |«      dk7  rŒ"|j                  t        |Ž «       Œ: |cd d d «       S # 1 sw Y   nxY w| j                  j                  «       }|D �cg c]  }|j                  | j                  k(  sŒ|‘Œ  c}S c c}w )Nzlist-forwardr¦   )r:   r<   Ú
splitlinesrJ   r›   ÚappendÚForwardItemr   r¾   r"   r   )r    r=   r9   ÚcontentÚitemsÚlineÚpartsÚitems           r$   r¾   zBaseDevice.forward_list¦  s½   € ØˆØ× Ñ  Ó%ð 	¨Ø×)Ñ)Ó+ˆGØˆEØ×*Ñ*Ó,ò 2�ØŸ
™
›�Ü�u“: ’?ØØ—‘œ[¨%Ð0Õ1ð	2ð
 ÷	÷ 	ò 	úð —‘×)Ñ)Ó+ˆØ!&ÖF˜¨$¯+©+¸¿¹Ó*E’ÒFÐFùÒFs   ”AA=Á=BÂ'CÃCc                ó¬   — d}	 | j                  d|› �«      }|r|j                  «        yy# t        $ r |r‚ Y Œ"w xY w# |r|j                  «        w w xY w)a1  
        Remove existing forward local connection.

        Args:
            local (str): Local address of the forward to close, for example tcp:<port>
            raise_non_found (bool): Whether to raise an `AdbError` if the local forward address
                doesn't exist, default is True.
        Nzkillforward:)r:   r   r‚   )r    r¹   Úraise_non_foundr9   s       r$   Úforward_removezBaseDevice.forward_removeµ  sh   € ð #'ˆð	Ø×#Ñ# l°5°'Ð$:Ó;ˆAñ
 Ø—‘•	ð øô	 ò 	ÙØñ ð	ûñ Ø—‘•	ð ús   „, ¬;¸> º;»> ¾Ac                óB   — | j                  d«      j                  «        y)z)Remove all forwarded network connections.zkillforward-allNr¸   r)   s    r$   Úforward_remove_allzBaseDevice.forward_remove_allÈ  s   € à×ÑÐ-Ó.×4Ñ4Õ6r&   c                ó(  — | j                  «       5 }dg}|r|j                  d«       |j                  |dz   |z   «       |j                  dj                  |«      «       |j	                  «        |j	                  «        ddd«       y# 1 sw Y   yxY w)aš  
        Args:
            serial (str): device serial
            remote, local (str):
                - tcp:<port>
                - localabstract:<unix domain socket name>
                - localreserved:<unix domain socket name>
                - localfilesystem:<unix domain socket name>
            norebind (bool): fail if already reversed when set to true

        Raises:
            AdbError
        zreverse:forwardr»   r·   r/   N)r:   rÅ   r3   Újoinr4   )r    rº   r¹   r»   r9   ri   s         r$   ÚreversezBaseDevice.reverseÌ  sy   € ð × Ñ Ó"ð 	 aØ%Ð&ˆDÙØ—‘˜JÔ'Ø�K‰K˜ ™ uÑ,Ô-Ø�N‰N˜3Ÿ8™8 D›>Ô*Ø�L‰LŒNØ�L‰LŒN÷	÷ 	ñ 	ús   ‘A.BÂBc                ó°   — | j                  «       5 }|j                  d«       |j                  «        |j                  «        ddd«       y# 1 sw Y   yxY w)z'Remove all reverse network connections.zreverse:killforward-allN©r:   r3   r4   ©r    r9   s     r$   Úreverse_remove_allzBaseDevice.reverse_remove_allã  sD   € à× Ñ Ó"ð 	 aØ�N‰NÐ4Ô5Ø�L‰LŒNØ�L‰LŒN÷	÷ 	ñ 	ús   ‘2AÁAc                ó¶   — | j                  «       5 }|j                  d|› �«       |j                  «        |j                  «        ddd«       y# 1 sw Y   yxY w)a€  
        Remove existing reverse remote connection.

        Args:
            serial (str): device serial
            remote (str):
                - tcp:<port>
                - localabstract:<unix domain socket name>
                - localreserved:<unix domain socket name>
                - localfilesystem:<unix domain socket name>

        Raises:
            AdbError
        zreverse:killforward:NrÕ   )r    rº   r9   s      r$   Úreverse_removezBaseDevice.reverse_removeê  sM   € ð × Ñ Ó"ð 	 aØ�N‰NÐ1°&°Ð:Ô;Ø�L‰LŒNØ�L‰LŒN÷	÷ 	ñ 	ús   ‘5AÁAc           	     óV  — | j                  «       5 }|j                  d«       |j                  «        |j                  «       }g }|j	                  «       D ];  }|j                  «       }t        |«      dk7  rŒ"|j                  t        |dd  Ž «       Œ= 	 d d d «       |S # 1 sw Y   S xY w)Nzreverse:list-forwardr¦   r¢   )	r:   r3   r4   r<   rÄ   rJ   r›   rÅ   ÚReverseItem)r    r9   rÇ   rÈ   rÉ   rÊ   s         r$   Úreverse_listzBaseDevice.reverse_listþ  sŸ   € Ø× Ñ Ó"ð 		6 aØ�N‰NÐ1Ô2Ø�L‰LŒNØ×)Ñ)Ó+ˆGØˆEØ×*Ñ*Ó,ò 6�ØŸ
™
›�Ü�u“: ’?ØØ—‘œ[¨%°°¨)Ð4Õ5ñ	6÷		6ð ˆ÷		6ð ˆús   ‘BBÂB(c                ón  — | j                  «       }|j                  d«       |j                  «        |j                  «       }|dk(  rt	        d«      ‚|j                  «       }|dk7  r|dk7  rt	        d|«      ‚|j                  «       }|dk(  r|j                  «       }|j                  «       }|j                  «       }|j                  «       }|j                  «       }|j                  «       }	|j                  «       }
|j                  «       }|j                  «       }|j                  «       }|j                  «       }d}|	d	k(  rd
}|dk(  s|r|dz  }|dk7  r|dk7  rt	        d«      ‚|j                  |«      }t        |«      |k7  rt        d|t        |«      «      ‚t        j                  |||f|«      }|S )z}Capture device screen and return PIL.Image object (Not very stable)

        Raises:
            NotImplementedError
        zframebuffer:é   zUnsupported version 16é   é    zUnsupported bpp(bits per pixel)r¢   ÚRGBr   ÚBGRÚAÚRGBAzUnsupported color formatzframebuffer size not match)
r:   r3   r4   Úread_uint32ÚNotImplementedErrorr7   r›   r
   r	   Ú	frombytes)r    r9   ÚversionÚbppÚsizeÚwidthÚheightÚ
red_offsetÚ
red_lengthÚblue_offsetÚblue_lengthÚgreen_offsetÚgreen_lengthÚalpha_offsetÚalpha_lengthÚcolor_formatÚbufferÚimages                     r$   ÚframebufferzBaseDevice.framebuffer  s  € ð ×ÑÓ!ˆØ	�‰�~Ô&Ø	�‰Œà—-‘-“/ˆØ�bŠ=Ü%Ð&>Ó?Ð?Ø�m‰m‹oˆØ�"Š9˜ šÜ%Ð&GÈÓMÐMØ�}‰}‹ˆØ�1Š9à—=‘=“?ˆDØ—‘“ˆØ—‘“ˆØ—]‘]“_ˆ
Ø—]‘]“_ˆ
Ø—m‘m“oˆØ—m‘m“oˆØ—}‘}“ˆØ—}‘}“ˆØ—}‘}“ˆØ—}‘}“ˆàˆØ˜!ÒØ ˆLØ�"Š9™Ø˜CÑˆLà˜6Ò! l°eÒ&;Ü%Ð&@ÓAÐAØ—‘˜“ˆÜˆv‹;˜$ÒÜ(Ð)EÀtÌSÐQWË[ÓYÐYÜ—‘ ¨u°f¨o¸vÓFˆØˆr&   z2.6.0z3.0.0zuse sync.push instead)Údeprecated_inÚ
removed_inÚcurrent_versionÚdetailsc                ó:   — | j                   j                  ||«      S )z alias for sync.push )ÚsyncÚpush)r    r¹   rº   s      r$   rÿ   zBaseDevice.push:  s   € ð �y‰y�~‰~˜e VÓ,Ð,r&   c                ór   ‡‡— dˆˆfd„}| j                  «       }	  ||«      S #  |j                  «        ‚ xY w)z¤
        Used to connect a socket (unix of tcp) on the device

        Returns:
            socket object

        Raises:
            AdbError, ValueError
        c                ó˜  •— ‰t         j                  k(  rKt        ‰t        «      sJ ‚| j	                  dt        ‰«      z   «       | j                  «        | j                  S ‰t         j                  t         j                  fv rBt        ‰t
        «      sJ ‚| j	                  d‰z   «       | j                  «        | j                  S ‰t         j                  t         j                  t         j                  t         j                  fv r<| j	                  ‰dz   t        ‰«      z   «       | j                  «        | j                  S t        d‰«      ‚)Nr½   zlocalabstract:r/   zUnsupported network type)ÚNetworkÚTCPro   rš   r3   r—   r4   ÚUNIXÚLOCAL_ABSTRACTÚLOCAL_FILESYSTEMÚLOCALÚDEVÚLOCAL_RESERVEDÚ
ValueErrorr   )r9   ÚaddressÚnetworks    €€r$   Ú_connectz.BaseDevice.create_connection.<locals>._connectK  s  ø€ Øœ'Ÿ+™+Ò%Ü! '¬3Ô/Ð/Ð/Ø—‘˜v¬¨G«Ñ4Ô5Ø—‘”ð —6‘6ˆMð œWŸ\™\¬7×+AÑ+AÐBÑBÜ! '¬3Ô/Ð/Ð/Ø—‘Ð/°'Ñ9Ô:Ø—‘”ð —6‘6ˆMð Ü×(Ñ(Ü—‘Ü—‘Ü×&Ñ&ð	ñ ð —‘˜w¨™}¬s°7«|Ñ;Ô<Ø—‘”ð —6‘6ˆMô !Ð!;¸WÓEÐEr&   )r9   r   Úreturnúsocket.socketr¸   )r    r  r  r  r9   s    ``  r$   Úcreate_connectionzBaseDevice.create_connection?  s:   ù€ ö	ð* ×ÑÓ!ˆð	Ù˜A“;Ðøð	Ø�G‰GŒIØús   ›# £6c                ó°   — | j                  «       5 }|j                  d«       |j                  «        |j                  «       cddd«       S # 1 sw Y   yxY w)zjrestart adbd as root

        Return example:
            cannot run as root in production builds
        zroot:N)r:   r3   r4   r�   rÖ   s     r$   ÚrootzBaseDevice.rootg  sH   € ð × Ñ Ó"ð 	( aØ�N‰N˜7Ô#Ø�L‰LŒNØ×%Ñ%Ó'÷	(÷ 	(ò 	(ús   ‘1AÁAc                óÈ   — | j                  «       5 }|j                  dt        |«      z   «       |j                  «        |j	                  «       cddd«       S # 1 sw Y   yxY w)zurestart adbd listening on TCP on PORT

        Return example:
            restarting in TCP mode port: 5555
        ztcpip:N)r:   r3   r—   r4   r�   )r    Úportr9   s      r$   ÚtcpipzBaseDevice.tcpips  sQ   € ð × Ñ Ó"ð 	( aØ�N‰N˜8¤c¨$£iÑ/Ô0Ø�L‰LŒNØ×%Ñ%Ó'÷	(÷ 	(ò 	(ús   ‘=AÁA!c                ó´  ‡— ‰rAt        ‰t        «      rt        j                  ‰«      Št        ‰t        j                  «      sJ ‚|r| j                  d«       dˆfd„}	 	 	 	 	 	 	 	 dd„}t        «       }| j                  |d¬«      }t        j                  |«      j                  dd¬«      }	t        j                  d	|||	||fd¬
«      j                  «        |S )a´  
        Args:
            file (str): file path to save logcat
            clear (bool): clear logcat before start
            re_filter (str | re.Pattern): regex pattern to filter logcat
            command (str): logcat command, default is "logcat -v time"

        Example usage:
            >>> evt = device.logcat("logcat.txt", clear=True, re_filter=".*python.*")
            >>> time.sleep(10)
            >>> evt.stop()
        zlogcat --clearc                ó0   •— ‰€y‰j                  | «      d uS )NT)Úsearch)rÉ   Ú	re_filters    €r$   Ú_filter_funcz'BaseDevice.logcat.<locals>._filter_func™  s"   ø€ ØÐ ØØ×#Ñ# DÓ)°Ð5Ð5r&   c                óÆ  — 	 | j                   j                  ddd¬«      }|j                  «       sM|j                  «       }|sn: ||«      r!|j	                  |«       |j                  «        |j                  «       sŒM|j                  «        | j                  «        |j                  «        y # j                  «        | j                  «        |j                  «        w xY w)NÚrúUTF-8r‹   )rw   r_   )r   ÚmakefileÚ
is_stoppedÚreadliner«   Úflushr‚   Údone)rv   ÚfdstÚeventÚfilter_funcÚfsrcrÉ   s         r$   Ú
_copy2filez%BaseDevice.logcat.<locals>._copy2filež  s¦   € ðØ—{‘{×+Ñ+¨C¸'È)Ð+ÓT�Ø×*Ñ*Ô,ØŸ=™=›?�DÙØÙ" 4Ô(ØŸ
™
 4Ô(ØŸ
™
œð  ×*Ñ*Õ,ð —
‘
”Ø—‘”Ø—
‘
•øð —
‘
”Ø—‘”Ø—
‘
•ús   ‚A:B. Â.2C T)rv   Úwr  r~   Úlogcat)ÚnameÚtargetri   Údaemon)rÉ   r—   r  Úbool)rv   r   r#  ztyping.TextIOr$  r   r%  ztyping.Callable[[str], bool])ro   r—   ÚreÚcompileÚPatternry   r   ÚpathlibÚPathÚopenÚ	threadingÚThreadÚstart)
r    ÚfileÚclearr  r8   r  r'  r$  rv   r#  s
      `      r$   r)  zBaseDevice.logcat~  sÜ   ø€ ñ& Ü˜)¤SÔ)ÜŸJ™J yÓ1�	Ü˜i¬¯©Ô4Ð4Ð4áØ�J‰JÐ'Ô(õ	6ð
	Ø!ð	àð	ð ð	ð 6ó		ô( “ˆØ—‘˜G¨D�Ó1ˆÜ�|‰|˜DÓ!×&Ñ& s°WÐ&Ó=ˆÜ×ÑØØØ˜$  |Ð4Øô		
÷
 ‰%Œ'Øˆr&   )NN)r!   r   r"   úOptional[str]r#   zOptional[int])r  r9  )r8   r9  r.   úOptional[float]r  r   )r=   r—   r  r—   )r  r—   )r  Údict)r  z
'Property')rr   úUnion[str, list, tuple]r  r   )
rr   r<  rv   zLiteral[True]r.   r:  rw   ú
str | Noner  r   )
rr   r<  rv   úLiteral[False]r.   r:  rw   úLiteral[None]r  Úbytes)
rr   r<  rv   r>  r.   r:  rw   r—   r  r—   )rr   r<  rv   r>  r.   r:  r  r—   )
rr   r<  rv   r-  r.   r:  rw   r=  r  z'typing.Union[AdbConnection, str, bytes])rr   r<  r.   r:  rw   r?  r  r   )rr   r<  r.   r:  rw   r—   r  r“   )rr   r<  r.   r:  r  r“   )rr   r<  r.   r:  rw   r=  r  z"Union[ShellReturn, ShellReturnRaw])rr   r—   r.   r:  r  r   )F)r¹   r—   rº   r—   r»   r-  )rº   úUnion[int, str]r  rš   )r  zList[ForwardItem]©T)r¹   r—   rÍ   r-  r  ÚNone)r  rC  )rº   r—   r¹   r—   r»   r-  )rº   r—   )r  zList[ReverseItem])r  zImage.Image)r¹   r—   rº   r—   )r  r  r  rA  r  r  )r  rš   )NFNzlogcat -v time)
r7  zOptional[StrOrPathLike]r8  r-  r  z Optional[Union[str, re.Pattern]]r8   r—   r  r   )*Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r   Úpropertyr"   Ú_DEFAULT_SOCKET_TIMEOUTr:   r>   rA   rC   rE   rK   rP   rS   rV   rm   rs   r   ry   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   &   s  „ Ù&ð _cðØ ðØ*7ðØN[óò(#ð òó ðð (,ÐH_ð!Ø$ð!Ø6Eð!à	ó!óF)ó3ó6ó5óð ò
ó ð
ò:ð òó ðòó*ð  ð
 $;Ø&Øðà(ðð ðð !ð	ð
 ðð 
òó ðð ð
 "'Ø#:àñà(ðð ð	ð
 !ðð  ðð 
òó ðð ð "'Ø#:ð	ð ñà(ðð ðð !ð	ð ðð 
òó ðð ð "'Ø#:Øðà(ðð ðð !ð	ð 
òó ðð Ø#:Ø&Øð,à(ð,ð ð,ð !ð	,ð
 ð,ð 
1ó,ð\ ð $;ðð Øñà(ðð !ðð
  ðð 
òó ðð ð $;ðð Øñà(ðð !ðð
 ðð 
òó ðð ð $;ØØðà(ðð !ðð 
òó ðð $;Ø&ØØð2à(ð2ð !ð2ð ð	2ð 
,ó2ðh BYô 
Uð BYô #ôJóóGôó&7ôó.óó(ó-ñ^ ˜g°'È;Ð`wÔxò-ó yð-ð&Øð&Ø)8ð&à	ó&òP
(ó	(ð )-ØØ6:Ø'ð=à%ð=ð ð=ð 4ð	=ð
 ð=ð 
ô=r&   r   c                  óT   — e Zd Zdd„Zd„ Zd	d
d„Zed„ «       Zed„ «       Zed„ «       Z	y)rU   c                ó   — || _         y r+   )Ú_d)r    Úds     r$   r%   zProperty.__init__À  s	   € Øˆ�r&   c                óT   — d| j                   › d| j                  › d| j                  › �S )Nzproduct:z model:z device:)r*  ÚmodelÚdevicer)   s    r$   Ú__str__zProperty.__str__Ã  s'   € Ø˜$Ÿ)™)˜ G¨D¯J©J¨<°xÀÇÁ¸}ÐMÐMr&   c                óô   — |r1|| j                   j                  v r| j                   j                  |   S | j                   j                  d|g«      j                  «       x}| j                   j                  |<   |S )NÚgetprop)rL  r   ry   Ústrip)r    r*  ÚcacheÚvalues       r$   rf   zProperty.getÆ  sd   € Ù�T˜TŸW™W×0Ñ0Ñ0Ø—7‘7×&Ñ& tÑ,Ð,Ø,0¯G©G¯M©M¸9ÀdÐ:KÓ,L×,RÑ,RÓ,TÐTˆ�—‘×#Ñ# DÑ)Øˆr&   c                ó(   — | j                  dd¬«      S )Nzro.product.nameT©rU  ©rf   r)   s    r$   r*  zProperty.nameÌ  s   € à�x‰xÐ)°ˆxÓ6Ð6r&   c                ó(   — | j                  dd¬«      S )Nzro.product.modelTrX  rY  r)   s    r$   rO  zProperty.modelÐ  s   € à�x‰xÐ*°$ˆxÓ7Ð7r&   c                ó(   — | j                  dd¬«      S )Nzro.product.deviceTrX  rY  r)   s    r$   rP  zProperty.deviceÔ  s   € à�x‰xÐ+°4ˆxÓ8Ð8r&   N)rM  r   rB  )r*  r—   r  r—   )
rD  rE  rF  r%   rQ  rf   rH  r*  rO  rP  r(   r&   r$   rU   rU   ¾  sN   „ óòNôð ñ7ó ð7ð ñ8ó ð8ð ñ9ó ñ9r&   rU   )+Ú
__future__r   r§   Úloggingr1  r.  Úsocketr\   r4  Útypingr   r   r   r   r   ÚImportErrorÚtyping_extensionsÚPILr	   r
   Údeprecationr   Úadbutils._protor   Úadbutils._adbr   r   r   Úadbutils._utilsr   r   r   r   Úadbutils._versionr   Úadbutils.errorsr   rI  Ú	getLoggerrD  r�   r   rU   r(   r&   r$   ú<module>rj     s–   ðõ #ã 	Û Û Û 	Û Û Û Û ß 2Ó 2ð*Ý÷ .Ý "å *ß 3Ü Ý )ß LÓ LÝ )Ý $ð Ð à	ˆ×	Ñ	˜8Ó	$€÷U
ñ U
÷p9ò 9øðY ò *ß)ð*ús   ´B" Â"B0Â/B0