§
     ’Þj®� ã            	       óB  — U 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mZmZ d dlmZ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mZmZ d dlZd dlmZmZ dZ dZ!dZ"d	Z#d
Z$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ, ej-        d¦  «        Z.dhZ/e G d„ d¦  «        ¦   «         Z0e G d„ d¦  «        ¦   «         Z1e G d„ d¦  «        ¦   «         Z2e G d„ d¦  «        ¦   «         Z3e G d„ d¦  «        ¦   «         Z4i Z5ee6e0f         e7d<   i Z8ee6e0f         e7d <   i Z9ee6e2f         e7d!<   i Z:ee6e4f         e7d"<   i Z;ee6e3f         e7d#<   ej<         =                    ej<         >                    ej<         >                    ej<         ?                    e@¦  «        ¦  «        ¦  «        d$d%¦  «        ZA ej-        d&¦  «        ZBh d'£ZCd(eDe0d)f         fd*„ZEd(eDe0d)f         fd+„ZFd(ee6e2f         fd,„ZGdXd-„ZHd(eDe4d)f         fd.„ZId(eDe3d)f         fd/„ZJd0e6d(e3dz  fd1„ZKd2e	d(eLfd3„ZMd4e6d(e
eD         fd5„ZNd4e6d(e6fd6„ZOd7e6d(ee	         fd8„ZPd9e6d:e6d(eQfd;„ZRd2e	d(e
ej                 fd<„ZSd9ee6e	f         d:ee6e	f         d(eQfd=„ZTd>e6d?e6d(eLfd@„ZUd4e6d(e6fdA„ZVd2e	d(ee6         fdB„ZWdCe	dDe	d(ee6         fdE„ZXdFdGdHeYfdI„ZZg dJ¢Z[h dK£Z\dLZ]e G dM„ dN¦  «        ¦   «         Z^e G dO„ dP¦  «        ¦   «         Z_e G dQ„ dR¦  «        ¦   «         Z` G dS„ dT¦  «        Za G dU„ dG¦  «        Zb G dV„ dW¦  «        ZcdS )Yé    N)ÚDictÚAnyÚOptionalÚListÚUnionÚSet)Ú	dataclassÚreplace)Úconfig_lockÚwrite_config)ÚINSTALLED_REMOTE_PLUGINS_KEYÚmigrate_bundled_plugin_idszMedia GeneratorzGhttps://github.com/deepbeepmeep/Wan2GP/raw/refs/heads/main/plugins.jsonzplugins.jsonzplugins_local.jsonzplugin_info.json)ÚappÚ	extensionÚ	processorÚmodelÚspatial_upsampler_handlersÚtemporal_upsampler_handlersÚaudio_processorsÚmodel_handlersÚdefaultsÚprofilesÚpending_plugin_deletionsz^[A-Za-z_][A-Za-z0-9_]*$Úmcp_resourcec                   óª   — e Zd ZU eed<   eed<   eed<   eed<   eeeeef         f         ed<   eed<   eed<   eed<   d	Z	eed
<   deeef         fd„Z
dS )ÚPluginDeepyToolÚnameÚfunctionÚdisplay_nameÚdescriptionÚ
parametersÚpause_runtimeÚpause_reasonÚrequires_file_systemÚ Ú	plugin_idÚreturnc                 ó\   — | j         | j        | j        | j        | j        | j        | j        dœS )N©r   r   r    r!   r"   r#   r$   r)   ©Úselfs    ú<C:\Users\johnn\OneDrive\Documents\AI\shared\utils\plugins.pyÚassistant_metadataz"PluginDeepyTool.assistant_metadata2   s9   € à”IØ Ô-ØÔ+Øœ/Ø!Ô/Ø Ô-Ø$(Ô$=ð
ð 
ð 	
ó    N)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úcallabler   r   Úboolr&   r-   © r.   r,   r   r   &   s¸   € € € € € € à
€I€I�IØÐÐÑØÐÐÑØÐÐÑØ�S˜$˜s C˜xœ.Ð(Ô)Ð)Ð)Ñ)ØÐÐÑØÐÐÑØÐÐÑØ€IˆsÐÐÑð	
 D¨¨c¨¤Nð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r.   r   c                   óÈ   — e Zd ZU dZeed<   eed<   eed<   eed<   eeeeef         f         ed<   eeef         dz  ed<   e	ed	<   eeef         ed
<   eed<   eed<   e	ed<   dS )ÚPluginDeepyActionz|One action of a plugin toolbox: called as function(ctx, **arguments) through wangp_plugins (MCP, Deepy Prime, Deepy Python).r   r   Úsummaryr    r!   NÚexampleÚuses_gpuÚpathsÚroutingÚ
instead_ofÚscripts)
r/   r0   r1   Ú__doc__r2   r3   r4   r   r   r5   r6   r.   r,   r8   r8   >   sµ   € € € € € € ð Gð  GØ
€I€I�IØÐÐÑØ€L€L�LØÐÐÑØ�S˜$˜s C˜xœ.Ð(Ô)Ð)Ð)Ñ)Ø�#�s�(Œ^˜dÑ"Ð"Ð"Ñ"Ø€N€N�NØ��S�Œ>ÐÐÑØ€L€L�LØ€O€O�OØ€M€M�M€M€Mr.   r8   c                   ó`   — e Zd ZU eed<   eed<   eed<   eed<   eeef         ed<   dZeed<   dS )	ÚPluginDeepyToolboxÚ
toolbox_idr   r9   ÚguideÚactionsr%   r&   N)r/   r0   r1   r2   r3   r   r8   r&   r6   r.   r,   rB   rB   N   s`   € € € € € € à€O€O�OØÐÐÑØ€L€L�LØ€J€J�JØ�#Ð(Ð(Ô)Ð)Ð)Ñ)Ø€IˆsÐÐÑÐÐr.   rB   c                   óf   — e Zd ZU dZeed<   eed<   eed<   eed<   dZeed<   edefd	„¦   «         Zd
S )ÚPluginDeepySkilla�  A skill a plugin ships in skills/<name>/SKILL.md, for Deepy Prime and MCP agents. With a routing line it extends Deepy for every
    conversation (wangp://skills/<name>, listed with WanGP's skills, its routing in the agents' instructions); without one it is the method
    of the plugin's own toolbox and jobs (wangp://skills/<plugin>/<name>, unlisted, named by the toolbox discovery).r   Úpathr    r&   r%   r=   r'   c                 óH   — | j         r
d| j        › �nd| j        › d| j        › �S )Nzwangp://skills/ú/)r=   r   r&   r*   s    r,   ÚurizPluginDeepySkill.uric   s8   € à04´ÐpÐ, ¤Ð,Ð,Ð,ÐBpÐTXÔTbÐBpÐBpÐeiÔenÐBpÐBpÐpr.   N)	r/   r0   r1   r@   r2   r3   r=   ÚpropertyrK   r6   r.   r,   rG   rG   X   s‡   € € € € € € ðxð xð €I€I�IØ
€I€I�IØÐÐÑØ€N€N�NØ€GˆSÐÐÑàðq�Sð qð qð qñ „Xðqð qð qr.   rG   c                   ó6   — e Zd ZU dZeed<   eed<   dZeed<   dS )ÚPluginWebAppzA plugin's own web application (an ASGI app such as FastAPI), served by the WanGP server under path, behind its authentication.rH   Úfactoryr%   r&   N)r/   r0   r1   r@   r2   r3   r4   r&   r6   r.   r,   rN   rN   h   sC   € € € € € € ð Jð  JØ
€I€I�IØÐÐÑØ€IˆsÐÐÑÐÐr.   rN   Ú_ACTIVE_DEEPY_PRIME_TOOLSÚ_ACTIVE_DEEPY_ZERO_TOOLSÚ_ACTIVE_DEEPY_TOOLBOXESÚ_ACTIVE_WEB_APPSÚ_ACTIVE_DEEPY_SKILLSÚdeepyÚskillsz^/[a-z][a-z0-9_-]*$>   ú/mcpú/fileú/deepyú/loginú/queueú/themeú/assetsú/configú/logoutú/staticú/uploadú
/deepy_apiú/gradio_apir'   .c                  óN   — t          t                               ¦   «         ¦  «        S ©N)ÚtuplerP   Úvaluesr6   r.   r,   Úget_deepy_prime_plugin_toolsrh   z   s   € ÝÕ*×1Ò1Ñ3Ô3Ñ4Ô4Ð4r.   c                  óN   — t          t                               ¦   «         ¦  «        S re   )rf   rQ   rg   r6   r.   r,   Úget_deepy_zero_plugin_toolsrj   ~   s   € ÝÕ)×0Ò0Ñ2Ô2Ñ3Ô3Ð3r.   c                  ó*   — t          t          ¦  «        S re   )ÚdictrR   r6   r.   r,   Úget_deepy_plugin_toolboxesrm   ‚   s   € ÝÕ'Ñ(Ô(Ð(r.   c                  ó   — t                                ¦   «          t                               ¦   «          t                               ¦   «          t                               ¦   «          t
                               ¦   «          d S re   )rP   ÚclearrQ   rR   rS   rT   r6   r.   r,   Ú_reset_deepy_plugin_toolsrp   †   sb   € Ý×#Ò#Ñ%Ô%Ð%Ý×"Ò"Ñ$Ô$Ð$Ý×!Ò!Ñ#Ô#Ð#Ý×ÒÑÔÐÝ×ÒÑ Ô Ð Ð Ð r.   c                  óN   — t          t                               ¦   «         ¦  «        S )zSWeb applications of the enabled plugins, mounted by the WanGP server at their path.)rf   rS   rg   r6   r.   r,   Úget_plugin_web_appsrr   Ž   s   € åÕ!×(Ò(Ñ*Ô*Ñ+Ô+Ð+r.   c                  óN   — t          t                               ¦   «         ¦  «        S )z`Skills of the enabled plugins, for Deepy Prime and MCP agents (Deepy Zero does not read skills).)rf   rT   rg   r6   r.   r,   Úget_deepy_plugin_skillsrt   “   s   € åÕ%×,Ò,Ñ.Ô.Ñ/Ô/Ð/r.   rK   c                 ó6   — t                                | ¦  «        S re   )rT   Úget©rK   s    r,   Úget_deepy_plugin_skillrx   ˜   s   € Ý×#Ò# CÑ(Ô(Ð(r.   Úvaluec                 óh   — | €dS t          | t          ¦  «        r|                      ¦   «         dk    S dS )NFr%   T)Ú
isinstancer2   Ústrip)ry   s    r,   Ú
_has_valuer}   ›   s6   € Ø€}ØˆuÝ�%�ÑÔð #Ø�{Š{‰}Œ} Ò"Ð"Øˆ4r.   Úurlc                 óÄ  — t          | t          ¦  «        sd S |                      ¦   «         }|sd S |                     dd¦  «        d                              dd¦  «        d         }|                     d¦  «        rd|t          d¦  «        d …         z   }|                     d¦  «        }d}|                     ¦   «                              |¦  «        }|dk     rd S ||t          |¦  «        z   d …         }d	„ |                     d¦  «        D ¦   «         }t          |¦  «        d
k     rd S |d         |d         }}| 	                    d¦  «        r
|d d…         }|r|sd S ||fS )NÚ?é   r   ú#úgit@github.com:úhttps://github.com/rJ   zgithub.com/c                 ó   — g | ]}|¯|‘ŒS r6   r6   )Ú.0Úparts     r,   ú
<listcomp>z&_split_github_repo.<locals>.<listcomp>±   s   € Ð6Ð6Ð6�d°Ð6ˆTÐ6Ð6Ð6r.   é   ú.gitéüÿÿÿ)
r{   r2   r|   ÚsplitÚ
startswithÚlenÚrstripÚlowerÚfindÚendswith)r~   ÚcleanedÚmarkerÚidxÚtailÚpartsÚownerÚrepos           r,   Ú_split_github_reporš   ¢   sq  € Ý�c�3ÑÔð ØˆtØ�iŠi‰kŒk€GØð ØˆtØ�mŠm˜C Ñ#Ô# AÔ&×,Ò,¨S°!Ñ4Ô4°QÔ7€GØ×ÒÐ+Ñ,Ô,ð KØ'¨'µ#Ð6GÑ2HÔ2HÐ2IÐ2IÔ*JÑJˆØ�nŠn˜SÑ!Ô!€GØ€FØ
�-Š-‰/Œ/×
Ò
˜vÑ
&Ô
&€CØ
ˆQ‚w€wØˆtØ�3�˜V™œÑ$Ð%Ð%Ô&€DØ6Ð6˜dŸjšj¨™oœoÐ6Ñ6Ô6€EÝ
ˆ5�z„z�A‚~€~ØˆtØ˜”(˜E !œHˆ4€EØ‡}‚}�VÑÔð Ø�C�R�CŒyˆØð ˜ð ØˆtØ�$ˆ;Ðr.   c                 óø  — t          | t          ¦  «        sdS |                      ¦   «         }|sdS |                     dd¦  «        d                              dd¦  «        d         }|                     d¦  «        rd|t          d¦  «        d …         z   }|                     d¦  «        }t          |¦  «        }|r|\  }}d|› d|› �S |                     d	¦  «        r
|d d
…         }|                     d¦  «        S )Nr%   r€   r�   r   r‚   rƒ   r„   rJ   rŠ   r‹   )	r{   r2   r|   rŒ   r�   rŽ   r�   rš   r’   )r~   r“   Ú	repo_infor˜   r™   s        r,   Únormalize_plugin_urlr�   »   s  € Ý�c�3ÑÔð ØˆrØ�iŠi‰kŒk€GØð ØˆrØ�mŠm˜C Ñ#Ô# AÔ&×,Ò,¨S°!Ñ4Ô4°QÔ7€GØ×ÒÐ+Ñ,Ô,ð KØ'¨'µ#Ð6GÑ2HÔ2HÐ2IÐ2IÔ*JÑJˆØ�nŠn˜SÑ!Ô!€GÝ" 7Ñ+Ô+€IØð 4Ø‰ˆˆtØ3 UÐ3Ð3¨TÐ3Ð3Ð3Ø×Ò˜ÑÔð Ø˜#˜2˜#”,ˆØ�>Š>˜#ÑÔÐr.   Úversionc                 ó–  — t          | t          ¦  «        sg S |                      ¦   «         } | sg S t          j        d| ¦  «        }g }|D ]}|sŒt          j        d|¦  «        D ]d}|                     ¦   «         r%|                     dt          |¦  «        f¦  «         Œ;|                     d| 	                    ¦   «         f¦  «         ŒeŒ€|S )Nz[^0-9A-Za-z]+z\d+|[A-Za-z]+r   r�   )
r{   r2   r|   ÚrerŒ   ÚfindallÚisdigitÚappendÚintr�   )rž   r—   Útokensr‡   Útokens        r,   Ú_parse_version_partsr§   Í   sÝ   € Ý�g�sÑ#Ô#ð Øˆ	Ø�mŠm‰oŒo€GØð Øˆ	ÝŒHÐ% wÑ/Ô/€EØ€FØð 2ð 2ˆØð 	ØÝ”ZÐ 0°$Ñ7Ô7ð 	2ð 	2ˆEØ�}Š}‰Œð 2Ø—’˜q¥# e¡*¤*˜oÑ.Ô.Ð.Ð.à—’˜q %§+¢+¡-¤-Ð0Ñ1Ô1Ð1Ð1ð		2ð
 €Mr.   ÚleftÚrightc                 ój  — t          | t          ¦  «        r| nd}t          |t          ¦  «        r|nd}t          t          j        d|¦  «        ¦  «        }t          t          j        d|¦  «        ¦  «        }||k    r|rdndS t          |¦  «        }t          |¦  «        }t          t          |¦  «        t          |¦  «        ¦  «        }|dk    rdS d}	t          |¦  «        D ]N}
|
t          |¦  «        k     r||
         n|	}|
t          |¦  «        k     r||
         n|	}||k    rŒC||k    rdndc S dS )Nr%   z\dr�   éÿÿÿÿr   )r   r   )	r{   r2   r5   r    Úsearchr§   ÚmaxrŽ   Úrange)r¨   r©   Ú	left_textÚ
right_textÚleft_has_digitsÚright_has_digitsÚ
left_partsÚright_partsÚmax_lenÚfillerr•   Ú	left_partÚ
right_parts                r,   Úcompare_versionsr¹   ß   sJ  € Ý" 4­Ñ-Ô-Ð5��°2€IÝ$ U­CÑ0Ô0Ð8��°b€JÝ�2œ9 U¨IÑ6Ô6Ñ7Ô7€OÝ�BœI e¨ZÑ8Ô8Ñ9Ô9ÐØÐ*Ò*Ð*Ø#Ð+ˆqˆq¨Ð+Ý% iÑ0Ô0€JÝ& zÑ2Ô2€KÝ•#�j‘/”/¥3 {Ñ#3Ô#3Ñ4Ô4€GØ�!‚|€|ØˆqØ€FÝ�W‰~Œ~ð 3ð 3ˆØ'*­S°©_¬_Ò'<Ð'<�J˜s”O�OÀ&ˆ	Ø),­s°;Ñ/?Ô/?Ò)?Ð)?�[ Ô%Ð%ÀVˆ
Ø˜
Ò"Ð"ØØ 
Ò*Ð*ˆqˆq°Ð2Ð2Ð2Øˆ1r.   c                 ó  — t          | t          ¦  «        sd S |                      ¦   «         }|sd S |                     d¦  «        r|d d…         dz   }	 t          j                             |¦  «        S # t          $ r Y d S w xY w)NÚZr«   z+00:00)r{   r2   r|   r’   ÚdatetimeÚfromisoformatÚ
ValueError)ry   Útexts     r,   Ú_parse_daterÀ   ô   s—   € Ý�e�SÑ!Ô!ð ØˆtØ�;Š;‰=Œ=€DØð ØˆtØ‡}‚}�SÑÔð $Ø�C�R�CŒy˜8Ñ#ˆðÝÔ ×.Ò.¨tÑ4Ô4Ð4øÝð ð ð Øˆtˆtðøøøs   ÁA2 Á2
B Á?B c                 ó8  — t          |                      d¦  «        ¦  «        }t          |                     d¦  «        ¦  «        }|s|r|r|r||k    r
||k    rdndS n|rdS dS t          |                      dd¦  «        |                     dd¦  «        ¦  «        S )NÚdater�   r«   rž   r%   )rÀ   rv   r¹   )r¨   r©   Ú	left_dateÚ
right_dates       r,   Úcompare_release_metadatarÅ     s´   € Ý˜DŸHšH VÑ,Ô,Ñ-Ô-€IÝ˜UŸYšY vÑ.Ô.Ñ/Ô/€JØð �Jð Øð 	˜ð 	Ø˜JÒ&Ð&Ø%¨
Ò2Ð2�q�q¸Ð:ð 'àð 	Ø�1à�2Ý˜DŸHšH Y°Ñ3Ô3°U·Y²Y¸yÈ"Ñ5MÔ5MÑNÔNÐNr.   Úrequired_versionÚcurrent_versionc                 óP   — t          | ¦  «        sdS t          |pd| ¦  «        dk    S )NTr%   r   )r}   r¹   )rÆ   rÇ   s     r,   Úis_wangp_compatiblerÉ     s3   € ÝÐ&Ñ'Ô'ð ØˆtÝ˜OÐ1¨rÐ3CÑDÔDÈÒIÐIr.   c                 ó¾   — t          | t          ¦  «        sdS t          | ¦  «        }|r|d         S t          | ¦  «        }|sdS |                     d¦  «        d         S )Nr%   r�   rJ   r«   )r{   r2   rš   r�   rŒ   )r~   rœ   Úcleans      r,   Úplugin_id_from_urlrÌ     si   € Ý�c�3ÑÔð ØˆrÝ" 3Ñ'Ô'€IØð Ø˜Œ|ÐÝ  Ñ%Ô%€EØð ØˆrØ�;Š;�sÑÔ˜BÔÐr.   c                 óä  — t          | t          ¦  «        r| g}n:t          | t          t          t          f¦  «        r| }n| €g }nt          | ¦  «        g}g }t	          ¦   «         }|D ]†}t          |t          ¦  «        st          |¦  «        }|                     ¦   «                              ¦   «         }|r|t          vs||v rŒ\|                     |¦  «         | 	                    |¦  «         Œ‡|pdgS ©Nr   )
r{   r2   Úlistrf   Úsetr|   r�   ÚPLUGIN_TYPE_CHOICESÚaddr£   )ry   rg   r“   ÚseenÚitems        r,   Únormalize_plugin_typesrÕ     sø   € Ý�%�ÑÔð Ø�ˆˆÝ	�E�D¥%­Ð-Ñ	.Ô	.ð ØˆˆØ	ˆØˆˆå�e‘*”*�ˆØ€GÝ‰5Œ5€DØð ð ˆÝ˜$¥Ñ$Ô$ð 	Ý�t‘9”9ˆDØ�zŠz‰|Œ|×!Ò!Ñ#Ô#ˆØð 	�tÕ#6Ð6Ð6¸$À$¸,¸,ØØ�Š�‰ŒˆØ�Š�tÑÔÐÐØÐ�u�gÐr.   ÚprimaryÚ	secondaryc                 óÀ   — t          | ¦  «        }t          |¦  «        }|dgk    r	|dgk    r|S |dgk    r|S g }||z   D ]}||vr|                     |¦  «         Œ|pdgS rÎ   )rÕ   r£   )rÖ   r×   Úprimary_typesÚsecondary_typesÚmergedrÔ   s         r,   Úmerge_plugin_typesrÜ   3  s’   € Ý*¨7Ñ3Ô3€MÝ,¨YÑ7Ô7€OØ˜˜ÒÐ O¸°wÒ$>Ð$>ØÐØ˜5˜'Ò!Ð!ØÐØ€FØ Ñ/ð  ð  ˆØ�vÐÐØ�MŠM˜$ÑÔÐøØÐ�e�WÐr.   ÚmanagerÚPluginManagerÚwgp_globalsc                 ó  — |                      d¦  «        }|                      d¦  «        }|r|st          d¦  «         d S i }d}|                      dg ¦  «        }g }|                     ¦   «         D ]Ÿ\  }}	t          j                             | j        |¦  «        }
t          j                             |
¦  «        sVt          d|› d�¦  «         |                      |	¦  «        }t          d|› d	|› �¦  «         d
|v r| 	                    |¦  «         Œ |D ]}||v r| 
                    |¦  «         d}Œ|rTt          d¦  «         ||d<   	 t          ||¦  «         d S # t          $ r }t          d|› d|› �¦  «         Y d }~d S d }~ww xY wd S )NÚserver_configÚserver_config_filenamezW[Plugins] WARNING: Cannot auto-install/enable default plugins. Server config not found.FÚenabled_pluginsz*[Plugins] Auto-installing default plugin: z...z[Plugins] Install result for ú: ú	[Success]Tz6[Plugins] Disabling newly installed default plugins...z/[Plugins] ERROR: Failed to update config file 'ú': )rv   ÚprintÚitemsÚosrH   ÚjoinÚplugins_dirÚisdirÚinstall_plugin_from_urlr£   Úremover   Ú	Exception)rÝ   rß   rá   râ   Údefault_pluginsÚconfig_modifiedrã   Únewly_installedÚ	repo_namer~   Ú
