3
Ôb`þz  ã               @   s8  d dl mZ d dlZd dlZd dlZddlmZmZ ddlm	Z	 dd„ Z
G dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zdd„ ZeZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeddƒZedd ƒZedd!ƒZedd"d#d$iƒZejeejeejeejeiZG d%d&„ d&eƒZeƒ Z G d'd(„ d(eƒZ!dS ))é    )Úunicode_literalsNé   )Ú
compat_strÚcompat_struct_unpack)ÚExtractorErrorc             c   sT  | dd… dkr$t d| d d…  ƒ‚| d d… dkrHtj| dd … ƒ}ntd| d d…  ƒ‚td|d d… ƒd	 d? }d
d|  d d }|d d }x¸|t|ƒk rNtd|||d … ƒd	 }|d7 }|d? }|d@ }|dkrtd|||d … ƒd	 }|d7 }|| t|ƒks.td|||t|ƒf ƒ‚||||| … fV  ||7 }q˜W d S )Nr   é   s   WSzNot an SWF file; header is %ró   Cé   z!Unsupported compression format %rz!Br   é   é   é   é   z<Hé   é?   z<Iz7Tag %d ends at %d+%d - that's longer than the file (%d))r   ÚzlibÚ
decompressÚNotImplementedErrorr   ÚlenÚAssertionError)Úfile_contentsÚcontentZframesize_nbitsZframesize_lenÚposZheader16Útag_codeZtag_len© r   úEC:\Users\Broad\Desktop\BeinConnetFix\binaries\youtube_dl\swfinterp.pyÚ_extract_tags   s0    
r   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_AVMClass_Objectc             C   s
   || _ d S )N)Ú	avm_class)Úselfr   r   r   r   Ú__init__0   s    z_AVMClass_Object.__init__c             C   s   d| j jt| ƒf S )Nz%s#%x)r   ÚnameÚid)r   r   r   r   Ú__repr__3   s    z_AVMClass_Object.__repr__N)Ú__name__Ú
__module__Ú__qualname__r   r"   r   r   r   r   r   /   s   r   c                   s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )Ú
_ScopeDictc                s   t t| ƒjƒ  || _d S )N)Úsuperr&   r   r   )r   r   )Ú	__class__r   r   r   8   s    z_ScopeDict.__init__c                s   d| j jtt| ƒjƒ f S )Nz%s__Scope(%s))r   r    r'   r&   r"   )r   )r(   r   r   r"   <   s    z_ScopeDict.__repr__)r#   r$   r%   r   r"   Ú__classcell__r   r   )r(   r   r&   7   s   r&   c               @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )Ú	_AVMClassNc             C   sF   || _ || _i | _i | _i | _i | _|r,|ni | _t| ƒ| _i | _	d S )N)
Úname_idxr    Úmethod_namesÚmethod_idxsÚmethodsÚmethod_pyfunctionsÚstatic_propertiesr&   Ú	variablesÚ	constants)r   r+   r    r0   r   r   r   r   C   s    
z_AVMClass.__init__c             C   s   t | ƒS )N)r   )r   r   r   r   Úmake_objectO   s    z_AVMClass.make_objectc             C   s
   d| j  S )Nz_AVMClass(%s))r    )r   r   r   r   r"   R   s    z_AVMClass.__repr__c             C   s2   | j j|jƒ ƒ | jjtdd„ |jƒ D ƒƒƒ d S )Nc             s   s   | ]\}}||fV  qd S )Nr   )Ú.0r    Úidxr   r   r   ú	<genexpr>X   s   z-_AVMClass.register_methods.<locals>.<genexpr>)r,   ÚupdateÚitemsr-   Údict)r   r.   r   r   r   Úregister_methodsU   s    z_AVMClass.register_methods)N)r#   r$   r%   r   r3   r"   r:   r   r   r   r   r*   B   s   
r*   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú
_Multinamec             C   s
   || _ d S )N)Úkind)r   r<   r   r   r   r   ]   s    z_Multiname.__init__c             C   s
   d| j  S )Nz[MULTINAME kind: 0x%x])r<   )r   r   r   r   r"   `   s    z_Multiname.__repr__N)r#   r$   r%   r   r"   r   r   r   r   r;   \   s   r;   c             C   sl   d}d}x^t dƒD ]R}| jdƒ}t|ƒdks0t‚td|ƒd }||d@ |> B }|d@ dkr\P |d7 }qW |S )Nr   r
   r   z<Bé   é€   r   )ÚrangeÚreadr   r   r   )ÚreaderÚresÚshiftÚ_ÚbufÚbr   r   r   Ú	_read_intd   s    
