
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \ÔF  ã               @   sÜ  d dl Z d dlZd dlZd dlZd dlT d dlmZ dddddd	d
ddddge Z[ejejej	e
eefZed Zdd„ ZdJddœdd„ZdKddœdd„Zdddddddddddœ
Zd d!„ Zd"d#„ Zd$d„ Zd%d&„ Zddœd'd„Zejd(d)ƒZd*ej_d+ej_d,ej_d-ej_d.ej_d/ej _d0ej!_d1ej"_G d2d„ deƒZ#dd3œd4d„Z$d5d6„ Z%d7d8„ Z&dLd9d:„Z'dNddœd<d„Z(dPdd d=œd>d?„Z)ddœd@dA„Z*e(Z+dBdC„ Z,dDd
„ Z-dEd	„ Z.G dFd„ dƒZ/dGdH„ Z0e1dIk�rØe0ƒ  dS )Qé    N)Ú*)Ú__all__Ú	code_infoÚdisÚdisassembleÚdistbÚdiscoÚfindlinestartsÚ
findlabelsÚ	show_codeÚget_instructionsÚInstructionÚBytecodeÚFORMAT_VALUEc             C   s6   yt | |dƒ}W n  tk
r0   t | |dƒ}Y nX |S )NÚevalÚexec)ÚcompileÚSyntaxError)ÚsourceÚnameÚc© r   ú/usr/lib64/python3.6/dis.pyÚ_try_compile   s
    r   )Úfilec            C   s>  | d krt |d� d S t| dƒr&| j} t| dƒr6| j} t| dƒrF| j} t| dƒrØt| jjƒ ƒ}xÚ|D ]n\}}t|t	ƒrdt
d| |d� yt||d� W n0 tk
rÆ } zt
d||d� W Y d d }~X nX t
|d� qdW nbt| dƒrðt| |d� nJt| ttfƒ�rt| |d� n,t| tƒ�r(t| |d� ntd	t| ƒj ƒ‚d S )
N)r   Ú__func__Ú__code__Úgi_codeÚ__dict__zDisassembly of %s:zSorry:Úco_codez(don't know how to disassemble %s objects)r   Úhasattrr   r   r   Úsortedr   ÚitemsÚ
isinstanceÚ
_have_codeÚprintr   Ú	TypeErrorr   ÚbytesÚ	bytearrayÚ_disassemble_bytesÚstrÚ_disassemble_strÚtypeÚ__name__)Úxr   r"   r   Zx1Úmsgr   r   r   r   "   s6    





 
c            C   sZ   | d krBy
t j} W n tk
r.   tdƒ‚Y nX x| jr@| j} q2W t| jj| j|d� d S )Nz no last traceback to disassemble)r   )	ÚsysÚlast_tracebackÚAttributeErrorÚRuntimeErrorÚtb_nextr   Útb_frameÚf_codeÚtb_lasti)Útbr   r   r   r   r   E   s    
 
Z	OPTIMIZEDZ	NEWLOCALSZVARARGSZVARKEYWORDSZNESTEDZ	GENERATORZNOFREEZ	COROUTINEZITERABLE_COROUTINEZASYNC_GENERATOR)
é   é   é   é   é   é    é@   é€   é   i   c             C   sb   g }xRt dƒD ]8}d|> }| |@ r|jtj|t|ƒƒƒ | |N } | sP qW |jt| ƒƒ dj|ƒS )Nr>   r9   z, )ÚrangeÚappendÚCOMPILER_FLAG_NAMESÚgetÚhexÚjoin)ÚflagsÚnamesÚiÚflagr   r   r   Úpretty_flags_   s    rL   c             C   sh   t | dƒr| j} t | dƒr | j} t | dƒr0| j} t| tƒrDt| dƒ} t | dƒrR| S tdt| ƒj	 ƒ‚d S )Nr   r   r   z<disassembly>r   z(don't know how to disassemble %s objects)
r    r   r   r   r#   r*   r   r&   r,   r-   )r.   r   r   r   Ú_get_code_objectm   s    





rM   c             C   s   t t| ƒƒS )N)Ú_format_code_inforM   )r.   r   r   r   r   |   s    c             C   s†  g }|j d| j ƒ |j d| j ƒ |j d| j ƒ |j d| j ƒ |j d| j ƒ |j d| j ƒ |j dt| jƒ ƒ | j	rª|j dƒ x t
| j	ƒD ]}|j d	| ƒ q”W | jrÜ|j d
ƒ x t
| jƒD ]}|j d| ƒ qÆW | j�r|j dƒ x t
| jƒD ]}|j d| ƒ qúW | j�rF|j dƒ x"t
| jƒD ]}|j d| ƒ �q.W | j�r||j dƒ x"t
| jƒD ]}|j d| ƒ �qdW dj|ƒS )NzName:              %szFilename:          %szArgument count:    %szKw-only arguments: %szNumber of locals:  %szStack size:        %szFlags:             %sz
Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables:Ú
)rC   Úco_nameÚco_filenameÚco_argcountÚco_kwonlyargcountÚ
co_nlocalsÚco_stacksizerL   Úco_flagsÚ	co_constsÚ	enumerateÚco_namesÚco_varnamesÚco_freevarsÚco_cellvarsrG   )ÚcoÚlinesZi_cZi_nr   r   r   rN   €   s:    