target_dirÚresultÚes                r,   Ú'auto_install_and_enable_default_pluginsr÷   @  sþ  € Ø—O’O OÑ4Ô4€MØ(Ÿ_š_Ð-EÑFÔFÐàð Ð 6ð ÝÐgÑhÔhÐhØˆà€Oà€OØ#×'Ò'Ð(9¸2Ñ>Ô>€OØ€Oà)×/Ò/Ñ1Ô1ð 2ð 2‰ˆ	�3Ý”W—\’\ 'Ô"5°yÑAÔAˆ
ÝŒw�}Š}˜ZÑ(Ô(ð 	2ÝÐM¸yÐMÐMÐMÑNÔNÐNØ×4Ò4°SÑ9Ô9ˆFÝÐG°)ÐGÐG¸vÐGÐGÑHÔHÐHà˜fÐ$Ð$Ø×&Ò& yÑ1Ô1Ð1øà$ð #ð #ˆ	Ø˜Ð'Ð'Ø×"Ò" 9Ñ-Ô-Ð-Ø"ˆOøàð dÝÐFÑGÔGÐGØ+:ˆÐ'Ñ(ð	dÝ˜Ð(>Ñ?Ô?Ð?Ð?Ð?øÝð 	dð 	dð 	dÝÐbÐDZÐbÐbÐ_`ÐbÐbÑcÔcÐcÐcÐcÐcÐcÐcÐcøøøøð	døøøðdð ds   ÅE Å
FÅ#E>Å>F)Úvideo_mask_creatorÚguidesÚconfigurationÚplugin_managerÚabout>   ÚsampleÚ	downloadsÚ
media_flowÚ
showrunnerÚmodels_managerÚmotion_designerr�   c                   ó$   — e Zd ZU eed<   eed<   dS )ÚInsertAfterRequestÚtarget_component_idÚnew_component_constructorN)r/   r0   r1   r2   r3   r4   r6   r.   r,   r  r  w  s*   € € € € € € àÐÐÑØ'Ð'Ð'Ñ'Ð'Ð'r.   r  c                   ó<   — e Zd ZU eed<   eed<   eed<   dZeed<   dS )Ú	PluginTabÚidÚlabelÚcomponent_constructorr«   ÚpositionN)r/   r0   r1   r2   r3   r4   r  r¤   r6   r.   r,   r  r  |  s@   € € € € € € à€G€G�GØ€J€J�JØ#Ð#Ð#Ñ#Ø€HˆcÐÐÑÐÐr.   r  c                   óN   — e Zd ZU eed<   eed<   ee         ed<   eed<   eed<   dS )ÚPluginModelExtensionr&   Úplugin_pathr   Údefaults_rootÚprofiles_rootN)r/   r0   r1   r2   r3   r   r6   r.   r,   r  r  ƒ  sO   € € € € € € à€N€N�NØÐÐÑØ˜”IÐÐÑØÐÐÑØÐÐÑÐÐr.   r  c                   óh  — e Zd Zd„ ZdKd„ZdLdededed	efd
„Zde	ee
j        j        f         de	e
j        j        ee
j        ef         f         fd„Zde	eef         ddfd„Zde	eef         ddfd„Zde	eef         deddfd„Zdeddfd„Zdeddfd„Zed„ ¦   «         Zd„ Zdedefd„Zedee         fd„¦   «         Zedee         fd„¦   «         Zdedefd„Zd eddfd!„Zd"ed#eddfd$„Ze d%ede!j"        fd&„¦   «         Z#e d%ed'edz  d(edz  d)edz  de$eeef         f
d*„¦   «         Z%e d+ee&         d,e&defd-„¦   «         Z'dddd.d/d0d1œd%ed'edz  d(edz  d)edz  d2e(d3ed4e(defd5„Z)ddddd.d/d0d6œd%ed'edz  d(edz  d)edz  d7e	ee	eef         f         dz  d2e(d3ed4e(defd8„Z*d9ddd:œd;ed<ed=edz  d(edz  ddf
d>„Z+dddddd.dd9d9d.d?œ
d%ed'edz  d;edz  d)edz  d7e	ee	eef         f         dz  d@e	eef         dz  dAe(dBe	eef         dz  dCedDedEe(defdF„Z,edee         fdG„¦   «         Z-dHedIeddfdJ„Z.dS )MÚWAN2GPPluginc                 ó  — i | _         | j        j        | _        d| _        d| _        dg| _        d| _        g | _        g | _	        g | _
        d| _        i | _        g | _        d | _        g | _        g | _        g | _        d | _        g | _        d S )Nz1.0.0úNo description provided.r   TF)ÚtabsÚ	__class__r/   r   rž   r    ÚtypeÚuninstallableÚ_component_requestsÚ_global_requestsÚ_insert_after_requestsÚ_setup_completeÚ_data_hooksÚtab_idsÚ_set_wgp_global_funcÚ_custom_js_snippetsÚ_deepy_prime_toolsÚ_deepy_zero_toolsÚ_deepy_toolboxÚ	_web_appsr*   s    r,   Ú__init__zWAN2GPPlugin.__init__Œ  s—   € Ø*,ˆŒ	Ø”NÔ+ˆŒ	ØˆŒØ5ˆÔØ�GˆŒ	Ø!ˆÔØ.0ˆÔ Ø+-ˆÔØ@BˆÔ#Ø$ˆÔØ68ˆÔØ"$ˆŒØ$(ˆÔ!Ø.0ˆÔ Ø9;ˆÔØ8:ˆÔØ9=ˆÔØ-/ˆŒˆˆr.   r'   Nc                 ó   — d S re   r6   r*   s    r,   Úsetup_uizWAN2GPPlugin.setup_ui   ó   € Øˆr.   r«   Útab_idr
  r  r  c                 ó<   — t          ||||¬¦  «        | j        |<   d S )N)r	  r
  r  r  )r  r  )r+   r*  r
  r  r  s        r,   Úadd_tabzWAN2GPPlugin.add_tab£  s'   € Ý%¨°uÐTiÐt|Ð}Ñ}Ô}ˆŒ	�&ÑÐÐr.   Ú
componentsc                 ó   — i S re   r6   )r+   r-  s     r,   Úpost_ui_setupzWAN2GPPlugin.post_ui_setup¦  s   € Øˆ	r.   Ústatec                 ó   — d S re   r6   ©r+   r0  s     r,   Úon_tab_selectzWAN2GPPlugin.on_tab_select©  r)  r.   c                 ó   — d S re   r6   r2  s     r,   Úon_tab_deselectzWAN2GPPlugin.on_tab_deselect¬  r)  r.   Ú
model_typec                 ó   — d S re   r6   ©r+   r0  r6  s      r,   Úon_model_changezWAN2GPPlugin.on_model_change¯  r)  r.   Úcomponent_idc                 óP   — || j         vr| j                              |¦  «         d S d S re   )r  r£   )r+   r:  s     r,   Úrequest_componentzWAN2GPPlugin.request_component²  s5   € Ø˜tÔ7Ð7Ð7ØÔ$×+Ò+¨LÑ9Ô9Ð9Ð9Ð9ð 8Ð7r.   Úglobal_namec                 óP   — || j         vr| j                              |¦  «         d S d S re   )r  r£   )r+   r=  s     r,   Úrequest_globalzWAN2GPPlugin.request_global¶  s5   € Ø˜dÔ3Ð3Ð3ØÔ!×(Ò(¨Ñ5Ô5Ð5Ð5Ð5ð 4Ð3r.   c                 ó.   — ddl m}  || j        ¦  «        S )ziDeepy jobs for this plugin: list gallery media and run requests in their own session (WanGP web UI only).r   )ÚDeepyClient)Úshared.deepy.plugin_jobsrA  r   )r+   rA  s     r,   rU   zWAN2GPPlugin.deepyº  s(   € ð 	9Ð8Ð8Ð8Ð8Ð8Øˆ{˜4œ9Ñ%Ô%Ð%r.   c                 ób   — ddl m}  || j        j        j        j        d| j        › d|› �|fi |¤ŽS )zIRegister a plugin form; request the shared 'state' component in setup_ui.r   )Ú
GradioFormzplugin-ú-)Úshared.gradio.form_syncrD  r0  ry   ÚserviceÚformsr   )r+   r   r-  ÚkwargsrD  s        r,   Ú	sync_formzWAN2GPPlugin.sync_formÀ  sQ   € à6Ð6Ð6Ð6Ð6Ð6Øˆz˜$œ*Ô*Ô2Ô8Ð:VÀDÄIÐ:VÐ:VÐPTÐ:VÐ:VÐXbÐmÐmÐflÐmÐmÐmr.   Úvariable_nameÚ	new_valuec                 ó@   — | j         r|                       ||¦  «        S d S re   )r   )r+   rK  rL  s      r,   Ú
set_globalzWAN2GPPlugin.set_globalÅ  s0   € ØÔ$ð 	GØ×,Ò,¨]¸IÑFÔFÐFð	Gð 	Gr.   c                 ó4   — | j                              ¦   «         S re   )r  Úcopyr*   s    r,   Úcomponent_requestszWAN2GPPlugin.component_requestsÉ  ó   € àÔ'×,Ò,Ñ.Ô.Ð.r.   c                 ó4   — | j                              ¦   «         S re   )r  rP  r*   s    r,   Úglobal_requestszWAN2GPPlugin.global_requestsÍ  s   € àÔ$×)Ò)Ñ+Ô+Ð+r.   Ú	hook_nameÚcallbackc                 ól   — || j         vr
g | j         |<   | j         |                              |¦  «         d S re   )r  r£   )r+   rU  rV  s      r,   Úregister_data_hookzWAN2GPPlugin.register_data_hookÑ  s?   € Ø˜DÔ,Ð,Ð,Ø*,ˆDÔ˜YÑ'ØÔ˜Ô#×*Ò*¨8Ñ4Ô4Ð4Ð4Ð4r.   Újs_codec                 ó”   — t          |t          ¦  «        r0|                     ¦   «         r| j                             |¦  «         d S d S d S re   )r{   r2   r|   r!  r£   )r+   rY  s     r,   Úadd_custom_jszWAN2GPPlugin.add_custom_jsÖ  sT   € Ý�g�sÑ#Ô#ð 	5¨¯ª©¬ð 	5ØÔ$×+Ò+¨GÑ4Ô4Ð4Ð4Ð4ð	5ð 	5ð 	5ð 	5r.   rH   rO   c                 ó€  ‡— t                                t          ‰¦  «        ¦  «        r	‰t          v rt	          d‰› d�¦  «        ‚t          |¦  «        st          d¦  «        ‚t          ˆfd„| j        D ¦   «         ¦  «        rt	          d‰› d�¦  «        ‚| j         	                    t          ‰|¦  «        ¦  «         dS )zíServe factory() (an ASGI application, such as a FastAPI app) at path, for example "/my_plugin", from the WanGP server and
        behind its authentication. factory runs once when the server starts; a tab can embed the page in an iframe.zInvalid plugin web app path 'zE': use one lowercase segment such as '/my_plugin', not a WanGP route.zHA plugin web app needs a callable factory returning an ASGI application.c              3   ó.   •K  — | ]}|j         ‰k    V — Œd S re   )rH   )r†   Úweb_apprH   s     €r,   ú	<genexpr>z0WAN2GPPlugin.register_web_app.<locals>.<genexpr>á  s*   øè è € ÐBÐB¨ˆwŒ|˜tÒ#ÐBÐBÐBÐBÐBÐBr.   úPlugin web app path 'ú'' is already registered by this plugin.N)Ú_WEB_APP_PATH_REÚ	fullmatchr2   Ú_RESERVED_WEB_APP_PATHSr¾   r4   Ú	TypeErrorÚanyr%  r£   rN   )r+   rH   rO   s    ` r,   Úregister_web_appzWAN2GPPlugin.register_web_appÚ  sä   ø€ õ  ×)Ò)­#¨d©)¬)Ñ4Ô4ð 	J¸Õ@WÐ8WÐ8WÝð  I¸Tð  Ið  Ið  Iñ  Jô  Jð  JÝ˜Ñ Ô ð 	hÝÐfÑgÔgÐgÝÐBÐBÐBÐB°4´>ÐBÑBÔBÑBÔBð 	dÝÐb°TÐbÐbÐbÑcÔcÐcØŒ×Ò�l¨4°Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r.   r   c                 óþ   — t          | ¦  «        st          d¦  «        ‚t          j        | ¦  «        }d„ |j                             ¦   «         D ¦   «         }|r%t          dd                     |¦  «        › �¦  «        ‚|S )Nz%Deepy tool function must be callable.c                 óŽ   — g | ]B}|j         t          j        j        t          j        j        t          j        j        hv ¯;|j        ‘ŒCS r6   )ÚkindÚinspectÚ	ParameterÚPOSITIONAL_ONLYÚVAR_POSITIONALÚVAR_KEYWORDr   ©r†   Ú	parameters     r,   rˆ   z6WAN2GPPlugin._deepy_tool_signature.<locals>.<listcomp>ê  s�   € ð  Pð  Pð  P¨)ÐXaÔXfÕkrÔk|ô  lMõ  OVô  O`ô  Ooõ  qxô  qBô  qNð  kOð  YOð  YO�y”~ð  YOð  YOð  YOr.   z4Deepy tool functions only support named parameters: ú, )r4   re  rk  Ú	signaturer!   rg   rê   )r   rs  Úunsupporteds      r,   Ú_deepy_tool_signaturez"WAN2GPPlugin._deepy_tool_signatureå  s™   € å˜Ñ!Ô!ð 	EÝÐCÑDÔDÐDÝÔ% hÑ/Ô/ˆ	ð Pð  P°yÔ7K×7RÒ7RÑ7TÔ7Tð  Pñ  Pô  PˆØð 	mÝÐkÐSW×S\ÒS\Ð]hÑSiÔSiÐkÐkÑlÔlÐlØÐr.   r   r   r    c                 óÒ  — t          |pt          | dd¦  «        ¦  «                             ¦   «         }t                               |¦  «        st          d|› d�¦  «        ‚t          |p'|                     dd¦  «                             ¦   «         ¦  «                             ¦   «         }t          |€t          j	        | ¦  «        pdn|pd¦  «                             ¦   «         }|||fS )Nr/   r%   zInvalid Deepy tool name 'úN'. Use letters, digits, and underscores, starting with a letter or underscore.Ú_ú )
r2   Úgetattrr|   Ú_DEEPY_TOOL_NAME_RErc  r¾   r
   Útitlerk  Úgetdoc)r   r   r   r    Ú	tool_nameÚtool_display_nameÚtool_descriptions          r,   Ú_deepy_tool_identityz!WAN2GPPlugin._deepy_tool_identityï  sô   € å˜ÐA¥¨°*¸bÑ AÔ AÑBÔB×HÒHÑJÔJˆ	Ý"×,Ò,¨YÑ7Ô7ð 	TÝð  S¸ð  Sð  Sð  Sñ  Tô  Tð  TÝ Ð S°	×0AÒ0AÀ#ÀsÑ0KÔ0K×0QÒ0QÑ0SÔ0SÑTÔT×ZÒZÑ\Ô\ÐÝÀ;ÐCV¥¤¨xÑ 8Ô 8Ð >¸BøÐ\gÐ\mÐkmÑnÔn×tÒtÑvÔvÐØÐ+Ð-=Ð=Ð=r.   ÚdefinitionsÚ
definitionc                 ó¢   ‡— t          ˆfd„| D ¦   «         ¦  «        rt          d‰j        › d�¦  «        ‚|                      ‰¦  «         ‰j        S )Nc              3   ó8   •K  — | ]}|j         ‰j         k    V — Œd S re   ©r   )r†   Úexistingrƒ  s     €r,   r_  z/WAN2GPPlugin._add_deepy_tool.<locals>.<genexpr>ú  s,   øè è € ÐLÐL°HˆxŒ} 
¤Ò/ÐLÐLÐLÐLÐLÐLr.   zDeepy tool 'ra  )rf  r¾   r   r£   r   )r‚  rƒ  s    `r,   Ú_add_deepy_toolzWAN2GPPlugin._add_deepy_toolø  sb   ø€ åÐLÐLÐLÐLÀÐLÑLÔLÑLÔLð 	fÝÐd¨J¬OÐdÐdÐdÑeÔeÐeØ×Ò˜:Ñ&Ô&Ð&ØÔ"Ð"r.   TÚtoolF)r   r   r    r"   r#   r$   r"   r#   r$   c                óx  — |                       |¦  «         |                      ||||¦  «        \  }}	}
|t          v rt          d|› d�¦  «        ‚t	          |||	|
i t          |¦  «        t          |pd¦  «                             ¦   «         pdt          |¦  «        ¦  «        }|                      | j	        |¦  «        S )zHExpose a typed Python callable to Deepy Prime as an in-process MCP tool.zDeepy Prime tool name 'z' is reserved.r‰  )
ru  r�  Ú _DEEPY_PRIME_RESERVED_TOOL_NAMESr¾   r   r5   r2   r|   rˆ  r"  )r+   r   r   r   r    r"   r#   r$   r~  r  r€  rƒ  s               r,   Úregister_deepy_prime_toolz&WAN2GPPlugin.register_deepy_prime_toolÿ  s  € à×"Ò" 8Ñ,Ô,Ð,Ø9=×9RÒ9RÐS[Ð]aÐcoÐq|Ñ9}Ô9}Ñ6ˆ	Ð$Ð&6ØÕ8Ð8Ð8ÝÐP°yÐPÐPÐPÑQÔQÐQÝ$ Y°Ð:KÐM]Ð_aÕcgÐhuÑcvÔcvÕx{ð  }Ið  }Sð  MSñ  yTô  yT÷  yZò  yZñ  y\ô  y\ð  yfð  `fõ  hlð  mAñ  hBô  hBñ  Cô  Cˆ
Ø×#Ò# DÔ$;¸ZÑHÔHÐHr.   r)   r!   c                óV  — t          j        |¦  «        rt          d¦  «        ‚|                      |¦  «        }	|                      ||||¦  «        \  }
}}t          |pi ¦  «        }t          |¦  «        t          |	j        ¦  «        z
  }|r5t          d|
› dd 	                    t          |¦  «        ¦  «        › �¦  «        ‚i }|	j                             ¦   «         D ]`}t          |                     |j        i ¦  «        ¦  «        }|                     d|j        t           j        j        u ¦  «         |||j        <   Œat%          |
||||t'          |¦  «        t)          |pd¦  «                             ¦   «         pdt'          |¦  «        ¦  «        }|                      | j        |¦  «        S )zJExpose a typed synchronous Python callable to Deepy Zero as a native tool.z.Deepy Zero tool functions must be synchronous.z(Unknown parameters for Deepy Zero tool 'ræ   rr  Úrequiredr‰  )rk  Úiscoroutinefunctionre  ru  r�  rl   rÐ   r!   r¾   rê   Úsortedrg   rv   r   Ú
setdefaultÚdefaultrl  Úemptyr   r5   r2   r|   rˆ  r#  )r+   r   r   r   r    r!   r"   r#   r$   rs  r~  r  r€  Úparameter_overridesÚunknown_parametersÚtool_parametersrq  Úmetadatarƒ  s                      r,   Úregister_deepy_zero_toolz%WAN2GPPlugin.register_deepy_zero_tool  s  € åÔ& xÑ0Ô0ð 	NÝÐLÑMÔMÐMØ×.Ò.¨xÑ8Ô8ˆ	Ø9=×9RÒ9RÐS[Ð]aÐcoÐq|Ñ9}Ô9}Ñ6ˆ	Ð$Ð&6Ý" :Ð#3°Ñ4Ô4ÐÝ Ð!4Ñ5Ô5½¸IÔ<PÑ8QÔ8QÑQÐØð 	ÝÐ}È	Ð}Ð}ÐVZ×V_ÒV_Õ`fÐgyÑ`zÔ`zÑV{ÔV{Ð}Ð}Ñ~Ô~Ð~ØˆØ"Ô-×4Ò4Ñ6Ô6ð 	7ð 	7ˆIÝÐ/×3Ò3°I´NÀBÑGÔGÑHÔHˆHØ×Ò 
¨IÔ,=ÅÔARÔAXÐ,XÑYÔYÐYØ.6ˆO˜IœNÑ+Ð+Ý$ Y°Ð:KÐM]Ð_nÕptð  vCñ  qDô  qDõ  FIð  JVð  J`ð  Z`ñ  Faô  Fa÷  Fgò  Fgñ  Fiô  Fið  Fsð  msõ  uyð  zNñ  uOô  uOñ  Pô  Pˆ
Ø×#Ò# DÔ$:¸JÑGÔGÐGr.   r%   )rD   rC   r   r9   rD   rC   c          	      ó   — | j         �t          d¦  «        ‚|�:t                               t	          |¦  «        ¦  «        st          d|› d�¦  «        ‚t	          |pd¦  «                             ¦   «         st          d¦  «        ‚t          t	          |pd¦  «        t	          |pd¦  «        d                     t	          |¦  «                             ¦   «         ¦  «        t	          |pd¦  «                             ¦   «         i ¦  «        | _         dS )zôExpose this plugin to agents (MCP, Deepy Prime, Deepy Python) as one toolbox of wangp_plugins: summary is its one line in their instructions,
        guide the usage rules returned with its actions. Actions are added with register_deepy_action.Nz1This plugin already registered its Deepy toolbox.zInvalid Deepy toolbox id 'rw  r%   z)A Deepy toolbox needs a one-line summary.ry  )	r$  r¾   r{  rc  r2   r|   rB   rê   rŒ   )r+   r9   rD   rC   r   s        r,   Úregister_deepy_toolboxz#WAN2GPPlugin.register_deepy_toolbox  sH  € ð ÔÐ*ÝÐPÑQÔQÐQØÐ!Õ*=×*GÒ*GÍÈJÉÌÑ*XÔ*XÐ!Ýð  U¸*ð  Uð  Uð  Uñ  Vô  Vð  VÝ�7�=˜bÑ!Ô!×'Ò'Ñ)Ô)ð 	JÝÐHÑIÔIÐIÝ0µ°ZÐ5EÀ2Ñ1FÔ1FÍÈLÐL^Ð\^ÑH_ÔH_Ðad×aiÒaiÕjmÐnuÑjvÔjv×j|Òj|Ñj~Ôj~ÑaÔaõ  BEð  FKð  FQð  OQñ  BRô  BR÷  BXò  BXñ  BZô  BZð  \^ñ  _ô  _ˆÔÐÐr.   )
r   r9   r    r!   r:   r;   r<   r=   r>   r?   r:   r;   r<   r=   r>   r?   c       
         óÊ  — | j         €t          d¦  «        ‚t          j        |¦  «        rt	          d¦  «        ‚|                      |¦  «        }t          |j        ¦  «        }|r|d         dk    rt	          d¦  «        ‚|                      ||d|¦  «        \  }}}|| j         j	        v rt          d|› d�¦  «        ‚t          |pi ¦  «        t          |pi ¦  «        z  t          |d	d…         ¦  «        z
  }|r5t          d
|› dd                     t          |¦  «        ¦  «        › �¦  «        ‚d„ t          |pi ¦  «                             ¦   «         D ¦   «         }t          |                     ¦   «         ¦  «        ddhz
  rt          d|› d�¦  «        ‚d                     t!          |p|                     dd	¦  «        d         ¦  «                             ¦   «         ¦  «        }|st          d|› d�¦  «        ‚t%          j        dd|¦  «        }t)          ||||p|d„ t          |pi ¦  «                             ¦   «         D ¦   «         |rt          |¦  «        ndt+          |¦  «        |d                     t!          |	pd¦  «                             ¦   «         ¦  «        t!          |
pd¦  «                             ¦   «         t+          |¦  «        ¦  «        | j         j	        |<   |S )aw  Add an action to this plugin's Deepy toolbox. function(ctx, **arguments) is synchronous; its arguments' schema comes from the type hints,
        parameters overrides per-argument schema entries (description, enum, ...). uses_gpu=False only for actions that never run GPU work:
        Deepy unloads before every other call so that the generations the action submits can run.Nz9Call register_deepy_toolbox before register_deepy_action.z*Deepy toolbox actions must be synchronous.r   ÚctxzPA Deepy toolbox action takes the call context as its first parameter, named ctx.zDeepy toolbox action 'ra  r�   z-Unknown parameters for Deepy toolbox action 'ræ   rr  c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r6   )r2   ©r†   Úkeyry   s      r,   ú
<dictcomp>z6WAN2GPPlugin.register_deepy_action.<locals>.<dictcomp>8  s$   € ÐMÐMÐM¡Z S¨%�•c˜%‘j”jÐMÐMÐMr.   ÚreadÚwritez%': paths roles are 'read' or 'write'.ry  ú
z!' needs a summary or a docstring.z(?<!\n)\n(?!\n)c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r6   )rl   rž  s      r,   r   z6WAN2GPPlugin.register_deepy_action.<locals>.<dictcomp>?  sd   € ð  SVð  SVð  SVñ  isð  ilð  nsð  TWõ  Y]ð  ^cñ  Ydô  Ydð  SVð  SVð  SVr.   r%   )r$  r¾   rk  r�  re  ru  rÏ   r!   r�  rE   rÐ   rê   r�  rl   rè   rg   r2   rŒ   r    Úsubr8   r5   r|   )r+   r   r   r9   r    r!   r:   r;   r<   r=   r>   r?   rs  Úaction_parametersÚaction_nameÚ_display_nameÚaction_descriptionÚunknownÚrolesÚaction_summarys                       r,   Úregister_deepy_actionz"WAN2GPPlugin.register_deepy_action%  sÌ  € ð
 ÔÐ&ÝÐXÑYÔYÐYÝÔ& xÑ0Ô0ð 	JÝÐHÑIÔIÐIØ×.Ò.¨xÑ8Ô8ˆ	Ý  Ô!5Ñ6Ô6ÐØ ð 	pÐ$5°aÔ$8¸EÒ$AÐ$AÝÐnÑoÔoÐoØ9=×9RÒ9RÐS[Ð]aÐcgÐitÑ9uÔ9uÑ6ˆ�]Ð$6Ø˜$Ô-Ô5Ð5Ð5ÝÐj°kÐjÐjÐjÑkÔkÐkÝ�zÐ' RÑ(Ô(­3¨u¨{¸Ñ+;Ô+;Ñ;½sÐCTÐUVÐUWÐUWÔCXÑ?YÔ?YÑYˆØð 	{ÝÐyÈ[ÐyÐyÐ]a×]fÒ]fÕgmÐnuÑgvÔgvÑ]wÔ]wÐyÐyÑzÔzÐzØMÐMµ4¸¸ÀÑ3DÔ3D×3JÒ3JÑ3LÔ3LÐMÑMÔMˆÝˆu�|Š|‰~Œ~ÑÔ &¨'Ð!2Ñ2ð 	jÝÐh°kÐhÐhÐhÑiÔiÐiØŸš¥# gÐ&UÐ1C×1IÒ1IÈ$ÐPQÑ1RÔ1RÐSTÔ1UÑ"VÔ"V×"\Ò"\Ñ"^Ô"^Ñ_Ô_ˆØð 	fÝÐd°kÐdÐdÐdÑeÔeÐeÝœVÐ$6¸Ð=OÑPÔPÐÝ3DÀ[ÐRZÐ\jÐl~ð  mQð  CQð  SVð  SVõ  w{ð  |Fð  |Lð  JLñ  wMô  wM÷  wSò  wSñ  wUô  wUð  SVñ  SVô  SVØV]ÐEgÅTÈ'Á]Ä]À]ÐcgÕimÐnvÑiwÔiwÐy~ð  AD÷  AIò  AIõ  JMð  NUð  N[ð  Y[ñ  J\ô  J\÷  Jbò  Jbñ  Jdô  Jdñ  Aeô  Aeõ  gjð  kuð  k{ð  y{ñ  g|ô  g|÷  gBò  gBñ  gDô  gDõ  FJð  KRñ  FSô  FSñ4Tô 4TˆÔÔ# KÑ0àˆr.   c                 ó4   — | j                              ¦   «         S re   )r!  rP  r*   s    r,   Úcustom_js_snippetszWAN2GPPlugin.custom_js_snippetsC  rR  r.   r  r  c                 ó†   — t          | d¦  «        sg | _        | j                             t          ||¬¦  «        ¦  «         d S )Nr  )r  r  )Úhasattrr  r£   r  )r+   r  r  s      r,   Úinsert_afterzWAN2GPPlugin.insert_afterG  sZ   € Ý�tÐ5Ñ6Ô6ð 	-Ø*,ˆDÔ'ØÔ#×*Ò*ÝØ$7Ø*Cðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r.   ©r'   N)r«   )/r/   r0   r1   r&  r(  r2   r4   r¤   r,  r   Úgrr-  Ú	Componentr   Úupdater   r/  r3  r5  r9  r<  r?  rL   rU   rJ  rN  r   rQ  rT  rX  r[  rg  Ústaticmethodrk  Ú	Signatureru  rf   r�  r   rˆ  r5   rŒ  r˜  rš  r­  r¯  r²  r6   r.   r,   r  r  ‹  s•  € € € € € ð0ð 0ð 0ð(ð ð ð ð~ð ~˜cð ~¨#ð ~Àhð ~ÐZ]ð ~ð ~ð ~ð ~ð¨¨S°"´-Ô2IÐ-IÔ(Jð ÈtÐTVÔTaÔTkÐmrÐsuÔs|ð  Bð  tBô  nCð  UCô  PDð ð ð ð ð 4¨¨S¨¤>ð °dð ð ð ð ð T¨#¨s¨(¤^ð ¸ð ð ð ð ð T¨#¨s¨(¤^ð Àð Èð ð ð ð ð:¨cð :°dð :ð :ð :ð :ð6¨#ð 6°$ð 6ð 6ð 6ð 6ð ð&ð &ñ „Xð&ð
