U
    ¦y^ï#  ã                   @   sÀ   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ejfdej	fdej
fdejfd	ejfd
ejfdejfdejfdejfdejfg
Zdd„ eD ƒZe ddd„ f¡ dZG dd„ deƒZdS )é    )Úunicode_literalsNé   )ÚExtractorErrorÚremove_quotesú|ú^ú&z>>z<<ú-ú+ú%ú/Ú*c                 C   s   g | ]\}}|d  |f‘qS )ú=© )Ú.0ÚopÚopfuncr   r   úFC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\jsinterp.pyÚ
<listcomp>   s     r   r   c                 C   s   |S ©Nr   )ÚcurÚrightr   r   r   Ú<lambda>   ó    r   z[a-zA-Z_$][a-zA-Z_$0-9]*c                   @   sH   e Zd Zddd„Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dS )ÚJSInterpreterNc                 C   s"   |d kri }|| _ i | _|| _d S r   )ÚcodeÚ
_functionsÚ_objects)Úselfr   Zobjectsr   r   r   Ú__init__   s
    zJSInterpreter.__init__éd   c           	      C   sŠ   |dk rt dƒ‚d}| ¡ }t d|¡}|rD|t| d¡ƒd … }n0t d|¡}|rp|t| d¡ƒd … }d}n|}|  |||¡}||fS )Nr   zRecursion limit reachedFzvar\szreturn(?:\s+|$)T)r   ÚlstripÚreÚmatchÚlenÚgroupÚinterpret_expression)	r   ÚstmtÚ
