+
     Gi
[  c                   s    ^ RI t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	t	^ RI
HtHt ]P                  P                  4       t ! R R]4      tR# )i    N)commands)PopenPIPEc                   s6  a  ] tR t^t o RtR tR tR t]R 4       t	]
R 4       t]
R 4       t]
R 4       tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t] PB                  3R lt"R t#R t$R t%] PB                  3R lt&R  t'R! t(] PB                  3R" lt)R# t*R$ t+R% t,R& t-R' t.R( t/R) t0RBR+ lt1RCR, lt2RCR- lt3RCR. lt4R/ t5R0 t6R1 t7R2 t8R3 t9RDR4 lt:RER5 lt;R6 t<R7 t=R8 t>RCR9 lt?RCR: lt@R; tAR< tBR= tCRFR> ltDRFR? ltER@ tFRAtGV tHR*# )G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	                sf   VP                  V P                  P                  4      V n        Wn        W0n        W@n        WPn        W`n        \        P                  ! 4       V n        V P                  4        Wpn        Wn        RV n        RV n        V P#                  4       V n        \'        4       V n        R# )zPlugin 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)	selfZmonitors_repositoryZstorage_factoryZhardware_inventoryZdevice_matcherZdevice_matcher_udevZinstance_factoryZ
global_cfgZ	variabless	   &&&&&&&&&7/usr/lib/python3.14/site-packages/tuned/plugins/base.py__init__ZPlugin.__init__   s     "(()@)@A$-1/'1+++-$//#$$"&"J"J"L$j$)    c                s&    V P                  4        R # N)destroy_instancesr      &r   cleanupZPlugin.cleanup,   s    r   c                s\    V P                   '       g   V P                  4        R V n         R# R# )TN)r   _init_devicesr   r   r   init_devicesZPlugin.init_devices/   s'    				4 
r   c                s    V P                   P                  P                  R 4      R,          P                  R^4      ^,          # )Z.Z_)r   
__module__splitr   r   r   nameZPlugin.name4   s4    		"	"	(	(	-b	1	7	7Q	?	BBr   c                    / # )z-Default configuration options for the plugin. r   r   r   _get_config_optionsZPlugin._get_config_options<   	     
)r   c                r'   )z*Explanation of each config option functionr(   )Zclsr   r   get_config_options_hintsZPlugin.get_config_options_hintsA   r*   r   c                s    . # )znList of config options used by dynamic tuning. Their previous values will be automatically saved and restored.r(   r   r   r   r   Z*Plugin._get_config_options_used_by_dynamicF   r*   r   c                s    V P                  4       P                  4       pV FY  pW29   g   V P                  '       d   W,          W#&   K'  \        P	                  RV: RV P
                  P                  : R24       K[  	  V# )z3Merge provided options with plugin default options.zUnknown option 'z' for plugin ''.)r)   copyr   logwarningr   r   )r   optionsZ	effectivekey   &&  r   _get_effective_optionsZPlugin._get_effective_optionsK   sb     &&(--/)c	$333\INKK#t~~?V?VWX	 
 
r   c                s    \        V4      \        J d   V# \        V4      P                  4       pVR 8H  ;'       g    VR8H  # )ZtrueZ1)typeZboolstrZlower)r   value   &&r   _option_boolZPlugin._option_boolV   s;    	%[D
<
e*


%	&	(	(ESL(r   c           
     sD   WP                   9   d   \        RV,          4      hV P                  V4      pV P                  P	                  WW#VWVV4      p	WP                   V&   \
        P                  ! \        V P                   P                  4       R R7      4      V n         V	# )z8Create new instance of the plugin and seize the devices.z.Plugin instance with name '%s' already exists.c                 s(    V ^,          P                   # )   )priority)xr   r   <lambda>Z(Plugin.create_instance.<locals>.<lambda>i   s    Z[\]Z^ZgZgr   r1   )	r   	Exceptionr3   r   r   r   r   sorteditems)
r   r&   r:   devices_expressiondevices_udev_regex
script_prescript_postr0   Zeffective_optionsinstances
   &&&&&&&&  r   create_instanceZPlugin.create_instance`   s    	__	CdJ	KK11':##**4xUg-/("//$++F4??3H3H3JPg,hi$/	/r   c                s4   VP                   V 8w  d   \        RV: RV : R24      hVP                  V P                  9  d   \        RV,          4      hV P                  VP                  ,          pV P	                  V4       V P                  VP                   R# )zDestroy existing instance.zPlugin instance 'z"' does not belong to this plugin 'r,   z+Plugin instance '%s' was already destroyed.N)Z_pluginr>   r&   r   _destroy_instancer   rE   r7   r   destroy_instanceZPlugin.destroy_instancem   ss    	RZ\`a	bb]]$//)	@8K	LL__X]]+("
oohmm$r   c                s    \         P                  RVP                  : RV P                  : R24       V P                  V4       R# )zInitialize an instance.zinitializing instance  ()N)r.   debugr&   _instance_initrH   r7   r   initialize_instanceZPlugin.initialize_instancex   s)    ))x}}diiHIhr   c                s   \        V P                  P                  4       4       FF  p\        P	                  RVP
                  : RV P
                  : R24       V P                  V4       KH  	  V P                  P                  4        R# )zDestroy all instances.zdestroying instance rJ   rK   N)listr   valuesr.   rL   r&   rG   clearrH   s   & r   r   ZPlugin.destroy_instances}   sW    t--/0h99hmmTYYGH(# 1 //r   c                sJ    V P                  V4       V P                  V4       R # r   )release_devices_instance_cleanuprH   r7   r   rG   ZPlugin._destroy_instance   s    x "r   c                    \        4       hr   ZNotImplementedErrorrH   r7   r   rM   ZPlugin._instance_init       r   c                rT   r   rU   rH   r7   r   rS   ZPlugin._instance_cleanup   rV   r   c                sP    R V n         \        4       V n        \        4       V n        R# )FN)_devices_supportedset_assigned_devices_free_devicesr   r   r   r!   ZPlugin._init_devices   s    !$5$u$r   c                s    R# )zOverride 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   devicesr7   r   _get_device_objectsZPlugin._get_device_objects   s     
r   c                s   VP                   f0   \        V P                  P                  VP                  V4      4      # V P                  V4      pVf+   \        P                  RV P                  4       \        4       # V P                  P                  VP                   V4      p\        V Uu. uF  qDP                  NK  	  up4      # u upi )Nz<Plugin '%s' does not support the 'devices_udev_regex' option)rB   rX   r
   Z
match_listrA   r\   r.   errorr&   r   Zsys_name)r   rE   r[   Zudev_devicesr;      &&&  r   _get_matching_devicesZPlugin._get_matching_devices   s      (
d""--h.I.I7S
TT**73<IILdiiX5L++66x7R7RT`a<
<0<azz<0
110s   ,Cc                s   V P                   '       g   R # \        P                  RVP                  ,          4       V P	                  WP
                  4      p\        V4      ^ 8  Vn        VP                  '       g)   \        P                  RVP                  ,          4       R # VP                  pVP                  V P                  8w  d   VRV P                  ,          ,          p\        P                  RV: RRP                  V4      : 24       VP                  P                  V4       V ;P                  V,          un        V ;P
                  V,          un        R # )Nz assigning devices to instance %sz*instance %s: no matching devices availablez (%s)z	instance z: assigning devices , )rW   r.   rL   r&   r_   rZ   lenactiver/   infojoinassigned_devicesupdaterY   )r   rE   Z	to_assignr&   r2   r   assign_free_devicesZPlugin.assign_free_devices   s    		 	 	 	)).>?((3E3EF)	NQ&(/	;;;hmmKL
--4mmtyy GdiiD88499MNO##I.Y&"r   c                sd   V P                   '       g   R # VP                  VP                  ,          V P                  ,          pRVn        VP                  P                  4        VP                  P                  4        V ;P                  V,          un        V ;P                  V,          un        R # NF)rW   processed_devicesre   rY   rb   rQ   rZ   )r   rE   Z
to_release   && r   rR   ZPlugin.release_devices   s    		 	 	 	** 
* (/
""$
!!#J&
"r   c                sR    V P                   '       g   R .pV F  pV! W4       K  	  R # r   )rW   )r   rE   Zcallbackr[   device   &&&& r   _run_for_each_deviceZPlugin._run_for_each_device   s'    		 	 	 X7fH r   c                    R # r   r(   r   rE   Zenabling   &&&r   _instance_pre_staticZPlugin._instance_pre_static       r   c                rn   r   r(   ro   rp   r   _instance_post_staticZPlugin._instance_post_static   rr   r   c                s    \         P                  P                  V4      pV P                  P	                  \
        P                  \
        P                  4      pV F  pVP                  V4      '       g   K   R # 	  R# TF)	ospathZrealpathr   Zget_listconstsZCFG_PROFILE_DIRSZCFG_DEF_PROFILE_DIRS
startswith)r   rv   Zprofile_pathsZpr2   r   _safe_script_pathZPlugin._safe_script_path   s[    			$	$""++F,C,CVE`E`a-a
ooa  
r   c                s   Vf   R # \        V4      ^ 8X  d+   \        P                  RVP                  : RV: R24       R # VP	                  R4      '       g   \        P                  R4       R# V P                  V4      '       g&   \        P                  RRV,          ,           4       R# \        P                  P                  V4      pRpV EFQ  p\        P                  p	V	P                  V P                  P                  4       4       V.p
V\        P                  8X  d   V
P!                  R	4       V
P!                  V4       \        P#                  R
V: R\%        V
4      : R24       \        P'                  R\%        \)        V	P+                  4       4      4      ,          4        \-        V.V
,           \.        \.        RV	VRR7      pVP1                  4       w  rVP2                  '       d1   \        P                  RW+P2                  VR R 3,          4       RpEKQ  EKT  	  V#   \4        \6        3 d,   p\        P                  RT: RT: 24       Rp R p?EK  R p?ii ; i)Nz
Instance 'z': no device to call script 'z' for./Fz?Paths outside of the profile directories cannot be used in the z0script_pre or script_post, ignoring script: '%s'TZfull_rollbackzcalling script 'z' with arguments 'Z'zusing environment '%s')ZstdoutZstderrZ	close_fdsZenvZcwdZuniversal_newlineszscript '%s' error: %d, '%s'zscript 'z	' error: zQRelative paths cannot be used in script_pre or script_post. Use ${i:PROFILE_DIR}.r#   )ra   r.   r/   r&   rx   r]   ry   ru   rv   Zdirnameenvironrf   r   Zget_envrw   ZROLLBACK_FULLZappendrc   r5   rL   rO   r@   r   r   ZcommunicateZ
returncodeZOSErrorZIOError)r   rE   Zscriptopr[   rollbackZdir_nameretZdevr{   Z	argumentsZprocZoutZerrZes   &&&&&&         r   _call_device_scriptZPlugin._call_device_script   s   ^
\Q;;hmmU[\]
			3		99  
				'	'99N86AB C
WW__V$(#cZZ7
>>$//))+,t9&&&&_%C88YPQ99%D,A(BBC&Y&$'41D !HCYY,Sb/RRSS  * 
* 7
 II34
Cs   )A3H&&I"7II"c                s   VP                   '       g   R# VP                  '       d   V P                  WP                  RVP                  4       V P                  VR4       V P                  V4       V P                  VR4       V P                  WP                  RVP                  4       VP                  '       dv   V P                  P                  \        P                  \        P                  4      '       d8   V P                  V4       V P!                  WP"                  VP                  4       VP$                  P'                  VP                  4       VP                  P)                  4        R# )zC
Apply static and dynamic tuning if the plugin instance is active.
NZapplyT)rb   has_static_tuningr   rC   re   rq   _instance_apply_staticrs   rD   has_dynamic_tuningr   getrw   CFG_DYNAMIC_TUNINGCFG_DEF_DYNAMIC_TUNING_instance_init_dynamicrm   _instance_apply_dynamicri   rf   rQ   rH   r7   r   instance_apply_tuningZPlugin.instance_apply_tuning  s    
	H&9&9h'')Xt,x(h-H&:&:h'')   T%5%5%9%9&:S:SU[UrUr%s%sx(X'C'CXE^E^_
##H$=$=>
!!#r   c                s   VP                   '       g   R# \        VP                  4      ^ 8w  d6   \        P	                  RRP                  VP                  4      ,          4       VP                  P                  4       pVP                  '       dd   V P                  WP                  RV4      R8X  d   R# V P                  WV4      R8X  d   R# V P                  WP                  RV4      R8X  d   R# R# R# )z8
Verify static tuning if the plugin instance is active.
Nz)BUG: Some devices have not been tuned: %sr`   ZverifyFT)rb   ra   re   r.   r]   rd   ri   r-   r   r   rC   _instance_verify_staticrD   )r   rE   ignore_missingr[      &&& r   instance_verify_tuningZPlugin.instance_verify_tuning  s     

	"	"#q(998yy**+, -&&++-'
x)<)<hPTYY
""8WEN
x)=)=xQUZZ

r   c                s>   VP                   '       g   R# VP                  '       dw   V P                  P                  \        P
                  \        P                  4      '       d7   V P                  WP                  VP                  P                  4       4       R# R# R# )z8
Apply dynamic tuning if the plugin instance is active.
N)rb   r   r   r   rw   r   r   rm   _instance_update_dynamicri   r-   rH   r7   r   instance_update_tuningZPlugin.instance_update_tuning2  so     
	   T%5%5%9%9&:S:SU[UrUr%s%sX'D'DhF`F`FeFeFgh &t r   c                sV   V\         P                  8X  d   R# VP                  '       de   V P                  P	                  \         P
                  \         P                  4      '       d'   V P                  WP                  VP                  4       VP                  '       d   V P                  WP                  RVP                  VR7       V P                  VR4       V P                  W4       V P                  VR4       V P                  WP                   RVP                  VR7       R# R# )z4
Remove all tunings applied by the plugin instance.
NZunapply)r}   F)rw   ZROLLBACK_NONEr   r   r   r   r   rm   _instance_unapply_dynamicri   r   r   rD   rq   _instance_unapply_staticrs   rC   r   rE   r}   rp   r   instance_unapply_tuningZPlugin.instance_unapply_tuning;  s     %%%	   T%5%5%9%9&:S:SU[UrUr%s%sX'E'ExGaGabH&:&:**   Xu-  4h.H&9&99hF`F`muv  r   c                s^    V P                  V4       V P                  WP                  4       R # r   ) _execute_all_non_device_commands_execute_all_device_commandsre   rH   r7   r   r   ZPlugin._instance_apply_staticM  s$    ''1##H.G.GHr   c                sl    R pV P                  W4      R8X  d   RpV P                  WV4      R8X  d   RpV# rt   )_verify_all_non_device_commands_verify_all_device_commands)r   rE   r   r[   r~   rl   r   r   ZPlugin._instance_verify_staticQ  s>    #	))(CuL	3	%%hHEQ	3	*r   c                s`    V P                  VVP                  4       V P                  V4       R # r   )_cleanup_all_device_commandsri    _cleanup_all_non_device_commandsr   rp   r   r   ZPlugin._instance_unapply_staticY  s)    ##H ''1r   c                rn   r   r(   rH   r7   r   r   ZPlugin._instance_init_dynamic^  rr   r   c                s
   V P                    Uu. uF+  q0P                  WP                  V,          V4      e   K)  VNK-  	  up F&  pV P                  WP                  V,          V4       K(  	  V P	                  W4       R # u upi r   )r   _storage_get	_commands_check_and_save_valuer   )r   rE   rk   ZoptZoptionr^   r   r   ZPlugin._instance_apply_dynamica  sv     $ = =  C =ARARS[]k]klo]prxAy =  Cfhv(>G C 1 Cs
   &B B c                rT   r   rU   r   rE   rk   rp   r   r   Z Plugin._instance_unapply_dynamicg  rV   r   c                rT   r   rU   r   rp   r   r   ZPlugin._instance_update_dynamicj  rV   r   c                sz    \         P                  ! 4       V n        V P                  4        V P	                  4        R# )z
Initialize commands.
N)r   r   r   _autoregister_commands_check_commandsr   r   r   r   ZPlugin._init_commandsq  s,     **,$.r   c                s   V P                   P                   EF  pVP                  R4      '       d   K  \        W4      p\	        VR4      '       g   K<  VP
                  R,          pV P                  P                  VRV/4      pRVP
                  9   d7   RVR&   W$R&   VP
                  R,          VR&   VP
                  R,          VR&   MWR	VP
                  9   d   W$R	&   MARVP
                  9   d1   W$R&   VP
                  R,          VR&   VP
                  R,          VR&   W@P                  V&   EK  	  \        P                  ! \        \        V P                  P                  4       4      R
 R7      4      V n        R# )z`
Register all commands marked using @command_set, @command_get, and @command_custom decorators.
Z___commandr&   rX   Ncustom
per_devicer:   r   c                 s"    V ^,          R,          # )r9   r:   r(   )Z	name_infor   r   r<   Z/Plugin._autoregister_commands.<locals>.<lambda>  s    fopqfrs}f~r   r=   )r   Z__dict__rx   ZgetattrZhasattrr   r   r   r   r   r?   Ziterr@   )r   Zmember_nameZmembercommand_namerc   s   &    r   r   ZPlugin._autoregister_commandsy  s:    ^^,,kT""D&6
&*
%
%//&)<
..

\FL+A
B4vDNK6Dz2D KFOO#N6Dz2D"&>>,- -2 **6$t~~7K7K7M2NT~+  A$.r   c                s    \        V P                  P                  4       4       F?  w  rVP                  RR4      '       d   K  RV9  g
   RV9  g   K/  \	        RV,          4      h	  R# )z.
Check if all commands are defined correctly.
r   Fr   rX   z,Plugin command '%s' is not defined correctlyN)rO   r   r@   r   Z	TypeError)r   r   commands   &  r   r   ZPlugin._check_commands  sW      $DNN$8$8$:;lkk(E""7e72
B\Q
RR  <r   Nc                s~    \        V 4      P                  pVf   RMTpVf   RMTpVf   RMTpV: RV: RV: RV: 2# )N rz   )r4   r   )r   Zinstance_namer   device_nameZ
class_namerl   r   _storage_keyZPlugin._storage_key  sI    Dz""*%-"=-#+,!){+$m+
 r   c                s    V P                  VP                  VR ,          V4      pV P                  P                  WS4       R# )r&   N)r   r&   r   rX   )r   rE   r   r6   r   r1      &&&&& r   _storage_setZPlugin._storage_set  s0    (--+F#--Cr   c                    V P                  VP                  VR ,          V4      pV P                  P                  V4      # r&   )r   r&   r   r   r   rE   r   r   r1   rl   r   r   ZPlugin._storage_get  s3    (--+F#			3	r   c                r   r   )r   r&   r   Zunsetr   rl   r   _storage_unsetZPlugin._storage_unset  s3    (--+F#			S	!!r   c                sL   \        V P                  P                  4       4       Uu. uF  q"R ,          '       d   K  VNK  	  up FW  pV P                  P	                  VP
                  P                  VR,          R4      4      pVf   KE  V P                  WV4       KY  	  R# u upi r   r&   N)rO   r   rP   r   expandr0   r   _execute_non_device_commandr   rE   r   	new_valuer2   r   r   Z'Plugin._execute_all_non_device_commands  s    )-dnn.C.C.E)Fd)FgVbNcNc'')Fdg%%h&6&6&:&:76?D&QR9$$X	B eds
   B!B!c                s^   \        V P                  P                  4       4       Uu. uF  q3R ,          '       g   K  VNK  	  up F`  pV P                  P	                  VP
                  P                  VR,          R4      4      pVf   KE  V F  pV P                  WWT4       K  	  Kb  	  R# u upi r   )rO   r   rP   r   r   r0   r   _execute_device_command)r   rE   r[   r   r   rk      &&&   r   r   Z#Plugin._execute_all_device_commands  s    )-dnn.C.C.E)F`)FgR^J_J_'')F`g%%h&6&6&:&:76?D&QR9v  FF 	 a`s
   B*B*c                sb   R p\        V P                  P                  4       4       Uu. uF  qDR,          '       d   K  VNK  	  up F`  pV P                  P	                  VP
                  P                  VR,          R4      4      pVf   KE  V P                  WWR4      R8X  g   K^  RpKb  	  V# u upi Tr   r&   NF)rO   r   rP   r   r   r0   r   _verify_non_device_command)r   rE   r   r~   r   r   r   r   r   Z&Plugin._verify_all_non_device_commands  s    #)-dnn.C.C.E)Fd)FgVbNcNc'')Fdg%%h&6&6&:&:76?D&QR9&&x)TX]]S	 e
 
* es
   B,B,c           	     sv   R p\        V P                  P                  4       4       Uu. uF  qUR,          '       g   K  VNK  	  up Fj  pV P                  P	                  VP
                  P                  VR,          R4      4      pVf   KE  V F  pV P                  WWvV4      R8X  g   K  RpK!  	  Kl  	  V# u upi r   )rO   r   rP   r   r   r0   r   _verify_device_command)r   rE   r[   r   r~   r   r   rk   s   &&&&    r   r   Z"Plugin._verify_all_device_commands  s    #)-dnn.C.C.E)F`)FgR^J_J_'')F`g%%h&6&6&:&:76?D&QR9v""8fX\aaS 	 a 
* as
   B6B6c                s   Ve   \        V4      p\        V4      ^8:  d   V# VR,          pVR,          pVf   VR
9   d   V# T#  VR8X  d   \        V4      \        V4      8  d   V# R # VR8X  d   \        V4      \        V4      8  d   V# R #  V# V#   \         d+    \        P                  RT: RT: RT: RT: R	2	4        T# i ; i)N:Nr9   N:r9   NN<>zcannot compare new value 'z' with current value 'z' by operator 'z
', using 'z' directly as new value)r   r   )r5   ra   int
ValueErrorr.   r/   )r   r   current_valueZnwsr|   valr   r   _process_assignment_modifiersZ$Plugin._process_assignment_modifiers  s    	Y3	#h!mB2	R3
"31	1b	SyC3}%%j	sC3}%%j	 
 
  bKK  B  DQ  SU  W`  a  b	bs   !B (!B 1CCc                sJ    Ve   VR,          ! W1VR7      # VR,          ! V4      # )Nr   r   r(   )r   rE   r   rk   r      &&&&&r   _get_current_valueZPlugin._get_current_value  s(    
%..
II
%.
""r   c                s    V P                  WV4      pV P                  WE4      pVe   Ve   V P                  WWS4       V# r   )r   r   r   )r   rE   r   rk   r   r   r   r   r   ZPlugin._check_and_save_value  sE    ))(VD-00J)}8X>	r   c                s    VR ,          e   VR ,          ! RWCRRV4       R# V P                  WW44      pVe   VR,          ! WCVRRR7       R# R# r   NTFrX   Zsimremover   )r   rE   r   rk   r   r   r   r   ZPlugin._execute_device_command  sQ    X"
8T9eUHE))(VO9EN9heeL r   c                s    VR ,          e   VR ,          ! RVRRV4       R# V P                  WRV4      pVe   VR,          ! W1RRR7       R# R# r   r   r   s   &&&&r   r   Z"Plugin._execute_non_device_command  sQ    X"
8T9eUH=))(T9M9EN9eeD r   c                s    V P                   P                  \        V4      4      p\        P                  ! R V4      '       d   \        P
                  ! RRV4      # V# )z\s*(0+,?)+([\da-fA-F]*,?)*\s*$z^\s*(0+,?)+r   )r   Zunquoter5   reZmatchZsub)r   r6   Zvrj   r   _norm_valueZPlugin._norm_value  sD    
iiE
#!XX/33
&&Q
''	
(r   c                s   Vf   R # RpVff   V'       d^   Vf-   \         P                  \        P                  V,          4       R# \         P                  \        P                  WQ3,          4       R# Ve;   V P                  V4      pV P                  V4      p \        V4      \        V4      8H  pV P                  WVW5R7       V#   \         d     \        T^4      \        T^4      8H  p L=  \         dh    \        T4      \        T4      8H  pT'       gE   \        T4      P                  R4      pT F$  pTP                  4       pY8H  pT'       g   K!     K  	    Li ; ii ; i)NFTZ|)rk   )r.   rc   rw   Z STR_VERIFY_PROFILE_VALUE_MISSINGZ'STR_VERIFY_PROFILE_DEVICE_VALUE_MISSINGr   r   r   r5   r%   strip_log_verification_result)	r   r&   r   r   r   rk   r~   Zvalsr   s	   &&&&&&   r   _verify_valueZPlugin._verify_value  sC   
#~nHHV44t;<  HHV;;vnLM
##M2=	*9
i.C.
.C 9   $	*  
y"]B!77S y>S//S^!!#&d#YY[s!s
#	 	s=   C E#C--A"EEE#EE#EE#c           	     s   V'       d   VfF   \         P                  \        P                  V\	        V4      P                  4       3,          4       R# \         P                  \        P                  WQ\	        V4      P                  4       3,          4       R# Vf^   \         P                  \        P                  V\	        V4      P                  4       \	        V4      P                  4       3,          4       R# \         P                  \        P                  WQ\	        V4      P                  4       \	        V4      P                  4       3,          4       R# )NTF)
r.   rc   rw   ZSTR_VERIFY_PROFILE_VALUE_OKr5   r   Z"STR_VERIFY_PROFILE_DEVICE_VALUE_OKr]   ZSTR_VERIFY_PROFILE_VALUE_FAILZ$STR_VERIFY_PROFILE_DEVICE_VALUE_FAIL)r   r&   Zsuccessr   r   rk   s   &&&&&&r   r   ZPlugin._log_verification_result>  s    nHHV//4]9K9Q9Q9S2TTU  HHV66&MHZH`H`Hb9ccd
nIIf22dC<N<T<T<VX[\eXfXlXlXn5oop  IIf99V3}K]KcKcKegjktgug{g{g}<~~
r   c                s    VR ,          e   VR ,          ! RWCRWQ4      # V P                  WW5R7      pV P                  WF4      pVf   R# VR,          ! WCVRR4      pV P                  VR,          WFWS4      # )r   NTr   rX   Fr&   r   r   r   )r   rE   r   rk   r   r   r   s   &&&&&& r   r   ZPlugin._verify_device_commandM  s~    X"
(
D)T>
TT))(V)c-00J)
enY$F)			GFOY~	^^r   c                s    VR ,          e   VR ,          ! RVRWA4      # V P                  W4      pV P                  W54      pVf   R# VR,          ! W1RR4      pV P                  VR,          W5V4      # )r   NTrX   Fr&   r   )r   rE   r   r   r   r   r   r   r   Z!Plugin._verify_non_device_commandW  sw    X"
(
D)T>
LL))(<-00J)
enY$>)			GFOY~	VVr   c                sV   \        \        V P                  P                  4       4       Uu. uF  q"R ,          '       d   K  VNK  	  up4       FS  pVP                  P                  VR,          R4      f   VR,          V P                  9   g   KB  V P                  W4       KU  	  R# u upi r   )reversedrO   r   rP   r0   r   r   _cleanup_non_device_command)r   rE   r   rj   r   r   Z'Plugin._cleanup_all_non_device_commandsa  s    $t~~7L7L7N2Om2Ow_kWlWl772OmngGFOT2>GFOW[WtWtDt$$X7 oms   B& B&c                sj   \        \        V P                  P                  4       4       Uu. uF  qDR ,          '       g   K  VNK  	  up4       F]  pVP                  P                  VR,          R4      f   VR,          V P                  9   g   KB  V F  pV P                  WWS4       K  	  K_  	  R# u upi r   )r   rO   r   rP   r0   r   r   _cleanup_device_command)r   rE   r[   r   r   rk   s   &&&&  r   r   Z#Plugin._cleanup_all_device_commandsf  s    $t~~7L7L7N2Oi2Ow[gShSh772OijgGFOT2>GFOW[WtWtDt	!!(VD  kis   B0 B0c                s    VR ,          e   VR ,          ! RRVRRV4       R# V P                  WV4      pVe   VR,          ! WSVRVR7       V P                  WV4       R# r   NFrX   r   r   r   )r   rE   r   rk   r   	old_valuer   r   r   ZPlugin._cleanup_device_commandl  s^    X"
8UD&%A  F;9EN9hefMx&1r   c                s    VR ,          e   VR ,          ! RRRRV4       R# V P                  W4      pVe   VR,          ! W1RRR7       V P                  W4       R# r   r   )r   rE   r   r   r   r   r   Z"Plugin._cleanup_non_device_commandu  sV    X"
8UD%9  39EN9eeDx)r   )rY   r   r   r
   r   r   rW   rZ   r   r	   r   r   r   r   r   r   r   )NNNr   rh   )NN)F)Ir   r$   Z__qualname__Z__firstlineno__Z__doc__r   r    r"   Zpropertyr&   Zclassmethodr)   r+   r   r3   r8   rF   rI   rN   r   rG   rM   rS   r!   r\   r_   rg   rR   rm   rq   rs   ry   rw   ZROLLBACK_SOFTr   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   r   r   r   r   r   r   r   r   r   r   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r      s    ,
 C C      	)	% 
#

	2#$#$ JPI]I] %N$*,i 9?8L8L w$I :@9M9M 2
2A>
S   "CG	0#ME@_W8
E2* *r   r   )r   Ztuned.constsrw   Ztuned.profiles.variablesZtunedZ
tuned.logsr   Ztuned.utils.commandsr    ru   Z
subprocessr   r   Zlogsr   r.   Zobjectr   r(   r   r   <module>r      s;    	     ) 	 "jjnnp	*V p	*r   