nð nð nð
G¨ð G¸ð Gð Gð Gð Gð ð/ D¨¤Ið /ð /ð /ñ „Xð/ð ð,  c¤ð ,ð ,ð ,ñ „Xð,ð5¨Cð 5¸8ð 5ð 5ð 5ð 5ð
5 Sð 5¨Tð 5ð 5ð 5ð 5ð	; Sð 	;°8ð 	;Àð 	;ð 	;ð 	;ð 	;ð ð¨ð °WÔ5Fð ð ð ñ „\ðð ð> xð >°s¸T±zð >ÐQTÐW[ÑQ[ð >ÐjmÐptÑjtð >Ðy~ð  @Cð  EHð  JMð  @Mô  zNð >ð >ð >ñ „\ð>ð ð# T¨/Ô%:ð #Èð #Ð\dð #ð #ð #ñ „\ð#ð SWÐswð  TXð  ptð  JPð  otð Ið Ið I°(ð IÀSÈ4ÁZð IÐfiÐlpÑfpð Ið  GJð  MQñ  GQð Ið  imð Ið  DGð Ið  hlð Ið  yAð Ið Ið Ið Ið RVÐrvð  SWð  HLð  dhð  ~Dð  chð Hð Hð H°ð HÀCÈ$ÁJð HÐehÐkoÑeoð Hð  FIð  LPñ  FPð Hð  eið  jmð  osð  twð  y|ð  t|ô  o}ð  j}ô  e~ð  AEñ  eEð Hð  ]að Hð  x{ð Hð  \`ð Hð  muð Hð Hð Hð Hð$ DFÐ`dð  BFð 	_ð 	_ð 	_¨cð 	_¸Sð 	_ÐSVÐY]ÑS]ð 	_ÐtwÐz~Ñt~ð 	_ð  KOð 	_ð 	_ð 	_ð 	_ð OSÐjnð  KOð  @Dð  gkØ/3ÐTXÐikð  @Bð  TXðð ð ¨hð ÀÀtÁð Ð]`ÐcgÑ]gð ð  ~Að  DHñ  ~Hð ð  ]að  beð  gkð  loð  qtð  ltô  guð  buô  ]vð  y}ñ  ]}ð ð  OSð  TWð  Y\ð  T\ô  O]ð  `dñ  Odð Ø(,ðØ<@ÀÀcÀ¼NÈTÑ<QðØcfðØy|ðð MQðð ]eðð ð ð ð< ð/ D¨¤Ið /ð /ð /ñ „Xð/ð
°ð 
ÐPXð 
Ð]að 
ð 
ð 
ð 
ð 
ð 
r.   r  c                   óî  — e Zd Zdtd„Zdudeeeef                  deddfd„Zdvd	„Z	d
eddfd„Z
d
eddfd„Zdee         fd„Zdee         ddfd„Zd
eddfd„Zd
eddfd„Zdedefd„Zdvd„Zdwdededefd„Zdedee         fd„Zdedee         fd„Zdededdfd„Zdedeeeef                  fd„Zdeddfd„Zdeeef         deeef         fd „Zd!ed"eeeef                  d#eddfd$„Zdxd
ed&ed'edee         fd(„Zdyd
ed*ed'edee         fd+„Zded,edefd-„Zd.ee         dee          fd/„Z!dzd
ed"eeeef                  ddfd0„Z"dzd
ed"eeeef                  ddfd1„Z#dzd
ed"eeeef                  ddfd2„Z$deeef         deeef         fd3„Z%d4eeef         d5eeeef                  deeef         fd6„Z&d7eeeef                  d8eeeef                  deeeeef         f         fd9„Z'deeeef                  fd:„Z(dwd;edeeeef                  fd<„Z)deeeef                  fd=„Z*dwd;edeeeeef         f         fd>„Z+d?edefd@„Z,d{d?edBedeeeef                  fdC„Z-d"eeef         deeef         fdD„Z.dEeeef         deeef         fdF„Z/d|d
ed?ed;edeeeef                  fdG„Z0dedefdH„Z1d}dIed;edeee2f         fdJ„Z3dud
ed?edefdK„Z4defdL„Z5deeeef                  fdM„Z6dN„ Z7d
edefdO„Z8d
efdP„Z9dzd
efdQ„Z:dzd
efdR„Z;dzd
efdS„Z<d~d
edTedUedVefdW„Z=dzdXefdY„Z>dZeddfd[„Z?e@d
edZeddfd\„¦   «         ZAe@d
ed!eddfd]„¦   «         ZBdee         fd^„ZCdd_ee         d`eddfda„ZDdeeef         fdb„ZEd!edcedefdd„ZFdceddfde„ZGdfeeef         dgeddfdh„ZHdefdi„ZIdjeeef         ddfdk„ZJdledmeddfdn„ZKdeeeeef         f         fdo„ZLdpefdq„ZMdreeef         fds„ZNdS )€rÞ   Úpluginsc                 óZ  — i | _         || _        t          j        | j        d¬¦  «         | j        t          j        vr%t          j                             d| j        ¦  «         i | _        t          ¦   «         | _	        g | _
        t          j                             t          j        ¦   «         ¦  «        | _        t          j                             | j        t          ¦  «        | _        t          j                             | j        t"          ¦  «        | _        d | _        d| _        i | _        d S )NT©Úexist_okr   r%   )rº  rë   ré   ÚmakedirsÚsysrH   ÚinsertÚ
data_hooksrÐ   Úrestricted_globalsr¯  ÚabspathÚgetcwdÚ	repo_rootrê   ÚPLUGIN_CATALOG_FILENAMEÚcatalog_pathÚPLUGIN_LOCAL_CATALOG_FILENAMEÚlocal_catalog_pathrá   râ   Ú_plugin_metadata_cache)r+   rë   s     r,   r&  zPluginManager.__init__R  sÜ   € Ø02ˆŒØ&ˆÔÝ
Œ�DÔ$¨tÐ4Ñ4Ô4Ð4ØÔ¥3¤8Ð+Ð+ÝŒH�OŠO˜A˜tÔ/Ñ0Ô0Ð0Ø57ˆŒÝ,/©E¬EˆÔØ-/ˆÔÝœŸš­¬©¬Ñ5Ô5ˆŒÝœGŸLšL¨¬Õ9PÑQÔQˆÔÝ"$¤'§,¢,¨t¬~Õ?\Ñ"]Ô"]ˆÔØ7;ˆÔØ+-ˆÔ#ØacˆÔ#Ð#Ð#r.   r%   rá   râ   r'   Nc                 óT   — t          |t          ¦  «        r|nd | _        |pd| _        d S ©Nr%   )r{   rl   rá   râ   )r+   rá   râ   s      r,   Úset_server_configzPluginManager.set_server_configb  s1   € Ý.8¸ÍÑ.MÔ.MÐW˜]˜]ÐSWˆÔØ&<Ð&BÀˆÔ#Ð#Ð#r.   c                 óÀ   — | j         r| j        sd S 	 t          | j         | j        ¦  «         d S # t          $ r%}t	          d| j        › d|› �¦  «         Y d }~d S d }~ww xY w)Nz-[PluginManager] Failed to write config file 'ræ   )rá   râ   r   rï   rç   )r+   rö   s     r,   Ú_save_server_configz!PluginManager._save_server_configf  s–   € ØÔ!ð 	¨Ô)Dð 	ØˆFð	gÝ˜Ô+¨TÔ-HÑIÔIÐIÐIÐIøÝð 	gð 	gð 	gÝÐeÀ$ÔB]ÐeÐeÐbcÐeÐeÑfÔfÐfÐfÐfÐfÐfÐfÐføøøøð	gøøøs   ’. ®
A¸AÁAr&   c                 ó°  — | j         sd S t          |pd¦  «                             ¦   «         }|r|t          v s	|t          v rd S t
          5  | j                              t          g ¦  «        }t          |t          ¦  «        sg }||vr8| 
                    |¦  «         || j         t          <   |                      ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S rÌ  )rá   r2   r|   ÚSYSTEM_PLUGINSÚBUNDLED_PLUGINSr   rv   r   r{   rÏ   r£   rÏ  ©r+   r&   Ú	installeds      r,   Úrecord_remote_plugin_installz*PluginManager.record_remote_plugin_installn  s)  € ØÔ!ð 	ØˆFÝ˜	˜ RÑ(Ô(×.Ò.Ñ0Ô0ˆ	Øð 	˜I­Ð7Ð7¸9ÍÐ;WÐ;WØˆFÝð 	+ð 	+ØÔ*×.Ò.Õ/KÈRÑPÔPˆIÝ˜i­Ñ.Ô.ð Ø�	Ø 	Ð)Ð)Ø× Ò  Ñ+Ô+Ð+ØCL�Ô"Õ#?Ñ@Ø×(Ò(Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+s   Á
A4CÃCÃCc                 ó�  ‡— | j         sd S t          5  t          ‰pd¦  «                             ¦   «         Š| j                              t
          g ¦  «        }‰rt          |t          ¦  «        r‰|vr	 d d d ¦  «         d S ˆfd„|D ¦   «         | j         t
          <   |                      ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nr%   c                 ó    •— g | ]
}|‰k    ¯|‘ŒS r6   r6   ©r†   rÔ   r&   s     €r,   rˆ   z=PluginManager.clear_remote_plugin_install.<locals>.<listcomp>…  s%   ø€ Ð?pÐ?pÐ?pÈÐ^bÐfoÒ^oÐ^oÀÐ^oÐ^oÐ^or.   )	rá   r   r2   r|   rv   r   r{   rÏ   rÏ  rÓ  s    ` r,   Úclear_remote_plugin_installz)PluginManager.clear_remote_plugin_install}  s;  ø€ ØÔ!ð 	ØˆFÝð 	'ð 	'Ý˜I˜O¨Ñ,Ô,×2Ò2Ñ4Ô4ˆIØÔ*×.Ò.Õ/KÈRÑPÔPˆIØð ¥J¨y½$Ñ$?Ô$?ð À9ÐT]ÐC]ÐC]Øð		'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð
 @qÐ?pÐ?pÐ?pÐQZÐ?pÑ?pÔ?pˆDÔÕ;Ñ<Ø×$Ò$Ñ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   ’A B;Á?/B;Â;B?ÃB?c                 ó4  — | j         sg S | j                              t          g ¦  «        }t          |t          ¦  «        sg S g }|D ]R}t          |t
          ¦  «        r;|                     ¦   «         r'|                     |                     ¦   «         ¦  «         ŒS|S re   )rá   rv   ÚPENDING_DELETIONS_KEYr{   rÏ   r2   r|   r£   )r+   Úpendingr“   rÔ   s       r,   Ú_get_pending_deletionsz$PluginManager._get_pending_deletionsˆ  s—   € ØÔ!ð 	ØˆIØÔ$×(Ò(Õ)>ÀÑCÔCˆÝ˜'¥4Ñ(Ô(ð 	ØˆIØˆØð 	-ð 	-ˆDÝ˜$¥Ñ$Ô$ð -¨¯ª©¬ð -Ø—’˜tŸzšz™|œ|Ñ,Ô,Ð,øØˆr.   rÜ  c                 ó~  — | j         sd S g }t          ¦   «         }|D ]]}t          |t          ¦  «        sŒ|                     ¦   «         }|r||v rŒ3|                     |¦  «         |                     |¦  «         Œ^t          5  || j         t          <   |  	                    ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S re   )
rá   rÐ   r{   r2   r|   rÒ   r£   r   rÛ  rÏ  )r+   rÜ  ÚuniquerÓ   rÔ   rŸ  s         r,   Ú_set_pending_deletionsz$PluginManager._set_pending_deletions”  s  € ØÔ!ð 	ØˆFØˆÝ‰uŒuˆØð 	ð 	ˆDÝ˜d¥CÑ(Ô(ð ØØ—*’*‘,”,ˆCØð ˜# ˜+˜+ØØ�HŠH�S‰MŒMˆMØ�MŠM˜#ÑÔÐÐÝð 	'ð 	'Ø8>ˆDÔÕ4Ñ5Ø×$Ò$Ñ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   Â$B2Â2B6Â9B6c                 óÒ   — |sd S t           5  |                      ¦   «         }||vr*|                     |¦  «         |                      |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S re   )r   rÝ  r£   rà  ©r+   r&   rÜ  s      r,   Ú_add_pending_deletionz#PluginManager._add_pending_deletion¥  s»   € Øð 	ØˆFÝð 	5ð 	5Ø×1Ò1Ñ3Ô3ˆGØ Ð'Ð'Ø—’˜yÑ)Ô)Ð)Ø×+Ò+¨GÑ4Ô4Ð4ð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð 	5ð 	5s   ŒAAÁA Á#A c                 óÆ   ‡— ‰sd S t           5  |                      ¦   «         }‰|v r#ˆfd„|D ¦   «         }|                      |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ó    •— g | ]
}|‰k    ¯|‘ŒS r6   r6   rØ  s     €r,   rˆ   z9PluginManager._clear_pending_deletion.<locals>.<listcomp>´  s#   ø€ ÐIÐIÐI D°t¸yÒ7HÐ7H˜4Ð7HÐ7HÐ7Hr.   )r   rÝ  rà  râ  s    ` r,   Ú_clear_pending_deletionz%PluginManager._clear_pending_deletion®  sÃ   ø€ Øð 	ØˆFÝð 	5ð 	5Ø×1Ò1Ñ3Ô3ˆGØ˜GÐ#Ð#ØIÐIÐIÐI¨GÐIÑIÔI�Ø×+Ò+¨GÑ4Ô4Ð4ð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð 	5ð 	5s   �<AÁAÁArH   c                 ód  — 	 t          j        |¦  «        D ]ˆ}|j        }|                     d¦  «        rŒ|                     d¬¦  «        r|                     d¦  «        rŒK dS |                     d¬¦  «        r$|dk    rŒk|                      |j        ¦  «        s dS Œ‰dS # t          $ r Y dS w xY w)Nú.F)Úfollow_symlinksz.pycÚ__pycache__T)
ré   Úscandirr   r�   Úis_filer’   Úis_dirÚ_is_cleanup_candidaterH   rï   )r+   rH   Úentryr   s       r,   rî  z#PluginManager._is_cleanup_candidate·  sÝ   € ð	Ýœ DÑ)Ô)ð %ð %�Ø”z�Ø—?’? 3Ñ'Ô'ð ØØ—=’=°�=Ñ7Ô7ð !Ø—}’} VÑ,Ô,ð !Ø Ø ˜5˜5Ø—<’<°�<Ñ6Ô6ð %Ø˜}Ò,Ð,Ø Ø×5Ò5°e´jÑAÔAð %Ø$˜u˜uøØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚A B! Á$8B! ÂB! Â!
B/Â.B/c                 óÐ  — |                       ¦   «         }|sd S g }|D ]³}t          j                             | j        |¦  «        }t          j                             |¦  «        sŒG|                      |¦  «        rB	 t          j        || j	        ¬¦  «         Œy# t          $ r |                     |¦  «         Y Œšw xY w|                     |¦  «         Œ´|                      |¦  «         d S )N©Úonerror)rÝ  ré   rH   rê   rë   rì   rî  ÚshutilÚrmtreeÚ_remove_readonlyrï   r£   rà  )r+   rÜ  Ú	remainingr&   Ú
plugin_dirs        r,   Úcleanup_pending_deletionsz'PluginManager.cleanup_pending_deletionsÊ  s  € Ø×-Ò-Ñ/Ô/ˆØð 	ØˆFØˆ	Ø ð 	(ð 	(ˆIÝœŸš dÔ&6¸	ÑBÔBˆJÝ”7—=’= Ñ,Ô,ð ØØ×)Ò)¨*Ñ5Ô5ð ðÝ”M *°dÔ6KÐLÑLÔLÐLØøÝ ð ð ð Ø×$Ò$ YÑ/Ô/Ð/Ø�Hðøøøð ×Ò˜YÑ'Ô'Ð'Ð'Ø×#Ò# IÑ.Ô.Ð.Ð.Ð.s   Á:BÂB8Â7B8Try   r’  c                 óÂ   — t          |t          ¦  «        r|S t          |t          ¦  «        r2|                     ¦   «                              ¦   «         }|dv rdS |dv rdS |S )N)ÚtrueÚ1ÚyesT)ÚfalseÚ0ÚnoF)r{   r5   r2   r|   r�   )r+   ry   r’  Úlowereds       r,   Ú_coerce_boolzPluginManager._coerce_boolÝ  sk   € Ý�e�TÑ"Ô"ð 	ØˆLÝ�e�SÑ!Ô!ð 	Ø—k’k‘m”m×)Ò)Ñ+Ô+ˆGØÐ.Ð.Ð.Ø�tØÐ.Ð.Ð.Ø�uØˆr.   c                 óü   — t          |t          ¦  «        r|g}nt          |t          ¦  «        r|}ng S g }|D ]C}t          |t          ¦  «        sŒ|                     ¦   «         }|r|                     |¦  «         ŒD|S re   )r{   r2   rÏ   r|   r£   )r+   ry   rg   r“   rÔ   r¿   s         r,   Ú_coerce_string_listz!PluginManager._coerce_string_listè  s‘   € Ý�e�SÑ!Ô!ð 	Ø�WˆFˆFÝ˜�tÑ$Ô$ð 	ØˆFˆFàˆIØˆØð 	%ð 	%ˆDÝ˜d¥CÑ(Ô(ð ØØ—:’:‘<”<ˆDØð %Ø—’˜tÑ$Ô$Ð$øØˆr.   c                 óÒ  — |rt           j                             |¦  «        sd S d }dD ]§}	 t          |d|¬¦  «        5 }t	          j        |¦  «        cd d d ¦  «         c S # 1 swxY w Y   ŒD# t          $ r}|}Y d }~ŒUd }~wt          j        $ r)}|}|dk    rdt          |¦  «        v rY d }~Œ…Y d }~ nd }~wt          $ r}|}Y d }~ nd }~ww xY w|�t          d|› d|› �¦  «         d S )N)úutf-8z	utf-8-sigÚr©Úencodingr  z	UTF-8 BOMz)[PluginManager] Failed to read JSON from rä   )ré   rH   ÚisfileÚopenÚjsonÚloadÚUnicodeDecodeErrorÚJSONDecodeErrorr2   rï   rç   )r+   rH   Ú
last_errorr  Úreaderrö   s         r,   Ú_load_json_filezPluginManager._load_json_fileø  s™  € Øð 	�2œ7Ÿ>š>¨$Ñ/Ô/ð 	Ø�4Øˆ
Ø.ð 	ð 	ˆHðÝ˜$ ¨hÐ7Ñ7Ô7ð -¸6Ýœ9 VÑ,Ô,ð-ð -ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -øå%ð ð ð Ø�
Ø����øøøøÝÔ'ð ð ð Ø�
Ø˜wÒ&Ð&¨;½#¸a¹&¼&Ð+@Ð+@Ø�H�H�H�HØ�����øøøøÝð ð ð Ø�
Ø�����øøøøðøøøð Ð!ÝÐR¸dÐRÐRÀjÐRÐRÑSÔSÐSØˆtsR   «A,½A ÁA,Á A$	Á$A,Á'A$	Á(A,Á,
CÁ6A=Á=CÂB3Â3CÃ CÃCÚpayloadc                 óX  — |sd S 	 t          j        t           j                             |¦  «        pdd¬¦  «         t	          |dd¬¦  «        5 }t          j        ||d¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r }t          d	|› d
|› �¦  «         Y d }~d S d }~ww xY w)Nrè  Tr¼  Úwr  r  r‰   )Úindentz([PluginManager] Failed to write JSON to rä   )	ré   r¾  rH   Údirnamer
  r  Údumprï   rç   )r+   rH   r  Úwriterrö   s        r,   Ú_write_json_filezPluginManager._write_json_file  s  € Øð 	ØˆFð	JÝŒK�œŸš¨Ñ-Ô-Ð4°¸tÐDÑDÔDÐDÝ�d˜C¨'Ð2Ñ2Ô2ð 5°fÝ”	˜' 6°!Ð4Ñ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5øåð 	Jð 	Jð 	JÝÐH¸TÐHÐHÀQÐHÐHÑIÔIÐIÐIÐIÐIÐIÐIÐIøøøøð	Jøøøs<   †AA? ÁA2Á%A? Á2A6Á6A? Á9A6Á:A? Á?
B)Â	B$Â$B)r  c                 óp  — t           j                             |t          ¦  «        }	 t          j        |¦  «        j        }n;# t          $ r d }Y n-t          $ r!}t          d|› d|› �¦  «         d }Y d }~nd }~ww xY w| j	         
                    |¦  «        }|�+|d         |k    r|d         �t          |d         ¦  «        nd S |                      |¦  «        }t          |t          ¦  «        s|d f| j	        |<   d S |                      |¦  «        }|t          |¦  «        f| j	        |<   t          |¦  «        S )Nz[PluginManager] Failed to stat rä   r   r�   )ré   rH   rê   ÚPLUGIN_METADATA_FILENAMEÚstatÚst_mtime_nsÚFileNotFoundErrorrï   rç   rÊ  rv   rl   r  r{   Ú_normalize_plugin_metadata)r+   r  Úmetadata_pathÚmtime_nsrö   Úcachedr  r—  s           r,   Ú_load_plugin_metadataz#PluginManager._load_plugin_metadata  sU  € ÝœŸš [Õ2JÑKÔKˆð	Ý”w˜}Ñ-Ô-Ô9ˆHˆHøÝ ð 	ð 	ð 	ØˆHˆHˆHÝð 	ð 	ð 	ÝÐH°MÐHÐHÀQÐHÐHÑIÔIÐIØˆHˆHˆHˆHˆHˆHøøøøð	øøøð Ô,×0Ò0°Ñ?Ô?ˆØÐ &¨¤)¨xÒ"7Ð"7Ø&,¨Q¤iÐ&;•4˜˜qœ	‘?”?�?ÀÐEØ×&Ò& }Ñ5Ô5ˆÝ˜'¥4Ñ(Ô(ð 	Ø:BÀDÐ9IˆDÔ'¨Ñ6Ø�4Ø×2Ò2°7Ñ;Ô;ˆØ6>ÅÀXÁÄÐ5OˆÔ# MÑ2Ý�H‰~Œ~Ðs   §A ÁA9Á	A9ÁA4Á4A9c                 ó‚   — | j                              t          j                             |t
          ¦  «        d ¦  «         d S re   )rÊ  Úpopré   rH   rê   r  )r+   r  s     r,   Ú!_invalidate_plugin_metadata_cachez/PluginManager._invalidate_plugin_metadata_cache-  s3   € ØÔ#×'Ò'­¬¯ª°[ÕBZÑ([Ô([Ð]aÑbÔbÐbÐbÐbr.   c                 óX  — t          |¦  «        }dD ]^}|                     |¦  «        }t          |t          ¦  «        r|                     ¦   «         ||<   ŒD|€d||<   ŒLt          |¦  «        ||<   Œ_|                     d¦  «        }t          |                     d¦  «        ¦  «        s3t          |¦  «        r$t          |¦  «                             ¦   «         |d<   |                     dd ¦  «         t          |                     dd¦  «        ¦  «        |d<   t          |                     d¦  «        ¦  «        |d<   |  	                    |                     d¦  «        d¬	¦  «        |d<   |  
                    |                     t          ¦  «        ¦  «        |t          <   |  
                    |                     t          ¦  «        ¦  «        |t          <   |  
                    |                     t          ¦  «        ¦  «        |t          <   |  
                    |                     t          ¦  «        ¦  «        |t          <   t          t           fD ]^}|                     |¦  «        }t          |t          ¦  «        r|                     ¦   «         ||<   ŒD|€d||<   ŒLt          |¦  «        ||<   Œ_|S )