rG   c             C   s   t | ƒ}|d@ dkst‚|S )Nl      ` r   )rG   r   )rA   rB   r   r   r   Ú_u30r   s    rH   c             C   s&   t | ƒ}|d@ dkr"|dA d  }|S )Nl        r   l   ÿÿ r   )rG   )rA   Úvr   r   r   Ú_s32{   s    rJ   c             C   sH   | j dƒ}t|ƒdkst‚t|dd… ƒdkr2dnd}td|| ƒd S )Nr   r   r>   ó   ÿó    z<ir   )r@   r   r   Úordr   )rA   ÚbsZ	last_byter   r   r   Ú_s24‚   s    
rO   c             C   s,   t | ƒ}| j|ƒ}t|ƒ|ks"t‚|jdƒS )Nzutf-8)rH   r@   r   r   Údecode)rA   ZslenÚresbr   r   r   Ú_read_string‰   s    
rR   c             C   s*   | dkst ‚|j| ƒ}t|ƒ| ks&t ‚|S )Nr   )r   r@   r   )ÚcountrA   rQ   r   r   r   Ú_read_bytes   s    
rT   c             C   s   t d| d}td|ƒd }|S )Nr   )rA   z<Br   )rT   r   )rA   rQ   rB   r   r   r   Ú
_read_byte—   s    rU   z(no name idx)ÚStringZ	ByteArrayÚTimerZ
TimerEventZTIMERZtimerc               @   s,   e Zd Zdd„ ZeZdd„ Zdd„ ZeZdS )Ú
_Undefinedc             C   s   dS )NFr   )r   r   r   r   Ú__bool__ª   s    z_Undefined.__bool__c             C   s   dS )Nr   r   )r   r   r   r   Ú__hash__®   s    z_Undefined.__hash__c             C   s   dS )NÚ	undefinedr   )r   r   r   r   Ú__str__±   s    z_Undefined.__str__N)r#   r$   r%   rY   Ú__nonzero__rZ   r\   r"   r   r   r   r   rX   ©   s
   rX   c               @   s.   e Zd Zdd„ Zdd„ Zddd„Zdd	„ Zd
S )ÚSWFInterpreterc       4         sV  t dfdd„ iˆ_tdd„ t|ƒD ƒƒ}|jddƒd }tj||d … ƒ‰ ‡ fd	d„‰‡ fd
d„}‡ fdd„}‡ fdd„}‡ fdd„‰|d ƒ ˆƒ }dgˆ_x td|ƒD ]}ˆjj	|ƒ ƒ q¨W dgˆ_
ˆƒ }	x td|	ƒD ]}ˆj
j	|ƒ ƒ qØW ˆƒ }
|td|
d ƒd ƒ ˆƒ }dgˆ_x(td|ƒD ]}tˆ ƒ}ˆjj	|ƒ q$W ˆƒ }x"td|ƒD ]}|dƒ ˆƒ  qTW ˆƒ }x4td|ƒD ]&}ˆƒ }xt|ƒD ]}ˆƒ  q’W q~W ˆƒ }dddddddddddœ
}dgˆ_x²td|ƒD ]¤}ˆƒ }||ksütd| ƒ‚|dkr&ˆƒ  ˆƒ }ˆjj	ˆj| ƒ nX|dkrPˆƒ }ˆƒ  ˆjj	ˆj| ƒ n.ˆjj	t|ƒƒ xt|| ƒD ]}ˆƒ  qnW qÜW ˆƒ }tjdddgƒ}g }xÆt|ƒD ]º}ˆƒ }ˆƒ  xt|ƒD ]}ˆƒ  qÂW ˆƒ  ˆƒ }|d@ dkrˆƒ }x t|ƒD ]}ˆƒ  |dƒ qüW |d@ dkr<xt|ƒD ]}ˆƒ  q,W ||d@ dk|d@ dkƒ}|j	|ƒ q¨W ˆƒ }x>t|ƒD ]2}ˆƒ  ˆƒ } xt| ƒD ]}ˆƒ  ˆƒ  qW qvW ‡‡‡fdd„}!ˆƒ }"g }#x¼t|"ƒD ]°}$ˆƒ }ˆj| }%t||%ƒ}&|#j	|&ƒ ˆƒ  ˆƒ }|d@ dkrˆƒ  ˆƒ }'xt|'ƒD ]}ˆƒ  q(W ˆƒ  ˆƒ }(x8t|(ƒD ],}|!ƒ \})}*|&j|)ƒ |*rN|&jj|*ƒ qNW qÐW t|#ƒ|"ks–t‚tdd„ |#D ƒƒˆ_xV|#D ]N}&ˆƒ |&_ˆƒ }(x8t|(ƒD ],}|!ƒ \})}*|&j|)ƒ |*rÌ|&jj|*ƒ qÌW q°W ˆƒ }+x8t|+ƒD ],}ˆƒ  ˆƒ }(xt|(ƒD ]}|!ƒ  q,W qW ˆƒ },tjdddgƒ}-g ˆ_xØt|,ƒD ]Ì}ˆƒ }.ˆƒ  ˆƒ }/ˆƒ  ˆƒ  ˆƒ }0||0ƒ}1|-|1|/ƒ}2ˆjj	|2ƒ x*|#D ]"}&|.|&jkr´|2|&j|&j|. < q´W ˆƒ }3x0t|3ƒD ]$}ˆƒ  ˆƒ  ˆƒ  ˆƒ  ˆƒ  qêW ˆƒ }(xt|(ƒD ]}|!ƒ  q"W qhW |ˆ jƒ  t|ƒksRt‚d S )!NZaddEventListenerc             S   s   t S )N)r[   )Úparamsr   r   r   Ú<lambda>¼   s    z)SWFInterpreter.__init__.<locals>.<lambda>c             s   s   | ]\}}|d kr|V  qdS )éR   Nr   )r4   r   Útagr   r   r   r6   ¾   s   z*SWFInterpreter.__init__.<locals>.<genexpr>rL   r   r   c                 s   t | dˆ iŽS )NrA   )rH   )Úargs)Úcode_readerr   r   r`   Ç   s    c                 s   t | dˆ iŽS )NrA   )rJ   )rc   )rd   r   r   r`   È   s    c                 s   t | dˆ iŽS )NrA   )Ú_u32)rc   )rd   r   r   r`   É   s    c                 s   t | dˆ iŽS )NrA   )rT   )rc   )rd   r   r   r`   Ê   s    c                 s   t | dˆ iŽS )NrA   )rU   )rc   )rd   r   r   r`   Ë   s    r   r   r	   Ú )
r   é   é   é   é   é   é	   é   é   é   zInvalid multiname kind %rr   rl   Ú
MethodInfoZNEED_ARGUMENTSZ	NEED_RESTr>   c                 s\  ˆƒ } ˆ ƒ }|d@ }|d? }i }d }|dkrNˆƒ  ˆƒ  ˆƒ }|dkrLˆ ƒ  nØ|dkrºˆƒ  ˆƒ  ˆƒ }d}|dkrzˆ ƒ }|dkrŽˆj | }n|dkr¢ˆj| }ni d fS ˆj|  |i}nl|dkrÞˆƒ  ˆƒ }	|	|ˆj|  < nH|dkrôˆƒ  ˆƒ  n2|d	krˆƒ  ˆƒ }
ˆj|  ||
< ntd
| ƒ‚|d@ dkrTˆƒ }xt|ƒD ]}ˆƒ  qDW ||fS )Nrh   r   r   r   Úanyr   r   r   r
   zUnsupported trait kind %d)r   r   r   )Úconstant_intsÚconstant_uintsÚ