local_varsÚallow_recursionZshould_abortZstmt_mÚexprZreturn_mÚvr   r   r   Úinterpret_statement&   s    z!JSInterpreter.interpret_statementc                    sL  |  ¡ }|dkrd S | d¡r¸d}t d|¡D ]|}| d¡dkrJ|d7 }q.|d8 }|dkr.|d| ¡ … }ˆ |ˆˆ ¡}|| ¡ d …   ¡ }|s˜|  S t 	|¡| } q¸q.t
d| ƒ‚tD ]Ô\}	}
t dtt |	¡f |¡}|säq¼ˆ | d¡ˆˆ d ¡}| ¡  d	¡�r`ˆ| d
¡ }ˆ | d	¡ˆˆ ¡}t|tƒ�s>t‚|| }|
||ƒ}|||< |  S ˆ | d
¡¡}|
||ƒ}|ˆ| d
¡< |  S q¼| ¡ �r¤t|ƒS t dt |¡}|�rÈˆ| d¡ S zt |¡W S  tk
�rê   Y nX t dt |¡}|�r0ˆ| d¡ }ˆ | d¡ˆˆ d ¡}|| S t dt |¡}|�r| d¡}t| d¡�pf| d¡ƒ}| d¡}|ˆk�rˆˆ| }n&|ˆjk�r¤ˆ |¡ˆj|< ˆj| }|d k�rÒ|dk�rÊt|ƒS || S | d¡�sât‚|dk�rôtƒ }n t‡ ‡‡fdd„| d¡D ƒƒ}|dk�r4|dk�s,t‚t|ƒS |dk�r^t|ƒdk�sPt‚|d  |¡S |dk�r†t|ƒdk�szt‚|  ¡  |S |dk�r²t|ƒdk�s¢t‚||d d … S |dk�rt|tƒ�sÌt‚|\}}g }t!|t"|| t|ƒƒƒD ]}| #| $|¡¡ �qð|S || |ƒS t%D ]˜\}	}
t d t |	¡ |¡}|�sD�qˆ &| d!¡ˆˆ d ¡\}}|�rvt
d"|	|f ƒ‚ˆ &| d#¡ˆˆ d ¡\}}|�r¨t
d$|	|f ƒ‚|
||ƒ  S t d%t |¡}|�r<| d&¡}t| d¡ƒdk�rt‡fd'd„| d¡ d¡D ƒƒntƒ }|ˆj'k�r.ˆ (|¡ˆj'|< ˆj'| |ƒS t
d(| ƒ‚d S ))NÚ ú(r   z[()]r   zPremature end of parens in %rzo(?x)
                (?P<out>%s)(?:\[(?P<index>[^\]]+?)\])?
                \s*%s
                (?P<expr>.*)$r*   ÚindexÚoutz%(?!if|return|true|false)(?P<name>%s)$Únamez(?P<in>%s)\[(?P<idx>.+)\]$ÚinÚidxzW(?P<var>%s)(?:\.(?P<member>[^(]+)|\[(?P<member2>[^]]+)\])\s*(?:\(+(?P<args>[^()]*)\))?$ÚvarÚmemberZmember2ÚargsÚlengthú)c                    s   g | ]}ˆ  |ˆˆ ¡‘qS r   )r&   ©r   r+   ©r)   r(   r   r   r   r   �   s   ÿz6JSInterpreter.interpret_expression.<locals>.<listcomp>ú,Úsplit)r-   ÚjoinÚreverseÚsliceZsplicez(?P<x>.+?)%s(?P<y>.+)Úxz&Premature left-side return of %s in %rÚyz'Premature right-side return of %s in %rz+^(?P<func>%s)\((?P<args>[a-zA-Z0-9_$,]*)\)$Úfuncc                    s$   g | ]}|  ¡ rt|ƒnˆ | ‘qS r   )ÚisdigitÚintr9   )r(   r   r   r   Ì   s   ÿzUnsupported JS expression %r))ÚstripÚ
startswithr"   Úfinditerr%   Ústartr&   ÚendÚjsonÚdumpsr   Ú_ASSIGN_OPERATORSr#   Ú_NAME_REÚescapeÚ	groupdictÚgetÚ
isinstancerD   ÚAssertionErrorrC   ÚloadsÚ
ValueErrorr   r   Úextract_objectr$   ÚendswithÚtupler<   Úlistr=   r>   ÚrangeÚminÚappendÚpopÚ
_OPERATORSr,   r   Úextract_function)r   r*   r(   r)   Zparens_countÚmZsub_exprZ
sub_resultZremaining_exprr   r   Z	right_valZlvarr3   r   ÚvalZvar_mÚvariabler5   Zarg_strÚobjZargvalsr/   ZhowManyÚresÚir@   ÚabortrA   Úfnamer   r:   r   r&   ;   s<   

  ÿýý  ÿ  ÿ



þ ÿ  ÿþ







þ




  ÿ
ÿ  ÿ
ÿ ÿ
þþþz"JSInterpreter.interpret_expressionc           	      C   s|   d}i }t  dt  |¡|f | j¡}| d¡}t  d| |¡}|D ]4}| d¡ d¡}|  || d¡¡|t| d¡ƒ< qB|S )	Nz1(?:[a-zA-Z$0-9]+|"[a-zA-Z$0-9]+"|'[a-zA-Z$0-9]+')z (?x)
                (?<!this\.)%s\s*=\s*{\s*
                    (?P<fields>(%s\s*:\s*function\s*\(.*?\)\s*{.*?}(?:,\s*)?)*)
                }\s*;
            Úfieldsze(?x)
                (?P<key>%s)\s*:\s*function\s*\((?P<args>[a-z,]+)\){(?P<code>[^}]+)}
            r6   r;   r   Úkey)	r"   ÚsearchrN   r   r%   rG   r<   Úbuild_functionr   )	r   ZobjnameZ_FUNC_NAME_RErb   Zobj_mrg   Zfields_mÚfÚargnamesr   r   r   rU   Õ   s&    üú
þü"zJSInterpreter.extract_objectc                 C   s`   t  dt  |¡t  |¡t  |¡f | j¡}|d kr>td| ƒ‚| d¡ d¡}|  || d¡¡S )Nz¦(?x)
                (?:function\s+%s|[{;,]\s*%s\s*=\s*function|var\s+%s\s*=\s*function)\s*
                \((?P<args>[^)]*)\)\s*
                \{(?P<code>[^}]+)\}zCould not find JS function %rr6   r;   r   )r"   ri   rN   r   r   r%   r<   rj   )r   ÚfuncnameZfunc_mrl   r   r   r   r^   ì   s      ÿýúzJSInterpreter.extract_functionc                 G   s   |   |¡}||ƒS r   )r^   )r   rm   r6   rk   r   r   r   Úcall_functionú   s    
zJSInterpreter.call_functionc                    s   ‡ ‡‡fdd„}|S )Nc                    s:   t tˆ | ƒƒ}ˆ d¡D ]}ˆ ||¡\}}|r q6q|S )Nú;)ÚdictÚzipr<   r,   )r6   r(   r'   rc   re   ©rl   r   r   r   r   Úresfÿ   s    z*JSInterpreter.build_function.<locals>.resfr   )r   rl   r   rs   r   rr   r   rj   þ   s    zJSInterpreter.build_function)N)r    )
Ú__name__Ú
__module__Ú__qualname__r   r,   r&   rU   r^   rn   rj   r   r   r   r   r      s   

 r   )Ú
__future__r   rJ   Úoperatorr"   Úutilsr   r   Úor_ÚxorÚand_ÚrshiftÚlshiftÚsubÚaddÚmodÚtruedivÚmulr]   rL   r[   rM   Úobjectr   r   r   r   r   Ú<module>   s&   ö