N)r   rž   r    ÚauthorrÂ   Úwan2gp_versionr~   r%   Úwangp_versionr)  r~   r  r  T©r’  )rl   rv   r{   r2   r|   r}   r%  r�   rÕ   r  r  Ú%PLUGIN_SPATIAL_UPSAMPLER_HANDLERS_KEYÚ&PLUGIN_TEMPORAL_UPSAMPLER_HANDLERS_KEYÚPLUGIN_AUDIO_PROCESSORS_KEYÚPLUGIN_MODEL_HANDLERS_KEYÚPLUGIN_MODEL_DEFAULTS_KEYÚPLUGIN_MODEL_PROFILES_KEY)r+   r  r—  rŸ  ry   Úlegacy_versions         r,   r  z(PluginManager._normalize_plugin_metadata0  s  € Ý˜‘=”=ˆØ`ð 	+ð 	+ˆCØ—L’L Ñ%Ô%ˆEÝ˜%¥Ñ%Ô%ð +Ø %§¢¡¤�˜‘�Ø�Ø "�˜‘�å # E¡
¤
�˜‘�Ø!Ÿš oÑ6Ô6ˆÝ˜(Ÿ,š,Ð'7Ñ8Ô8Ñ9Ô9ð 	E½jÈÑ>XÔ>Xð 	EÝ),¨^Ñ)<Ô)<×)BÒ)BÑ)DÔ)DˆHÐ%Ñ&Ø�Š�_ dÑ+Ô+Ð+Ý.¨x¯|ª|¸EÀ2Ñ/FÔ/FÑGÔGˆ�‰Ý1°(·,²,¸vÑ2FÔ2FÑGÔGˆ�ÑØ$(×$5Ò$5°h·l²lÀ?Ñ6SÔ6SÐ]aÐ$5Ñ$bÔ$bˆ�Ñ!Ø:>×:RÒ:RÐS[×S_ÒS_õ  aFñ  TGô  TGñ  ;Hô  ;HˆÕ6Ñ7Ø;?×;SÒ;SÐT\×T`ÒT`õ  bHñ  UIô  UIñ  <Jô  <JˆÕ7Ñ8Ø04×0HÒ0HÈÏÊÕVqÑIrÔIrÑ0sÔ0sˆÕ,Ñ-Ø.2×.FÒ.FÀxÇ|Â|ÕTmÑGnÔGnÑ.oÔ.oˆÕ*Ñ+Ý-Õ/HÐIð 	+ð 	+ˆCØ—L’L Ñ%Ô%ˆEÝ˜%¥Ñ%Ô%ð +Ø %§¢¡¤�˜‘�Ø�Ø "�˜‘�å # E¡
¤
�˜‘�Øˆr.   Úpluginr—  Ú	is_systemc           	      óR  — |s|rd|_         d S dD ]*}||v r$t          |||                     |¦  «        ¦  «         Œ+d|v r't          |                     d¦  «        ¦  «        |_        t          t          |dd¦  «        ¦  «        set          |                     d¦  «        ¦  «        rCt          |dt          |                     d¦  «        ¦  «                             ¦   «         ¦  «         d|v r/|  	                    |                     d¦  «        d¬	¦  «        |_         |r	d|_         d S d S )
NF)r   rž   r    r(  rÂ   r)  r  r)  r%   r*  r  Tr+  )
r  Úsetattrrv   rÕ   r  r}   rz  r2   r|   r  )r+   r3  r—  r4  rŸ  s        r,   Ú_apply_metadata_to_pluginz'PluginManager._apply_metadata_to_pluginO  s@  € Øð 	Øð -Ø',�Ô$ØˆFØYð 	8ð 	8ˆCØ�hˆˆÝ˜  X§\¢\°#Ñ%6Ô%6Ñ7Ô7Ð7øØ�XÐÐÝ0°·²¸fÑ1EÔ1EÑFÔFˆFŒKÝ�' &Ð*:¸BÑ?Ô?Ñ@Ô@ð 	ZÅZÐPX×P\ÒP\Ð]lÑPmÔPmÑEnÔEnð 	ZÝ�FÐ,­c°(·,²,¸Ñ2OÔ2OÑ.PÔ.P×.VÒ.VÑ.XÔ.XÑYÔYÐYØ˜hÐ&Ð&Ø#'×#4Ò#4°X·\²\À/Ñ5RÔ5RÐ\`Ð#4Ñ#aÔ#aˆFÔ Øð 	)Ø#(ˆFÔ Ð Ð ð	)ð 	)r.   ÚhandlerÚhandler_pathr
  c                 ó¾  — t          |pd¦  «                             ¦   «         }|sd S |                     d¦  «        }d|v r|                     dd¦  «        \  }}n7d|vrt	          d|› d|› d|› �¦  «         d S |                     dd¦  «        \  }}|                     ¦   «                              dd	¦  «        }|                     d
¦  «        r
|d d…         }|                     d	d¦  «        }|r|                     d¦  «        }|                     d¦  «        }|                     ¦   «         }|r|st	          d|› d|› d|› �¦  «         d S |r|› d|› �n|}|› d|› �S )Nr%   rè  ú:r�   ú[PluginManager] Invalid ú path for plugin rä   ú\rJ   ú.pyéýÿÿÿ)r2   r|   r�   Úrsplitrç   r
   r’   Úlstrip)	r+   r&   r9  r
  r¿   Úis_relativeÚmodule_pathÚ
class_nameÚfull_module_paths	            r,   Ú_resolve_plugin_class_pathz(PluginManager._resolve_plugin_class_path`  s¶  € Ý�<Ð% 2Ñ&Ô&×,Ò,Ñ.Ô.ˆØð 	Ø�4Ø—o’o cÑ*Ô*ˆØ�$ˆ;ˆ;Ø&*§k¢k°#°qÑ&9Ô&9Ñ#ˆK˜˜à˜$ˆˆÝÐd°ÐdÐdÈÐdÐdÐVbÐdÐdÑeÔeÐeØ�tØ&*§k¢k°#°qÑ&9Ô&9Ñ#ˆK˜Ø!×'Ò'Ñ)Ô)×1Ò1°$¸Ñ<Ô<ˆØ×Ò Ñ&Ô&ð 	+Ø% c r cÔ*ˆKØ!×)Ò)¨#¨sÑ3Ô3ˆØð 	2Ø%×,Ò,¨SÑ1Ô1ˆKØ!×'Ò'¨Ñ,Ô,ˆØ×%Ò%Ñ'Ô'ˆ
Øð 	 *ð 	ÝÐ`¨UÐ`Ð`ÀYÐ`Ð`ÐR^Ð`Ð`ÑaÔaÐaØ�4Ø;FÐW˜iÐ7Ð7¨+Ð7Ð7Ð7ÈKÐØ"Ð1Ð1 ZÐ1Ð1Ð1r.   ÚmodulerD  c                 óþ  — t          |pd¦  «                             ¦   «         }|sd S |                     d¦  «        }|                     dd¦  «        }|                     d¦  «        r
|d d…         }|r(|                     d¦  «                             d¦  «        }|                     d¦  «                             dd¦  «                             d¦  «        }|st          d|› d|› d	|› �¦  «         d S |r|› d|› �n|S )
Nr%   rè  r>  rJ   r?  r@  r<  r=  rä   )r2   r|   r�   r
   r’   rB  rç   )r+   r&   rD  r
  r¿   rC  s         r,   Ú_resolve_plugin_module_pathz)PluginManager._resolve_plugin_module_pathz  s  € Ý�;Ð$ "Ñ%Ô%×+Ò+Ñ-Ô-ˆØð 	Ø�4Ø—o’o cÑ*Ô*ˆØ�|Š|˜D #Ñ&Ô&ˆØ�=Š=˜ÑÔð 	Ø˜˜˜”9ˆDØð 	0Ø—;’;˜sÑ#Ô#×*Ò*¨3Ñ/Ô/ˆDØ�zŠz˜#‰Œ×&Ò& s¨CÑ0Ô0×6Ò6°sÑ;Ô;ˆØð 	ÝÐ_¨UÐ_Ð_ÀYÐ_Ð_ÐR]Ð_Ð_Ñ`Ô`Ð`Ø�4Ø(3Ð=�)Ð$Ð$˜dÐ$Ð$Ð$¸Ð=r.   Ú
path_valuec                 ó*  — t          |pd¦  «                             ¦   «         }|sdS |                     dt          j        ¦  «                             dt          j        ¦  «        }t          j                             |¦  «        rt          j                             |¦  «        S |                     d¦  «        r=t          j                             t          j         	                    ||¦  «        ¦  «        S t          j                             |¦  «        S )Nr%   r>  rJ   rè  )
r2   r|   r
   ré   ÚseprH   ÚisabsrÃ  r�   rê   )r+   r  rK  Ú	path_texts       r,   Ú_resolve_plugin_folder_pathz)PluginManager._resolve_plugin_folder_pathŠ  sÏ   € Ý˜
Ð( bÑ)Ô)×/Ò/Ñ1Ô1ˆ	Øð 	Ø�2Ø×%Ò% d­B¬FÑ3Ô3×;Ò;¸CÅÄÑHÔHˆ	ÝŒ7�=Š=˜Ñ#Ô#ð 	.Ý”7—?’? 9Ñ-Ô-Ð-Ø×Ò Ñ$Ô$ð 	IÝ”7—?’?¥2¤7§<¢<°¸YÑ#GÔ#GÑHÔHÐHÝŒw�Š˜yÑ)Ô)Ð)r.   rã   c                 óz  — t          |pg ¦  «        t          t          ¦  «        z  }g }|                      ¦   «         D �]|}||vrŒt          j                             | j        |¦  «        }|                      |¦  «        }|sŒE|                     t          g ¦  «        }|sŒc|  
                    ||                     t          d¦  «        ¦  «        }|  
                    ||                     t          d¦  «        ¦  «        }	|r|	s,t          d|› dt          › dt          › dt          › d�	¦  «         Œñg }
|D ]1}|                      ||d¬¦  «        }|�|
                     |¦  «         Œ2|
s�Œ+|                     t#          |||
||	¦  «        ¦  «         t          d	|                     d
¦  «        p|› d|› d�¦  «         �Œ~|S )Nr%   z[PluginManager] Plugin z) declares model handlers but is missing 'z' or 'z' in rè  zmodel handler©r
  z%[PluginManager] Loaded model plugin: r   ú (from ú))rÐ   rÑ  Údiscover_pluginsré   rH   rê   rë   r#  rv   r/  rP  r0  r1  rç   r  rJ  r£   r  )r+   rã   ÚenabledÚ
extensionsr&   r  r—  Úhandlersr  r  Úhandler_pathsr9  Úresolved_paths                r,   Ú discover_plugin_model_extensionsz.PluginManager.discover_plugin_model_extensions•  s   € Ý�oÐ+¨Ñ,Ô,­sµ>Ñ/BÔ/BÑBˆØˆ
Ø×.Ò.Ñ0Ô0ð 	rñ 	rˆIØ Ð'Ð'ØÝœ'Ÿ,š, tÔ'7¸ÑCÔCˆKØ×1Ò1°+Ñ>Ô>ˆHØð ØØ—|’|Õ$=¸rÑBÔBˆHØð ØØ ×<Ò<¸[È(Ï,Ê,ÕWpÐrtÑJuÔJuÑvÔvˆMØ ×<Ò<¸[È(Ï,Ê,ÕWpÐrtÑJuÔJuÑvÔvˆMØ ð ¨ð Ýð  A°	ð  Að  AÕd}ð  Að  Aõ  F_ð  Að  Aõ  f~ð  Að  Að  Añ  Bô  Bð  BØØˆMØ (ð 8ð 8�Ø $× @Ò @ÀÈLÐ`oÐ @Ñ pÔ p�Ø Ð,Ø!×(Ò(¨Ñ7Ô7Ð7øØ ð ÙØ×ÒÕ2°9¸kÈ=ÐZgÐivÑwÔwÑxÔxÐxÝÐp¸(¿,º,ÀvÑ:NÔ:NÐ:[ÐR[ÐpÐpÐdmÐpÐpÐpÑqÔqÐqÑqØÐr.   c                 ó†  — |sd S |                      t          g ¦  «        }|sd S g }|D ]1}|                      ||d¬¦  «        }|�|                     |¦  «         Œ2|sd S 	 ddlm} |                     | j        ||¦  «         d S # t          $ r3}	t          d|› d|	› �¦  «         t          j        ¦   «          Y d }	~	d S d }	~	ww xY w)Nzspatial upsampler handlerrR  r   )Úspatial_upsamplersz@[PluginManager] Error registering spatial upsamplers for plugin rä   )rv   r,  rG  r£   Úpostprocessingr]  Úregister_spatial_upsamplersrá   rï   rç   Ú	tracebackÚ	print_exc)
r+   r&   r—  Úfiles_locatorrX  rY  r9  rZ  Úupsampler_apirö   s
             r,   Ú#_register_plugin_spatial_upsamplersz1PluginManager._register_plugin_spatial_upsamplers²  s!  € Øð 	ØˆFØ—<’<Õ EÀrÑJÔJˆØð 	ØˆFØˆØ$ð 	4ð 	4ˆLØ ×;Ò;¸IÀ|Ð[vÐ;ÑwÔwˆMØÐ(Ø×$Ò$ ]Ñ3Ô3Ð3øØð 	ØˆFð	"ØJÐJÐJÐJÐJÐJØ×5Ò5°dÔ6HÈ-ÐYfÑgÔgÐgÐgÐgøÝð 	"ð 	"ð 	"ÝÐeÐU^ÐeÐeÐbcÐeÐeÑfÔfÐfÝÔÑ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!øøøøð	"øøøó   Á"B Â
C Â(B;Â;C c                 ó†  — |sd S |                      t          g ¦  «        }|sd S g }|D ]1}|                      ||d¬¦  «        }|�|                     |¦  «         Œ2|sd S 	 ddlm} |                     | j        ||¦  «         d S # t          $ r3}	t          d|› d|	› �¦  «         t          j        ¦   «          Y d }	~	d S d }	~	ww xY w)Nztemporal upsampler handlerrR  r   )Útemporal_upsamplerszA[PluginManager] Error registering temporal upsamplers for plugin rä   )rv   r-  rG  r£   r^  rg  Úregister_temporal_upsamplersrá   rï   rç   r`  ra  )
r+   r&   r—  rb  rX  rY  r9  rZ  Útemporal_upsampler_apirö   s
             r,   Ú$_register_plugin_temporal_upsamplersz2PluginManager._register_plugin_temporal_upsamplersÆ  s"  € Øð 	ØˆFØ—<’<Õ FÈÑKÔKˆØð 	ØˆFØˆØ$ð 	4ð 	4ˆLØ ×;Ò;¸IÀ|Ð[wÐ;ÑxÔxˆMØÐ(Ø×$Ò$ ]Ñ3Ô3Ð3øØð 	ØˆFð	"ØTÐTÐTÐTÐTÐTØ"×?Ò?ÀÔ@RÐTaÐcpÑqÔqÐqÐqÐqøÝð 	"ð 	"ð 	"ÝÐfÐV_ÐfÐfÐcdÐfÐfÑgÔgÐgÝÔÑ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!øøøøð	"øøøre  c                 ó†  — |sd S |                      t          g ¦  «        }|sd S g }|D ]1}|                      ||d¬¦  «        }|�|                     |¦  «         Œ2|sd S 	 ddlm} |                     | j        ||¦  «         d S # t          $ r3}	t          d|› d|	› �¦  «         t          j        ¦   «          Y d }	~	d S d }	~	ww xY w)Nzaudio processorrR  r   )r   z>[PluginManager] Error registering audio processors for plugin rä   )rv   r.  rG  r£   r^  r   Úregister_audio_processorsrá   rï   rç   r`  ra  )
r+   r&   r—  rb  rX  rY  r9  rZ  Úaudio_processor_apirö   s
             r,   Ú!_register_plugin_audio_processorsz/PluginManager._register_plugin_audio_processorsÚ  s!  € Øð 	ØˆFØ—<’<Õ ;¸RÑ@Ô@ˆØð 	ØˆFØˆØ$ð 	4ð 	4ˆLØ ×;Ò;¸IÀ|Ð[lÐ;ÑmÔmˆMØÐ(Ø×$Ò$ ]Ñ3Ô3Ð3øØð 	ØˆFð	"ØNÐNÐNÐNÐNÐNØ×9Ò9¸$Ô:LÈmÐ]jÑkÔkÐkÐkÐkøÝð 	"ð 	"ð 	"ÝÐcÐS\ÐcÐcÐ`aÐcÐcÑdÔdÐdÝÔÑ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!øøøøð	"øøøre  c                 óÜ  — t          |¦  «        }dD ]´}|                     |¦  «        }|dk    rPt          |t          ¦  «        rt	          |¦  «        ||<   n'|€d||<   nt	          t          |¦  «        ¦  «        ||<   Œmt          |t          ¦  «        r|                     ¦   «         ||<   Œš|€d||<   Œ¢t          |¦  «        ||<   Œµ|                     d¦  «        }t          |                     d¦  «        ¦  «        s3t          |¦  «        r$t          |¦  «                             ¦   «         |d<   |                     dd ¦  «         t          |                     d¦  «        ¦  «        |d<   |S )N)r   r(  rž   r    r~   rÂ   r)  Ú
last_checkr~   r%   r*  r)  r  )	rl   rv   r{   r2   r�   r|   r}   r%  rÕ   )r+   r  rï  rŸ  ry   r2  s         r,   Ú_normalize_catalog_entryz&PluginManager._normalize_catalog_entryî  s^  € Ý�W‘”ˆØnð 	(ð 	(ˆCØ—I’I˜c‘N”NˆEØ�eŠ|ˆ|Ý˜e¥SÑ)Ô)ð BÝ!5°eÑ!<Ô!<�E˜#‘J�JØ�]Ø!#�E˜#‘J�Jå!5µc¸%±j´jÑ!AÔ!A�E˜#‘JØÝ˜%¥Ñ%Ô%ð (Ø"Ÿ[š[™]œ]��c‘
�
Ø�Ø��c‘
�
å  ™ZœZ��c‘
�
ØŸš ?Ñ3Ô3ˆÝ˜%Ÿ)š)Ð$4Ñ5Ô5Ñ6Ô6ð 	B½:ÀnÑ;UÔ;Uð 	BÝ&)¨.Ñ&9Ô&9×&?Ò&?Ñ&AÔ&AˆEÐ"Ñ#Ø�	Š	�/ 4Ñ(Ô(Ð(Ý.¨u¯yªy¸Ñ/@Ô/@ÑAÔAˆˆf‰Øˆr.   rÖ   r×   c                 ó0  — |rt          |¦  «        ni }|s|S |                     ¦   «         D ]i\  }}|dk    r't          |                     |¦  «        |¦  «        ||<   Œ2t	          |                     |¦  «        ¦  «        rŒUt	          |¦  «        r|||<   Œj|S )Nr  )rl   rè   rÜ   rv   r}   )r+   rÖ   r×   rõ   rŸ  ry   s         r,   Ú_merge_entry_fieldsz!PluginManager._merge_entry_fields  s¥   € Ø")Ð1•�g‘”�¨rˆØð 	ØˆMØ#Ÿ/š/Ñ+Ô+ð 	$ð 	$‰JˆC�Ø�fŠ}ˆ}Ý0°·²¸C±´À%ÑHÔH��s‘ØÝ˜&Ÿ*š* S™/œ/Ñ*Ô*ð ØÝ˜%Ñ Ô ð $Ø#��s‘øØˆr.   Úbase_entriesÚlocal_entriesc                 ó@  — i }i }|D ]U}|                      d¦  «        p"t          |                      dd¦  «        ¦  «        }|sŒ=|                      |¦  «        ||<   ŒV|D ]U}|                      d¦  «        p"t          |                      dd¦  «        ¦  «        }|sŒ=|                      |¦  «        ||<   ŒVi }t          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        z  }|D �] }|                      |¦  «        }	|                      |¦  «        }
|	rê|
rèt          |
|	¦  «        }|dk    rIt          |
¦  «        }t          |
                      d¦  «        |	                      d¦  «        ¦  «        |d<   n‚t          |	¦  «        }t          |	                      d¦  «        |
                      d¦  «        ¦  «        |d<   t          |
                      d¦  «        ¦  «        r|
                      d¦  «        |d<   |||<   �Œ|	p|
||<   �Œ"|S )Nr	  r~   r%   r   r  rp  )	rv   rÌ   rq  rÐ   ÚkeysrÅ   rl   rÜ   r}   )r+   rt  ru  Úbase_mapÚ	local_maprï  r&   rÛ   Úall_idsÚ
base_entryÚlocal_entryÚ
comparisonÚmerged_entrys                r,   Ú_merge_catalog_entriesz$PluginManager._merge_catalog_entries  s/  € ð
 /1ˆØ/1ˆ	Ø!ð 	Gð 	GˆEØŸ	š	 $™œÐSÕ+=¸e¿iºiÈÈrÑ>RÔ>RÑ+SÔ+SˆIØð ØØ"&×"?Ò"?ÀÑ"FÔ"FˆH�YÑÐØ"ð 	Hð 	HˆEØŸ	š	 $™œÐSÕ+=¸e¿iºiÈÈrÑ>RÔ>RÑ+SÔ+SˆIØð ØØ#'×#@Ò#@ÀÑ#GÔ#GˆI�iÑ Ð à,.ˆÝ�h—m’m‘o”oÑ&Ô&­¨Y¯^ª^Ñ-=Ô-=Ñ)>Ô)>Ñ>ˆØ ð 	>ñ 	>ˆIØ!Ÿš iÑ0Ô0ˆJØ#Ÿ-š-¨	Ñ2Ô2ˆKØð >˜kð >Ý5°kÀ:ÑNÔN�
Ø ’>�>Ý#'¨Ñ#4Ô#4�LÝ+=¸k¿oºoÈfÑ>UÔ>UÐWa×WeÒWeÐflÑWmÔWmÑ+nÔ+n�L Ñ(Ð(å#'¨
Ñ#3Ô#3�LÝ+=¸j¿nºnÈVÑ>TÔ>TÐVa×VeÒVeÐflÑVmÔVmÑ+nÔ+n�L Ñ(Ý! +§/¢/°,Ñ"?Ô"?Ñ@Ô@ð SØ5@·_²_À\Ñ5RÔ5R˜ \Ñ2Ø$0��yÑ!Ñ!à$.Ð$=°+��yÑ!Ñ!Øˆr.   c                 ó*  ‡ — 	 t          j        t          d¬¦  «        }|                     ¦   «          |                     ¦   «         }t          |t          ¦  «        rˆ fd„|D ¦   «         S n)# t          $ r}t          d|› �¦  «         Y d }~nd }~ww xY wg S )Né
   ©Útimeoutc                 ód   •— g | ],}t          |t          ¦  «        ¯‰                     |¦  «        ‘Œ-S r6   ©r{   rl   rq  ©r†   rï  r+   s     €r,   rˆ   z?PluginManager._fetch_remote_catalog_entries.<locals>.<listcomp>A  s9   ø€ ÐmÐmÐmÀÕU_Ð`eÕgkÑUlÔUlÐm˜×5Ò5°eÑ<Ô<ÐmÐmÐmr.   z8[PluginManager] Could not fetch community plugins info: )	Úrequestsrv   ÚCOMMUNITY_PLUGINS_URLÚraise_for_statusr  r{   rÏ   rï   rç   )r+   Úresponser  rö   s   `   r,   Ú_fetch_remote_catalog_entriesz+PluginManager._fetch_remote_catalog_entries;  s¾   ø€ ð	RÝ”|Õ$9À2ÐFÑFÔFˆHØ×%Ò%Ñ'Ô'Ð'Ø—m’m‘o”oˆGÝ˜'¥4Ñ(Ô(ð nØmÐmÐmÐmÈ'ÐmÑmÔmÐmðnøåð 	Rð 	Rð 	RÝÐPÈQÐPÐPÑQÔQÐQÐQÐQÐQÐQÐQøøøøð	Røøøàˆ	s   ƒA%A* Á*
BÁ4BÂBÚ
use_remotec                 óŽ   ‡ — d }|s=‰                       ‰ j        ¦  «        }t          |t          ¦  «        rˆ fd„|D ¦   «         }|pg S )Nc                 ód   •— g | ],}t          |t          ¦  «        ¯‰                     |¦  «        ‘Œ-S r6   r…  r†  s     €r,   rˆ   z6PluginManager.load_catalog_entries.<locals>.<listcomp>K  s9   ø€ ÐpÐpÐpÀEÕXbÐchÕjnÑXoÔXoÐp˜4×8Ò8¸Ñ?Ô?ÐpÐpÐpr.   )r  rÇ  r{   rÏ   )r+   rŒ  Úentriesr  s   `   r,   Úload_catalog_entriesz"PluginManager.load_catalog_entriesF  s]   ø€ ØˆØð 	qØ×*Ò*¨4Ô+<Ñ=Ô=ˆGÝ˜'¥4Ñ(Ô(ð qØpÐpÐpÐpÈWÐpÑpÔp�Øˆ}˜"Ðr.   c                 ó‚   ‡ — ‰                       ‰ j        ¦  «        }t          |t          ¦  «        rˆ fd„|D ¦   «         S g S )Nc                 ód   •— g | ],}t          |t          ¦  «        ¯‰                     |¦  «        ‘Œ-S r6   r…  r†  s     €r,   rˆ   z<PluginManager.load_local_catalog_entries.<locals>.<listcomp>Q  s9   ø€ ÐiÐiÐi¸UÕQ[Ð\aÕcgÑQhÔQhÐi�D×1Ò1°%Ñ8Ô8ÐiÐiÐir.   )r  rÉ  r{   rÏ   )r+   r  s   ` r,   Úload_local_catalog_entriesz(PluginManager.load_local_catalog_entriesN  sK   ø€ Ø×&Ò& tÔ'>Ñ?Ô?ˆÝ�g�tÑ$Ô$ð 	jØiÐiÐiÐiÀgÐiÑiÔiÐiØˆ	r.   c                 ó‚   — |                       |¬¦  «        }|                      ¦   «         }|                      ||¦  «        S )N©rŒ  )r�  r“  r  )r+   rŒ  rt  ru  s       r,   Úget_merged_catalog_entriesz(PluginManager.get_merged_catalog_entriesT  s?   € Ø×0Ò0¸JÐ0ÑGÔGˆØ×7Ò7Ñ9Ô9ˆØ×*Ò*¨<¸ÑGÔGÐGr.   r~   c                 óR   — t          |¦  «        }|sdS |\  }}d|› d|› dt          › �S )Nr%   r„   rJ   z
/raw/HEAD/)rš   r  )r+   r~   rœ   r˜   r™   s        r,   Ú_build_plugin_json_urlz$PluginManager._build_plugin_json_urlY  sD   € Ý& sÑ+Ô+ˆ	Øð 	Ø�2Ø‰ˆˆtØW UÐWÐW¨TÐWÐWÕ=UÐWÐWÐWr.   FÚquietc           	      ój  — |                       |¦  «        }|sd S 	 t          j        |d¬¦  «        }|j        dk    rd S |                     ¦   «         }t          |t          ¦  «        sd S |                      |¦  «        S # t          $ r*}|st          dt          › d|› d|› �¦  «         Y d }~d S d }~ww xY w)Nr�  r‚  éÈ   z [PluginManager] Could not fetch z for rä   )r˜  r‡  rv   Ústatus_coder  r{   rl   r  rï   rç   r  )r+   r~   r™  Úplugin_json_urlrŠ  r  rö   s          r,   Ú_fetch_plugin_jsonz PluginManager._fetch_plugin_json`  så   € Ø×5Ò5°cÑ:Ô:ˆØð 	Ø�4ð	Ý”| O¸RÐ@Ñ@Ô@ˆHØÔ# sÒ*Ð*Ø�tØ—m’m‘o”oˆGÝ˜g¥tÑ,Ô,ð Ø�tØ×2Ò2°7Ñ;Ô;Ð;øÝð 	ð 	ð 	Øð dÝÐbÕ9QÐbÐbÐX[ÐbÐbÐ_`ÐbÐbÑcÔcÐcØ�4�4�4�4�4øøøøð	øøøs"   ›!A> ¾)A> Á)A> Á>
B2ÂB-Â-B2c                 ól   — i }dD ]}|                      |d¦  «        ||<   Œ|                      |¦  «        S )N)r   r(  rž   r    r  rÂ   r)  r~   r%   ©rv   rq  )r+   r—  rï  rŸ  s       r,   Ú_metadata_to_catalog_entryz(PluginManager._metadata_to_catalog_entryq  sC   € ØˆØhð 	/ð 	/ˆCØ!Ÿš c¨2Ñ.Ô.ˆE�#‰JˆJØ×,Ò,¨UÑ3Ô3Ð3r.   rï  c                 ól   — i }dD ]}|                      |d¦  «        ||<   Œ|                      |¦  «        S )N©r   r(  rž   r    r  r~   rÂ   r)  r%   r   )r+   rï  r  rŸ  s       r,   Ú_extract_catalog_metadataz'PluginManager._extract_catalog_metadataw  sC   € ØˆØhð 	.ð 	.ˆCØ Ÿ9š9 S¨"Ñ-Ô-ˆG�C‰LˆLØ×,Ò,¨WÑ5Ô5Ð5r.   c                 ó  — |                       |¬¦  «        }t          |t          ¦  «        r&|                     ¦   «                              ¦   «         nd}t          |t          ¦  «        r!t          |¦  «                             ¦   «         nd}|D ]ó}|                     dd¦  «        }|                     d¦  «        pt          |¦  «        }	t          |	t          ¦  «        r&|	                     ¦   «                              ¦   «         nd}	t          |t          ¦  «        r!t          |¦  «                             ¦   «         nd}
|r|	r|	|k    r|                      |¦  «        c S |r|
r|
|k    r|                      |¦  «        c S Œôd S )Nr•  r%   r~   r	  )	r�  r{   r2   r|   r�   r�   rv   rÌ   rq  )r+   r&   r~   rŒ  r�  Ú	target_idÚ
target_urlrï  Ú	entry_urlÚentry_idÚentry_url_norms              r,   Ú_find_catalog_entryz!PluginManager._find_catalog_entry}  sƒ  € Ø×+Ò+°zÐ+ÑBÔBˆÝ1;¸IÅsÑ1KÔ1KÐS�I—O’OÑ%Ô%×+Ò+Ñ-Ô-Ð-ÐQSˆ	Ý:DÀSÍ#Ñ:NÔ:NÐVÕ)¨#Ñ.Ô.×4Ò4Ñ6Ô6Ð6ÐTVˆ
Øð 	<ð 	<ˆEØŸ	š	 %¨Ñ,Ô,ˆIØ—y’y ‘”ÐGÕ*<¸YÑ*GÔ*GˆHÝ3=¸hÍÑ3LÔ3LÐT�x—~’~Ñ'Ô'×-Ò-Ñ/Ô/Ð/ÐRTˆHÝHRÐS\Õ^aÑHbÔHbÐjÕ1°)Ñ<Ô<×BÒBÑDÔDÐDÐhjˆNØð <˜Xð <¨(°iÒ*?Ð*?Ø×4Ò4°UÑ;Ô;Ð;Ð;Ð;Øð <˜nð <°À:Ò1MÐ1MØ×4Ò4°UÑ;Ô;Ð;Ð;Ð;øØˆtr.   c                 ó  — |sdS t           j                             |d¦  «        }t           j                             |¦  «        sdS 	 t	          j        |¦  «        }|j        r|j        j        j        S n# t          $ r Y dS w xY wdS )Nr%   rŠ   )
ré   rH   rê   rì   ÚgitÚRepoÚremotesÚoriginr~   rï   )r+   r  Úgit_dirr™   s       r,   Ú_get_git_remote_urlz!PluginManager._get_git_remote_urlŒ  s—   € Øð 	Ø�2Ý”'—,’,˜{¨FÑ3Ô3ˆÝŒw�}Š}˜WÑ%Ô%ð 	Ø�2ð	Ý”8˜KÑ(Ô(ˆDØŒ|ð /Ø”|Ô*Ô.Ð.ð/øåð 	ð 	ð 	Ø�2�2ð	øøøàˆrs   Á+A4 Á4
BÂBÚinstalled_onlyc           	      óR  — |                       d¬¦  «        }|                      ¦   «         }|                      ||¦  «        }i }|D ]T}|                     d¦  «        p"t	          |                     dd¦  «        ¦  «        }|r|                      |¦  «        ||<   ŒUdt          t          t          f         dt          t          t          f         fd„}	g }
|�rd	„ |  	                    ¦   «         D ¦   «         }|D ]ì}|                     dd¦  «        }|sŒ|                     |i ¦  «        }|  
                    |                     d