rN   c            C   s   t t| ƒ|d� d S )N)r   )r%   r   )r]   r   r   r   r   r   Ÿ   s    Ú_InstructionzBopname opcode arg argval argrepr offset starts_line is_jump_targetz!Human readable name for operationzNumeric code for operationz6Numeric argument to operation (if any), otherwise Nonez4Resolved arg value (if known), otherwise same as argz0Human readable description of operation argumentz1Start index of operation within bytecode sequencez4Line started by this opcode (if any), otherwise Nonez1True if other code jumps to here, otherwise Falsec               @   s   e Zd Zddd„ZdS )r   é   Fc             C   sà   g }|r:| j d k	r,d| }|j|| j  ƒ n|jd| ƒ |rJ|jdƒ n
|jdƒ | jrf|jdƒ n
|jdƒ |jt| jƒjdƒƒ |j| jjdƒƒ | jd k	rÒ|jt| jƒjd	ƒƒ | j	rÒ|jd
| j	 d ƒ dj
|ƒjƒ S )Nz%%%ddú z-->z   z>>z  r;   é   é   ú(ú))Ústarts_linerC   Úis_jump_targetÚreprÚoffsetÚrjustÚopnameÚljustÚargÚargreprrG   Úrstrip)ÚselfÚlineno_widthZmark_as_currentZfieldsZ
lineno_fmtr   r   r   Ú_disassembleÀ   s&    



zInstruction._disassembleN)r`   F)r-   Ú
__module__Ú__qualname__rr   r   r   r   r   r   ²   s   )Ú
first_linec            C   sT   t | ƒ}|j|j }tt|ƒƒ}|d k	r4||j }nd}t|j|j|j	|j
|||ƒS )Nr   )rM   r\   r[   Údictr	   Úco_firstlinenoÚ_get_instructions_bytesr   rZ   rY   rW   )r.   ru   r]   Ú
cell_namesÚ
linestartsÚline_offsetr   r   r   r   å   s    c             C   s    | }|d k	r||  }|t |ƒfS )N)rh   )Zconst_indexZ
const_listÚargvalr   r   r   Ú_get_const_infoû   s    r}   c             C   s*   | }|d k	r||  }|}nt |ƒ}||fS )N)rh   )Z
name_indexZ	name_listr|   rn   r   r   r   Ú_get_name_info  s    r~   c          
   c   sx  t | ƒ}d }�xdt| ƒD �]V\}	}
}|d k	rH|j|	d ƒ}|d k	rH||7 }|	|k}d }d}|d k	�rT|}|
tkr~t||ƒ\}}nÖ|
tkr–t||ƒ\}}n¾|
tkr¸|	d | }dt|ƒ }nœ|
t	krÐt||ƒ\}}n„|
t
kræt| }|}nn|
tkrþt||ƒ\}}nV|
tk�rTd tttf|d@  t|d@ ƒf}d|d@  }|d	 �rT|�rL|d
7 }|d7 }tt|
 |
||||	||ƒV  qW d S )NÚ r:   zto r`   r;   r*   rh   Úasciir9   z, zwith format)r   r*   rh   r€   )r
   Ú_unpack_opargsrE   Zhasconstr}   Zhasnamer~   Úhasjrelrh   ZhaslocalZ
hascompareZcmp_opZhasfreer   r*   r€   Úboolr   rk   )ÚcodeÚvarnamesrI   Ú	constantsÚcellsrz   r{   Úlabelsrf   ri   Úoprm   rg   r|   rn   r   r   r   rx     sH    


 

rx   r9   c         
   C   s<   | j | j }tt| ƒƒ}t| j|| j| j| j|||d� d S )N)r   )	r\   r[   rv   r	   r)   r   rZ   rY   rW   )r]   Úlastir   ry   rz   r   r   r   r   J  s    )r   r{   c         	   C   s|   |d k	}	|	rdnd}
