CoolFace
Apppublic

fred-dev/comfy_ui_ali

sourceHugging Facemitupdated 1y agoView on Hugging Face
0likes
samplers.cpython-312.pyc282 linesDownload Raw Back to __pycache__
1�

2���gf���@�ddlmZddlmZddlmZddlmZm	Z	m3Z4erddlmZddl
mZddlmZdd	lZdd5lmZdd	lZddlmZdd	lZdd	lZdd	lZdd	lZdd	lZdd	lZdd	lZdd	lZd�Zd
�Z d�Z!d�Z"d�Z#dAd�Z$dBd�Z%dBd�Z&d�Z'id	d	fd�Z(id	fd�Z)Gd�d�Z*d�Z+d�Z,dCd�Z-dDd�Z.dEd�Z/dFd�Z0d �Z1d!�Z2d"�Z3d#�Z4d$�Z5d%�Z6d&�Z7d'�Z8Gd(�d)�Z9gd*�Z:Gd+�d,e9�Z;iifd-�Z<dGd.�Z=dHd/�Z>dId0�Z?dHd1�Z@dJdKd2�ZAGd3�d4�ZBid	d	d	dd	fd5�ZCe:gd6�zZDGd7�d8e6�ZEeEe-�eEej�d�9�eEej�d�9�eEee-d:�;��eEe+�eEe,�eEe.�eEe/�eEe0d�9�d<�	ZHeIeH�ZJdLd=�ZKd>�ZLGd?�d@�ZMy	)M�)�annotations�)�sampling)�uni_pc)�
TYPE_CHECKING�Callable�7NamedTuple)�ModelPatcher)�	BaseModel)�ControlBaseN)�partial)�model_managementc��t|�dz|kr=dg|dt|�dzzdgz|t|�dzdz}t|�dz|kr�=|S)N�lr)�len)�area�num_dimss  �Y/Users/fredrodrigues/Library/CloudStorage/Dropbox/Code/comfyui_hardware/comfy/samplers.py�
add_area_dimsrs_���t�9��>�X�8%��|�d�?�C��I��N�3�3�q�c�9�D��T��a���<Q�Q���t�9��>�X�9%��K�c10�n�t|jdd�}d}d}d|vr|d}|d|kDryd|vr|d}|d|kryd|vrut|d�}t|t	|��}t	|�dzt	|�kDr8|dt	|�|t	|�dzt	|�dzt	|�zz}d|vr|d}|}|�utt	|��D]^}	t
|j|	dz|t	|�|	zz11||	�||	<|j|	dz|t	|�|	z||	�}�`d|vr�d}12d	|vr|d	}13|d}|jd14d|jddk(sJ�|d|jd}|�Att	|��D]*}	|j|	d15z|t	|�|	z||	�}�,||16z}|jd17�j|jd|jdz|jd18d19d20�}ntj|�}||z}d|vr�|��d}
tt	|��D]�}	t
|
|jd|	zdz�}|t	|�|	zdk7r4t|�D]&}|j|	dz|d21�}|d|z|d22zzz}�(||	|t	|�|	zz|j|	dzks��t|�D]/}|j|	dz||	d23z24|z25d26�}|d|z|d27zzz}�1��i}|d
}|D]3}||j|jd|j|��||<�5|jdd�}|jdd�}d}d|vr�|d}i}|d}|d28}|dk(r5|jj!|j|d|j�}n0|jj#|j|j�}|g|d<t%j&dgd��}||||||||d|�S)Nr��?�timestep_startr�timestep_endr�strength�mask�
mask_strengthr���model_conds)�29batch_size�devicer�hooks�control�gligen�position�middle_patch�cond_obj)�input_x�mult�conditioningrr$�patches�uuidr#r-)�tuple�shape�listrr�range�min�narrow�	unsqueeze�repeat�torch�	ones_like�process_condr"�get�model�set_position�	set_empty�collections�30namedtuple)�conds�x_in�timestep_in�dimsrrrrr)�irrr*�fuzz�rr�t�mr+r �cr#r$r,r%�gligen_type�gligen_model�gligen_patchr(s                            r�get_area_and_multrLs�������A�B�� �D��D��H��5� ��/�0���q�>�N�*������^�,���q�>�L�(��
����E�&�M�"���T�3�t�9�-����I��N�c�$�i�'��31��T��#�d�3�t�9��>�3�t�9��>�S�QU�Y�:V�&W�W�D��U����$���G����s�4�y�!�A��'�-�-��A��.��c�$�i�!�m�1D�D�d�1�g�N�D��G��n�n�Q��U�D��T��Q��,?��a��I�G�"�����
��e�#�!�/�2�M��V�}���32�33�1�2��$�*�*�Q�R�.�0�1�0��%�W�]�]�1�%�&�����3�t�9�%���{�{�1�q�5�$�s�4�y�1�}�*=�t�A�w�G��&��m�#���~�~�a� �'�'��
�
�a�(8�D�J�J�q�M�(I�7�=�=�YZ�K[�]^�`a�b�����w�'���(�?�D�
�U��t�/����s�4�y�!�A��T�4�:�:�a�!�e�,��1�2�B��C��I��M�"�a�'��r��A����A��E�1�a�0�A��3��8��A��.�/�A�#��Q��$�s�4�y�1�}�-�-����A��E�1B�B��r��A����A��E�4��7�Q�;��?�A�>�A��3��8��A��.�/�A�#�"��L��
�&�K�
��%�a�.�5�5����A��W[�Wb�Wb�im�5�n��Q���
�I�I�g�t�$�E��i�i�	�4�(�G��G��5���x������Q�i���a�y���*�$�'�-�-�:�:�7�=�=�&�QR�)�U\�Uc�Uc�d�L�'�-�-�7�7��
�
�w�~�~�V�L�#/�.�����%�%�j�3E�F�H��G�T�<��w���v��X]�^�^rc��||ury|j�|j�k7ry|D]}||j||�r�yy)NTF)�keys�34can_concat)�c1�c2�ks   r�cond_equal_sizerSqsK��	�R�x��	�w�w�y�B�G�G�I���
���!�u����1��&���rc��|jj|jjk7ryd�}||j|j�sy||j|j�syt	|j35|j36�S)NFc�&�|du|duk7ry|�||uryy)NFT�)�obj1�obj2s  r�objects_concatablez+can_concat_cond.<locals>.objects_concatables)���D�L�d�d�l�+�����4���r)r)r/r$r,rSr+)rPrQrYs   r�can_concat_condrZ{sg��	�z�z���2�:�:�+�+�+����b�j�j�"�*�*�5���b�j�j�"�*�*�5���2�?�?�B�O�O�<�<rc���i}|D]4}|D]-}|j|g�}|j||�|||<�/�6i}|D]!}||}|dj|dd�||<�#|S)Nrr)r9�append�concat)�c_list�temp�xrR�cur�outr?s       r�cond_catrc�s���
�D�
���A��(�(�1�b�/�C��J�J�q��t���D��G���
�C�
���Q����q�����q�r��+��A����Jrc	���g}|D]&}|jtj|���(|j�D]�\}}	|	D]�\}37}t	||�dk(r�|38j39}|�R||}
t	|�dz}t
|�D]!}|
j|dz|||z||�}
�#|
|40jz}
�x||xx|41jzcc<����t|�D]�\}}t	||�dk(r�tjjj|d��tj|�dk(r�\||}|D]�}t|||�}|��|j|��}|j �'|j"j%||j |�|j'|j t)��||j xx||fgz
cc<����y)NrrT)�inplace�)r*)r\r6r7�itemsrrr1r3r*�	enumerate�nn�42functional�relu�maxrL�_replacer#�current_patcher�%prepare_hook_patches_current_keyframe�43setdefaultr0)r:�
hooked_to_run�
default_condsr@�timestep�
model_options�
default_mults�_�44lora_hooks�to_runr(rCr�curr_default_multrBr*�condr`�ps                   r�finalize_default_condsr|�s����M�
�����U�_�_�T�2�3��,�1�1�3��45�F�!�K�H�a��=��#�$��)��&�m�m�D���2?��2B�!��4�y�A�~���t��A�(9�(@�(@��Q���Q�QU�X��X\�]^�X_�(`�%�%�!�X�]�]�2�!��a� �H�M�M�1� �"�4��]�+���4��}�Q�� �A�%��
����� � ��t� �4��9�9�T�?�c�!���Q����A�!�!�T�8�4�A��y���46�47��48�%�A��w�w�"��%�%�K�K�H�VW�V]�V]�_l�m��$�$�Q�W�W�d�f�5��!�'�'�"��1�v�h�.�"��,rc��tjjjttjjtjjj|d���}|j|||||�S)NT��is_model_options)	�comfy�patcher_extension�WrapperExecutor�new_executor�_calc_cond_batch�get_all_wrappers�49WrappersMP�CALC_COND_BATCH�execute)r:r?r@rsrt�executors      r�calc_cond_batchr��sr���&�&�6�6�C�C��
���0�0��1H�1H�1S�1S�1c�1c�er�FJ�0�	K��H����E�5�$��-�H�Hrc	�J�g}g}i}g}d}	tt|��D�]}50|jtj|��|jtj51|�dz�||52}g}|��|D]�}
d|
vr|j|
�d}	�t
|
||�}|��+|j�'|jj||j|�|j|jt��||jxx||53fgz
cc<��|j|���|	rt||||||�|jj|�|j�D�]\}}t|�dkDs�|d}|ddj}g}tt|��D]}
t!||
d|d�s�||
gz
}� |j#�|dd}t%j&|j(�}tdt|�dz�D]O}54|dt|�|55z}t|�|dzgt|�ddz}|j+|�dz|ks�M|}ng}g}g}g}g}g}d}d}|D]�}
|j-|
�} | d}|j|j.�|j|j0�|j|j2�|j|j4�|j| d�|j|j6�|j8}|j:}��t|�}!tj<|�}t?|�}tj<|g|!z�}"|jjA|��}#d	|vr%tBjDjG|#|d	d�56�}#|�Dd|#vr;|#djI�}$|D]}||$vr|$|||z|$|<�|||$|<�|$|#d<n||#d<|dd|#d<|dd|#d
<||#d<|#|d	<|�!|jK||"|t|�|#�|d<d|vr+|d|jL||"||d��jO|!�}%n#|jL||"fi|��jO|!�}%t|!�D]�} || }&|| }'|'�'||&xx|%| || zz
cc<||&xx|| z
cc<�6||&}(||&})t|'�dz}*t|*�D]@}57|(jQ|58dz|'|59|*z|'|60�}(|)jQ|61dz|'|62|*z|'|63�})�B|(|%| || zz
}(|)|| z
})��t|�dkDr�����tt|��D]}64||65xx||66zcc<�|S)NFg���B�A8�defaultTrrg�?)r#�transformer_options)�67copy_dict1r,�cond_or_uncond�uuids�sigmasr$�model_function_wrapper)�inputrsrHr�r))r1rr\r6�68zeros_liker7rLr#rnrorpr0r|�
prepare_statergr/rZ�reverser�get_free_memoryr"�memory_required�popr)r*r+rr-r$r,�catrc�apply_hooksr�r��merge_nested_dicts�copy�get_control�apply_model�chunkr3)+r:r?r@rsrt�	out_conds�69out_countsrqrr�has_default_condsrCrz�	default_cr`r{r#rx�first�first_shape�
to_batch_temp�to_batch�free_memory�batch_amount�input_shaper)r*rHr�r�rr$r,�o�batch_chunks�	timestep_r��cur_patches�output�70cond_index�a�out_c�out_ctsrBs+                                           rr�r��s0���I��J�HJ�M��M���
�3�u�:�
������)�)�$�/�0����%�/�/�$�/�%�7�8��Q�x���	�������>��$�$�Q�'�(,�%��%�a��x�8���9���7�7�&��)�)�O�O�PX�Z[�Za�Za�cp�q��(�(����$�&�9��a�g�g�&�A�q�6�(�2�&��	���Y�'�'�*��u�m�]�D�(�Ta�b�	���'�'��1�'�,�,�.�
��v��&�k�A�o��1�I�E���(�1�+�+�+�K��M��3�v�;�'��"�6�!�9�Q�<��q��:�!�a�S�(�M�(�
�!�!�#�$�R�a�(�H�*�:�:�4�;�;�G�K��1�c�-�0�1�4�5��,�-C�c�-�.@�!�.C�D��"�<�0�;�q�>�A�B�T�+�EV�WX�WY�EZ�Z���(�(��5��;�k�I�+�H��6��G��D��A��N��E��D��G��G����J�J�q�M���a�D�����q�y�y�)����A�F�F�#�������(����A�F�F�#��%�%�a��d�+����Q�V�V�$��)�)���)�)����~�.�L��i�i��(�G����A��	�	�8�*�|�";�<�I�"'�"7�"7�"C�"C�%�"C�"P��$�
�5�&+�&=�&=�&P�&P�Qd�Q^�_t�Qu�\a�'Q�'c�#��"�� 3�3�"5�i�"@�"E�"E�"G�K�$����+�-8��^�g�a�j�-H�K��N�-4�Q�Z�K��N�	%�716A�'�	�2�5<�'�	�2�4B�1�4E�� 0�1�+0��8���(�,4���)�':�A�#�$��"�&�2�2�7�I�q�#�n�J]�_r�s��)��'�=�8�@��'?�@��AR�AR�^e�s|�DE�Yg�Uh�i�o�o�p|�}��*��*�*�7�I�C��C�I�I�,�W���<�(��+�A�.�72���G���9��j�)�V�A�Y��a��-@�@�)��z�*�d�1�g�5�*�%�j�1�E�(��4�G��q�6�Q�;�D�"�4�[�� %���Q��U�A�a�$�h�K��1�� F��")�.�.��Q���!�d�(��Q�q�T�"J��)��V�A�Y��a��0�0�E��t�A�w�&�G�)�[�&�k�A�o�/�|�3�y�>�
"���!��73�1�
�%��#��rc	�`�tjd�tt|||g|||��S)NzuWARNING: The comfy.samplers.calc_cond_uncond_batch function is deprecated please use the calc_cond_batch one instead.)�logging�warningr.r�)r:rz�uncondr@rsrts      r�calc_cond_uncond_batchr�Vs1���O�O�L�M�����v���h�
�V�W�Wrc	���d|vr"||z74||z75||||||||d�76}	||d|	�z77}78n|||z79|zz}80|jdg�D]}|81|||||||||d�82}	||	�}83�|84S)N�sampler_cfg_function)85rzr��86cond_scalersr��sigma�
cond_denoised�uncond_denoisedr:rt�sampler_post_cfg_function)87�denoisedrzr�r�r:r�r�r�rtr��r9)r:�	cond_pred�uncond_predr�r`rsrtrzr��args�88cfg_result�fns            r�cfg_functionr�Zs�����.��I�
��[��PZ�hp�{|�HP�!*�{�UZ�mz�|���>��'=�>�t�D�D�89� �I��$;�z�#I�I�90���� ;�R�@��&���V`�kp�FQ�dm�!�M�A�O����X�91�A�92�rc��tj|d�r|jdd�dk(rd}n|}||g}	t||	|||�}93|jdg�D]}|	|94||||||d�}||�}95�t	||96d|97d||||||��	S)	Nr�disable_cfg1_optimizationF�sampler_pre_cfg_function)r?�	conds_outr�rsr�r�r:rtrr)rtrzr�)�math�iscloser9r�r�)
r:r`rsr�rzr�rt�seed�uncond_r?rbr�r�s
             r�sampling_functionr�ks����|�|�J��$��):�):�;V�X]�)^�bg�)g�����
�7�O�E�98�%���8�]�99C�C���� :�B�?���C�z�W_��X��P]�_���$�x��@�100��s�1�v�s�1�v�z�1�h�Vc�jn�w~��rc��eZdZd�Zidfd�Zy)�KSamplerX0Inpaintc� �||_||_y�N)�inner_modelr�)�selfr:r�s   r�__init__zKSamplerX0Inpaint.__init__}s�� �����rNc�J�|�td|vr%|d|||j|jd���}d|z101}||z|jjj|||j|j��|zz}|j||||��}|�||z|jzz}|S)N�denoise_mask_function)r:r�)�
extra_optionsr)r`r��noise�latent_image�rtr�)r�r��scale_latent_inpaintr�r�)r�r`r��denoise_maskrtr��latent_maskrbs        r�__call__zKSamplerX0Inpaint.__call__�s����#�&�-�7�E�}�-D�E�e�\�sw�tD�tD�PT�P[�P[�j\� ]���|�+�K��L� �4�#3�#3�#?�#?�#T�#T�WX�`e�mq�mw�mw�GK�GX�GX�#T�$Y�\g�$g�g�A����q�%�}�4��P���#���$�t�'8�'8�;�'F�F�C��102r)�__name__�103__module__�__qualname__r�r�rVrrr�r�|s���>@�d�	rr�c104���|}g}t|j�|z}t|�D].}|t|jdt	||z�z�gz
}�0|dgz
}tj|�S)Nrrf)rr�r1�float�intr6�FloatTensor)�model_sampling�steps�s�sigs�ssr`s      r�simple_schedulerr��sr���A�
�D�	�Q�X�X���	�B�
�5�\����q�x�x�!�c�!�b�&�k�/� 2�3�4�5�5����S�E�M�D����T�"�"rc��|}g}d}tjt|j|�dd��r|dz
}g}ndg}t	t|j�|zd�}|t|j�kr:|t|j|�gz
}||z
}|t|j�kr�:|ddd�}t
j|�S)Nrr��h㈵��>��abs_tolrf�����)r�r�r�r�rlrr6r�)r�r�r�r�r`r�s      r�ddim_schedulerr��s����A�
�D�	�A��|�|�E�!�(�(�1�+�&��7�;�
��105�����u��	�S����]�e�
#�Q�	'�B�106�c�!�(�(�m�107���q�x�x��{�#�$�$��	�R����c�!�(�(�m�108���"��:�D����T�"�"rFc��|}|j|j�}|j|j�}d}|rtj|||dz�dd}nNtjt|j|��dd��r|dz
}d}tj|||�}g}	tt|��D]0}109||110}|	jt|j|����2|r|	dgz
}	tj|	�S)	NTrr�rr�r�Frf)
rs�	sigma_max�	sigma_minr6�linspacer�r�r�r�r1rr\r�)r�r��sgm�floorr��start�end�append_zero�	timestepsr�r`�tss            r�normal_schedulerr�s����A�
�J�J�q�{�{�#�E�111�*�*�Q�[�[�112!�C��K�113��N�N�5�#�u�q�y�9�#�2�>�	��<�<��a�g�g�c�l�+�Q��@��Q�J�E��K��N�N�5�#�u�5�	�
�D�
�3�y�>�
"��
�q�\�����E�!�'�'�"�+�&�'�#�����
�����T�"�"rc��t|j�dz114}dtjdd|d��z115}tjt116jjj|||�|z�}g}d}|D].}||k7r%|t|jt|��gz
}|}�0|dgz
}tj|�S)NrrF)�endpointr�rf)
rr��numpyr��rint�scipy�stats�beta�ppfr�r�r6r�)	r�r��alphar�total_timestepsrr��last_trFs	         r�beta_schedulerr
�s����>�0�0�1�A�5�O�	117�U�^�^�A�q�%�%�
8�	8�B�	���E�K�K�$�$�(�(��U�D�9�O�K�	L�B�
�D�
�F�
����;��U�>�0�0��Q��8�9�:�:�D����	�S�E�M�D����T�"�"rc���|dk(rddg}n�|�|dz}t|�D�cgc]118}||z|z��}}|||zz119}||z120}|||dzzz}	||zd|z|dzzz121}122|	|dzz}t||�D�cgc]}|	|dzz|123|zz|z��}}||zdgz}|D�
cgc]}
d|
z124��	}}
tj|�|jj	�zScc}wcc}wcc}
w)Nrrrfr)r1r6r�r��cpu)r�r��threshold_noise�linear_steps�sigma_schedulerC�linear_sigma_schedule�threshold_noise_step_diff�quadratic_steps�quadratic_coef�linear_coef�const�quadratic_sigma_scheduler`s              r�linear_quadratic_scheduler�sH����z��s����� �A�:�L�MR�S_�M`� a�M`���_�!4�|�!C�M`�� a�$0�?�U�3J�$J�!��,�.��2�l�_�XY�EY�6Y�Z��%��4�q�;T�7T�Xg�kl�Xl�7m�m���,�!�"3�4���<��/�$125�/��
�a�1�f�%��a��7�%�?�/�	!�$126�/�1I�I�S�E�Q��+9�:�>�a�#��'�>��:����^�,�~�/G�/G�/K�/K�/M�M�M��!b��$127��128;s�C�/C�Cc�&�tj|tj��j|dz129�}|j	|dz�}|tj|�zd|z130tj|�zzj�|dd|S)N)�dtyperr�)r6�aranger��div_�	new_zerosr��atan�tan_)�nr�r��adj_idxsr�s     r�kl_optimal_schedulerr$�sx���|�|�A�U�[�[�1�6�6�q�1�u�=�H�
�
�
��A��
&�F��d�i�i�	�2�2�a�(�l�d�i�i�PY�FZ�5Z�Z�`�`�b�F�3�B�K��Mrc��|j�dk(r0tjd|jtj��S|j131d}tj|df|jtj��}tj||jtj��}t|�D]�}||}|j�dk(r�tj|dk7�dk(rd||<�=tj|�\}}tj|�||df<tj|�||df<tj|�||df<tj|�||d	f<��||fS)132Nr)rr�r"rrFTrr�)�numelr6�zerosr"r�r/�boolr1rl�wherer2)�masks�b�bounding_boxes�is_emptyrCr�yr`s        r�
get_mask_aabbr1�s0���{�{�}����{�{�6�%�,�,�e�i�i�H�H�
���A��A��[�[�!�Q�����E�I�I�N�N��{�{�A�u�|�|�5�:�:�F�H�
�1�X���Q�x���:�:�<�1����9�9�T�Q�Y��5�(��H�Q�K���{�{�4� ���1�$�y�y��|��q�!�t��$�y�y��|��q�!�t��$�y�y��|��q�!�t��$�y�y��|��q�!�t����8�#�#rc���tt|��D�]a}||}d|vr�|d}|ddk(r�|j�}|dd}t|�dz}d}tt|��D]$}	|tdt	||	||	z��fz
}�&tt|��D]}	|t	||	|z||	z�fz
}�||d<|}|||<d|vs��|d}133|134j|��}135|j�}t|136j�t|�k(r|137jd�}138|139jdd|k7rKtjjj|140jd�|d	d141��jd�}142|jdd143�r�tjtj|144�d�
�jjd�}t!|�\}}
|
drd|d<nu|d}|d|dz145dz|d|dz146dz|d|df\}}}}td|�}td|�}t#|�t#|�t#|�t#|�f}||d<|147|d<|||<��dy)Nrr�148percentagerrrVr�r"�bilinearF)�size�mode�
align_corners�set_area_to_bounds)�dim)rrrrr'r)r1rr�rl�round�tor/r4r6rirj�interpolate�squeezer9�abs�valuesr1r�)�149conditionsrBr"rCrHr�modifiedr��a_len�dr�bounds�boxesr/�box�H�W�Y�Xs                   r�%resolve_areas_and_cond_masks_multidimrL�s����3�z�?�
#���q�M���Q�;��V�9�D��A�w�,�&��6�6�8�����H���A��!������s�4�y�)�A��S��E�!�A�$��a��.�$9�:�<�<�D�*��s�4�y�)�A��U�1�Q��Y�<�$�q�'�#9�:�<�<�D�*�$(��� ��� !�150�1�
��Q�;��V�9�D��7�7�&�7�)�D��v�v�x�H��4�:�:��#�d�)�+��~�~�a�(���z�z�!�"�~��%��x�x�*�*�6�6�t�~�~�a�7H�t�Zd�ty�6�z�C�C�DE�F���|�|�0�%�8����5�9�9�T�?�q�9�@�@�J�J�1�M��"/��"7���x��A�;�'3�H�V�$���(�C�"%�a�&�3�q�6�/�A�"5�s�1�v��A����7J�C�PQ�F�TW�XY�TZ�![�J�A�q�!�Q��A�q�	�A��A�q�	�A���F�C��F�C��F�C��F�;�D�'+�H�V�$�#�H�V��$�J�q�M�U$rc�J�tjd�t|||g|�S)Nz�WARNING: The comfy.samplers.resolve_areas_and_cond_masks function is deprecated please use the resolve_areas_and_cond_masks_multidim one instead.)r�r�rL)rA�h�wr"s    r�resolve_areas_and_cond_masksrP.s(���O�O�h�i�0��a��V�V�L�Lrc	��d|vryd�}|d}d}|D]y}d|vrn|d}|||�s�|�|}�d|vr|}�"tj|ddt|d�dz�tj|dt|�dz�kDs�r|}�u|��x|}�{|�yd|vr	|d|k(ry|j�}|dj�|d<||gz
}y)Nrc�h�t|t|�dz�}t|t|�dz�}t|�dz}t|�dz}tt||��D]}|||z|||zks�ytt||��D]!}|||||zz|||||zzkDs�!yy)NrFT)rrr1r2)r��area_cmp�a_l�151area_cmp_lrCs     r�area_insidez7create_cond_with_same_area_if_none.<locals>.area_inside6s����!�S��]�a�/�0�� ��3�q�6�Q�;�7���!�f��k����]�a�'�152��s�3�153�+�,�A���q��z�H�Z�!�^�4�4��-��s�3�154�+�,�A��!��q��q��z�!�h�q�k�H�Z�!�^�4L�&L�M��-�rrr )r��prodrr�)r?rHrV�c_area�smallestr`r�rbs        r�"create_cond_with_same_area_if_nonerZ2s
��
�Q�����v�Y�F��H�
���Q�;��&�	�A��6�1�%��#� �H��8�+� �H��y�y��&�!1�2M�3�x��7G�3H�A�3M�!N�O�RV�R[�R[�\]�^j�_b�cd�_e�ij�_j�\k�Rl�l�#$����������
����F��v�%��155�&�&�(�C�!�-�0�5�5�7�C�
��	�c�U�N�Erc156���|j}tt|��D]�}||}d}d}d|vr]|jt	|d|jdd���}|jt
|d|jdd���}n0d|vr|j|d�}d|vr|j|d�}|�|���|j�}|�||d<|�||d<|||<��y)	N�clip_start_percent�
start_percentrf�clip_end_percent�end_percentrrr)r�r1r�percent_to_sigmarlr9r2r�)r:r?r�rFr`rrr"s        r�calculate_start_end_timestepsra^s��
���A�
�3�u�:�
���!�H�������1�$��/�/��A�6J�4K�Q�U�U�Sb�dg�Mh�0i�j�N��-�-�c�!�4F�2G����}�^a�Ib�.c�d�L��!�#�!"�!3�!3�A�o�4F�!G����!� �1�1�!�M�2B�C���&�L�,D�����A��*�&4��"�#��(�$0��.�!��E�!�H�+rc���|j�tt|��D]&}||}�fd�}d|vs�|dj||��(y)Nc�&���j|�Sr�)r`)r�r�s �r�<lambda>z!pre_run_control.<locals>.<lambda>|s����1C�1C�A�1Frr$)r�r1r�pre_run)r:r?rFr`�percent_to_timestep_functionr�s     @r�pre_run_controlrgwsL���
���A�
�3�u�:�
���!�H��'F�$���>�
�i�L� � ��(D�E�rc��g}g}g}g}tt|��D]=}||}	d|	vs�
||	vr|	|�|j|	|��+|j|	|f��?tt|��D]=}||}	d|	vs�
||	vr|	|�|j|	|��+|j|	|f��?t|�dkDrytt|��D]h}	||	t|�z}157|158d}||vr(||�#|j�}|||	�||<||gz
}�E|j�}|||	�||<|||159d<�jy)Nrrr)r1rr\r�)
r?r��name�uncond_fill_func�160cond_cnets�161cond_other�uncond_cnets�uncond_otherrFr`r_r�r"s
             r�apply_empty_x_to_equal_arearo�sf���J��J��L��L�
�3�u�:�
���!�H����?��q�y�Q�t�W�0��!�!�!�D�'�*��!�!�1�a�&�)�
��3�v�;�
���1�I����?��q�y�Q�t�W�0��#�#�A�d�G�,��#�#�Q��F�+�
 ��<��1���
�3�z�?�
#���A��L� 1�1�2����G���1�9��4��,�����A�&�z�1�5�A�d�G��q�c�M�F�����A�&�z�1�5�A�d�G��F�4��7�O�$rc��tt|��D]�}||}|j�}||d<||d<d}	t|j�dk\r|jddz}	|j	d|	�|d<|j	d|jddz�|d<|j	d	|�|d	<|D]}162|163|vs�||164||165<�|di|��}|j�}|d166j�}|D]167}168||169||170<�||d171<|||<��|S)Nr"r�rr'r�width�heightr�prompt_typer rV)r1rr�r/r9)
�model_functionr?r�r"rs�kwargsrFr`�params�
default_widthrRrbr s
             r�encode_model_condsrx�s+��
�3�u�:�
���!�H�������!��x����w���
��u�{�{��q� �!�K�K��N�Q�.�M� �*�*�W�m�<��w��!�:�:�h����A���0B�C��x�� &�172�173�=�+� F��}���A����"�1�I��q�	���&�v�&��
�F�F�H���
�&�+�+�-���A� ��V�K��N��&��-����a��+�,�Lrc��eZdZd�Zd�Zy)�Samplerc��yr�rV)r�s r�samplezSampler.sample�s��rc��t|jjj�}t|d�}t	j174||d��xs||kDS)Nrr�)�rel_tol)r�r�r�r�r�r�)r��175model_wrapr��	max_sigmar�s     r�max_denoisezSampler.max_denoise�sI���*�0�0�?�?�I�I�J�	��f�Q�i� ���|�|�I�u�e�<�Q��	�@Q�QrN)r�r�r�r|r�rVrrrzrz�s
��
�Rrrz) �euler�euler_cfg_pp�euler_ancestral�euler_ancestral_cfg_pp�heun�heunpp2�dpm_2�dpm_2_ancestral�lms�dpm_fast�dpm_adaptive�dpmpp_2s_ancestral�dpmpp_2s_ancestral_cfg_pp�	dpmpp_sde�
dpmpp_sde_gpu�dpmpp_2m�dpmpp_2m_cfg_pp�dpmpp_2m_sde�dpmpp_2m_sde_gpu�dpmpp_3m_sde�dpmpp_3m_sde_gpu�ddpm�lcm�ipndm�ipndm_v�deis�
res_multistep�res_multistep_cfg_pp�res_multistep_ancestral�res_multistep_ancestral_cfg_pp�gradient_estimation�er_sdec� �eZdZiifd�Zdd�Zy)�KSAMPLERc�.�||_||_||_yr�)�sampler_functionr��inpaint_options)r�r�r�r�s    rr�zKSAMPLER.__init__�s�� 0���*���.��rNc		����
�||d<t||�}	||	_|jjdd�r�t	j176|jdd�dz�}177t	j|j|178d��j|j�j|j�|	_n||	_|jjj|d	|||j||��}d}t!|�dz179�
����
fd180�}|j"|	||f|||d�|j$��}|jjj'|d|�}|S)
Nr��randomFr��)rr)�	generatorr"rc�,���|d|d|d��S)NrCr�r`rV)r`�callback�total_stepss ��rrdz!KSAMPLER.sample.<locals>.<lambda>�s���8�A�c�F�A�j�M�1�S�6�;�#Wr��181extra_argsr��disabler�)r�r�r�r9r6�manual_seed�randnr/r<rr"r�r�r��
noise_scalingr�rr�r��inverse_noise_scaling)r�rr�r�r�r�r�r��disable_pbar�model_kr��182k_callback�samplesr�s    `        @rr|zKSAMPLER.sample�si���%1�183�>�"�#�J��7��+������#�#�H�e�4��)�)�*�.�.���*D�q�*H�I�I�!�K�K����y�QV�W�Z�Z�[`�[f�[f�g�j�j�kp�kw�kw�x�G�M�!�G�M��&�&�5�5�C�C�F�1�I�u�Vb�dh�dt�dt�u�BH�eI�J���184��&�k�A�o����W�J�'�$�'�'����X�:�`j�uA�X�EI�EW�EW�X���(�(�7�7�M�M�f�UW�j�Za�b���r)NNF)r�r�r�r�r|rVrrr�r��s��79�2�/�185rr�c��|dk(rd�}|}n*|dk(rd�}|}nttdj|��}t|||�S)Nr�c186��t|�dkr|S|d}|dk(r|d}t|�dz187}tj||||d||||��S�Nrr�r�����r�)r�k_diffusion_sampling�sample_dpm_fast)r:r�r�r�r�r�r�r�s        r�dpm_fast_functionz#ksampler.<locals>.dpm_fast_function�sq���6�{�a�����r�188�I��A�~�"�2�J�	��f�+��/�K�'�7�7��u�i�QW�XY�QZ�\g�t~�JR�\c�d�
drr�c��t|�dkr|S|d}|dk(r|d}tj||||df|||d�|��Sr�)rr��sample_dpm_adaptive)r:r�r�r�r�r�r�r�s        r�dpm_adaptive_functionz'ksampler.<locals>.dpm_adaptive_function�st���6�{�a�����r�189�I��A�~�"�2�J�	�'�;�;�E�5�)�U[�\]�U^�l�ku�AI�SZ�l�^k�l�
lrz	sample_{})�getattrr��formatr�)�sampler_namer�r�r�r�r�s      r�ksamplerr��sW���z�!�	d�-��	��	'�	l�1��"�#7��9K�9K�L�9Y�Z���$�m�_�E�Erc��|D]*}||dd||<t|||jdd|��,|D]}t|||��t|d�r*|D]%}t	|j190||||||||��||<�'|D](}||D]}|D]}	||	k7s�	t
||	|��� �*|D]6}||D],}d|vs�|djD]}191|192j|���.�8|D]}t|||��d|vrJ|d}|D]@}|dk7s�	tttd�|��||dd��t|||d	d193���B|S)Nr�extra_conds)r�r�r�r#�positivec�,�|jdd�dk(S)N�control_apply_to_uncondFTr�)rHs rrdzprocess_conds.<locals>.<lambda>#s��!�%�%�Ha�ch�Bi�mq�Bqrr$c��||Sr�rV�rkr`s  rrdzprocess_conds.<locals>.<lambda>#s��ku�vw�kxrr%c��||Sr�rVr�s  rrdzprocess_conds.<locals>.<lambda>$s��`j�kl�`mr)
rLr/ra�hasattrrxr�rZr#�initialize_timestepsrgror0�filter)r:r�r?r"r�r�r�rRrH�kk�hookr�s            r�
process_condsr�s���
����8�A�;��a��-�e�A�h����A�B���P����%�e�U�1�X�6���u�m�$��A�)�%�*;�*;�U�1�X�u�f�VW�fr�BN�UY�Z�E�!�H�����q��A�����7�6�u�R�y�!�D�������q��A��!�|��g�J�,�,�D��-�-�e�4�-�������u�Q�x�(���U����$���A��J��+�D��8q�s{�1|�,}�@E�FG�@H�JS�Ux�y�+�H�e�A�h��Jm�n��194�Lrc���i}|D]l}||D]b}d|vs�|d}|j�}t|�dkDs�,|jdd�}|j||fg�}|j	|��d�nt|�dk(ry|j�D]Y\}}	|d}|d}tjjj|j�|gz�}|��N|	D]}195||196d<�	�[y)Nr$rr#r)197�get_extra_hooksrr9rpr\rgr�r#�	HookGroup�combine_all_hooks)r?�hook_replacementrRr�r$�extra_hooksr#�198to_replace�key�conds_to_modifyrzs           r�preprocess_conds_hooksr�)s��TV��
����(�B��B��)+�I���%�5�5�7���{�#�a�'�35�6�6�'�4�3H�E�!1�!<�!<�g�u�=M�r�!R�J��%�%�b�)�������!��!1� 6� 6� 8���_��a�&���A������%�%�7�7��8O�8O�8Q�UZ�T[�8[�\����'�� %��W�
�(�
!9rc��|jdd�}|�$|D]}||D]}|jdd��� yi}|D]V}||D]L}|jdd�}|��|j|�r�*|j|g�}|j	|��N�X|j�D]2\}}|j
|�}	t|	�dk(rd}	|D]}|	|d<�	�4y)z�Modify 'hooks' on conds so that only hooks that were registered remain. Properly accounts for199    HookGroups that have the same reference.�registered_hooksNr#r)r9r��is_subset_ofrpr\rg�new_with_common_hooksr)200r?rt�201registeredrRr�r�r#r�r��	new_hookss202          r� filter_registered_hooks_on_condsr�Ds���)6�(9�(9�:L�d�(S�J����A��A�h�����w��%���	�@B��
����(�B�+-�6�6�'�4�+@�E�� ��)�)�*�5�!1�!<�!<�U�B�!G�J��%�%�b�)���#3�"8�"8�":�����/�/�203�;�	��y�>�Q���I�!�B�#�B�w�K�"�	#;rc��t�}|D]-}||D]#}|j|jdd���%�/t|�S)Nr#)�set�addr9r)r?�	hooks_setrRr�s    r�get_total_hook_groups_in_condsr�`sD����I�
����(�B��M�M�"�&�&��$�/�0����y�>�rc���|�y|jdd�}|�yg}|�|j|�|�|j|�t|�dk(ryd|vrX|d}|D]N}||}tt|��D]0}t	||d�s�|D]}	||j|	�||<��2�Pd|vrF|d}|D]<}||}|D]0}204t	||205d�s�|D]}	||206j|	�||207<��2�>ddg}|D]}}||vs�||}
|
j
�D]^}|j
�D]I}tt|��D]0}t	||d�s�|D]}	||j|	�||<��2�K�`�y)	z[208    If any patches from hooks, wrappers, or callbacks have .to to be called, call it.209    N�to_load_optionsrr,r<�patches_replace�wrappers�	callbacks)r9r\rr1r�r<r@)rtr"rr��castsr,ri�210patch_listrC�castrR�wrappers_and_callbacks�wc_name�wc�wc_dict�wc_lists                r�cast_to_load_optionsr�hs������#�'�'�(9�4�@�O�����E�
��
���V����
���U��211�5�z�Q����O�#�!�)�,���D� ���J��3�z�?�+���:�a�=�$�/� %��(2�1�
�(8�(8��(>�212�1�
�!&�,���O�+�!�"3�4���D� ���J����:�a�=�$�/� %��(2�1�
�(8�(8��(>�213�1�
�!&� ��)�+�6��)���o�%�"1�'�":�B��9�9�;��&�~�~�/�G�"�3�w�<�0��"�7�1�:�t�4�(-��-4�Q�Z�]�]�4�-@���214�).�1� 0�'�*rc�N�eZdZdd�Zd�Zd�Zd�Zd�Zidfd�Zd�Z	dd	�Z215dd216�Zy)
�	CFGGuiderc�P�||_|j|_i|_d|_y)Nr)�
model_patcherrt�original_conds�cfg)r�r�s  rr�zCFGGuider.__init__�s'��*���*�8�8��� �����rc�,�|j||d��y)N)r��negative)�inner_set_conds)r�r�rs   r�	set_condszCFGGuider.set_conds�s�����(��I�Jrc��||_yr�)r�)r�r�s  r�set_cfgzCFGGuider.set_cfg�s	����rc�p�|D]1}tjj||�|j|<�3yr�)r��sampler_helpers�convert_condr�)r�r?rRs   rrzCFGGuider.inner_set_conds�s1���A�%*�%:�%:�%G�%G��a��%Q�D����"�rc�&�|j|i|��Sr�)�
predict_noise)r�r�rus   rr�zCFGGuider.__call__�s��!�t�!�!�4�2�6�2�2rNc217��t|j|||jjdd�|jjdd�|j||��S)Nrr�r�)r�r�r?r9r�)r�r`rsrtr�s     rr	zCFGGuider.predict_noise�sr�� ��!1�!1�1�h��218�219���z�[_�@`�bf�bl�bl�bp�bp�q{�~B�cC�EI�EM�EM�]j�qu�v�	vrc220221���|�3tj|�dkDr|jj|�}t	|j||j222||||	�|_tjj|j�}223||224jdi�d<|225|	d�}tjjj|j|tjjtjj j"|dd���}|j%||||||||�}
|jj'|
j)tj*��S)Nrr��
sample_sigmasr�rtTr~)r6�
count_nonzeror��process_latent_inr�r?r�r��create_model_options_clonertrpr�r��new_class_executorr|r�r��SAMPLER_SAMPLEr��process_latent_outr<�float32)r�r�r�r"�samplerr�r�r�r�r��extra_model_optionsr�r�r�s              r�inner_samplezCFGGuider.inner_sample�sE���#��(;�(;�L�(I�A�(M��+�+�=�=�l�K�L�"�4�#3�#3�U�D�J�J��P\�^j�lp�q��226�#�1�1�L�L�T�M_�M_�`��U[��&�&�'<�b�A�/�R�':�D�I�227��*�*�:�:�M�M��N�N���#�#�4�4�U�5L�5L�5W�5W�5f�5f�hr�tC�iD�W[�4�
\�228��229�"�"�4���X�u�l�\h�jv�w�����2�2�7�:�:�e�m�m�3L�M�Mrc	�V�tjj|j|j|j230|j�\|_|_|_|jj}	|�+tjj||j|	�}|j|	�}|j|	�}|j|	�}t|j|	|jj���	|jj�|j|||	||||||�	}231|jj!�tjj#|j232|j�|`|`|233S#|jj!�wxYw)Nr&)r�r�prepare_samplingr�r/r?rtr��
loaded_models�load_device�prepare_maskr<r��model_dtyperer�cleanup�cleanup_models)r�r�r�rr�r�r�r�r�r"r�s           r�outer_samplezCFGGuider.outer_sample�s���;@�;P�;P�;a�;a�bf�bt�bt�v{�wB�wB�DH�DN�DN�PT�Pb�Pb�<c�8���$�*�d�&8��#�#�/�/���#� �0�0�=�=�l�E�K�K�Y_�`�L����� ��#���v�.�����6�"���T�/�/��d�FX�FX�Fd�Fd�Ff�g�	)����&�&�(��&�&�u�l�F�G�V�Ua�ck�my�{�A�F����&�&�(�
���,�,�T�Z�Z��9K�9K�L������
��
���&�&�(�s�3F�F(c	234��|jddk(r|Si|_|jD]2}	tt	d�|j|	��|j|	<�4t|j�	|j}235tjj|j�|_|jj}t|j�dkr3tjjj|j_236tjj!|j|j|j�t#|j|j�tj$j&j)|j*|tj$j-tj$j.j0|jd���}|j3||||||||�}
t5|j|jj6��|237|_||j_238|jj9�|`|
S#t5|j|jj6��239|_|j_240|jj9�wxYw)Nr�rc�"�|j�Sr�)r�)r�s rrdz"CFGGuider.sample.<locals>.<lambda>�s241��q�v�v�xrrTr~r4)r/r?r�r0�mapr�rtr�r�r�	hook_moder�r#�EnumHookMode�MinVramr�prepare_model_patcherr�r�r�rrr�r��OUTER_SAMPLEr�r��offload_device�restore_hook_patches)r�r�r�rr�r�r�r�r�rR�orig_model_options�orig_hook_moder�r�s              rr|zCFGGuider.sample�s,���<�<���q� �����242��$�$�A� ��%7��9L�9L�Q�9O�!P�Q�D�J�J�q�M�%��t�z�z�*�	6�!%�!3�!3��!&�!4�!4�!O�!O�PT�Pb�Pb�!c�D��!�/�/�9�9�N�-�d�j�j�9�Q�>�/4�{�{�/G�/G�/O�/O��"�"�,��!�!�7�7��8J�8J�D�J�J�X\�Xj�Xj�k�,�T�Z�Z��9K�9K�L��.�.�>�>�Q�Q��!�!���'�'�8�8��9P�9P�9[�9[�9h�9h�jn�j|�j|�PT�8�U��H�243�%�%�e�\�7�F�L�Zb�dp�rv�w�F� ��!3�!3�D�<N�<N�<]�<]�^�!3�D��+9�D���(����3�3�5��J��
��

!��!3�!3�D�<N�<N�<]�<]�^�!3�D��+9�D���(����3�3�5�s�3FI'�'AK)r�r244)NNFN)r�r�r�r�rrrr�r	rrr|rVrrr�r��s:���K��R�3�8:��v�N�$�.rr�c245��t|�}|j||�|j|�|j||	|||246|||
�Sr�)r�rrr|)r:r�r�rr�r"rr�rtr�r�r�r�r��247cfg_guiders               rr|r|�sL���5�!�J�����8�,����s�����U�L�'�6�<�QY�[g�im�n�nr)�ddimr�248uni_pc_bh2c�&�eZdZUded<dZded<y)�SchedulerHandlerzCallable[..., torch.Tensor]�handlerTr*�use_msN)r�r�r��__annotations__r3rVrrr1r1s��
(�(��F�D�rr1)r3T)r�)	�normal�karras�exponential�sgm_uniform�simple�ddim_uniformr�linear_quadratic�249kl_optimalc�*�tj|�}|�%d|��}tj|�t	|��|j250r|j
||�S|j
|t|j�t|j���S)Nzerror invalid scheduler )r"r�r�)251�SCHEDULER_HANDLERSr9r��error�252ValueErrorr3r2r�r�r�)r��scheduler_namer�r2�errs     r�calculate_sigmasrCs�� �$�$�^�4�G���(��(8�9���
�
�c����o���~�~����~�u�5�5��?�?�U�e�N�4L�4L�.M�Y^�_m�_w�_w�Yx�?�y�yrc���|dk(rttj�}|S|dk(rttj�}|S|dk(rt	dddi��}|St	|�}|S)Nrr/r.r�r�T)r�)r�r�sample_unipc�sample_unipc_bh2r�)rirs  r�sampler_objectrG"ss���x���6�.�.�/���N�
253��	��6�2�2�3��254�N�	255����7�X�t�4D�E���N��4�.���Nrc�J�eZdZeZeZed�Zdddifd�Z	d�Z256dd�Zdd�Zy)	�KSampler)r�r�rr/Nc���||_||_||jvr|jd}||jvr|jd}||_||_|j
||�||_||_y)Nr)	r:r"�257SCHEDULERS�SAMPLERS�	schedulerr�	set_steps�denoisert)r�r:r�r"rrMrOrts        rr�zKSampler.__init__2so����258�����D�O�O�+�����*�I��$�-�-�'��m�m�A�&�G�"���������u�g�&����*��rc���d}d}|j|jvr|dz
}d}t|jj	d�|j259|�}|rt
j|dd|ddg�}|S)NFrTr�r�r�)r�"DISCARD_PENULTIMATE_SIGMA_SAMPLERSrCr:�get_model_objectrMr6r�)r�r�r��discard_penultimate_sigmas    rrCzKSampler.calculate_sigmas?s{����$)�!��<�<�4�B�B�B��Q�J�E�(,�%�!�$�*�*�"=�"=�>N�"O�QU�Q_�Q_�af�g��$��Y�Y��s���V�B�C�[�9�:�F��
rc�L�||_|�|dkDr0|j|�j|j�|_y|dkrtjg�|_yt||z�}|j|�j|j�}||dzd|_y)Ng��H.��?rfr)r�rCr<r"r�r6r�r�)r�r�rO�	new_stepsr�s     rrNzKSampler.set_stepsMs�����260��?�g��.��/�/��6�9�9�$�+�+�F�D�K��#�~�#�/�/��3�����g�
�.�	��.�.�y�9�<�<�T�[�[�I��$�u�q�y�\�]�3��rc�^�|261�|j}262|� |t|263�dz264kr|265d|dz}266|rd|267d<|�0|t|268�dz269kr|270|d}271n|�|Stj|�St	|j272�}t
|j|||||j||273|j||	|||
��S)Nrrr�)r�r�r�r�r�)274r�rr6r�rGrr|r:r"rt)r�r�r�rr�r��275start_step�	last_step�force_full_denoiser�r�r�r�r�rs               rr|zKSampler.sampleYs����>��[�[�F�� �Y�#�f�+��/�%B��N�Y��]�+�F�!���r�276��!��S��[�1�_�-��277��,���+�'�'� �+�+�E�2�2� ����.���d�j�j�%��8�S�$�+�+�w�X^�`d�`r�`r�BN�]i�t|�KW�^b�c�	crr�)	NNNFNNNFN)
r�r�r��SCHEDULER_NAMESrK�
SAMPLER_NAMESrLr�rQr�rCrNr|rVrrrIrI-s8�� �J��H�),�-a�)b�&�59�T�SW�gi�+��2784�crrI)r:�'BaseModel'rqz4dict[comfy.hooks.HookGroup, list[tuple[tuple, int]]]rr�list[list[dict]])r:r\r?r]r@�torch.Tensor)FF)�333333�?r_)g�������?N)r"r�r�r�r�r��returnr^)NNN)r?�dict[str, list[dict[str]]])r?rart�	dict[str])NN)rtrb)r��objectrA�strr�r�r`r^)N�279__future__r�k_diffusionrr��extra_samplersr�typingrrr	�comfy.model_patcherr280�comfy.model_baser�comfy.controlnetrr6�	functoolsr
r=r�rr�r��comfy.sampler_helpers�comfy.patcher_extension�comfy.hooks�scipy.statsrrrrLrSrZrcr|r�r�r�r�r�r�r�r�rr
rr$r1rLrPrZrargrorxrz�KSAMPLER_NAMESr�r�r�r�r�r�r�r�r|r[r1�get_sigmas_karras�get_sigmas_exponentialr>r0rZrCrGrIrVrr�<module>rts$��"�9�"�6�6��0�*�,����"����������281S_�j�=�(
�)/�VI�D�LX�XZ�`d�mq�
�"SU�[_�@�"
�
�#�#�"#�2#�N�*�$�.-%�^M�*�X�2F�! �F�2R�R�3���w��8*,�R�F�8#�L&�6$�8�.A�b_�_�DZ\�jn�~B�MQ�`e�lp�o��!A�A�
��z���/�0��3�E�E�e�T�#�$8�$O�$O�X]�^�#�G�,<�$�$G�H��/�0�$�^�4��^�,�(�)B�C�"�#7��F�282���)�*��z�	�@c�@cr