d¦  «        ¦  «        }t          |                     d¦  «        p|                     d¦  «        p|pd¦  «        }|r"t	          |¦  «        |k    rt          |¦  «        }t          |¦  «        sŒÉ|
                     ||| |	|¦  «        dœ¦  «         Œính|                     ¦   «         D ]S\  }}t          |                     d¦  «        pd¦  «        }t          |¦  «        sŒ9|
                     |||i dœ¦  «         ŒTd}d}d}|
D �]Ž}|d         }|d         }|                     di ¦  «        }|                     di ¦  «        }|dz  }|                      |d¬¦  «        }|sŒ^|                      |¦  «        }t          |¦  «        r=|                     dd¦  «        }t          |¦  «        rt	          |¦  «        |k    r||d<   |                      ||¦  «        }|r|                      ||¦  «        }t$          j                             ¦   «                              d¬¦  «        |d<   |                      |¦  «        }|                     |i ¦  «        }|rt+          ||¦  «        dk    r|dz  }n|rt+          ||¦  «        dk    r|dz  }|||<   |dz  }�Œ�|dk    r:|                      | j        t1          |                     ¦   «         ¦  «        ¦  «         |||dœS )NFr•  r	  r~   r%   Úinfor'   c                 óZ  — |                       dd¦  «        |                       dd¦  «        |                       dd¦  «        |                       dd¦  «        |                       ddg¦  «        |                       dd¦  «        |                       d	d¦  «        |                       d
d¦  «        dœS )Nr   r%   r(  rž   r    r  r   r~   rÂ   r)  r£  ©rv   )rµ  s    r,   Ú_info_to_entryz5PluginManager.refresh_catalog.<locals>._info_to_entry¤  sœ   € àŸš ¨Ñ,Ô,ØŸ(š( 8¨RÑ0Ô0ØŸ8š8 I¨rÑ2Ô2Ø#Ÿxšx¨°rÑ:Ô:ØŸš ¨%¨Ñ1Ô1Ø—x’x  rÑ*Ô*ØŸš ¨Ñ,Ô,Ø"&§(¢(Ð+;¸RÑ"@Ô"@ð	ð 	ð 	r.   c                 ó<   — g | ]}|                      d ¦  «        °|‘ŒS )Úsystemr·  )r†   rµ  s     r,   rˆ   z1PluginManager.refresh_catalog.<locals>.<listcomp>²  s-   € Ð dÐ dÐ d¨$ÐQU×QYÒQYÐZbÑQcÔQcÐ d Ð dÐ dÐ dr.   rH   )r	  r~   r{  Ú
info_entryr   r{  r»  r�   T)r™  Úseconds©Útimespecrp  )ÚcheckedÚupdatedÚupdates_available)r�  r“  r  rv   rÌ   rq  r   r2   r   Úget_plugins_infor²  r�   r}   r£   rè   rž  r¡  rs  r¼   ÚnowÚ	isoformatrÅ   r  rÉ  rÏ   rg   )r+   r³  rŒ  rt  ru  Úmerged_catalogry  rï  r&   r¸  ÚtargetsÚinstalled_pluginsrµ  r{  Úgit_urlr~   r¿  rÀ  rÁ  Útargetr»  r—  Úcatalog_entryÚcatalog_entry_urlÚexisting_entrys                            r,   Úrefresh_catalogzPluginManager.refresh_catalogš  s£  € Ø×0Ò0¸EÐ0ÑBÔBˆØ×7Ò7Ñ9Ô9ˆØ×4Ò4°\À=ÑQÔQˆØ/1ˆ	Ø"ð 	Lð 	LˆEØŸ	š	 $™œÐSÕ+=¸e¿iºiÈÈrÑ>RÔ>RÑ+SÔ+SˆIØð LØ'+×'DÒ'DÀUÑ'KÔ'K�	˜)Ñ$øð
	¥¥c­3 h¤ð 
	µD½½c¸´Nð 
	ð 
	ð 
	ð 
	ð )+ˆØñ 	eØ dÐ d°$×2GÒ2GÑ2IÔ2IÐ dÑ dÔ dÐØ)ð ð �Ø ŸHšH T¨2Ñ.Ô.�	Ø ð ØØ+×/Ò/°	¸2Ñ>Ô>�
Ø×2Ò2°4·8²8¸FÀBÑ3GÔ3GÑHÔH�Ý*¨:¯>ª>¸%Ñ+@Ô+@Ð+dÀDÇHÂHÈUÁOÄOÐ+dÐW^Ð+dÐbdÑeÔe�Øð 8Õ1°'Ñ:Ô:¸iÒGÐGÝ.¨wÑ7Ô7�CÝ! #‘”ð ØØ—’à'Ø"Ø&0Ø&4 n°TÑ&:Ô&:ð	ð ñô ð ð ðð( %3×$8Ò$8Ñ$:Ô$:ð eð eÑ �	˜5Ý*¨5¯9ª9°UÑ+;Ô+;Ð+A¸rÑBÔB�Ý! #‘”ð ØØ—’ i¸È5Ð`bÐcÐcÑdÔdÐdÐdàˆØˆØÐØð 	ñ 	ˆFØ˜tœˆIØ˜”-ˆCØŸš L°"Ñ5Ô5ˆJØŸš L°"Ñ5Ô5ˆJØ�q‰LˆGØ×.Ò.¨s¸$Ð.Ñ?Ô?ˆHØð ØØ ×;Ò;¸HÑEÔEˆMÝ˜#‰Œð /Ø$1×$5Ò$5°e¸RÑ$@Ô$@Ð!Ý!Ð"3Ñ4Ô4ð /Õ8JÐK\Ñ8]Ô8]ÐajÒ8jÐ8jØ+.�M %Ñ(Ø ×4Ò4°]ÀJÑOÔOˆMØð TØ $× 8Ò 8¸È
Ñ SÔ S�Ý*2Ô*;×*?Ò*?Ñ*AÔ*A×*KÒ*KÐU^Ð*KÑ*_Ô*_ˆM˜,Ñ'Ø ×9Ò9¸-ÑHÔHˆMØ&Ÿ]š]¨9°bÑ9Ô9ˆNØð +Ý+¨M¸:ÑFÔFÈÒJÐJØ%¨Ñ*Ð%øØð +Ý+¨M¸>ÑJÔJÈQÒNÐNØ%¨Ñ*Ð%Ø#0ˆI�iÑ Ø�q‰LˆG‰Gà�QŠ;ˆ;Ø×!Ò! $Ô"9½4À	×@PÒ@PÑ@RÔ@RÑ;SÔ;SÑTÔTÐTØ"¨wÐM^Ð_Ð_Ð_r.   c                 ó–  ‡— ‰sdS t          |¦  «        }t          j                             | j        ‰¦  «        }t          j                             |¦  «        r|                      |¦  «        nd }|d u}|s(t          |¦  «        r|                      |¦  «        }|d u}|sÜt          ˆfd„|  
                    ¦   «         D ¦   «         d ¦  «        }|r¬|                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        |                     dd	g¦  «        |                     d
d¦  «        |                     dd¦  «        |                     dd¦  «        dœ}|sdS |                      |¦  «        }t          |¦  «        r=|                     d
d¦  «        }t          |¦  «        rt          |¦  «        ‰k    r||d
<   |                      d¬¦  «        }	|                      ||	                     ‰i ¦  «        ¦  «        }|                      ‰|d¬¦  «        }
|
r|                      ||
¦  «        }|r5t"          j                             ¦   «                              d¬¦  «        |d<   |                      |¦  «        }|                      ¦   «         }i }|D ]T}|                     d¦  «        p"t          |                     d
d¦  «        ¦  «        }|r|                      |¦  «        ||<   ŒU||‰<   |                      | j        t1          |                     ¦   «         ¦  «        ¦  «         dS )NFc              3   óN   •K  — | ]}|                      d ¦  «        ‰k    ¯|V — Œ dS )r	  Nr·  )r†   rµ  r&   s     €r,   r_  z7PluginManager.record_plugin_metadata.<locals>.<genexpr>ü  s9   øè è € ÐhÐh¨ÈDÏHÊHÐUYÉNÌNÐ^gÒLgÐLg ÐLgÐLgÐLgÐLgÐhÐhr.   r   r%   rž   r    r(  r  r   r~   rÂ   r)  )r   rž   r    r(  r  r~   rÂ   r)  r•  )r~   rŒ  r¼  r½  rp  r	  T)r�   ré   rH   rê   rë   rì   r#  r}   rž  ÚnextrÂ  rv   r¡  rÌ   r–  rs  r«  r¼   rÃ  rÄ  rq  r“  r  rÉ  rÏ   rg   )r+   r&   r~   r  r—  Úplugin_json_foundÚplugin_inforÊ  rË  rÅ  r{  ru  ry  rï  Úexisting_ids    `             r,   Úrecord_plugin_metadataz$PluginManager.record_plugin_metadatañ  sZ  ø€ Øð 	Ø�5Ý" 3Ñ'Ô'ˆÝ”g—l’l 4Ô#3°YÑ?Ô?ˆÝ>@¼g¿mºmÈKÑ>XÔ>XÐb�4×-Ò-¨kÑ:Ô:Ð:Ð^bˆØ$¨DÐ0ÐØð 	5�J s™OœOð 	5Ø×.Ò.¨sÑ3Ô3ˆHØ (°Ð 4ÐØð 	ÝÐhÐhÐhÐh°×1FÒ1FÑ1HÔ1HÐhÑhÔhÐjnÑoÔoˆKØð 
à'ŸOšO¨F°BÑ7Ô7Ø*Ÿš¨y¸"Ñ=Ô=Ø#.§?¢?°=À"Ñ#EÔ#EØ)Ÿošo¨h¸Ñ;Ô;Ø'ŸOšO¨F°U°GÑ<Ô<Ø&Ÿ?š?¨5°"Ñ5Ô5Ø'ŸOšO¨F°BÑ7Ô7Ø&1§o¢oÐ6FÈÑ&KÔ&Kð	ð 	�ð ð 	Ø�5à×7Ò7¸ÑAÔAˆÝ�c‰?Œ?ð 	+Ø -× 1Ò 1°%¸Ñ <Ô <ÐÝÐ/Ñ0Ô0ð +Õ4FÐGXÑ4YÔ4YÐ]fÒ4fÐ4fØ'*�˜eÑ$à×8Ò8ÀEÐ8ÑJÔJˆØ×0Ò0°À×@RÒ@RÐS\Ð^`Ñ@aÔ@aÑbÔbˆØ×-Ò-¨i¸SÈUÐ-ÑSÔSˆ
Øð 	PØ ×4Ò4°]ÀJÑOÔOˆMØð 	`Ý*2Ô*;×*?Ò*?Ñ*AÔ*A×*KÒ*KÐU^Ð*KÑ*_Ô*_ˆM˜,Ñ'Ø×5Ò5°mÑDÔDˆà×7Ò7Ñ9Ô9ˆØ/1ˆ	Ø"ð 	Nð 	NˆEØŸ)š) D™/œ/ÐUÕ-?ÀÇ	Â	È%ÐQSÑ@TÔ@TÑ-UÔ-UˆKØð NØ)-×)FÒ)FÀuÑ)MÔ)M�	˜+Ñ&øØ,ˆ	�)ÑØ×Ò˜dÔ5µt¸I×<LÒ<LÑ<NÔ<NÑ7OÔ7OÑPÔPÐPØˆtr.   c                 ó  — |                       ¦   «         }|sdS |                      d¬¦  «        }|                      ||¦  «        }g }|                     ¦   «         D ]-}|                     dd ¦  «         |                     |¦  «         Œ.|                     d„ ¬¦  «         |                      | j        |¦  «         	 t          j
        | j        ¦  «         n/# t          $ r Y n#t          $ r}d| j        › d|› �cY d }~S d }~ww xY wd	S )
Nz)[Info] No local catalog entries to merge.Fr•  rp  c                 ó.   — |                       dd¦  «        S )Nr   r%   r·  )rÔ   s    r,   ú<lambda>z3PluginManager.merge_local_catalog.<locals>.<lambda>.  s   € ¨$¯(ª(°6¸2Ñ*>Ô*>€ r.   ©rŸ  z/[Warning] Catalog merged, but failed to remove rä   z5[Success] Catalog merged and local overrides removed.)r“  r�  r  rg   r%  r£   Úsortr  rÇ  ré   rî   rÉ  r  rï   )r+   ru  rt  rÛ   Úmerged_listrï  rö   s          r,   Úmerge_local_catalogz!PluginManager.merge_local_catalog$  sL  € Ø×7Ò7Ñ9Ô9ˆØð 	?Ø>Ð>Ø×0Ò0¸EÐ0ÑBÔBˆØ×,Ò,¨\¸=ÑIÔIˆØˆØ—]’]‘_”_ð 	&ð 	&ˆEØ�IŠI�l DÑ)Ô)Ð)Ø×Ò˜uÑ%Ô%Ð%Ð%Ø×ÒÐ>Ð>ÐÑ?Ô?Ð?Ø×Ò˜dÔ/°Ñ=Ô=Ð=ð	dÝŒI�dÔ-Ñ.Ô.Ð.Ð.øÝ ð 	ð 	ð 	ØˆDÝð 	dð 	dð 	dØcÀTÔE\ÐcÐcÐ`aÐcÐcÐcÐcÐcÐcÐcÐcøøøøð	døøøàFÐFs$   Â<C Ã
DÃ"	DÃ+C=Ã7DÃ=Dc                 óª  — g }|                       ¦   «         D �]#}t          j                             | j        |¦  «        }|t
          v }||ddddgddd||ddœ}|                      |¦  «        }|�r2|                     d|d         ¦  «        |d<   |                     d|d         ¦  «        |d<   |                     d	|d	         ¦  «        |d	<   |                     d
|d
         ¦  «        |d
<   t          |                     d|d         ¦  «        ¦  «        |d<   |                     d|d         ¦  «        |d<   |                     d|d         ¦  «        |d<   |                     d|d         ¦  «        |d<   t          |                     d|d         ¦  «        ¦  «        |d<   nü	 t          j        |› d�¦  «        }t          j        |t          j        ¦  «        D ]—\  }}	t          |	t           ¦  «        r}|	t           k    rr |	¦   «         }
|
j        |d<   |
j        |d<   |
j        |d	<   t          t)          |
d|d         ¦  «        ¦  «        |d<   t          t)          |
dd¦  «        ¦  «        |d<    nŒ˜n,# t*          $ r}t-          d|› d|› �¦  «         Y d }~nd }~ww xY w|rd|d<   |d         t.          v rd|d<   |sj|                      d¬¦  «        }|                     |                     dd¦  «        ¦  «        }|r)|                      ||                      |¦  «        ¦  «        }|                     |¦  «         �Œ%|                     d„ ¬¦  «         |S )NzN/Ar  r%   r   T)r	  r   rž   r    r(  r  r~   rÂ   r)  rH   rº  r  r   rž   r    r(  r  r~   rÂ   r)  r  ú.pluginz#Could not load metadata for plugin rä   Fr	  r•  c                 ó$   — | d          | d         fS )Nrº  r   r6   )Úps    r,   r×  z0PluginManager.get_plugins_info.<locals>.<lambda>o  s   € ¨Q¨x¬[¨¸!¸F¼)Ð(D€ r.   rØ  )rU  ré   rH   rê   rë   rÑ  r#  rv   rÕ   r5   Ú	importlibÚimport_modulerk  Ú
getmembersÚisclassÚ
issubclassr  r   rž   r    rz  rï   rç   rÒ  r–  rs  r¤  r£   rÙ  )r+   Úplugins_infoÚdir_namer  r4  rµ  r—  rH  r   ÚobjÚinstancerö   rÅ  rÊ  s                 r,   rÂ  zPluginManager.get_plugins_info8  s�  € ØˆØ×-Ò-Ñ/Ô/ð 3	&ñ 3	&ˆHÝœ'Ÿ,š, tÔ'7¸ÑBÔBˆKØ ¥NÐ2ˆIàØ Ø Ø9ØØ˜ØØØ"$Ø#Ø#Ø!%ðð ˆDð ×1Ò1°+Ñ>Ô>ˆHØñ QØ'Ÿ|š|¨F°D¸´LÑAÔA��V‘Ø"*§,¢,¨y¸$¸y¼/Ñ"JÔ"J��Y‘Ø&.§l¢l°=À$À}ÔBUÑ&VÔ&V��]Ñ#Ø!)§¢¨h¸¸X¼Ñ!GÔ!G��X‘Ý5°h·l²lÀ6È4ÐPVÌ<Ñ6XÔ6XÑYÔY��V‘Ø&Ÿlšl¨5°$°u´+Ñ>Ô>��U‘Ø'Ÿ|š|¨F°D¸´LÑAÔA��V‘Ø)1¯ªÐ6FÈÐM]ÔH^Ñ)_Ô)_�Ð%Ñ&Ý(,¨X¯\ª\¸/È4ÐP_ÔK`Ñ-aÔ-aÑ(bÔ(b��_Ñ%Ð%ðQÝ&Ô4¸Ð5IÐ5IÐ5IÑJÔJ�FÝ%,Ô%7¸ÅÄÑ%PÔ%Pð "ð "™	˜˜cÝ% c­<Ñ8Ô8ð "¸SÅLÒ=PÐ=PØ'* s¡u¤u˜HØ+3¬=˜D ™LØ.6Ô.>˜D ™OØ2:Ô2F˜D Ñ/Ý+AÅ'È(ÐTZÐ\`ÐagÔ\hÑBiÔBiÑ+jÔ+j˜D ™LÝ48½ÀÈ?Ð\`Ñ9aÔ9aÑ4bÔ4b˜D Ñ1Ø!˜EøøøÝ ð Qð Qð QÝÐOÀÐOÐOÈAÐOÐOÑPÔPÐPÐPÐPÐPÐPÐPøøøøðQøøøàð .Ø(-��_Ñ%Ø�DŒz�_Ð,Ð,Ø(-��_Ñ%Øð iØ!%×!@Ò!@ÈEÐ!@Ñ!RÔ!R�Ø .× 2Ò 2°4·8²8¸DÀ"Ñ3EÔ3EÑ FÔ F�Ø ð iØ×3Ò3°D¸$×:XÒ:XÐYfÑ:gÔ:gÑhÔh�DØ×Ò Ñ%Ô%Ð%Ñ%à×ÒÐDÐDÐÑEÔEÐEØÐs   Æ#CI2É2
JÉ<JÊJc                 óš   — t          j        |t           j        ¦  «        s,t          j        |t          j        ¦  «          ||¦  «         d S ‚ re   )ré   ÚaccessÚW_OKÚchmodr  ÚS_IWRITE)r+   ÚfuncrH   Úexc_infos       r,   rõ  zPluginManager._remove_readonlyr  s@   € ÝŒy˜�rœwÑ'Ô'ð 	ÝŒH�T�4œ=Ñ)Ô)Ð)ØˆD�‰JŒJˆJˆJˆJàr.   c                 ó   — |t           v rdS |t          v rdS 	 |                      ¦   «         D ]@}|                     d¦  «        |k    r%t	          |                     dd¦  «        ¦  «        c S ŒAn# t
          $ r Y nw xY wdS )NFr	  r  T)rÑ  rÒ  rÂ  rv   r5   rï   )r+   r&   rµ  s      r,   Ú_is_plugin_uninstallablez&PluginManager._is_plugin_uninstallabley  s­   € Ø�Ð&Ð&Ø�5Ø�Ð'Ð'Ø�5ð	Ø×-Ò-Ñ/Ô/ð Að A�Ø—8’8˜D‘>”> YÒ.Ð.Ý §¢¨¸$Ñ ?Ô ?Ñ@Ô@Ð@Ð@Ð@ð /ðAøõ ð 	ð 	ð 	ØˆDð	øøøàˆts   ˜AA. Á,A. Á.