xbt | ||||||d�D ]H}|	oF|jd k	oF|jdk}|rVt|d� |j|k}t|j|
|ƒ|d� q,W d S )Nr`   r   )r{   )r   )rx   rf   ri   r%   rr   )r„   rŠ   r…   rI   r†   r‡   rz   r   r{   Zshow_linenorq   ZinstrZnew_source_lineZis_current_instrr   r   r   r)   Q  s    




r)   c            C   s   t t| dƒ|d� d S )Nz<dis>)r   )r   r   )r   r   r   r   r   r+   c  s    r+   c             c   sh   d}x^t dt| ƒdƒD ]J}| | }|tkrP| |d  |B }|tkrJ|d> nd}nd }|||fV  qW d S )Nr   r:   r9   r<   )rB   ÚlenZHAVE_ARGUMENTZEXTENDED_ARG)r„   Zextended_argrJ   r‰   rm   r   r   r   r�   i  s    r�   c             C   s`   g }xVt | ƒD ]J\}}}|d k	r|tkr6|d | }n|tkr|}nq||kr|j|ƒ qW |S )Nr:   )r�   r‚   ZhasjabsrC   )r„   rˆ   ri   r‰   rm   Zlabelr   r   r   r
   t  s    c             c   s–   | j dd d… }| j dd d… }d }| j}d}xPt||ƒD ]B\}}|rd||kr\||fV  |}||7 }|dkrt|d8 }||7 }q:W ||kr’||fV  d S )Nr   r:   r9   r@   rA   )Ú	co_lnotabrw   Úzip)r„   Zbyte_incrementsZline_incrementsZ
lastlinenoÚlinenoZaddrZ	byte_incrZ	line_incrr   r   r   r	   ‡  s     
c               @   sH   e Zd Zdddœdd„Zdd„ Zdd„ Zed	d
„ ƒZdd„ Zdd„ Z	dS )r   N)ru   Úcurrent_offsetc            C   sd   t |ƒ | _}|d kr&|j| _d| _n|| _||j | _|j|j | _tt	|ƒƒ| _
|| _|| _d S )Nr   )rM   Úcodeobjrw   ru   Ú_line_offsetr\   r[   Ú_cell_namesrv   r	   Ú_linestartsÚ_original_objectr�   )rp   r.   ru   r�   r]   r   r   r   Ú__init__¨  s    zBytecode.__init__c          	   C   s*   | j }t|j|j|j|j| j| j| jd�S )N)r{   )	r�   rx   r   rZ   rY   rW   r’   r“   r‘   )rp   r]   r   r   r   Ú__iter__µ  s
    zBytecode.__iter__c             C   s   dj | jj| jƒS )Nz{}({!r}))ÚformatÚ	__class__r-   r”   )rp   r   r   r   Ú__repr__¼  s    
zBytecode.__repr__c             C   s$   x|j r|j }qW | |jj|jd�S )N)r�   )r4   r5   r6   r7   )Úclsr8   r   r   r   Úfrom_tracebackÀ  s    
zBytecode.from_tracebackc             C   s
   t | jƒS )N)rN   r�   )rp   r   r   r   ÚinfoÇ  s    zBytecode.infoc             C   s`   | j }| jd k	r| j}nd}tjƒ �2}t|j|j|j|j| j	| j
| j||d�	 |jƒ S Q R X d S )Nr9   )r…   rI   r†   r‡   rz   r{   r   rŠ   éÿÿÿÿ)r�   r�   ÚioÚStringIOr)   r   rZ   rY   rW   r’   r“   r‘   Úgetvalue)rp   r]   ri   Úoutputr   r   r   r   Ë  s    


zBytecode.dis)
r-   rs   rt   r•   r–   r™   Úclassmethodr›   rœ   r   r   r   r   r   r      s   c              C   sd   dd l } | jƒ }|jd| jƒ ddd� |jƒ }|j�}|jƒ }W d Q R X t||jjdƒ}t	|ƒ d S )Nr   Úinfileú?ú-)r,   ÚnargsÚdefaultr   )
ÚargparseÚArgumentParserÚadd_argumentZFileTypeÚ
parse_argsr£   Úreadr   r   r   )r¨   ÚparserÚargsr£   r   r„   r   r   r   Ú_testÝ  s    r¯   Ú__main__)N)N)NNNNNr   r�   )r�   r�   )r�   NNNNN)2r0   ÚtypesÚcollectionsrž   Zopcoder   Z_opcodes_allÚ
MethodTypeÚFunctionTypeÚCodeTyper¢   Ústaticmethodr,   r$   Zopmapr   r   r   r   rD   rL   rM   r   rN   r   Ú
namedtupler_   rk   Ú__doc__rm   r|   rn   ri   rf   rg   r   r   r}   r~   rx   r   r)   r+   r   r�   r
   r	   r   r¯   r-   r   r   r   r   Ú<module>   sv   

#3 
2 =
