MOON
Server: Apache
System: Linux s5.yayogua.com.py 6.12.0-124.55.3.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:54:02 EDT 2026 x86_64
User: sanbercountryclu (1012)
PHP: 8.2.33
Disabled: NONE
Upload Files
File: //lib/python3.12/site-packages/tuned/plugins/__pycache__/base.cpython-312.pyc
�

�]�i
[���ddlZddlmZddlZddlZddlZddlmZddl	Z	ddl
mZmZejj�ZGd�de�Zy)�N)�commands)�Popen�PIPEc��eZdZdZd�Zd�Zd�Zed��Ze	d��Z
e	d��Ze	d��Zd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zej@fd�Z!d�Z"d�Z#d�Z$ej@fd�Z%d �Z&d!�Z'ej@fd"�Z(d#�Z)d$�Z*d%�Z+d&�Z,d'�Z-d(�Z.d)�Z/		dAd+�Z0dBd,�Z1dBd-�Z2dBd.�Z3d/�Z4d0�Z5d1�Z6d2�Z7d3�Z8dCd4�Z9dDd5�Z:d6�Z;d7�Z<d8�Z=dBd9�Z>	dBd:�Z?d;�Z@d<�ZAd=�ZBdEd>�ZCdEd?�ZDd@�ZEy*)F�Plugina
	Base class for all plugins.

	Plugins change various system settings in order to get desired performance or power
	saving. Plugins use Monitor objects to get information from the running system.

	Intentionally a lot of logic is included in the plugin to increase plugin flexibility.
	c	�p�|j|jj�|_||_||_||_||_||_tj�|_|j�||_
||_d|_d|_|j#�|_t'�|_y)zPlugin constructor.FN)�create�	__class__�__name__�_storage�_monitors_repository�_hardware_inventory�_device_matcher�_device_matcher_udev�_instance_factory�collections�OrderedDict�
_instances�_init_commands�_global_cfg�
_variables�_has_dynamic_options�_devices_inited�#_get_config_options_used_by_dynamic�_options_used_by_dynamicr�_cmd)	�self�monitors_repository�storage_factory�hardware_inventory�device_matcher�device_matcher_udev�instance_factory�
global_cfg�	variabless	         �7/usr/lib/python3.12/site-packages/tuned/plugins/base.py�__init__zPlugin.__init__s���"�(�(����)@�)@�A�$�-�1�$��/�$��'�$��1�$��+�$���+�+�-�$�/������$���$�/�#�$���$��"&�"J�"J�"L�$���j�$�)�c�$�|j�y�N)�destroy_instances�rs r&�cleanupzPlugin.cleanup,s�����r(c�L�|js|j�d|_yy)NT)r�
_init_devicesr,s r&�init_deviceszPlugin.init_devices/s$��	
�	�	������4��
r(c�x�|jjjd�djdd�dS)N�.����_�)r
�
__module__�splitr,s r&�namezPlugin.name4s4��	
���	"�	"�	(�	(��	-�b�	1�	7�	7��Q�	?��	B�Br(c��iS)z-Default configuration options for the plugin.�r,s r&�_get_config_optionszPlugin._get_config_options<�	��
�)r(c��iS)z*Explanation of each config option functionr:)�clss r&�get_config_options_hintszPlugin.get_config_options_hintsAr<r(c��gS)znList of config options used by dynamic tuning. Their previous values will be automatically saved and restored.r:r,s r&rz*Plugin._get_config_options_used_by_dynamicFr<r(c���|j�j�}|D]K}||vs|jr	||||<�tj	d|�d|j
j�d���M|S)z3Merge provided options with plugin default options.zUnknown option 'z' for plugin '�'.)r;�copyr�log�warningr
r)r�options�	effective�keys    r&�_get_effective_optionszPlugin._get_effective_optionsKse���&�&�(�-�-�/�)�
�c�	�Y��$�3�3��S�\�I�c�N��K�K�#�t�~�~�?V�?V�W�X�	�

�r(c�r�t|�tur|St|�j�}|dk(xs|dk(S)N�true�1)�type�bool�str�lower)r�values  r&�_option_boolzPlugin._option_boolVs8��	�%�[�D��
�<�

�e�*�
�
�
�%�	�&��	(�E�S�L�(r(c
�>�||jvrtd|z��|j|�}|jj	||||||||�}	|	|j|<tjt|jj�d����|_|	S)z8Create new instance of the plugin and seize the devices.z.Plugin instance with name '%s' already exists.c� �|djS)Nr5)�priority)�xs r&�<lambda>z(Plugin.create_instance.<locals>.<lambda>is��Z[�\]�Z^�Zg�Zgr(�rH)	r�	ExceptionrIrr	rr�sorted�items)
rr8rU�devices_expression�devices_udev_regex�
script_pre�script_postrF�effective_options�instances
          r&�create_instancezPlugin.create_instance`s���	�T�_�_��	�C�d�J�	K�K��1�1�'�:��
�
#�
#�
*�
*�4��x�AS�Ug�
�{�-�/�(�"�$�/�/�$���+�+�F�4�?�?�3H�3H�3J�Pg�,h�i�$�/�	�/r(c��|j|k7rtd|�d|�d���|j|jvrtd|z��|j|j}|j	|�|j|j=y)zDestroy existing instance.zPlugin instance 'z"' does not belong to this plugin 'rBz+Plugin instance '%s' was already destroyed.N)�_pluginrYr8r�_destroy_instance�rras  r&�destroy_instancezPlugin.destroy_instancemss��
�����	�RZ�\`�a�	b�b�
�]�]�$�/�/�)�	�@�8�K�	L�L�
�_�_�X�]�]�
+�(�����"�
�o�o�h�m�m�$r(c��tjd|j�d|j�d��|j|�y)zInitialize an instance.zinitializing instance � (�)N)rD�debugr8�_instance_initrfs  r&�initialize_instancezPlugin.initialize_instancexs)���)�)�x�}�}�d�i�i�H�I����h�r(c�
�t|jj��D]C}tj	d|j
�d|j
�d��|j
|��E|jj�y)zDestroy all instances.zdestroying instance rirjN)�listr�valuesrDrkr8re�clearrfs  r&r+zPlugin.destroy_instances}sW���t���-�-�/�0�h��9�9�h�m�m�T�Y�Y�
G�H����(�#�1��/�/���r(c�H�|j|�|j|�yr*)�release_devices�_instance_cleanuprfs  r&rezPlugin._destroy_instance�s�����x� �����"r(c��t��r*��NotImplementedErrorrfs  r&rlzPlugin._instance_init������r(c��t��r*rvrfs  r&rtzPlugin._instance_cleanup�rxr(c�N�d|_t�|_t�|_y�NF)�_devices_supported�set�_assigned_devices�
_free_devicesr,s r&r/zPlugin._init_devices�s��!�$���5�$���u�$�r(c��y)z�Override this in a subclass to transform a list of device names (e.g. ['sda'])
		   to a list of pyudev.Device objects, if your plugin supports itNr:)r�devicess  r&�_get_device_objectszPlugin._get_device_objects�s��
r(c��|j�/t|jj|j|��S|j|�}|�*tjd|j�t�S|jj|j|�}t|D�cgc]}|j��c}�Scc}w)Nz<Plugin '%s' does not support the 'devices_udev_regex' option)r]r}r�
match_listr\r�rD�errorr8r�sys_name)rrar��udev_devicesrVs     r&�_get_matching_deviceszPlugin._get_matching_devices�s���
� � �(�

�d�"�"�-�-�h�.I�.I�7�S�
T�T��*�*�7�3�<����I�I�L�d�i�i�X��5�L��+�+�6�6�x�7R�7R�T`�a�<�

�<�0�<�a�q�z�z�<�0�
1�1��0s�(Cc�j�|jsytjd|jz�|j	||j
�}t
|�dkD|_|js#tjd|jz�y|j}|j|jk7r|d|jzz
}tjd|�ddj|����|jj|�|xj|zc_
|xj
|zc_y)Nz assigning devices to instance %srz*instance %s: no matching devices availablez (%s)z	instance z: assigning devices �, )r|rDrkr8r�r�len�activerE�info�join�assigned_devices�updater~)rra�	to_assignr8s    r&�assign_free_deviceszPlugin.assign_free_devices�s���	
�	 �	 �	��)�)�.����>�?��(�(��4�3E�3E�F�)��	�N�Q�&�(�/�	����;�;�;�h�m�m�K�L�
�-�-�4��m�m�t�y�y� ��G�d�i�i���D��8�8�4����9�9M�N�O����#�#�I�.����Y�&������"�r(c�4�|jsy|j|jz|jz}d|_|jj�|jj�|xj|zc_|xj|zc_yr{)r|�processed_devicesr�r~r�rqr)rra�
to_releases   r&rszPlugin.release_devices�s���	
�	 �	 �	��*�*���� �
����*��(�/�
���"�"�$�
���!�!�#����J�&�����
�"�r(c�B�|jsdg}|D]}|||��
yr*)r|)rra�callbackr��devices     r&�_run_for_each_devicezPlugin._run_for_each_device�s&��	
�	 �	 ��X�7��f��H�f��r(c��yr*r:�rra�enablings   r&�_instance_pre_staticzPlugin._instance_pre_static����r(c��yr*r:r�s   r&�_instance_post_staticzPlugin._instance_post_static�r�r(c���tjj|�}|jj	t
jt
j�}|D]}|j|�s�yy�NTF)	�os�path�realpathr�get_list�consts�CFG_PROFILE_DIRS�CFG_DEF_PROFILE_DIRS�
startswith)rr��
profile_paths�ps    r&�_safe_script_pathzPlugin._safe_script_path�sX��	���	�	�$�	�$��"�"�+�+�F�,C�,C�V�E`�E`�a�-��a�
�o�o�a����
r(c
�R�|�yt|�dk(r'tjd|j�d|�d��y|j	d�stjd�y|j
|�stjdd	|zz�ytjj|�}d
}|D�]9}tj}	|	j|jj��|g}
|tjk(r|
j!d�|
j!|�tj#d|�d
t%|
��d��tj'dt%t)|	j+���z�	t-|g|
zt.t.d
|	|d
��}|j1�\}}
|j2r*tjd||j2|
ddfz�d}��<|S#t4t6f$r(}tjd|�d|���d}Yd}~��qd}~wwxYw)Nrz
Instance 'z': no device to call script 'z' for.�/zQRelative paths cannot be used in script_pre or script_post. Use ${i:PROFILE_DIR}.Fz?Paths outside of the profile directories cannot be used in the z0script_pre or script_post, ignoring script: '%s'T�
full_rollbackzcalling script 'z' with arguments '�'zusing environment '%s')�stdout�stderr�	close_fds�env�cwd�universal_newlineszscript '%s' error: %d, '%s'r3zscript 'z	' error: )r�rDrEr8r�r�r�r�r��dirname�environr�r�get_envr��
ROLLBACK_FULL�appendr�rOrkror[rr�communicate�
returncode�OSError�IOError)rra�script�opr��rollback�dir_name�ret�devr��	arguments�proc�out�err�es               r&�_call_device_scriptzPlugin._call_device_script�s����^�
���\�Q���;�;�h�m�m�U[�\�]�
�	�	�	�3�	��9�9���
�	
�	�	��	'��9�9�
N�8�6�A�B�C�
�
�W�W�_�_�V�
$�(��#�
�c�
�Z�Z�7�
�>�>�$�/�/�)�)�+�,��t�9��&�&�&�&�
���_�%����C���8�8���Y��P�Q��9�9�
%��D�����,A�(B�
B�C���&��Y�&�
�$��'��4�1�D����!�H�C������Y�Y�,������S�b��/R�R�S��S��#�*

�*���7�
���I�I���3�4�
�C���s�A'G/�/H&�>H!�!H&c��|jsy|jr�|j||jd|j�|j|d�|j
|�|j|d�|j||jd|j�|jrp|jjtjtj�r8|j|�|j!||j"|j�|j$j'|j�|jj)�y)zG
		Apply static and dynamic tuning if the plugin instance is active.
		N�applyT)r��has_static_tuningr�r^r�r��_instance_apply_staticr�r_�has_dynamic_tuningr�getr��CFG_DYNAMIC_TUNING�CFG_DEF_DYNAMIC_TUNING�_instance_init_dynamicr��_instance_apply_dynamicr�r�rqrfs  r&�instance_apply_tuningzPlugin.instance_apply_tunings��
���	�
������H�h�&9�&9��h�'�'�)����X�t�,����x�(����h��-����H�h�&:�&:��h�'�'�)�
� � �T�%5�%5�%9�%9�&�:S�:S�U[�Ur�Ur�%s����x�(����X�t�'C�'C�X�E^�E^�_�
���#�#�H�$=�$=�>�
���!�!�#r(c��|jsyt|j�dk7r1tj	ddj|j�z�|jj�}|jr\|j||jd|�dk(ry|j|||�dk(ry|j||jd|�dk(ryyy)z<
		Verify static tuning if the plugin instance is active.
		Nrz)BUG: Some devices have not been tuned: %sr��verifyFT)