A;Á:A;c                 óÈ  — |sdS |t           v rd|› d�S |                      |¦  «        sd|› d�S t          j                             | j        |¦  «        }t          j                             |¦  «        sd|› d�S |                      |¦  «         	 t          j	        || j
        ¬¦  «         |                      |¦  «         d|› d	�S # t          $ r}d
|› d|› �cY d }~S d }~ww xY w)Nz.[Error] No plugin selected for uninstallation.z([Error] Cannot uninstall system plugin 'ú'.z+[Error] Cannot uninstall protected plugin 'ú[Error] Plugin 'ú' directory not found.rñ  ú[Success] Plugin 'z$' uninstalled. Please restart WanGP.z![Error] Failed to remove plugin 'ræ   )rÑ  rñ  ré   rH   rê   rë   rì   rã  ró  rô  rõ  rÙ  rï   )r+   r&   rô   rö   s       r,   Úuninstall_pluginzPluginManager.uninstall_plugin†  s4  € Øð 	DØCÐCà�Ð&Ð&ØK¸iÐKÐKÐKÐKØ×,Ò,¨YÑ7Ô7ð 	OØNÀÐNÐNÐNÐNå”W—\’\ $Ô"2°IÑ>Ô>ˆ
ÝŒw�}Š}˜ZÑ(Ô(ð 	HØG iÐGÐGÐGÐGØ×"Ò" 9Ñ-Ô-Ð-ð	IÝŒM˜*¨dÔ.CÐDÑDÔDÐDØ×,Ò,¨YÑ7Ô7Ð7ØW¨	ÐWÐWÐWÐWøÝð 	Ið 	Ið 	IØH°yÐHÐHÀQÐHÐHÐHÐHÐHÐHÐHÐHøøøøð	Iøøøs   Â5C Ã
C!ÃCÃC!ÃC!c                 ó   ‡— |sdS t           j                             | j        |¦  «        }t           j                             t           j                             |d¦  «        ¦  «        sd|› d�S 	 |� |dd|› d�¬¦  «         t          j        |¦  «        }|j        sd	|› d
�S |j        j        }|� |dd|› d�¬¦  «         | 	                    ¦   «          |j
        j        }	 |j        j        }|j        |         }|j        }	n# t          $ r	 d|› d
�cY S w xY w||	k    r|                      |¦  «         d|› d�S |� |dd|› d�¬¦  «         |                     ¦   «          t           j                             |d¦  «        }
t           j                             |
¦  «        r7|� |dd|› d�¬¦  «         t'          j        t*          j        dddd|
g¦  «         |� |dd¬¦  «         |                      |¦  «         d|› d�S # t
          j        j        $ r­}t3          j        ¦   «          |j        pt9          |¦  «                             ¦   «         }|                     ¦   «         Št?          ˆfd„dD ¦   «         ¦  «        rd|› d
�cY d }~S t?          ˆfd „d!D ¦   «         ¦  «        rd"|› d
�cY d }~S d#|› d$|› �cY d }~S d }~wt          $ r2}t3          j        ¦   «          d%|› d$t9          |¦  «        › �cY d }~S d }~ww xY w)&Nz&[Error] No plugin selected for update.rŠ   z	[Error] 'z>' is not a git repository and cannot be updated automatically.r   z
Updating 'ú'...©Údescz5[Error] Update failed: no git remote configured for 'ró  gš™™™™™É?zFetching updates for 'z<[Error] Update failed: could not resolve remote branch for 'z[Info] Plugin 'z' is already up to date.g333333ã?zPulling updates for 'úrequirements.txtçš™™™™™é?z Re-installing dependencies for 'ú-mÚpipÚinstallú-rç      ð?zUpdate complete.rö  z;' updated. Please restart WanGP for changes to take effect.c              3   ó    •K  — | ]}|‰v V — Œ	d S re   r6   ©r†   r¦   r   s     €r,   r_  z.PluginManager.update_plugin.<locals>.<genexpr>È  s(   øè è € ÐkÐk¨�5˜GÐ#ÐkÐkÐkÐkÐkÐkr.   )ú	not foundÚ
repositoryúcould not read from remotezG[Error] Update failed: remote repository not found or unreachable for 'c              3   ó    •K  — | ]}|‰v V — Œ	d S re   r6   r  s     €r,   r_  z.PluginManager.update_plugin.<locals>.<genexpr>Ê  s(   øè è € ÐjÐj¨�5˜GÐ#ÐjÐjÐjÐjÐjÐjr.   )Úauthenticationzaccess deniedzpermission deniedz4[Error] Update failed: access denied to remote for 'z[Error] Git update failed for 'ræ   z7[Error] An unexpected error occurred during update of ') ré   rH   rê   rë   rì   r­  r®  r¯  r°  ÚfetchÚheadÚcommitÚactive_branchr   Úrefsrï   rÔ  ÚpullÚexistsÚ
subprocessÚ
check_callr¿  Ú
executableÚexcÚGitCommandErrorr`  ra  Ústderrr2   r|   r�   rf  )r+   r&   Úprogressrô   r™   r°  Úlocal_commitÚbranch_nameÚ
remote_refÚremote_commitÚrequirements_pathrö   r  r   s                @r,   Úupdate_pluginzPluginManager.update_plugin›  sè  ø€ Øð 	<Ø;Ð;å”W—\’\ $Ô"2°IÑ>Ô>ˆ
ÝŒw�}Š}�RœWŸ\š\¨*°fÑ=Ô=Ñ>Ô>ð 	iØh˜yÐhÐhÐhÐhð,	dØÐ# X X¨aÐ6RÀ9Ð6RÐ6RÐ6RÐ%SÑ%SÔ%SÐ%SÝ”8˜JÑ'Ô'ˆDØ”<ð ]Ø\ÈyÐ\Ð\Ð\Ð\Ø”\Ô(ˆFàÐ# X X¨cÐ8`ÐQZÐ8`Ð8`Ð8`Ð%aÑ%aÔ%aÐ%aØ�LŠL‰NŒNˆNàœ9Ô+ˆLðdØ"Ô0Ô5�Ø#œ[¨Ô5�
Ø *Ô 1��øÝð dð dð dØcÐV_ÐcÐcÐcÐcÐcÐcðdøøøð ˜}Ò,Ð,Ø×,Ò,¨YÑ7Ô7Ð7ØM¨)ÐMÐMÐMÐMàÐ# X X¨cÐ8_ÐPYÐ8_Ð8_Ð8_Ð%`Ñ%`Ô%`Ð%`Ø�KŠK‰MŒMˆMå "¤§¢¨ZÐ9KÑ LÔ LÐÝŒw�~Š~Ð/Ñ0Ô0ð iØÐ'¨¨°#Ð<nÐ_hÐ<nÐ<nÐ<nÐ)oÑ)oÔ)oÐ)oÝÔ%¥s¤~°t¸UÀIÈtÐUfÐ&gÑhÔhÐhàÐ# X X¨cÐ8JÐ%KÑ%KÔ%KÐ%KØ×'Ò'¨	Ñ2Ô2Ð2Øn¨	ÐnÐnÐnÐnøÝŒwÔ&ð 	Lð 	Lð 	LÝÔÑ!Ô!Ð!Ø”hÐ(¥# a¡&¤&×/Ò/Ñ1Ô1ˆFØ—l’l‘n”nˆGÝÐkÐkÐkÐkÐ1jÐkÑkÔkÑkÔkð oØnÐajÐnÐnÐnÐnÐnÐnÐnÐnÐnÝÐjÐjÐjÐjÐ1iÐjÑjÔjÑjÔjð \Ø[ÈiÐ[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[ØK°YÐKÐKÀ6ÐKÐKÐKÐKÐKÐKÐKÐKøøøøÝð 	dð 	dð 	dÝÔÑ!Ô!Ð!ØcÈYÐcÐcÕ[^Ð_`Ñ[aÔ[aÐcÐcÐcÐcÐcÐcÐcÐcøøøøð	døøøsz   Á/3H Â#?H Ã# D ÄH ÄDÄH ÄDÄ#H Ä;CH ÈK=ÈA/J>ÊK=Ê J>Ê+K=Ê1J>Ê8K=Ê>K=Ë'K8Ë2K=Ë8K=c                 ó  — |sdS t           j                             | j        |¦  «        }t           j                             |¦  «        sd|› d�S |� |dd|› d�¬¦  «         |                      ||¬¦  «        }d	|v rd
|› d�S d|› �S )Nz.[Error] No plugin selected for reinstallation.rô  z' not found.r   zReinstalling 'z' from local folder...rú  ©r  rå   rö  z6' reinstalled from local folder. Please restart WanGP.z1[Error] Reinstallation failed from local folder: )ré   rH   rê   rë   rì   Úinstall_local_plugin)r+   r&   r  rô   Úinstall_msgs        r,   Úreinstall_pluginzPluginManager.reinstall_pluginÑ  s¸   € Øð 	DØCÐCå”W—\’\ $Ô"2°IÑ>Ô>ˆ
ÝŒw�}Š}˜ZÑ(Ô(ð 	>Ø= iÐ=Ð=Ð=Ð=àÐ  ¨!Ð2dÀ9Ð2dÐ2dÐ2dÐ!eÑ!eÔ!eÐ!eØ×/Ò/°	ÀHÐ/ÑMÔMˆØ˜+Ð%Ð%Øi¨	ÐiÐiÐiÐiØPÀ;ÐPÐPÐPr.   c                 ó”  — t          |pd¦  «                             ¦   «         }|sdS t          j                             | j        |¦  «        }t          j                             |¦  «        sd|› d�S 	 |                      |||¬¦  «        S # t          $ r2}t          j
        ¦   «          d|› dt          |¦  «        › �cY d }~S d }~ww xY w)Nr%   z,[Error] No plugin selected for installation.rô  rõ  r  z=[Error] An unexpected error occurred during installation of 'ræ   )r2   r|   ré   rH   rê   rë   rì   Ú_finalize_local_plugin_installrï   r`  ra  )r+   r&   r  rô   rö   s        r,   r   z"PluginManager.install_local_pluginß  sò   € Ý˜	˜ RÑ(Ô(×.Ò.Ñ0Ô0ˆ	Øð 	BØAÐAÝ”W—\’\ $Ô"2°IÑ>Ô>ˆ
ÝŒw�}Š}˜ZÑ(Ô(ð 	HØG iÐGÐGÐGÐGð	jØ×6Ò6°yÀ*ÐW_Ð6Ñ`Ô`Ð`øÝð 	jð 	jð 	jÝÔÑ!Ô!Ð!ØiÐS\ÐiÐiÕadÐefÑagÔagÐiÐiÐiÐiÐiÐiÐiÐiøøøøð	jøøøs   Á3B Â
CÂ'CÂ<CÃCrô   Úremove_invalidÚ
source_urlc                 ó4  — t           j                             |d¦  «        }|                      |¦  «        }g }|ro|                     t
          g ¦  «        |                     t          g ¦  «        z   |                     t          g ¦  «        z   |                     t          g ¦  «        z   }t           j         	                    |¦  «        s!|s|rt          j        || j        ¬¦  «         dS t           j                             |d¦  «        }	t           j                             |	¦  «        rp|� |dd|› d�¬¦  «         	 t          j        t           j        d	d
dd|	g¦  «         n7# t          j        $ r%}
t'          j        ¦   «          d|› d|
› �cY d }
~
S d }
~
ww xY wt           j                             |d¦  «        }t           j                             |¦  «        rp|� |dd|› d�¬¦  «         	 t          j        t           j        d	d
dd|g¦  «         n7# t          j        $ r%}
t'          j        ¦   «          d|› d|
› �cY d }
~
S d }
~
ww xY wt           j                             |d¦  «        }t           j                             |¦  «        s)t+          |d¦  «        5 }	 d d d ¦  «         n# 1 swxY w Y   |                      |¦  «         |� |dd¬¦  «         |                      |¦  «         |                      |¦  «         |                      ||¬¦  «         d|› d�S )Nú	plugin.pyrñ  z[Error] Invalid Plugin.rü  g      à?zInstalling dependencies for 'rù  rú  rþ  rÿ  r   r  z+[Error] Failed to install dependencies for z$. Check console for details. Error: zsetup.pyrý  zRunning setup for 'z-ez#[Error] Failed to run setup.py for ú__init__.pyr  r  zInstallation complete.)r~   rö  z<' installed. Please enable it in the list and restart WanGP.)ré   rH   rê   r#  rv   r/  r,  r-  r.  r	  ró  rô  rõ  r  r  r  r¿  r  ÚCalledProcessErrorr`  ra  r
  Ú_strip_uninstallable_flagræ  rÕ  rÔ  )r+   r&   rô   r  r%  r&  Úplugin_entryr—  Úmetadata_handlersr  rö   Ú
setup_pathÚ	init_pathÚfs                 r,   r$  z,PluginManager._finalize_local_plugin_installì  sò  € Ý”w—|’| J°Ñ<Ô<ˆØ×-Ò-¨jÑ9Ô9ˆØÐØð 	qØ (§¢Õ-FÈÑ KÔ KÈhÏlÊlõ  \Að  CEñ  OFô  OFñ  !Fð  IQ÷  IUò  IUõ  V|ð  ~@ñ  IAô  IAñ  !Að  DL÷  DPò  DPõ  Qlð  npñ  Dqô  Dqñ  !qÐÝŒw�~Š~˜lÑ+Ô+ð 	-Ð4Eð 	-Øð IÝ”˜j°$Ô2GÐHÑHÔHÐHØ,Ð,åœGŸLšL¨Ð5GÑHÔHÐÝŒ7�>Š>Ð+Ñ,Ô,ð 	xØÐ# X X¨cÐ8gÐXaÐ8gÐ8gÐ8gÐ%hÑ%hÔ%hÐ%hðxÝÔ%¥s¤~°t¸UÀIÈtÐUfÐ&gÑhÔhÐhÐhøÝÔ0ð xð xð xÝÔ#Ñ%Ô%Ð%ØwÀYÐwÐwÐtuÐwÐwÐwÐwÐwÐwÐwÐwøøøøðxøøøõ ”W—\’\ *¨jÑ9Ô9ˆ
ÝŒ7�>Š>˜*Ñ%Ô%ð 	pØÐ# X X¨cÐ8]ÈiÐ8]Ð8]Ð8]Ð%^Ñ%^Ô%^Ð%^ðpÝÔ%¥s¤~°t¸UÀIÈtÐU_Ð&`ÑaÔaÐaÐaøÝÔ0ð pð pð pÝÔ#Ñ%Ô%Ð%Øo¸YÐoÐoÐlmÐoÐoÐoÐoÐoÐoÐoÐoøøøøðpøøøõ ”G—L’L ¨]Ñ;Ô;ˆ	ÝŒw�~Š~˜iÑ(Ô(ð 	Ý�i Ñ%Ô%ð ¨Øðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð 	×&Ò& zÑ2Ô2Ð2ØÐ  ¨#Ð4LÐ!MÑ!MÔ!MÐ!MØ×$Ò$ YÑ/Ô/Ð/Ø×)Ò)¨)Ñ4Ô4Ð4Ø×#Ò# I°:Ð#Ñ>Ô>Ð>Øk IÐkÐkÐkÐksN   Ä<$E! Å!FÅ0FÆ
FÆFÇ+$H ÈIÈH?È9IÈ?IÊJ$Ê$J(Ê+J(rÈ  c                 óD  ‡— t          |¦  «        }|r|                     d¦  «        sdS 	 t          |¦  «        }|sdS t          j                             | j        |¦  «        }t          j                             |¦  «        rd|› d�S |� |dd|› d�¬¦  «         t          j	         
                    ||¦  «         |                      |||d	|¬
¦  «        S # t          j        j        $ r}t          j        ¦   «          |j        pt#          |¦  «                             ¦   «         }|                     ¦   «         Št)          ˆfd„dD ¦   «         ¦  «        rY d }~dS d|› �cY d }~S d }~wt*          $ r/}t          j        ¦   «          dt#          |¦  «        › �cY d }~S d }~ww xY w)Nr„   z[Error] Invalid URL.z[Warning] Plugin 'z9' already exists. Please remove it manually to reinstall.gš™™™™™¹?z	Cloning 'rù  rú  T)r  r%  r&  c              3   ó    •K  — | ]}|‰v V — Œ	d S re   r6   r  s     €r,   r_  z8PluginManager.install_plugin_from_url.<locals>.<genexpr>,  s(   øè è € ÐtÐt¨�5˜GÐ#ÐtÐtÐtÐtÐtÐtr.   )r  r  Úfatalr  z[Error] Git clone failed: z&[Error] An unexpected error occurred: )r�   r�   rÌ   ré   rH   rê   rë   r  r­  r®  Ú
clone_fromr$  r  r  r`  ra  r  r2   r|   r�   rf  rï   )	r+   rÈ  r  Úcleaned_urlró   rô   rö   r  r   s	           @r,   rí   z%PluginManager.install_plugin_from_url  s  ø€ Ý*¨7Ñ3Ô3ˆØð 	* +×"8Ò"8Ð9NÑ"OÔ"Oð 	*Ø)Ð)ð	EÝ*¨;Ñ7Ô7ˆIØð .Ø-Ð-ÝœŸš dÔ&6¸	ÑBÔBˆJåŒw�~Š~˜jÑ)Ô)ð qØp¨IÐpÐpÐpÐpàÐ# X X¨cÐ8SÀIÐ8SÐ8SÐ8SÐ%TÑ%TÔ%TÐ%TÝŒH×Ò ¨ZÑ8Ô8Ð8à×6Ò6°yÀ*ÐW_Ðptð  BMÐ6ñ  Nô  Nð  NøåŒwÔ&ð 	9ð 	9ð 	9ÝÔÑ!Ô!Ð!Ø”hÐ(¥# a¡&¤&×/Ò/Ñ1Ô1ˆFØ—l’l‘n”nˆGÝÐtÐtÐtÐtÐ1sÐtÑtÔtÑtÔtð .Ø-Ð-Ð-Ð-Ð-Ð-Ø8°Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8øøøøÝð 	Eð 	Eð 	EÝÔÑ!Ô!Ð!ØD½CÀ¹F¼FÐDÐDÐDÐDÐDÐDÐDÐDøøøøð	EøøøsC   «C ¾A	C ÂAC ÃFÃ)A*E#ÅE#ÅFÅ#FÅ0$FÆFÆFr÷  c                 óˆ  — |rt           j                             |¦  «        sd S t           j                             |t          ¦  «        }|                      |¦  «        }t          |t          ¦  «        sd S d|vrd S |                      | 	                    d¦  «        d¬¦  «        s�| 
                    dd ¦  «         	 t          |dd¬¦  «        5 }t          j        ||dd¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |¦  «         d S # t          $ r }t!          d	|› d
|› �¦  «         Y d }~d S d }~ww xY wd S )Nr  Tr+  r  r  r  r‰   )r  Úensure_asciiz![PluginManager] Failed to update rä   )ré   rH   rì   rê   r  r  r{   rl   r  rv   r%  r
  r  r  r&  rï   rç   )r+   r÷  r   r  r  rö   s         r,   r+  z'PluginManager._strip_uninstallable_flag3  sÀ  € Øð 	¥¤§¢¨zÑ!:Ô!:ð 	ØˆFÝœŸš ZÕ1IÑJÔJˆØ×&Ò& }Ñ5Ô5ˆÝ˜'¥4Ñ(Ô(ð 	ØˆFØ 'Ð)Ð)ØˆFØ× Ò  §¢¨_Ñ!=Ô!=ÀtÐ ÑLÔLð 	PØ�KŠK˜¨Ñ.Ô.Ð.ðPÝ˜-¨°wÐ?Ñ?Ô?ð LÀ6Ý”I˜g v°aÀdÐKÑKÔKÐKðLð Lð Lñ Lô Lð Lð Lð Lð Lð Lð Løøøð Lð Lð Lð Là×6Ò6°zÑBÔBÐBÐBÐBøÝð Pð Pð PÝÐN¸-ÐNÐNÈ1ÐNÐNÑOÔOÐOÐOÐOÐOÐOÐOÐOøøøøðPøøøð	Pð 	Ps<   Â<D ÃC3Ã'D Ã3C7Ã7D Ã:C7Ã;D Ä
D?ÄD:Ä:D?c                 ó   — ddl }ddlm} g }t          t	          j        t
          j                             |ddd¦  «        ¦  «        ¦  «        D �]Z}t
          j                             t
          j         	                    |¦  «        ¦  «        }t          j        d|¦  «        rt          |¦  «        dk    rt          d	|› d
| › d�¦  «        ‚t          |d¬¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y    |||¦  «        d         }	|                     |                     dd¦  «        d         ¦  «                             d¦  «        pd}
t'          |
t(          ¦  «        st          d|› d
| › d�¦  «        ‚t+          |||	| d                     |
                     ¦   «         ¦  «        ¦  «        }|j        s.| dk    st          j        d| ¦  «        st          d| › d�¦  «        ‚t.                               |j        ¦  «        }|€J|j        rut
          j                             t
          j                             t4          |d¦  «        ¦  «        r2t          d|› d| › d|rdt7          |j        ¦  «        z   nd› d �¦  «        ‚|                     |¦  «         �Œ\t.                               d!„ |D ¦   «         ¦  «         dS )"z¯Skills the plugin ships in skills/<name>/SKILL.md (front matter: name, description, optional routing), for Deepy Prime and MCP
        agents; Deepy Zero does not read skills.r   N)Úskill_metadatarV   Ú*zSKILL.mdz[a-z0-9]+(?:-[a-z0-9]+)*é@   z!Invalid Deepy skill folder name 'z' in plugin 'z<': use a lowercase hyphenated name of at most 64 characters.r  r  r    z---r‰   r�   r=   r%   zThe routing of Deepy skill 'z' must be one line of text.ry  Úuserz[A-Za-z0-9._-]+zPlugin folder 'z[' cannot hold toolbox skills: rename it with letters, digits, '.', '_' or '-' (not 'user').zDeepy skill 'z' of plugin 'z' is already provided by zplugin ÚWanGPrè  c                 ó   — i | ]
}|j         |“ŒS r6   rw   )r†   Úskills     r,   r   z?PluginManager._activate_plugin_deepy_skills.<locals>.<dictcomp>]  s   € Ð$JÐ$JÐ$J¸% U¤Y°Ð$JÐ$JÐ$Jr.   )ÚyamlÚshared.mcp.skillsr9  r�  Úglobré   rH   rê   Úbasenamer  r    rc  rŽ   r¾   r
  r¡  Ú	safe_loadrŒ   rv   r{   r2   rG   r=   rT   rK   r	  Ú_BUILTIN_SKILLS_DIRÚreprr&   r£   r¶  )r&   r÷  r@  r9  rV   rH   r   r  r¿   r    r=   r?  r‡  s                r,   Ú_activate_plugin_deepy_skillsz+PluginManager._activate_plugin_deepy_skillsE  sp  € ð 	ˆˆˆØ4Ð4Ð4Ð4Ð4Ð4ØˆÝ�4œ9¥R¤W§\¢\°*¸hÈÈZÑ%XÔ%XÑYÔYÑZÔZð 	!ñ 	!ˆDÝ”7×#Ò#¥B¤G§O¢O°DÑ$9Ô$9Ñ:Ô:ˆDÝ”<Ð ;¸TÑBÔBð aÅcÈ$ÁiÄiÐRTÂnÀnÝ ð  "`ÀTð  "`ð  "`ÐXað  "`ð  "`ð  "`ñ  aô  að  aÝ�d WÐ-Ñ-Ô-ð %°Ø—{’{‘}”}�ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %à(˜.¨¨tÑ4Ô4°]ÔCˆKØ—n’n T§Z¢Z°°qÑ%9Ô%9¸!Ô%<Ñ=Ô=×AÒAÀ)ÑLÔLÐRÐPRˆGÝ˜g¥sÑ+Ô+ð {Ý Ð!yÀÐ!yÐ!yÐS\Ð!yÐ!yÐ!yÑzÔzÐzÝ$ T¨4°¸iÈÏÊÐRY×R_ÒR_ÑRaÔRaÑIbÔIbÑcÔcˆEØ”=ð [ i°6Ò&9Ð&9ÅÄÐN`ÐbkÑAlÔAlÐ&9Ý ð  "Z°9ð  "Zð  "Zð  "Zñ  [ô  [ð  [Ý+×/Ò/°´	Ñ:Ô:ˆHØÐ#¨¬Ð#½"¼'¿.º.ÍÌÏÊÕViÐkoÐq{ÑI|ÔI|Ñ:}Ô:}Ð#Ý ð  "i°ð  "ið  "iÀIð  "ið  "ið  QYð  ifÐhqÕtxð  zBô  zLñ  uMô  uMñ  iMð  iMð  _fð  "ið  "ið  "iñ  jô  jð  jØ�MŠM˜%Ñ Ô Ð Ñ Ý×#Ò#Ð$JÐ$JÀ6Ð$JÑ$JÔ$JÑKÔKÐKÐKÐKs   ÃC=Ã=D	ÄD	c           	      óØ  ‡ — ˆ fd„|j         D ¦   «         }ˆ fd„|j        D ¦   «         }d„ |D ¦   «         }|d„ |D ¦   «         z  }|D ]D\  }}}|                     |j        ¦  «        }|�"t	          |› d|j        › d|j        › d�¦  «        ‚ŒEt                               d„ |D ¦   «         ¦  «         t                               d	„ |D ¦   «         ¦  «         |j	        D ]a}	t                               |	j        ¦  «        }|� t	          d
|	j        › d|j        › d�¦  «        ‚t          |	‰ ¬¦  «        t          |	j        <   Œb|j        }
|
€d S |
j        st	          d‰ › d�¦  «        ‚t          |
|
j        pt!          j        dd‰ ¦  «        |
j        p|j        ‰ ¬¦  «        }
t&                               |
j        ¦  «        }|� t	          d|
j        › d|j        › d�¦  «        ‚|
t&          |
j        <   d S )Nc                 ó2   •— g | ]}t          |‰¬ ¦  «        ‘ŒS ©©r&   ©r
   ©r†   rƒ  r&   s     €r,   rˆ   z>PluginManager._activate_plugin_deepy_tools.<locals>.<listcomp>a  s&   ø€ ÐlÐlÐlÀJ•w˜z°YÐ?Ñ?Ô?ÐlÐlÐlr.   c                 ó2   •— g | ]}t          |‰¬ ¦  «        ‘ŒS rJ  rL  rM  s     €r,   rˆ   z>PluginManager._activate_plugin_deepy_tools.<locals>.<listcomp>b  s&   ø€ ÐjÐjÐjÀ:•g˜j°IÐ>Ñ>Ô>ÐjÐjÐjr.   c                 ó"   — g | ]}|t           d f‘ŒS )zDeepy Prime)rP   ©r†   rƒ  s     r,   rˆ   z>PluginManager._activate_plugin_deepy_tools.<locals>.<listcomp>c  s!   € ÐnÐnÐnÐT^˜*Õ&?ÀÐOÐnÐnÐnr.   c                 ó"   — g | ]}|t           d f‘ŒS )z