multinamesr   r?   )Ztrait_name_idxZ	kind_fullr<   Úattrsr.   r2   ZvindexZvkindÚvalueÚ
method_idxZfunction_idxÚmetadata_countZ_c3)Ú	read_byter   Úu30r   r   Úparse_traits_info*  sT    
z2SWFInterpreter.__init__.<locals>.parse_traits_infoc             s   s   | ]}|j |fV  qd S )N)r    )r4   Úcr   r   r   r6   t  s    ÚMethodÚcodeÚlocal_countr   )Ú
TimerClassÚ_patched_functionsÚnextr   ÚindexÚioÚBytesIOrr   r?   Úappendrs   ÚmaxÚconstant_stringsrR   rt   r   r;   ÚcollectionsÚ
namedtupler*   r:   r2   r7   r   r9   Ú_classes_by_nameÚ	cinit_idxÚ_all_methodsr-   r.   Útell)4r   r   Zcode_tagÚpÚs32Úu32Ú
read_bytesZ	int_countZ_cZ
uint_countZdouble_countZstring_countÚsZnamespace_countZns_set_countrS   Z_c2Zmultiname_countZMULTINAME_SIZESr<   r+   Zmethod_countrp   Zmethod_infosZ	method_idZparam_countrD   ÚflagsZoption_countr|   Úmirx   Z
item_countr{   Zclass_countÚclassesZclass_idÚcnamer   Zintrf_countZtrait_countZtrait_methodsZtrait_constantsZscript_countZmethod_body_countr}   rw   r   Zcode_lengthr~   ÚmZexception_countr   )rd   ry   r   rz   r   r   º   s6   