r�r�r�rDr�r�r�rCr�r�r^�_instance_verify_staticr_)rra�ignore_missingr�s    r&�instance_verify_tuningzPlugin.instance_verify_tunings���
���
���	"�	"�#�q�(��9�9�
8��y�y��*�*�+�,�-��&�&�+�+�-�'�
���
���x��)<�)<�h��P�TY�Y��
�"�"�8�^�W�E��N��
���x��)=�)=�x��Q�UZ�Z��
�
r(c��|jsy|jro|jjtj
tj�r6|j||j|jj��yyy)z<
		Apply dynamic tuning if the plugin instance is active.
		N)r�r�rr�r�r�r�r��_instance_update_dynamicr�rCrfs  r&�instance_update_tuningzPlugin.instance_update_tuning2si��
���	�
� � �T�%5�%5�%9�%9�&�:S�:S�U[�Ur�Ur�%s����X�t�'D�'D�h�F`�F`�Fe�Fe�Fg�h�&t� r(c�0�|tjk(ry|jr_|jj	tj
tj�r'|j||j|j�|jr�|j||jd|j|��|j|d�|j||�|j|d�|j||j d|j|��yy)z8
		Remove all tunings applied by the plugin instance.
		N�unapply)r�F)r��
ROLLBACK_NONEr�rr�r�r�r��_instance_unapply_dynamicr�r�r�r_r��_instance_unapply_staticr�r^�rrar�s   r&�instance_unapply_tuningzPlugin.instance_unapply_tuning;s�����%�%�%�	�
� � �T�%5�%5�%9�%9�&�:S�:S�U[�Ur�Ur�%s����X�t�'E�'E�x�Ga�Ga�b�
������H�h�&:�&:���*�*�������X�u�-�� � ��8�4����h��.����H�h�&9�&9�9�h�F`�F`�mu��v� r(c�^�|j|�|j||j�yr*)� _execute_all_non_device_commands�_execute_all_device_commandsr�rfs  r&r�zPlugin._instance_apply_staticMs&���'�'��1��#�#�H�h�.G�.G�Hr(c�h�d}|j||�dk(rd}|j|||�dk(rd}|Sr�)�_verify_all_non_device_commands�_verify_all_device_commands)rrar�r�r�s     r&r�zPlugin._instance_verify_staticQsB���#�	�)�)�(�N�C�u�L�	�3�	�%�%�h���H�E�Q�	�3�	�*r(c�^�|j||j�|j|�yr*)�_cleanup_all_device_commandsr�� _cleanup_all_non_device_commandsr�s   r&r�zPlugin._instance_unapply_staticYs)���#�#�H���� ��'�'��1r(c��yr*r:rfs  r&r�zPlugin._instance_init_dynamic^r�r(c���|jD�cgc]%}|j||j||���$|��'c}D]"}|j||j||��$|j	||�ycc}wr*)r�_storage_get�	_commands�_check_and_save_valuer�)rrar��opt�options     r&r�zPlugin._instance_apply_dynamicas��� $� =� =�C� =���AR�AR�S[�]a�]k�]k�lo�]p�rx�Ay�BB�� =�C�f����h����v�(>��G�C�����&�1��Cs
�%A4�A4c��t��r*rv�rrar�s   r&r�z Plugin._instance_unapply_dynamicgrxr(c��t��r*rvr�s   r&r�zPlugin._instance_update_dynamicjrxr(c�v�tj�|_|j�|j	�y)z
		Initialize commands.
		N)rrr��_autoregister_commands�_check_commandsr,s r&rzPlugin._init_commandsqs,���*�*�,�$�.��������r(c��|jjD]�}|jd�r�t||�}t	|d�s�.|j
d}|jj|d|i�}d|j
vr/d|d<||d<|j
d|d<|j
d|d<nKd	|j
vr||d	<n7d|j
vr)||d<|j
d|d<|j
d|d<||j|<��tjtt|jj��d
����|_y)zd
		Register all commands marked using @command_set, @command_get, and @command_custom decorators.
		�__�_commandr8r}N�custom�
per_devicerUr�c��|ddS)Nr5rUr:)�	name_infos r&rWz/Plugin._autoregister_commands.<locals>.<lambda>�s��fo�pq�fr�s}�f~r(rX)
r
�__dict__r��getattr�hasattrr�r�r�rrrZ�iterr[)r�member_name�member�command_namer�s     r&r�zPlugin._autoregister_commandsys>���^�^�,�,�k����T�"���D�+�&�6�
�&�*�
%���/�/�&�)�<�
�.�.�
�
�\�F�L�+A�
B�4��v�����D��N��D��K�����6�D������z�2�D���
���� ��D��K��F�O�O�#��D��N�����6�D������z�2�D���"&�4�>�>�,��--�2�*�*�6�$�t�~�~�7K�7K�7M�2N�T~�+�A�$�.r(c��t|jj��D].\}}|jdd�r�d|vsd|vs�"t	d|z��y)z2
		Check if all commands are defined correctly.
		rFr�r}z,Plugin command '%s' is not defined correctlyN)ror�r[r��	TypeError)rr
�commands   r&r�zPlugin._check_commands�sV�� $�D�N�N�$8�$8�$:�;��l�G�
�k�k�(�E�"���7��e�7�2�
�B�\�Q�
R�R�
 <r(Nc�j�t|�j}|�dn|}|�dn|}|�dn|}|�d|�d|�d|��S)N�r�)rMr)r�
instance_namer
�device_name�
class_names     r&�_storage_keyzPlugin._storage_key�sI���D�z�"�"�*�%�-�"�=�-�#�+���,�!�)��{�+�$�m��+�
�r(c�|�|j|j|d|�}|jj||�y�Nr8)rr8rr})rrar
rQrrHs      r&�_storage_setzPlugin._storage_set�s2�����(�-�-����+�F�#��-�-���C��r(c�x�|j|j|d|�}|jj|�Sr)rr8rr��rrar
rrHs     r&r�zPlugin._storage_get�s3�����(�-�-����+�F�#�	
���	�	�3�	�r(c�x�|j|j|d|�}|jj|�Sr)rr8r�unsetrs     r&�_storage_unsetzPlugin._storage_unset�s3�����(�-�-����+�F�#�	
���	�	�S�	!�!r(c�"�t|jj��D�cgc]
}|dr�	|��c}D]P}|jj	|j
j
|dd��}|��>|j|||��Rycc}w�Nrr8)ror�rpr�expandrFr��_execute_non_device_command�rrar
�	new_values    r&r�z'Plugin._execute_all_non_device_commands�s~��)-�d�n�n�.C�.C�.E�)F�d�)F�g�g�Vb�Nc�'�)F�d�g����%�%�h�&6�&6�&:�&:�7�6�?�D�&Q�R�9����$�$�X�w�	�B�e��ds
�
B�Bc�2�t|jj��D�cgc]
}|ds�	|��c}D]X}|jj	|j
j
|dd��}|��>|D]}|j||||���Zycc}wr)ror�rprrrFr��_execute_device_command)rrar�r
r!r�s      r&r�z#Plugin._execute_all_device_commands�s���)-�d�n�n�.C�.C�.E�)F�`�)F�g�'�R^�J_�'�)F�`�g����%�%�h�&6�&6�&:�&:�7�6�?�D�&Q�R�9�����v�� � ��7�F�I�F��	a��`s
�
B�Bc�6�d}t|jj��D�cgc]
}|dr�	|��c}D]W}|jj	|j
j
|dd��}|��>|j||||�dk(s�Vd}�Y|Scc}w�NTrr8F)ror�rprrrFr��_verify_non_device_command)rrar�r�r
r!s      r&r�z&Plugin._verify_all_non_device_commands�s����#�)-�d�n�n�.C�.C�.E�)F�d�)F�g�g�Vb�Nc�'�)F�d�g����%�%�h�&6�&6�&:�&:�7�6�?�D�&Q�R�9����&�&�x��)�^�T�X]�]��S�	e�


�*��es
�
B�Bc	�F�d}t|jj��D�cgc]
}|ds�	|��c}D]_}|jj	|j
j
|dd��}|��>|D]}|j|||||�dk(s�d}��a|Scc}wr%)ror�rprrrFr��_verify_device_command)rrar�r�r�r
r!r�s        r&r�z"Plugin._verify_all_device_commands�s����#�)-�d�n�n�.C�.C�.E�)F�`�)F�g�'�R^�J_�'�)F�`�g����%�%�h�&6�&6�&:�&:�7�6�?�D�&Q�R�9�����v��"�"�8�W�f�i��X�\a�a��S��	a�

�*��as
�
B�Bc�P�|�qt|�}t|�dkr|S|dd}|dd}|�|dvr|S|S	|dk(rt|�t|�kDr|Sy|dk(rt|�t|�kr|Sy	|S|S#t$r&tjd|�d|�d|�d|�d	�	�Y|SwxYw)
Nr5)�<�>r+r*zcannot compare new value 'z' with current value 'z' by operator 'z
', using 'z' directly as new value)rOr��int�
ValueErrorrDrE)rr!�
current_value�nwsr��vals      r&�_process_assignment_modifiersz$Plugin._process_assignment_modifiers�s�����	�Y��3�	�#�h�!�m����B�Q��2�	�Q�R��3����
�"�3�1�	�1�b�	�S�y��C��3�}�%�%�
�j�
�	�s���C��3�}�%�%�
�j�
�	
�
������b��K�K�B�DQ�SU�W`�a�b�	��b�s�A6�A6�6+B%�$B%c�8�|�|d|||��S|d|�S)Nr��r�r:)rrar
r�r�s     r&�_get_current_valuezPlugin._get_current_value�s.����
�'�%�.���.�
I�I�
�'�%�.��
"�"r(c��|j|||�}|j||�}|�|�|j||||�|Sr*)r4r1r)rrar
r�r!r.s      r&r�zPlugin._check_and_save_valuesM���)�)�(�G�V�D�-��0�0��M�J�)���}�8����X�w�
�v�>�	�r(c�~�|d�|dd||dd|�y|j||||�}|�|d|||dd��yy�NrTFr}��sim�remove�r�)rrar
r�r!s     r&r#zPlugin._execute_device_commands]���X��"��7�8��T�9�f�e�U�H�E��)�)�(�G�V�Y�O�9����G�E�N�9�f�h�e�e�L�r(c�z�|d�|dd|dd|�y|j||d|�}|�|d||dd��yyr7r;r s    r&rz"Plugin._execute_non_device_commandsY���X��"��7�8��T�9�e�U�H�=��)�)�(�G�T�9�M�9����G�E�N�9�h�e�e�D�r(c��|jjt|��}tjd|�rtj
dd|�S|S)Nz\s*(0+,?)+([\da-fA-F]*,?)*\s*$z^\s*(0+,?)+r)r�unquoterO�re�match�sub)rrQ�vs   r&�_norm_valuezPlugin._norm_valuesA��
�i�i����E�
�#�!��X�X�/��3�
�&�&���Q�
'�'�	
�(r(c�x�|�yd}|�T|rR|�'tjtj|z�ytjtj||fz�y|�:|j|�}|j|�}	t
|�t
|�k(}|j|||||��|S#t$r�	t
|d�t
|d�k(}nb#t$rVt|�t|�k(}|s:t|�jd�}|D]}|j�}||k(}|s�nYnwxYwY��wxYw)NFT��|)r�)rDr�r�� STR_VERIFY_PROFILE_VALUE_MISSING�'STR_VERIFY_PROFILE_DEVICE_VALUE_MISSINGrCr,r-rOr7�strip�_log_verification_result)	rr8r!r.r�r�r��valsr0s	         r&�
_verify_valuezPlugin._verify_valuesI����
�
�#���~��n��H�H�V�
4�
4�t�
;�<���H�H�V�
;�
;�v�t�n�
L�M�
����#�#�M�2�=����	�*�9�
�

�i�.�C�
�.�
.�C�����c�9��F� �$�	�*����
��y�"���]�B�!7�7�S�����y�>�S��/�/�S��
��^�
!�
!�#�
&�d��#�
�Y�Y�[�s�
�M�
!�s�

�
�	��	���s=�B0�0	D9�:C�D9�AD3�-D3�0D9�2D3�3D9�8D9c	�r�|r�|�@tjtj|t	|�j�fz�ytjtj||t	|�j�fz�y|�Xtjtj|t	|�j�t	|�j�fz�ytjtj||t	|�j�t	|�j�fz�yr�)
rDr�r��STR_VERIFY_PROFILE_VALUE_OKrOrI�"STR_VERIFY_PROFILE_DEVICE_VALUE_OKr��STR_VERIFY_PROFILE_VALUE_FAIL�$STR_VERIFY_PROFILE_DEVICE_VALUE_FAIL)rr8�successr!r.r�s      r&rJzPlugin._log_verification_result>s�����n��H�H�V�
/�
/�4��]�9K�9Q�9Q�9S�2T�
T�U���H�H�V�
6�
6�&�$��M�HZ�H`�H`�Hb�9c�
c�d�
��n��I�I�f�2�2�d�C�
�<N�<T�<T�<V�X[�\e�Xf�Xl�Xl�Xn�5o�o�p���I�I�f�9�9�V�T�3�}�K]�Kc�Kc�Ke�gj�kt�gu�g{�g{�g}�<~�~��
r(c���|d�|dd||d||�S|j||||��}|j||�}|�y|d|||dd�}|j|d||||�S)NrTr3r}Fr8�r4r1rL)rrar
r�r!r�r.s       r&r(zPlugin._verify_device_commandMs����X��"�
�'�(�
�D�)�V�T�>�8�
T�T��)�)�(�G�V�Tb�)�c�-��0�0��M�J�)���
��g�e�n�Y���$��F�)�	
�	�	�G�F�O�Y�
�~�W]�	^�^r(c���|d�|dd|d||�S|j||�}|j||�}|�y|d||dd�}|j|d|||�S)NrTr}Fr8rT)rrar
r!r�r.s      r&r&z!Plugin._verify_non_device_commandWs����X��"�
�'�(�
�D�)�T�>�8�
L�L��)�)�(�G�<�-��0�0��M�J�)���
��g�e�n�Y��$��>�)�	
�	�	�G�F�O�Y�
�~�	V�Vr(c��tt|jj��D�cgc]
}|dr�	|��c}�D]E}|jj|dd��|d|jvs�4|j||��Gycc}wr)�reversedror�rprFr�r�_cleanup_non_device_command)rrar
s   r&r�z'Plugin._cleanup_all_non_device_commandsas����$�t�~�~�7L�7L�7N�2O�m�2O�w�W^�_k�Wl�7�2O�m�n�g������G�F�O�T�2�>�G�F�O�W[�Wt�Wt�Dt��$�$�X�w�7�o��ms
�
B
�B
c�0�tt|jj��D�cgc]
}|ds�	|��c}�D]N}|jj|dd��|d|jvs�4|D]}|j||||���Pycc}wr)rWror�rprFr�r�_cleanup_device_command)rrar�r:r
r�s      r&r�z#Plugin._cleanup_all_device_commandsfs����$�t�~�~�7L�7L�7N�2O�i�2O�w�SZ�[g�Sh�7�2O�i�j�g������G�F�O�T�2�>�G�F�O�W[�Wt�Wt�Dt���	�!�!�(�G�V�V�D��k��is
�
B�Bc��|d�|ddd|dd|�y|j|||�}|�|d|||d|��|j|||�y�NrFr}r8�r�r)rrar
r�r:�	old_values      r&rZzPlugin._cleanup_device_commandlsh���X��"��7�8��U�D�&�%���A�� � ��7�F�;�9����G�E�N�9�f�h�e�f�M����x��&�1r(c��|d�|ddddd|�y|j||�}|�|d||dd��|j||�yr\r])rrar
r^s    r&rXz"Plugin._cleanup_non_device_commandus`���X��"��7�8��U�D�%���9�� � ��7�3�9����G�E�N�9�h�e�e�D����x��)r()NNNr*r{)NN)F)Frr6�__qualname__�__doc__r'r-r0�propertyr8�classmethodr;r?rrIrRrbrgrmr+rerlrtr/r�r�r�rsr�r�r�r�r��
ROLLBACK_SOFTr�r�r�r�r�r�r�r�r�r�r�r�rr�r�rrr�rr�r�r�r�r1r4r�r#rrCrLrJr(r&r�r�rZrXr:r(r&rrs�����,��
�C��C�������������	�)��	%� �
�#����
�
	2�#�$#�$����JP�I]�I]�%
�N$�*�,i�9?�8L�8L�w�$I�
�:@�9M�9M�2�
�2����A�>
S� >B��� � �"�C�G�
�	
��0#��M�E��
�B �
�_�W�8�
E�2�*r(r)r?�tuned.constsr��tuned.profiles.variables�tuned�
tuned.logsr�tuned.utils.commandsrr��
subprocessrr�logsr�rD�objectrr:r(r&�<module>rms;��	�����)�	�"��j�j�n�n���p	*�V�p	*r(