Deepy Zero)rQ   rP  s     r,   rˆ   z>PluginManager._activate_plugin_deepy_tools.<locals>.<listcomp>d  s!   € ÐlÐlÐlÐS]˜:Õ'?ÀÐNÐlÐlÐlr.   z tool 'z#' is already registered by plugin 'ró  c                 ó   — i | ]
}|j         |“ŒS r6   r†  rP  s     r,   r   z>PluginManager._activate_plugin_deepy_tools.<locals>.<dictcomp>i  s   € Ð)dÐ)dÐ)dÈ*¨*¬/¸:Ð)dÐ)dÐ)dr.   c                 ó   — i | ]
}|j         |“ŒS r6   r†  rP  s     r,   r   z>PluginManager._activate_plugin_deepy_tools.<locals>.<dictcomp>j  s   € Ð(bÐ(bÐ(bÈ¨¬¸*Ð(bÐ(bÐ(br.   r`  rK  zDeepy toolbox of plugin 'z' has no actions.z\Wrx  )rC   r   r&   zDeepy toolbox ')r"  r#  rv   r   r¾   r&   rP   r¶  rQ   r%  rS   rH   r
   r$  rE   rC   r    r¥  r   rR   )r&   r3  Úprime_toolsÚ
zero_toolsÚregistrationsrƒ  ÚregistryÚruntime_namer‡  r^  Útoolboxs   `          r,   Ú_activate_plugin_deepy_toolsz*PluginManager._activate_plugin_deepy_tools_  s¬  ø€ àlÐlÐlÐlÐRXÔRkÐlÑlÔlˆØjÐjÐjÐjÐQWÔQiÐjÑjÔjˆ
ØnÐnÐbmÐnÑnÔnˆØÐlÐlÐakÐlÑlÔlÑlˆØ2?ð 	Eð 	EÑ.ˆJ˜ ,Ø—|’| J¤OÑ4Ô4ˆHØÐ#Ý  Lð  "Dð  "D¸¼ð  "Dð  "DÐmuÔmð  "Dð  "Dð  "Dñ  Eô  Eð  Eð $å!×(Ò(Ð)dÐ)dÐXcÐ)dÑ)dÔ)dÑeÔeÐeÝ ×'Ò'Ð(bÐ(bÐWaÐ(bÑ(bÔ(bÑcÔcÐcØÔ'ð 	Sð 	SˆGÝ'×+Ò+¨G¬LÑ9Ô9ˆHØÐ#Ý ð  "A¸¼ð  "Að  "AÐjrÔj|ð  "Að  "Að  "Añ  Bô  Bð  BÝ-4°WÈ	Ð-RÑ-RÔ-RÕ˜Wœ\Ñ*Ð*ØÔ'ˆØˆ?ØˆFØŒð 	WÝÐU¸ÐUÐUÐUÑVÔVÐVÝ˜'¨gÔ.@Ð.aÅBÄFÈ5ÐRUÐW`ÑDaÔDaÐpwô  qEð  qTð  IOô  ITð  `ið  jñ  jô  jˆÝ*×.Ò.¨wÔ/AÑBÔBˆØÐÝÐ|¨wÔ/AÐ|Ð|ÐfnÔfxÐ|Ð|Ð|Ñ}Ô}Ð}Ø6=Õ Ô 2Ñ3Ð3Ð3r.   c                 ó.  — g }t          j        | j        ¦  «        D ]ë}|                     d¦  «        rŒt           j                             | j        |¦  «        }t           j                             |¦  «        r�t           j                             t           j                             |d¦  «        ¦  «        s=t           j                             t           j                             |d¦  «        ¦  «        r|                     |¦  «         Œìt          |¦  «        S )Nz.bakr)  r(  )
ré   Úlistdirrë   r’   rH   rê   rì   r  r£   r�  )r+   Ú
discoveredrÔ   rH   s       r,   rU  zPluginManager.discover_plugins{  só   € Øˆ
Ý”J˜tÔ/Ñ0Ô0ð 	(ð 	(ˆDØ�}Š}˜VÑ$Ô$ð ØÝ”7—<’< Ô 0°$Ñ7Ô7ˆDÝŒw�}Š}˜TÑ"Ô"ð (­¬¯ªµr´w·|²|ÀDÈ-Ñ7XÔ7XÑ(YÔ(Yð (Õ]_Ô]d×]kÒ]kÕlnÔls×lxÒlxÐy}ð  @Kñ  mLô  mLñ  ^Mô  ^Mð (Ø×!Ò! $Ñ'Ô'Ð'øÝ�jÑ!Ô!Ð!r.   Úenabled_user_pluginsÚ	safe_modec           	      ó\  — g | _         t          ¦   «          |rt          d¦  «         t          }nt          d„ |D ¦   «         z   }|                      ¦   «         D �]Ó}||vrŒ	 t
          j                             | j        |¦  «        }|  	                    |¦  «        }|t          v }t
          j                             t
          j                             |d¦  «        ¦  «        sI|                      |||¬¦  «         |                      |||¬¦  «         |                      |||¬¦  «         ŒÒt          j        |› d�¦  «        }	t#          j        |	t"          j        ¦  «        D �]‰\  }
}t)          |t*          ¦  «        �rm|t*          k    �ra |¦   «         }|                      |||t          v ¦  «         |rd|_        |                     ¦   «          |                      ||¦  «         |                      ||¦  «         || j        |<   |j         r| j                              |j         ¦  «         |j                             ¦   «         D ]8\  }}|| j        vr
g | j        |<   | j        |                              |¦  «         Œ9|                      |||¬¦  «         |                      |||¬¦  «         |                      |||¬¦  «         |t          vrt          d|j         › d|› d	�¦  «          n�Œ‹�Œ•# tB          $ r3}t          d
|› d|› �¦  «         tE          j#        ¦   «          Y d }~�ŒÍd }~ww xY wd S )NzJ[Safe Mode] User plugins are disabled. Only system plugins will be loaded.c                 ó$   — g | ]}|t           v¯|‘ŒS r6   )rÑ  )r†   rß  s     r,   rˆ   z=PluginManager.load_plugins_from_directory.<locals>.<listcomp>Œ  s$   € Ð/kÐ/kÐ/k°aÐSTÕ\jÐSjÐSj°ÐSjÐSjÐSjr.   r(  )rb  rÝ  FzLoaded plugin: rS  rT  z$Error loading plugin from directory rä   )$r¯  rp   rç   rÑ  rU  ré   rH   rê   rë   r#  rÒ  r	  rd  rj  rn  rà  rá  rk  râ  rã  rä  r  r7  r  r(  rG  rZ  rº  Úextendr  rè   rÁ  r   rï   r`  ra  )r+   r^  r_  rb  Úplugins_to_loadÚplugin_dir_namer  r—  Ú
is_bundledrH  r   rç  r3  rU  Ú	callbacksrö   s                   r,   Úload_plugins_from_directoryz)PluginManager.load_plugins_from_directory…  s~  € Ø"$ˆÔÝ!Ñ#Ô#Ð#Øð 	lÝÐ^Ñ_Ô_Ð_Ý,ˆOˆOå,Ð/kÐ/kÐ;OÐ/kÑ/kÔ/kÑkˆOà#×4Ò4Ñ6Ô6ð '	&ñ '	&ˆOØ oÐ5Ð5Øð$&Ý œgŸlšl¨4Ô+;¸_ÑMÔM�Ø×5Ò5°kÑBÔB�Ø,µÐ?�
Ý”w—~’~¥b¤g§l¢l°;ÀÑ&LÔ&LÑMÔMð Ø×<Ò<¸_ÈhÐfsÐ<ÑtÔtÐtØ×=Ò=¸oÈxÐgtÐ=ÑuÔuÐuØ×:Ò:¸?ÈHÐdqÐ:ÑrÔrÐrØå"Ô0°OÐ1LÐ1LÐ1LÑMÔM�å!(Ô!3°F½G¼OÑ!LÔ!Lð ñ ‘I�D˜#Ý! #¥|Ñ4Ô4ñ ¸ÅÒ9LÑ9LØ!$ ¡¤˜Ø×6Ò6°v¸xÈÕ\jÐIjÑkÔkÐkØ%ð 9Ø38˜FÔ0ØŸšÑ)Ô)Ð)Ø×:Ò:¸?ÈKÑXÔXÐXØ×9Ò9¸/È6ÑRÔRÐRØ8>˜œ _Ñ5Ø!Ô4ð VØ Ô3×:Ò:¸6Ô;TÑUÔUÐUØ4:Ô4F×4LÒ4LÑ4NÔ4Nð Ið IÑ0˜I yØ(°´Ð?Ð?Ø=? ¤°	Ñ :Ø œO¨IÔ6×=Ò=¸iÑHÔHÐHÐHØ×@Ò@ÀÐRZÐjwÐ@ÑxÔxÐxØ×AÒAÀ/ÐS[ÐkxÐAÑyÔyÐyØ×>Ò>¸ÐPXÐhuÐ>ÑvÔvÐvØ*µ.Ð@Ð@Ý!Ð"Z°F´KÐ"ZÐ"ZÈÐ"ZÐ"ZÐ"ZÑ[Ô[Ð[Ø˜ùùøÝð &ð &ð &ÝÐS¸_ÐSÐSÐPQÐSÐSÑTÔTÐTÝÔ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ñ%øøøøð&øøøðK'	&ð '	&s    Á CK,Ä)GK,Ë,
L)Ë6(L$Ì$L)c                 ó4   — | j                              ¦   «         S re   )rº  rP  r*   s    r,   Úget_all_pluginszPluginManager.get_all_plugins·  s   € ØŒ|× Ò Ñ"Ô"Ð"r.   Úmethod_namec                 ó�   — t          t          |¦  «        |d ¦  «        }t          t          |d ¦  «        }t          |¦  «        o||uS re   )rz  r  r  r4   )r+   r3  rj  Úplugin_methodÚbase_methods        r,   Ú_plugin_overrides_methodz&PluginManager._plugin_overrides_methodº  sB   € Ý¥ V¡¤¨k¸4Ñ@Ô@ˆÝ�l¨K¸Ñ>Ô>ˆÝ˜Ñ&Ô&ÐK¨=ÀÐ+KÐKr.   c           
      ó$  — | j                              ¦   «         D ]u\  }}|                      ||¦  «        sŒ	  t          ||¦  «        |i |¤Ž Œ4# t          $ r5}t          d|› d|› d|› �¦  «         t          j        ¦   «          Y d }~Œnd }~ww xY wd S )Nz[PluginManager] Error in z for plugin rä   )rº  rè   rn  rz  rï   rç   r`  ra  )r+   rj  ÚargsrI  r&   r3  rö   s          r,   Ú_dispatch_plugin_eventz$PluginManager._dispatch_plugin_event¿  sÕ   € Ø!%¤×!3Ò!3Ñ!5Ô!5ð 	&ð 	&ÑˆI�vØ×0Ò0°¸ÑEÔEð Øð&Ø,•˜ Ñ,Ô,¨dÐ=°fÐ=Ð=Ð=Ð=øÝð &ð &ð &ÝÐ[°+Ð[Ð[È9Ð[Ð[ÐXYÐ[Ð[Ñ\Ô\Ð\ÝÔ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%øøøøð&øøøð	&ð 	&s   ·AÁ
BÁ+BÂBr0  r6  c                 ó<   — |sd S |                       d||¦  «         d S )Nr9  )rq  r8  s      r,   Únotify_model_changez!PluginManager.notify_model_changeÉ  s.   € Øð 	ØˆFØ×#Ò#Ð$5°u¸jÑIÔIÐIÐIÐIr.   c                 óH   — | j         sdS d                     | j         ¦  «        S )Nr%   r£  )r¯  rê   r*   s    r,   Úget_custom_jszPluginManager.get_custom_jsÎ  s'   € ØÔ&ð 	Ø�2Ø�yŠy˜Ô0Ñ1Ô1Ð1r.   Úglobal_referencesc           
      óZ  — | j                              ¦   «         D ]�\  }}	 d|v r|d         |_        |j        D ]8}|| j        v rt          ||d ¦  «         Œ||v rt          ||||         ¦  «         Œ9ŒX# t          $ r,}t          d|› dt          |¦  «        › �¦  «         Y d }~Œ‰d }~ww xY wd S )NÚset_wgp_globalz"  [!] ERROR injecting globals for rä   )	rº  rè   r   rT  rÂ  r6  rï   rç   r2   )r+   rv  r&   r3  r=  rö   s         r,   Úinject_globalszPluginManager.inject_globalsÓ  s  € Ø!%¤×!3Ò!3Ñ!5Ô!5ð 
	Rð 
	RÑˆI�vð	RØ#Ð'8Ð8Ð8Ø2CÐDTÔ2U�FÔ/Ø#)Ô#9ð Uð U�KØ" dÔ&=Ð=Ð=Ý ¨°TÑ:Ô:Ð:Ð:Ø$Ð(9Ð9Ð9Ý ¨Ð5FÀ{Ô5SÑTÔTÐTøð	Uøõ
 ð Rð Rð RÝÐP¸9ÐPÐPÍÈAÉÌÐPÐPÑQÔQÐQÐQÐQÐQÐQÐQøøøøðRøøøð
	Rð 
	Rs    AA2Á2
B(Á<"B#Â#B(r=  rL  c                 ó,  — || j         v rd n|}| j                             ¦   «         D ]l\  }}	 t          |d¦  «        r||j        v rt          |||¦  «         Œ1# t          $ r/}t          d|› d|› dt          |¦  «        › �¦  «         Y d }~Œed }~ww xY wd S )Nr  z  [!] ERROR updating global 'z' for plugin rä   )	rÂ  rº  rè   r±  r  r6  rï   rç   r2   )r+   r=  rL  Ú
safe_valuer&   r3  rö   s          r,   Úupdate_global_referencez%PluginManager.update_global_referenceà  så   € Ø(¨DÔ,CÐCÐC�T�TÈˆ
Ø!%¤×!3Ò!3Ñ!5Ô!5ð 	gð 	gÑˆI�vðgÝ˜6Ð#5Ñ6Ô6ð =¸;È&ÔJaÐ;aÐ;aÝ˜F K°Ñ<Ô<Ð<øøÝð gð gð gÝÐe°kÐeÐeÐPYÐeÐeÕ]`ÐabÑ]cÔ]cÐeÐeÑfÔfÐfÐfÐfÐfÐfÐføøøøðgøøøð		gð 	gs   ­*AÁ
BÁ"%BÂBc           
      ó.  — i }| j                              ¦   «         D ]v\  }}	 |j                             ¦   «         D ]\  }}|j        |j        |j        dœ||<   ŒŒ># t          $ r,}t          d|› dt          |¦  «        › �¦  «         Y d }~Œod }~ww xY wd|iS )N)r
  r  r  zError in setup_ui for plugin rä   r  )	rº  rè   r  r
  r  r  rï   rç   r2   )r+   r  r&   r3  r*  Útabrö   s          r,   r(  zPluginManager.setup_uié  sÜ   € ØˆØ!%¤×!3Ò!3Ñ!5Ô!5ð 		Mð 		MÑˆI�vðMØ#)¤;×#4Ò#4Ñ#6Ô#6ð ð ‘K�F˜Cà!$¤Ø14Ô1JØ$'¤Lð$ð $�D˜‘L�Lðøõ ð Mð Mð MÝÐK°iÐKÐKÅ3ÀqÁ6Ä6ÐKÐKÑLÔLÐLÐLÐLÐLÐLÐLøøøøðMøøøà˜ˆ~Ðs   ¢7AÁ
BÁ$"BÂBrU  c           
      ód  — || j         vr|                     d¦  «        S | j         |         }|                     d¦  «        }d|v r|                     d¦  «         |D ]S}	  ||fi |¤Ž}Œ# t          $ r:}t	          d|› d|j        › d|› �¦  «         t          j        ¦   «          Y d }~ŒLd }~ww xY w|S )NÚconfigsz$[PluginManager] Error running hook 'z' from rä   )rÁ  rv   r%  rï   rç   r0   r`  ra  )r+   rU  rp  rI  rf  ÚdatarV  rö   s           r,   Úrun_data_hookszPluginManager.run_data_hooks÷  s÷   € Ø˜DœOÐ+Ð+Ø—:’:˜iÑ(Ô(Ð(à”O IÔ.ˆ	Ø�zŠz˜)Ñ$Ô$ˆà˜ÐÐØ�JŠJ�yÑ!Ô!Ð!à!ð 	&ð 	&ˆHð&Ø�x Ð/Ð/¨Ð/Ð/��øÝð &ð &ð &ÝÐi¸YÐiÐiÈxÔObÐiÐiÐfgÐiÐiÑjÔjÐjÝÔ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%øøøøð&øøøð ˆs   Á	A)Á)
B-Á30B(Â(B-Úall_componentsc           
      ó®  ‡— g }| j                              ¦   «         D �] \  }}	 |j        D ]=}|‰v r7t          ||¦  «        rt	          ||¦  «        €t          ||‰|         ¦  «         Œ>ˆfd„|j        D ¦   «         }|                     |¦  «         t	          |dg ¦  «        }|r.|                     |¦  «         |j         	                    ¦   «          Œ¶# t          $ r?}t          d|› dt          |¦  «        › �¦  «         t          j        ¦   «          Y d }~Œúd }~ww xY w|�r1|D �]/}		 ‰                     |	j        ¦  «        }