1









zSWFInterpreter.__init__c             C   s   || j ||f< d S )N)r   )r   r   Ú	func_nameÚfr   r   r   Úpatch_function¥  s    zSWFInterpreter.patch_functionTc             C   sx   y| j | }W n  tk
r.   td| ƒ‚Y nX |rtt|dƒrt|jd|jiƒ | j|j |jd< | j|dƒ}|g ƒ |S )NzClass %r not foundrŒ   z$cinit)	r‹   ÚKeyErrorr   Úhasattrr:   rŒ   r   r.   Úextract_function)r   Ú
class_nameZ
call_cinitrB   Zcinitr   r   r   Úextract_class¨  s    zSWFInterpreter.extract_classc                sˆ   ˆj jˆ |fƒ}|r|S |ˆ jkr,ˆ j| S |ˆjkrDˆj| jƒ S |ˆ jkr`tdˆ j|f ƒ‚ˆ j| ‰‡ ‡‡fdd„}|ˆ j|< |S )NzCannot find function %s.%sc                s\  t jˆjƒ‰ ‡ fdd„}‡ fdd„}ˆjgt| ƒ d gˆj  }g ‰tjˆjˆj	ˆjgƒ}xút
ˆ ƒ}|dkrpq^|dkr’|ƒ }ˆ jˆ jƒ | ƒ q^|dkrÀ|ƒ }ˆjƒ }|r¾ˆ jˆ jƒ | ƒ q^|dkrî|ƒ }ˆjƒ }|sìˆ jˆ jƒ | ƒ q^|dkr,|ƒ }ˆjƒ }ˆjƒ }	||	krTˆ jˆ jƒ | ƒ q^|d	krj|ƒ }ˆjƒ }ˆjƒ }	||	krTˆ jˆ jƒ | ƒ q^|d
kr¨|ƒ }ˆjƒ }ˆjƒ }	|	|k rTˆ jˆ jƒ | ƒ q^|dkr¾ˆjd ƒ q^|dkrÔˆjtƒ q^|dkròt
ˆ ƒ}
ˆj|
ƒ q^|dkr|ƒ }
ˆj|
ƒ q^|dkr$ˆjdƒ q^|dkr:ˆjdƒ q^|dkrTˆjtdƒƒ q^|dkrrˆdW }ˆj|ƒ q^|dkr”|ƒ }ˆjˆj| ƒ q^|dkr²ˆjƒ }|j|ƒ q^|dkrþ|ƒ }tt‡fdd„t|ƒD ƒƒƒ} ˆjƒ }|jjƒ }ˆj|ƒ q^|dkrô|ƒ }ˆj| }|ƒ }tt‡fdd„t|ƒD ƒƒƒ} ˆjƒ }|tkrÂ|dkr²t| ƒdksjt‚t| d tttfƒs„t‚| d tkr˜d }nt| d ƒ}ˆj|ƒ q^ntd!| ƒ‚n t|tƒrôˆj |j|ƒ}|| ƒ}ˆj|ƒ q^nît|t!ƒr$ˆj ||ƒ}|| ƒ}ˆj|ƒ q^n¾t|t"ƒrn||jj#krVˆj |j|ƒ}|| ƒ}n|| }ˆj|ƒ q^ntt|tƒr>|d"krÞt| ƒdks–t‚t| d tƒsªt‚| d d#krÂt|ƒ}n|j$| d ƒ}ˆj|ƒ q^n^|d$krât| ƒdksút‚t| ƒdkrdn| d }t|tƒs$t‚t%|| ƒ}ˆj|ƒ q^n¤t|tƒrâ|d%kr˜t| ƒdksft‚t| d tƒszt‚|| d d … }ˆj|ƒ q^nJ|d&krât| ƒdks´t‚t| d tƒsÈt‚| d j&|ƒ}ˆj|ƒ q^td'||f ƒ‚q^|d(krt}|S |d)krˆjƒ }|S |d*krT|ƒ }tt‡fd+d„t|ƒD ƒƒƒ} ˆjƒ }q^|d,krº|ƒ }|ƒ }tt‡fd-d„t|ƒD ƒƒƒ} ˆjƒ }ˆj| }t|t!ƒsªt‚ˆj|jƒ ƒ q^|d.kr¨|ƒ }ˆj| }|ƒ }tt‡fd/d„t|ƒD ƒƒƒ} ˆjƒ }t|tƒr0ˆj |j|ƒ}|| ƒ}|tks^t‚q^t|t"ƒrr||jj#ksNt‚ˆj |j|ƒ}|| ƒ}|tks^t‚q^|d0kr–t|tƒsŒt‚|j'ƒ  ntd1||f ƒ‚q^|d2krø|ƒ }g }x t|ƒD ]}|jˆjƒ ƒ qÆW |d d dX… }ˆj|ƒ q^|d3krr|ƒ }ˆj| }x*t|ƒD ]}||kr|}P qW |d }||krb|t(krbˆjt(| ƒ nˆj|| ƒ q^|d4krÂ|ƒ }ˆj| }x(t|ƒD ]}||kr–|}P q–W ˆj}ˆj|ƒ q^|d5k	r>|ƒ }ˆj| }x(t|ƒD ]}||kræ|}P qæW ˆj}||k	r|| }n|t(k	r.t(| }nt}ˆj|ƒ q^|d6k	r†|ƒ }ˆjƒ }ˆj| }t|t)ƒ	rtˆjƒ }ˆjƒ }|||< q^|d7k	r¦|ƒ }ˆj|| ƒ q^|d8k	rÈ|ƒ }ˆjƒ }|||< q^|d9k
rÆ|ƒ }ˆj| }|d:k
rˆjƒ }t|ttfƒ
st‚ˆjt|ƒƒ n¬t|tƒ
r†ˆjƒ }t|t!ƒ
rN|j*| }ˆj|ƒ q^t|t+t"fƒ
sntd;||f ƒ‚|j,|tƒ}ˆj|ƒ n>ˆjƒ }t|tƒ
sžt‚ˆjƒ }t|tƒ
s¶t‚ˆj|| ƒ q^|d<kr|ƒ }ˆjƒ }ˆj| }t|t)ƒ
rüˆjƒ }ˆjƒ }|||< q^|d=kr4ˆjƒ }t|ƒ}ˆj|ƒ q^|d>krF|ƒ  q^|d?krdˆjƒ }ˆj|ƒ q^|d@krŒtˆdY t-d ƒtfƒsTt‚q^|dAkr¾ˆjƒ }t|tƒs®t‚ˆj|d ƒ q^|dBkrìˆjƒ }td tdtdCtdCit-|ƒ S |dDkrˆjƒ }ˆjƒ }	|	| }ˆj|ƒ q^|dEkrHˆjƒ }ˆjƒ }	|	| }ˆj|ƒ q^|dFkrvˆjƒ }ˆjƒ }	|	| }ˆj|ƒ q^|dGkr¤ˆjƒ }ˆjƒ }	|	| }ˆj|ƒ q^|dHkròˆjƒ }ˆjƒ }	t|	tƒsÎt‚t|tƒsÞt‚|	|@ }ˆj|ƒ q^|dIkr ˆjƒ }ˆjƒ }	|	|k}ˆj|ƒ q^|dJkrNˆjƒ }ˆjƒ }	|	|k}ˆj|ƒ q^|dKkr€ˆjƒ }t|tƒspt‚ˆj|d ƒ q^|dLkršˆj|d ƒ q^|dMkr´ˆj|d ƒ q^|dNkrÎˆj|dO ƒ q^|dPkrèˆj|dQ ƒ q^|dRkr ˆjƒ |d< q^|dSkrˆjƒ |d< q^|dTkr0ˆjƒ |dO< q^|dUkrHˆjƒ |dQ< q^tdV| ƒ‚q^W d S )ZNc                  s   t ˆ ƒS )N)rO   r   )Úcoderr   r   r`   Æ  s    zBSWFInterpreter.extract_function.<locals>.resfunc.<locals>.<lambda>c                  s   t ˆ ƒS )N)rH   r   )r¡   r   r   r`   Ç  s    rl   ri   rj   rk   é   é   é   é    é!   é$   é%   é&   Té'   Fé(   ÚNaNé*   r   é,   é0   éB   c                s   g | ]}ˆ j ƒ ‘qS r   )Úpop)r4   rD   )Ústackr   r   ú
<listcomp>  s    zDSWFInterpreter.extract_function.<locals>.resfunc.<locals>.<listcomp>éF   c                s   g | ]}ˆ j ƒ ‘qS r   )r±   )r4   rD   )r²   r   r   r³     s    rV   r   r[   z)Function String.%s is not yet implementedÚsplitrf   Z
charCodeAtÚsliceÚjoinzUnsupported property %r on %réG   éH   éI   c                s   g | ]}ˆ j ƒ ‘qS r   )r±   )r4   rD   )r²   r   r   r³   d  s    éJ   c                s   g | ]}ˆ j ƒ ‘qS r   )r±   )r4   rD   )r²   r   r   r³   j  s    éO   c                s   g | ]}ˆ j ƒ ‘qS r   )r±   )r4   rD   )r²   r   r   r³   x  s    Úreversez$Unsupported (void) property %r on %réV   é]   é^   é`   éa   éb   éc   éf   ÚlengthzAccessing member %r on %réh   és   r>   é‚   é…   é“   é•   ÚNumberé    é¡   é¢   é¤   é¨   é«   é¯   éÀ   éÐ   éÑ   éÒ   r   éÓ   r   éÔ   éÕ   éÖ   é×   zUnsupported opcode %déÿÿÿÿrÞ   rÞ   ).r„   r…   r~   r1   Úlistr   r‰   Údequer‹   r2   rU   ÚseekrŽ   r±   r†   r[   Úfloatrˆ   Úreversedr?   r   r3   rt   ÚStringClassr   r   Ú
isinstanceÚintr   rX   r   r   rž   r*   r&   r,   rµ   rM   r·   r½   Ú_builtin_classesr;   r0   r9   ÚgetÚtype)rc   Zs24rz   Z	registersZscopesÚopcodeÚoffsetrv   Zvalue2Zvalue1rI   r5   Z	new_scopeÚ	arg_countÚobjrB   rƒ   ÚmnameÚfuncÚarrÚir“   ÚscopeÚpnameZintvalueÚresult)r   r˜   r   )r¡   r²   r   ÚresfuncÃ  sÄ   
































































































z0SWFInterpreter.extract_function.<locals>.resfunc)r   rè   r/   r‹   r3   r.   r   r    )r   r   r™   r   rõ   r   )r   r˜   r   r   rž   ¶  s"    




   
zSWFInterpreter.extract_functionN)T)r#   r$   r%   r   r›   r    rž   r   r   r   r   r^   ¹   s
    l
r^   )"Ú
__future__r   r‰   r„   r   Úcompatr   r   Úutilsr   r   Úobjectr   r9   r&   r*   r;   rG   rH   re   rJ   rO   rR   rT   rU   rä   ZByteArrayClassr€   ZTimerEventClassr    rç   rX   r[   r^   r   r   r   r   Ú<module>   s:   