t	          |
dd ¦  «        }|
r|rt          |d¦  «        st          d|	j        › d�¦  «         Œ\|j                             |
¦  «        }|5  |	                     ¦   «         }d d d ¦  «         n# 1 swxY w Y   |j                             d	¦  «        }|j                             |d
z   |¦  «         ŒÝ# t          $ rE}t          d|	j        › dt          |¦  «        › �¦  «         t          j        ¦   «          Y d }~�Œ'd }~ww xY wd S d S )Nc                 ó*   •— i | ]}|‰v ¯|‰|         “ŒS r6   r6   )r†   Úcomp_idrƒ  s     €r,   r   zCPluginManager.run_component_insertion_and_setup.<locals>.<dictcomp>  s5   ø€ ð (ð (ð (àØ .Ð0Ð0ð ˜^¨GÔ4à0Ð0Ð0r.   r  z+[PluginManager] ERROR in post_ui_setup for rä   ÚparentÚchildrenz[PluginManager] ERROR: Target 'z%' for insertion not found or invalid.r«   r�   z2[PluginManager] ERROR processing insert_after for )rº  rè   rQ  r±  rz  r6  r/  rb  r  ro   rï   rç   r2   r`  ra  rv   r  rˆ  Úindexr  r%  rÀ  )r+   rƒ  Úall_insert_requestsr&   r3  r†  Úrequested_componentsÚinsert_requestsrö   ÚrequestrÉ  r‡  Útarget_indexÚnew_componentÚnewly_addeds    `             r,   Ú!run_component_insertion_and_setupz/PluginManager.run_component_insertion_and_setup	  sU  ø€ Ø8:Ðà!%¤×!3Ò!3Ñ!5Ô!5ð 	&ñ 	&ÑˆI�vð&Ø%Ô8ð Jð J�GØ .Ð0Ð0½'À&È'Ñ:RÔ:RÐ0ÕV]Ð^dÐfmÑVnÔVnÐVvÝ ¨°ÀÔ1HÑIÔIÐIøð(ð (ð (ð (à#)Ô#<ð(ñ (ô (Ð$ð ×$Ò$Ð%9Ñ:Ô:Ð:å")¨&Ð2JÈBÑ"OÔ"O�Ø"ð :Ø'×.Ò.¨Ñ?Ô?Ð?ØÔ1×7Ò7Ñ9Ô9Ð9øøåð &ð &ð &ÝÐYÀIÐYÐYÕQTÐUVÑQWÔQWÐYÐYÑZÔZÐZÝÔ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%øøøøð&øøøð ñ 	*Ø.ð *ñ *�ð*Ø+×/Ò/°Ô0KÑLÔL�FÝ$ V¨X°tÑ<Ô<�FØ!ð !¨ð !µw¸vÀzÑ7RÔ7Rð !Ýð  CÀÔ@[ð  Cð  Cð  Cñ  Dô  Dð  DØ à#)¤?×#8Ò#8¸Ñ#@Ô#@�LØð Lð LØ(/×(IÒ(IÑ(KÔ(K˜ðLð Lð Lñ Lô Lð Lð Lð Lð Lð Lð Løøøð Lð Lð Lð Lð #)¤/×"5Ò"5°bÑ"9Ô"9�KØ”O×*Ò*¨<¸!Ñ+;¸[ÑIÔIÐIÐIøå ð *ð *ð *ÝÐvÈwÔOjÐvÐvÕnqÐrsÑntÔntÐvÐvÑwÔwÐwÝÔ'Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ñ)øøøøð*øøøð!	*ð 	*ð*ð *s[   ¤B.CÃ
DÃ5DÄDÄ(AHÆ HÆF=Æ1HÆ=G	ÇHÇG	Ç;HÈ
IÈ:IÉI)rº  )r%   r³  )T)r8  )rH  re   )F)r%   F)TT)NFr%   )FN)Or/   r0   r1   r&  r   r   r2   r   rÍ  rÏ  rÕ  rÙ  r   rÝ  rà  rã  ræ  r5   rî  rø  r  r  r  r  r#  r&  r  r  r7  rG  rJ  rP  r  r[  rd  rj  rn  rq  rs  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+  r·  rG  rZ  rU  rg  ri  rn  rq  rs  ru  ry  r|  r(  r‚  r‘  r6   r.   r,   rÞ   rÞ   Q  sí  € € € € € ðdð dð dð dð Cð C¨x¸¸SÀ#¸X¼Ô/Gð CÐadð CÐnrð Cð Cð Cð Cðgð gð gð gð+°cð +¸dð +ð +ð +ð +ð	'°Sð 	'¸Tð 	'ð 	'ð 	'ð 	'ð
¨¨S¬	ð 
ð 
ð 
ð 
ð'¨d°3¬ið '¸Dð 'ð 'ð 'ð 'ð"5¨sð 5°tð 5ð 5ð 5ð 5ð5°ð 5¸ð 5ð 5ð 5ð 5ð¨#ð °$ð ð ð ð ð&/ð /ð /ð /ð&	ð 	 #ð 	°ð 	Àð 	ð 	ð 	ð 	ð¨ð °°c´ð ð ð ð ð  Cð ¨H°S¬Mð ð ð ð ð.J Sð J°3ð J¸4ð Jð Jð Jð Jð°ð ¸À$ÀsÈCÀxÄ.Ô9Qð ð ð ð ð(c¸Sð cÀTð cð cð cð cð°$°s¸C°x´.ð ÀTÈ#ÈsÈ(Ä^ð ð ð ð ð>)°ð )ÈÐQUÐVYÐ[^ÐV^ÔQ_ÔH`ð )Ðmqð )Ðvzð )ð )ð )ð )ð"2ð 2°Cð 2Àsð 2ÐSVð 2ÐgoÐpsÔgtð 2ð 2ð 2ð 2ð4>ð >°Sð >Àsð >ÐSVð >ÐfnÐorÔfsð >ð >ð >ð >ð 	*°sð 	*Èð 	*ÐPSð 	*ð 	*ð 	*ð 	*ðÀÀSÄ	ð ÈdÐSgÔNhð ð ð ð ð:"ð "¸Sð "ÈHÐUYÐZ]Ð_bÐZbÔUcÔLdð "ð  ~Bð "ð "ð "ð "ð("ð "¸cð "ÈXÐVZÐ[^Ð`cÐ[cÔVdÔMeð "ð  Cð "ð "ð "ð "ð("ð "¸3ð "È(ÐSWÐX[Ð]`ÐX`ÔSaÔJbð "Ð{ð "ð "ð "ð "ð(°°S¸#°X´ð À4ÈÈSÈÄ>ð ð ð ð ð2¨4°°S°¬>ð ÀhÈtÐTWÐY\ÐT\Ì~ÔF^ð ÐcgÐhkÐmpÐhpÔcqð ð ð ð ð$à˜4  S œ>Ô*ð$ð ˜D  c œNÔ+ð$ð 
ˆc�4˜˜S˜”>Ð!Ô	"ð	$ð $ð $ð $ðL	¨t°D¸¸c¸´NÔ/Cð 	ð 	ð 	ð 	ðð ¨tð ¸tÀDÈÈcÈÄNÔ?Sð ð ð ð ð¨D°°c¸3°h´Ô,@ð ð ð ð ðHð H°Tð HÀTÈ#ÈtÐTWÐY\ÐT\Ì~ÐJ]ÔE^ð Hð Hð Hð Hð
X¨#ð X°#ð Xð Xð Xð Xðð  cð °$ð À8ÈDÐQTÐVYÐQYÌNÔC[ð ð ð ð ð"4°4¸¸S¸´>ð 4ÀdÈ3ÐPSÈ8Änð 4ð 4ð 4ð 4ð6¨t°C¸°H¬~ð 6À$ÀsÈCÀxÄ.ð 6ð 6ð 6ð 6ðð ¨Sð °sð ÈTð Ð^fÐgkÐloÐqtÐltÔguÔ^vð ð ð ð ð¨sð °sð ð ð ð ðU`ð U`¨dð U`Àtð U`ÐW[Ð\_ÐadÐ\dÔWeð U`ð U`ð U`ð U`ðn1ð 1°ð 1¸#ð 1Àtð 1ð 1ð 1ð 1ðfG Sð Gð Gð Gð Gð(8 $ t¨C°¨H¤~Ô"6ð 8ð 8ð 8ð 8ðtð ð ð°#ð ¸$ð ð ð ð ðI¨#ð Ið Ið Ið Ið*4dð 4d sð 4dð 4dð 4dð 4dðlQð Q¨#ð Qð Qð Qð Qðjð j¨cð jð jð jð jð'lð 'l¸ð 'lÈð 'lÐmqð 'lð  HKð 'lð 'lð 'lð 'lðREð E¨sð Eð Eð Eð Eð<P°Cð P¸Dð Pð Pð Pð Pð$ ðL°ð LÀ#ð LÈ$ð Lð Lð Lñ „\ðLð2 ð>°ð >¸\ð >Èdð >ð >ð >ñ „\ð>ð6" $ s¤)ð "ð "ð "ð "ð0&ð 0&ÀÀSÄ	ð 0&ÐVZð 0&Ð{ð 0&ð 0&ð 0&ð 0&ðd#  c¨<Ð&7Ô!8ð #ð #ð #ð #ðL¨|ð LÈ#ð LÐRVð Lð Lð Lð Lð
&°#ð &È4ð &ð &ð &ð &ðJ¨¨c°3¨h¬ð JÀSð JÈTð Jð Jð Jð Jð
2˜sð 2ð 2ð 2ð 2ð
R°°S¸#°X´ð RÀ4ð Rð Rð Rð Rðg°3ð gÀ3ð gÈ4ð gð gð gð gð˜$˜s D¨¨c¨¤NÐ2Ô3ð ð ð ð ð¨ð ð ð ð ð$,*ÀÀSÈ#ÀXÄð ,*ð ,*ð ,*ð ,*ð ,*ð ,*r.   c                   óÐ   — e Zd Zd„ Zdefd„Zdej        dej        fd„Z	d„ Z
eded	efd
„¦   «         Zdej        dej        fd„Zdedej        fd„Zdefd„Zdeeef         fd„ZdS )ÚWAN2GPApplicationc                 óV   — t          ¦   «         | _        i | _        g | _        g | _        d S re   )rÞ   rû   Útab_to_plugin_mapÚall_rendered_tabsrã   r*   s    r,   r&  zWAN2GPApplication.__init__8  s,   € Ý+™oœoˆÔØ:<ˆÔØ/1ˆÔØ*,ˆÔÐÐr.   rß   c                 ó:  — t          | d¦  «        sd S |                     dd¦  «        }|st          | j        |¦  «         |                     d¦  «        }|                     dd¦  «        }|st	          d¦  «         d S | j                             ||¦  «         |st          ||¦  «         |sk|                     dd	¦  «        sU|                     d
g ¦  «        d|                     d
g ¦  «        v rg ndgz   |d
<   d|d<   | j                             ¦   «          | j                             ¦   «          |                     d
g ¦  «        | _	        | j         
                    | j	        ||                     d¦  «        ¬¦  «         | j                             |¦  «         d S )Nrû   Ú	SAFE_MODEFrá   râ   r%   z:[PluginManager] ERROR: server_config not found in globals.Ú motion_designer_bundled_migratedr   rã   r  r�   Úfl)r_  rb  )r±  rv   r÷   rû   rç   rÍ  r   rÏ  rø  rã   rg  ry  )r+   rß   r_  rá   râ   s        r,   Úinitialize_pluginsz$WAN2GPApplication.initialize_plugins>  s$  € Ý�tÐ-Ñ.Ô.ð 	ØˆFà—O’O K°Ñ7Ô7ˆ	àð 	VÝ3°DÔ4GÈÑUÔUÐUà#Ÿš¨Ñ8Ô8ˆØ!,§¢Ð1IÈ2Ñ!NÔ!NÐØð 	ÝÐNÑOÔOÐOØˆFØÔ×-Ò-¨mÐ=SÑTÔTÐTØð 	NÝ& }Ð6LÑMÔMÐMØð 	6 ×!2Ò!2Ð3UÐWXÑ!YÔ!Yð 	6Ø/<×/@Ò/@ÐARÐTVÑ/WÔ/WÐarð  wD÷  wHò  wHð  IZð  \^ñ  w_ô  w_ð  b_ð  b_Ð[]Ð[]ð  fwð  exñ  0yˆMÐ+Ñ,ð  opð  {Hð  Ikñ  {lØÔ×3Ò3Ñ5Ô5Ð5ØÔ×5Ò5Ñ7Ô7Ð7à,×0Ò0Ð1BÀBÑGÔGˆÔàÔ×7Ò7¸Ô8LÐXaÐq|÷  rAò  rAð  BFñ  rGô  rGÐ7ñ  	Hô  	Hð  	HØÔ×*Ò*¨;Ñ7Ô7Ð7Ð7Ð7r.   Úmain_tabs_componentÚstate_componentc                 ó`   — |                       ||¦  «         |                      |||¦  «         d S re   )Ú_create_plugin_tabsÚ_setup_tab_events)r+   rœ  r�  Úset_save_form_events       r,   Úsetup_ui_tabszWAN2GPApplication.setup_ui_tabsY  s9   € Ø× Ò Ð!4°oÑFÔFÐFØ×ÒÐ2°OÐEXÑYÔYÐYÐYÐYr.   c           	      óÌ  ‡ ‡‡— t          ‰ d¦  «        sd S ‰ j                             ¦   «         }g g c}Šd„ t          t          ¦  «        D ¦   «         Š|                     ¦   «         D ]”\  }}|j                             ¦   «         D ]u\  }}|‰ j        |j        <   ||j        |j	        ‰ 
                    ||j        ¦  «        |dœ}	|t          v r|                     |	¦  «         Œ^‰                     ||	f¦  «         ŒvŒ•t          |ˆfd„¬¦  «        }
|
d t          …         }|
t          d …         }ˆfd„‰ j        D ¦   «         }||z   |z   }ˆ fd„}|D �]}	t!          j        |	d         d	|	d
         › �¬¦  «        5 }‰ j                             |¦  «         ‰ j        |j                 }||_        |	d         }‰                      |¦  «        ryt          |d¦  «        rt+          |dd ¦  «        €ddlm}  ||¦  «        |_        |j                             ¦   «         5   ||j        ¦  «         d d d ¦  «         n# 1 swxY w Y   n
 |¦   «          d d d ¦  «         n# 1 swxY w Y   �Œd S )Nrû   c                 ó   — i | ]\  }}||“Œ	S r6   r6   )r†   r•   Úpids      r,   r   z9WAN2GPApplication._create_plugin_tabs.<locals>.<dictcomp>c  s   € ÐKÐKÐK¡X S¨#˜˜SÐKÐKÐKr.   )r	  r
  r  r  r&   c                 óL   •— ‰                      | d         d¦  «        | d         fS )Nr&   i@B r
  r·  )ÚtÚsystem_orders    €r,   r×  z7WAN2GPApplication._create_plugin_tabs.<locals>.<lambda>v  s$   ø€ ˜<×+Ò+¨A¨k¬N¸IÑFÔFÈÈ'Ì
ÐS€ r.   rØ  c                 ó0   •— g | ]}‰D ]\  }}||k    ¯|‘ŒŒS r6   r6   )r†   r&   r¥  Útab_infoÚ	user_tabss       €r,   rˆ   z9WAN2GPApplication._create_plugin_tabs.<locals>.<listcomp>{  s8   ø€ Ð~Ð~Ð~¨Ð`iÐ~Ð~É}ÈsÐT\ÐmpÐt}Òm}Ðm}˜HÐm}Ðm}Ðm}Ðm}r.   c                 óZ   •— ‰                      | d ¦  «         t          j        d¬¦  «        S )NÚ	media_gen)Úselected)Ú_handle_tab_selectionr´  ÚTabs)r0  r+   s    €r,   Úgoto_media_tabz=WAN2GPApplication._create_plugin_tabs.<locals>.goto_media_tab  s,   ø€ Ø×&Ò& u¨dÑ3Ô3Ð3Ý”G [Ð1Ñ1Ô1Ð1r.   r
  Úplugin_r	  )r	  r  Ú_wangp_sessionr   )Úcreate_gradio_webui_session)r±  rû   ri  Ú	enumeraterÑ  rè   r  r•  r
  r  rv   r  r£   r�  ÚUSER_PLUGIN_INSERT_POSITIONrã   r´  ÚTabr–  r±  Ú"_component_constructor_accepts_apirz  Ú
shared.apir´  r³  Úplugin_ui_context)r+   Ú	main_tabsr0  Úloaded_pluginsÚsystem_tabsr&   r3  r*  r~  rª  Úsystem_tabs_sortedÚpre_user_tabsÚpost_user_tabsÚsorted_user_tabsÚall_tabs_to_renderr±  Únew_tabÚconstructorr´  r¨  r«  s   `                  @@r,   rŸ  z%WAN2GPApplication._create_plugin_tabs]  sk  øøø€ Ý�tÐ-Ñ.Ô.ð 	ØˆFàÔ,×<Ò<Ñ>Ô>ˆØ!# RÐˆ�YØKÐKµ½>Ñ1JÔ1JÐKÑKÔKˆà!/×!5Ò!5Ñ!7Ô!7ð 	<ð 	<ÑˆI�vØ%œ{×0Ò0Ñ2Ô2ð <ð <‘�˜Ø4:�Ô& s¤yÑ1à Ø œYØ-0Ô-FØ ,× 0Ò 0°¸C¼LÑ IÔ IØ!*ðð �ð ¥Ð.Ð.Ø×&Ò& xÑ0Ô0Ð0Ð0à×$Ò$ i°Ð%:Ñ;Ô;Ð;Ð;ð<õ $ØØSÐSÐSÐSð
ñ 
ô 
Ðð +Ð+GÕ,GÐ+GÔHˆØ+Õ,GÐ,HÐ,HÔIˆà~Ð~Ð~Ð~°dÔ6JÐ~Ñ~Ô~Ðà*Ð-=Ñ=ÀÑNÐð	2ð 	2ð 	2ð 	2ð 	2ð
 +ð 	"ñ 	"ˆHÝ”˜ Ô)Ð.H¸À¼Ð.HÐ.HÐIÑIÔIð "ÈWØÔ&×-Ò-¨gÑ6Ô6Ð6ØÔ/°´Ô>�Ø(6�Ô%Ø&Ð'>Ô?�Ø×:Ò:¸;ÑGÔGð "Ý" 6Ð+;Ñ<Ô<ð TÅÈÐP`ÐbfÑ@gÔ@gÐ@oØJÐJÐJÐJÐJÐJà0KÐ0KÈFÑ0SÔ0S˜Ô-ØÔ.×@Ò@ÑBÔBð ;ð ;Ø#˜ FÔ$9Ñ:Ô:Ð:ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;øð  �K‘M”M�Mð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ùð	"ð 	"s7   Å7B!IÈH5È)IÈ5H9È9IÈ<H9È=IÉI	ÉI	r  r'   c                 ó  — 	 t          t          j        | ¦  «        j                             ¦   «         ¦  «        }n# t
          t          f$ r Y dS w xY wt          d„ |D ¦   «         ¦  «        rdS d„ |D ¦   «         }t          |¦  «        dk    S )NFc              3   óJ   K  — | ]}|j         t          j        j        k    V — Œd S re   )rj  rk  rl  rn  rp  s     r,   r_  zGWAN2GPApplication._component_constructor_accepts_api.<locals>.<genexpr>š  s/   è è € Ð^Ð^ÀiˆyŒ~¥Ô!2Ô!AÒAÐ^Ð^Ð^Ð^Ð^Ð^r.   Tc                 ód   — g | ]-}|j         t          j        j        t          j        j        hv ¯+|‘Œ.S r6   )rj  rk  rl  rm  ÚPOSITIONAL_OR_KEYWORDrp  s     r,   rˆ   zHWAN2GPApplication._component_constructor_accepts_api.<locals>.<listcomp>œ  s@   € ð !
ð !
ð !
àØŒ~¥'Ô"3Ô"CÅWÔEVÔElÐ!mÐmÐmð àmÐmÐmr.   r�   )	rÏ   rk  rs  r!   rg   re  r¾   rf  rŽ   )r  r!   Úpositional_parameterss      r,   r¸  z4WAN2GPApplication._component_constructor_accepts_api”  s²   € ð	Ý�gÔ/Ð0EÑFÔFÔQ×XÒXÑZÔZÑ[Ô[ˆJˆJøÝ�:Ð&ð 	ð 	ð 	Ø�5�5ð	øøøåÐ^Ð^ÐS]Ð^Ñ^Ô^Ñ^Ô^ð 	Ø�4ð!
ð !
à'ð!
ñ !
ô !
Ðõ
 Ð(Ñ)Ô)¨QÒ.Ð.s   ‚8; »AÁAc           	      óJ  — |rœ|rœ|                      | j        |gd d¬¦  «         | j        D ]w}| j        |j                 } ||j         ¦  «        }|                     | j        |t          j        |j        ¦  «        gt          |d¦  «        r|j
        nd dd¬¦  «         Œtd S d S d S )NÚhidden)ÚfnÚinputsÚoutputsÚshow_progressÚon_tab_outputsÚmultiple)rÌ  rÍ  rÎ  rÏ  Útrigger_mode)Úselectr¯  r–  r•  r
  ÚthenÚ_handle_one_tab_selectionr´  ÚStater±  rÐ  )r+   rœ  r�  r¡  r~  r3  Úevents          r,   r   z#WAN2GPApplication._setup_tab_events¤  só   € Øð 	 ?ð 	Ø×&Ò&ØÔ-Ø'Ð(ØØ&ð	 'ñ ô ð ð Ô-ð ð �ð Ô/°´	Ô:�ð ,Ð+¨C¬JÑ7Ô7�Ø—
’
ØÔ9Ø /µ´¸#¼)Ñ1DÔ1DÐEÝ9@ÀÐIYÑ9ZÔ9ZÐ d Ô 5Ð 5Ð`dØ&.Ø%/ð ñ ô ð ð ð-	ð 	ð 	ð 	ðð r.   r0  Úevtc                 óŠ  — t          | d¦  «        st          | _        |€t          n|j        }| j        |k    rd S | j        r{| j        | j        v rm| j        | j                 }	 |                     |¦  «         nD# t          $ r7}t          d|j        › d|› �¦  «         t          j
        ¦   «          Y d }~nd }~ww xY w|| _        d S )NÚprevious_tab_idz4[PluginManager] Error in on_tab_deselect for plugin rä   )r±  Úmedia_gen_labelrÚ  ry   r•  r5  rï   rç   r   r`  ra  )r+   r0  rØ  Ú
new_tab_idÚplugin_to_deselectrö   s         r,   r¯  z'WAN2GPApplication._handle_tab_selectionÄ  sø   € Ý�tÐ.Ñ/Ô/ð 	3Ý#2ˆDÔ à(+¨•_�_¸¼ˆ
àÔ :Ò-Ð-ØˆFàÔð 	& DÔ$8¸DÔ<RÐ$RÐ$RØ!%Ô!7¸Ô8LÔ!MÐð&Ø"×2Ò2°5Ñ9Ô9Ð9Ð9øÝð &ð &ð &ÝÐkÐM_ÔMdÐkÐkÐhiÐkÐkÑlÔlÐlÝÔ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%øøøøð&øøøð  *ˆÔÐÐs   Á"A8 Á8
B9Â-B4Â4B9c                 óö   — | j                              |d ¦  «        }	 |                     |¦  «        }nF# t          $ r9}t	          d|j        › d|› �¦  «         t          j        ¦   «          d }Y d }~nd }~ww xY w|S )Nz2[PluginManager] Error in on_tab_select for plugin rä   )r•  rv   r3  rï   rç   r   r`  ra  )r+   r0  rÜ  Úplugin_to_selectÚretrö   s         r,   rÕ  z+WAN2GPApplication._handle_one_tab_selectionà  s�   € ØÔ1×5Ò5°jÀ$ÑGÔGÐð	Ø"×0Ò0°Ñ7Ô7ˆCˆCøÝð 	ð 	ð 	ÝÐcÐGWÔG\ÐcÐcÐ`aÐcÐcÑdÔdÐdÝÔÑ!Ô!Ð!ØˆCˆCˆCˆCˆCˆCøøøøð	øøøð ˆ
s   �3 ³
A6½/A1Á1A6Úcomponents_dictc                 ó^   — t          | d¦  «        r| j                             |¦  «         d S d S )Nrû   )r±  rû   r‘  )r+   rá  s     r,   Úrun_component_insertionz)WAN2GPApplication.run_component_insertionê  s?   € Ý�4Ð)Ñ*Ô*ð 	SØÔ×AÒAÀ/ÑRÔRÐRÐRÐRð	Sð 	Sr.   N)r/   r0   r1   r&  rl   r›  r´  r°  rÖ  r¢  rŸ  r·  r4   r5   r¸  r   Ú
SelectDatar¯  rÕ  r   r2   r   rã  r6   r.   r,   r“  r“  7  s8  € € € € € ð-ð -ð -ð8¨dð 8ð 8ð 8ð 8ð6Z°´ð ZÈ2Ì8ð Zð Zð Zð Zð5"ð 5"ð 5"ðn ð/À(ð /Ètð /ð /ð /ñ „\ð/ð°R´Wð ÈrÌxð ð ð ð ð@*¨4ð *°b´mð *ð *ð *ð *ð8¨tð ð ð ð ðS°t¸CÀ¸H´~ð Sð Sð Sð Sð Sð Sr.   r“  r³  )drB  ré   r¿  rà  rk  r    r¼   Útypingr   r   r   r   r   r   Údataclassesr	   r
   Úgradior´  r`  r  r­  ró  r  r  Úshared.utils.config_storer   r   r‡  Ú!shared.utils.wgp_config_migrationr   r   rÛ  rˆ  rÆ  rÈ  r  rÑ   r,  r-  r.  r/  r0  r1  rÛ  Úcompiler{  r‹  r   r8   rB   rG   rN   rP   r2   r3   rQ   rR   rS   rT   rH   rê   r  rÃ  Ú__file__rE  rb  rd  rf   rh   rj   rm   rp   rr   rt   rx   r5   r}   rš   r�   r§   r¤   r¹   rÀ   rÅ   rÉ   rÌ   rÕ   rÜ   rl   r÷   rÑ  rÒ  r¶  r  r  r  r  rÞ   r“  r6   r.   r,   ú<module>rì     sÔ  ðØ €€€€Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø €€€Ø fÐ fÐ fÐ fÐ fÐ fÐ fÐ fØ#€àaÐ Ø(Ð Ø 4Ð Ø-Ð Ø@Ð Ø(DÐ %Ø)FÐ &Ø0Ð Ø,Ð Ø&Ð Ø&Ð Ø2Ð Ø �b”jÐ!<Ñ=Ô=Ð Ø$2Ð#3Ð  ð ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ð. ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðqð qð qð qð qñ qô qñ „ðqð ðð ð ð ð ñ ô ñ „ðð 9;Ð ˜4  _Ð 4Ô5Ð :Ð :Ñ :Ø79Ð ˜$˜s OÐ3Ô4Ð 9Ð 9Ñ 9Ø9;Ð ˜˜cÐ#5Ð5Ô6Ð ;Ð ;Ñ ;Ø,.Ð �$�s˜LÐ(Ô)Ð .Ð .Ñ .Ø46Ð �d˜3Ð 0Ð0Ô1Ð 6Ð 6Ñ 6Ø”g—l’l 2¤7§?¢?°2´7·?²?À2Ä7Ç?Â?ÐS[ÑC\ÔC\Ñ3]Ô3]Ñ#^Ô#^Ð`gÐiqÑrÔrÐ Ø�2”:Ð4Ñ5Ô5Ð ð hð  hð  hÐ ð5 e¨O¸SÐ,@Ô&Að 5ð 5ð 5ð 5ð4 U¨?¸CÐ+?Ô%@ð 4ð 4ð 4ð 4ð) D¨Ð.@Ð)@Ô$Að )ð )ð )ð )ð!ð !ð !ð !ð,˜U <°Ð#4Ô5ð ,ð ,ð ,ð ,ð
0 Ð'7¸Ð'<Ô!=ð 0ð 0ð 0ð 0ð
) ð )Ð(8¸4Ñ(?ð )ð )ð )ð )ð�cð ˜dð ð ð ð ð˜Cð  H¨U¤Oð ð ð ð ð2˜cð  cð ð ð ð ð$ #ð ¨$¨s¬)ð ð ð ð ð$˜3ð  sð ¨sð ð ð ð ð*�sð ˜x¨Ô(9Ô:ð ð ð ð ðO 4¨¨S¨¤>ð O¸$¸sÀC¸x¼.ð OÈSð Oð Oð Oð OðJ¨#ð JÀð JÈð Jð Jð Jð Jð
	 ˜Cð 	  Cð 	 ð 	 ð 	 ð 	 ð #ð ¨$¨s¬)ð ð ð ð ð* ð °ð ¸¸S¼	ð ð ð ð ð#d°_ð #dÐSWð #dð #dð #dð #dðLð ð €ðð ð €ð  Ð à
ð(ð (ð (ð (ð (ñ (ô (ñ „ð(ð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ððD
ð D
ð D
ð D
ð D
ñ D
ô D
ð D
ðLd*ð d*ð d*ð d*ð d*ñ d*ô d*ð d*ðL'uSð uSð uSð uSð uSñ uSô uSð uSð uSð uSr.   