ó
    k‘Ðh¤I ã                   ó8  • S r SR                  \  V s/ s H  n \" U 5      PM     sn 5      rSSKrSSKrSSKrSSKrSSKrSr	Sq
 " S S\5      r " S S\5      rS	 rS;S
 jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#0 4S jr$ " S  S!\5      r% " S" S#\5      r&S$ r'S% r(S& r)S' r*S( r+S) r,S* r-S+ r.S, r/S- r0S. r1S/ r2S0 r3S1 r4S2 r5S3 r6S4 r7S5 r8S6 r9S7 r:S8 r;\<S9:X  a  \;" 5         g\" S:S:5      q
\" 5         gs  sn f )<)é	   é    r   Ú.r   NTc                   óJ   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)ÚTraceé*   c                 ó0  • Xl         U R                   (       d  g SSKJn  SSKJn  U(       a  U" 5       U l        O?UR                  5       R                  S5      n[        SR                  U5      S5      U l        U" 5       U l	        U" 5       U l
        S U l        g )Nr   )Údatetime©ÚStringIOz%Y-%m-%d_%H-%M-%S-%fzcpuinfo_trace_{0}.traceÚw)Ú
_is_activer	   Úior   Ú_outputÚnowÚstrftimeÚopenÚformatÚ_stdoutÚ_stderrÚ_err)ÚselfÚ	is_activeÚis_stored_in_stringr	   r   Údates         ÚL/home/mande/repo/quber/.venv/lib/python3.13/site-packages/cpuinfo/cpuinfo.pyÚ__init__ÚTrace.__init__+   sm   € Ø„/Ø	��Ø	åÝæÙ“*€4…<à
�,‰,‹.×
!Ñ
!Ð"8Ó
9€4ÜÐ0×7Ñ7¸Ó=¸sÓC€4„<á“€$„,Ù“€$„,Ø€$…)ó    c                 óæ   • U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  XU5      5        U R                  R                  5         g )Nr   ©Ústacké   é   z{0} ({1} {2})
©r   Úinspectr!   r   Úwriter   Úflush©r   Úmsgr!   ÚframeÚfileÚlines         r   ÚheaderÚTrace.header=   s[   € Ø	��˜&åÙ
‹'�!‰*€%Ø	ˆq‰€$Ø	ˆq‰€$Ø‡,�,×ÑÐ&×-Ñ-¨c¸Ó>Ô?Ø‡,�,×ÑÕr   c                 óä   • U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  X45      5        U R                  R                  5         g )Nr   r    r"   r#   zSuccess ... ({0} {1})

r$   )r   r!   r*   r+   r,   s        r   ÚsuccessÚTrace.successG   sY   € Ø	��˜&åÙ
‹'�!‰*€%Ø	ˆq‰€$Ø	ˆq‰€$à‡,�,×ÑÐ0×7Ñ7¸ÓCÔDØ‡,�,×ÑÕr   c           
      óP  • U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   n[        U[        5      (       a˜  SR                  UR                  S5       Vs/ s H  nSU-   PM
     sn5      S-   nU R                  R                  U5        U R                  R                  SR                  UW5      5        U R                  R                  5         g [        U[        5      (       a®  SS	KJn  U" 5       nU R                  R                  S
R                  XE5      5        U R                  R                  SR                  UR                  S5       Vs/ s H  nSR                  U5      PM     sn5      S-   5        U R                  R                  5         g g s  snf s  snf )Nr   r    r"   r#   Ú Ú
Ú	zFailed ... ({0} {1})

©Ú
format_excz	Failed ... ({0} {1})
ú		{0}
)r   r%   r!   Ú
isinstanceÚstrÚjoinÚsplitr   r&   r   r'   Ú	ExceptionÚ	tracebackr7   )	r   r)   r!   r*   r+   r,   r7   Ú
err_stringÚns	            r   ÚfailÚ
Trace.failR   sE  € Ø	��˜&åÙ
‹'�!‰*€%Ø	ˆq‰€$Ø	ˆq‰€$ä�”S×ÑØ	�‰¨#¯)©)°D¬/Ó:ª/ $�$˜”+©/Ñ:Ó	;¸dÑ	B€3à‡<�<×Ñ�cÔØ‡<�<×ÑÐ0×7Ñ7¸¸dÓCÔDØ‡<�<×ÑÕÜ�#”y×!Ñ!Ý#Ù“€:Ø‡<�<×ÑÐ0×7Ñ7¸ÓCÔDØ‡<�<×Ñ�b—g‘g¸j×>NÑ>NÈtÔ>TÓUÒ>T¸˜{×1Ñ1°!Ö4Ñ>TÑUÓVÐY]Ñ]Ô^Ø‡<�<×ÑÕð "ùò ;ùò Vs   Á FÅF#c                 óæ   • U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  XU5      5        U R                  R                  5         g )Nr   r    é   r"   r#   z	{0} ({1} {2})
r$   r(   s         r   Úcommand_headerÚTrace.command_headerg   s[   € Ø	��˜&åÙ
‹'�!‰*€%Ø	ˆq‰€$Ø	ˆq‰€$Ø‡,�,×ÑÐ(×/Ñ/°¸4Ó@ÔAØ‡,�,×ÑÕr   c           
      ór  • U R                   (       d  g U R                  R                  SR                  U5      5        U R                  R                  SR	                  UR                  S5       Vs/ s H  nSR                  U5      PM     sn5      S-   5        U R                  R                  5         g s  snf )Nr8   r3   r4   z			{0}
)r   r   r&   r   r;   r<   r'   )r   r)   Úoutputr@   s       r   Úcommand_outputÚTrace.command_outputq   s„   € Ø	��˜&à‡,�,×Ñ�[×'Ñ'¨Ó,Ô-Ø‡,�,×Ñ�R—W‘W¸v¿|¹|ÈDÔ?QÓRÒ?Q¸!˜m×2Ñ2°1Ö5Ñ?QÑRÓSÐVZÑZÔ[Ø‡,�,×ÑÕùò Ss   Á0B4c           	      ó„  • U R                   (       d  g SSKJn  U" 5       S   nUS   nUS   nU R                  R	                  SR                  Xg5      5        U Vs/ s H  oˆU;   d  M
  Xƒ;   d  M  X(   X8   :w  d  M  UPM!     n	nU	(       a:  U	 H3  nU R                  R	                  SR                  X‚U   X8   5      5        M5     OU R                  R	                  S5        U R                  R	                  SR                  Xg5      5        U Vs/ s H  oˆU;   d  M
  X‚;  d  M  UPM     n
nU
(       a7  U
 H0  nU R                  R	                  S	R                  XƒU   5      5        M2     OU R                  R	                  S5        U R                  R	                  S
5        U R                  R                  5         g s  snf s  snf )Nr   r    r#   r"   z	Changed keys ({0} {1})
z		{0}: {1} to {2}
z		None
z	New keys ({0} {1})
z		{0}: {1}
r4   r$   )r   ÚkeysÚinfoÚnew_infor!   r*   r+   r,   ÚkeyÚchanged_keysÚnew_keyss              r   rL   Ú
Trace.keysx   sn  € Ø	��˜&åÙ
‹'�!‰*€%Ø	ˆq‰€$Ø	ˆq‰€$ð ‡,�,×ÑÐ1×8Ñ8¸ÓDÔEÙ!%Óh¢˜#°©“#¸¹“#ÈTÉYÐZbÑZgÑMg—#¡€,ÐhÞÛ€sØ‡L�L×ÑÐ.×5Ñ5°cÀ¹9ÀhÁmÓTÖUò ð ‡<�<×Ñ�lÔ#ð ‡,�,×ÑÐ-×4Ñ4°TÓ@ÔAÙ!ÓIšT�c¨H¡_‹c¸¹�c™T€(ÐIÞÛ€sØ‡L�L×ÑÐ'×.Ñ.¨s¸S±MÓBÖCò ð ‡<�<×Ñ�lÔ#à‡,�,×Ñ�TÔØ‡,�,×ÑÕùò# iùò Js*   Á	F8Á(F8Á/F8Á;F8Ä	F=ÄF=Ä!F=c                 ó˜   • U R                   (       d  g U R                  R                  US-   5        U R                  R                  5         g )Nr4   )r   r   r&   r'   )r   r)   s     r   r&   ÚTrace.write•   s1   € Ø	��˜&à‡,�,×Ñ�S˜4‘ZÔ Ø‡,�,×ÑÕr   c                 ó¸   • U R                   R                  5       U R                  R                  5       U R                  R                  5       UU R                  US.$ )N)rH   ÚstdoutÚstderrrM   ÚerrÚis_fail)r   Úgetvaluer   r   r   )r   rM   rY   s      r   Úto_dictÚTrace.to_dict›   sI   € à�\‰\×"Ñ"Ó$Ø�\‰\×"Ñ"Ó$Ø�\‰\×"Ñ"Ó$ØØ
�)‰)Øñ
ð r   )r   r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r-   r0   rA   rE   rI   rL   r&   r[   Ú__static_attributes__© r   r   r   r   *   s/   † òò$ò	òò*òòò:õr   r   c                   óÀ  • \ rS rSr\R
                  " 5       S   r\R                  " 5       r\R                  " 5       R                  5       S:H  r\R                  " 5       r\R                  " 5       S   rSr\S 5       r\S 5       r\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S 5       r#\S 5       r$\S 5       r%\S 5       r&\S 5       r'\S 5       r(\S 5       r)\S 5       r*\S 5       r+\S  5       r,\S! 5       r-\S" 5       r.S#r/g$)%Ú
DataSourceé¥   r   Úwindowsé   Tc                  ó@   • [         R                  R                  S5      $ )Nú/proc/cpuinfo)ÚosÚpathÚexistsrb   r   r   Úhas_proc_cpuinfoÚDataSource.has_proc_cpuinfo­   s   € ä	�‰�‰˜Ó	(Ð(r   c                  ó0   • [        [        S5      5      S:„  $ )NÚdmesgr   ©ÚlenÚ_program_pathsrb   r   r   Ú	has_dmesgÚDataSource.has_dmesg±   ó   € ä	Œ^˜GÓ$Ó	%¨Ñ	)Ð)r   c                  ó  • [         R                  " 5       R                  5       R                  S5      R                  S5      R                  5       R                  5       n SU ;   =(       a    [        R
                  R                  S5      $ )NÚ"Ú'Úlinuxú/var/run/dmesg.boot)ÚplatformÚsystemÚstripÚlowerrj   rk   rl   )Úunames    r   Úhas_var_run_dmesg_bootÚ!DataSource.has_var_run_dmesg_bootµ   s]   € ä
�/Š/Ó
×
!Ñ
!Ó
#×
)Ñ
)¨#Ó
.×
4Ñ
4°SÓ
9×
?Ñ
?Ó
A×
GÑ
GÓ
I€%Ø	�EÑ	×	CœbŸg™gŸn™nÐ-BÓCÐCr   c                  ó0   • [        [        S5      5      S:„  $ )Núcpufreq-infor   rq   rb   r   r   Úhas_cpufreq_infoÚDataSource.has_cpufreq_infoº   s   € ä	Œ^˜NÓ+Ó	,¨qÑ	0Ð0r   c                  ó0   • [        [        S5      5      S:„  $ )NÚsestatusr   rq   rb   r   r   Úhas_sestatusÚDataSource.has_sestatus¾   s   € ä	Œ^˜JÓ'Ó	(¨1Ñ	,Ð,r   c                  ó0   • [        [        S5      5      S:„  $ )NÚsysctlr   rq   rb   r   r   Ú
has_sysctlÚDataSource.has_sysctlÂ   ó   € ä	Œ^˜HÓ%Ó	&¨Ñ	*Ð*r   c                  ó0   • [        [        S5      5      S:„  $ )NÚisainfor   rq   rb   r   r   Úhas_isainfoÚDataSource.has_isainfoÆ   s   € ä	Œ^˜IÓ&Ó	'¨!Ñ	+Ð+r   c                  ó0   • [        [        S5      5      S:„  $ )NÚkstatr   rq   rb   r   r   Ú	has_kstatÚDataSource.has_kstatÊ   rv   r   c                  ó  • [         R                  " 5       R                  5       R                  S5      R                  S5      R                  5       R                  5       n SU ;   =(       d    SU ;   nU=(       a    [	        [        S5      5      S:„  $ )Nrx   ry   ÚbeosÚhaikuÚsysinfor   )r|   r}   r~   r   rr   rs   )r€   Úis_beoss     r   Úhas_sysinfoÚDataSource.has_sysinfoÎ   sl   € ä
�/Š/Ó
×
!Ñ
!Ó
#×
)Ñ
)¨#Ó
.×
4Ñ
4°SÓ
9×
?Ñ
?Ó
A×
GÑ
GÓ
I€%Ø�e‰O×/˜w¨%Ñ/€'Ø	×	7”Sœ¨	Ó2Ó3°aÑ7Ð7r   c                  ó0   • [        [        S5      5      S:„  $ )NÚlscpur   rq   rb   r   r   Ú	has_lscpuÚDataSource.has_lscpuÔ   rv   r   c                  ó0   • [        [        S5      5      S:„  $ )NÚlspropr   rq   rb   r   r   Úhas_ibm_pa_featuresÚDataSource.has_ibm_pa_featuresØ   r�   r   c                  óT   • [        / SQ5      u  pU S:H  =(       a    [        U5      S:„  $ )N)Úwmicrj   ÚgetÚVersionr   )Ú_run_and_get_stdoutrr   )Ú
returncoderH   s     r   Úhas_wmicÚDataSource.has_wmicÜ   s'   € ä*Ò+KÓLÑ€*Ø	�q‰×	,œS ›[¨1™_Ð,r   c                  ó   • [        SS/5      $ )NÚcatri   ©r«   rb   r   r   Úcat_proc_cpuinfoÚDataSource.cat_proc_cpuinfoá   s   € ä	˜e _Ð5Ó	6Ð6r   c                  ó   • [        S/5      $ )Nr„   r±   rb   r   r   Úcpufreq_infoÚDataSource.cpufreq_infoå   s   € ä	˜nÐ-Ó	.Ð.r   c                  ó   • [        SS/5      $ )Nrˆ   z-br±   rb   r   r   Ú
sestatus_bÚDataSource.sestatus_bé   s   € ä	˜j¨$Ð/Ó	0Ð0r   c                  ó   • [        SS/5      $ )Nrp   z-ar±   rb   r   r   Údmesg_aÚDataSource.dmesg_aí   s   € ä	˜g t˜_Ó	-Ð-r   c                  ó   • [        SS/5      $ )Nr°   r{   r±   rb   r   r   Úcat_var_run_dmesg_bootÚ!DataSource.cat_var_run_dmesg_bootñ   s   € ä	˜eÐ%:Ð;Ó	<Ð<r   c                  ó   • [        / SQ5      $ )N)rŒ   zmachdep.cpuúhw.cpufrequencyr±   rb   r   r   Ú"sysctl_machdep_cpu_hw_cpufrequencyÚ-DataSource.sysctl_machdep_cpu_hw_cpufrequencyõ   s   € ä	ÒIÓ	JÐJr   c                  ó   • [        SS/5      $ )Nr‘   z-vbr±   rb   r   r   Ú
isainfo_vbÚDataSource.isainfo_vbù   s   € ä	˜i¨Ð/Ó	0Ð0r   c                  ó   • [        / SQ5      $ )N)r•   z-mÚcpu_infor±   rb   r   r   Úkstat_m_cpu_infoÚDataSource.kstat_m_cpu_infoý   s   € ä	Ò8Ó	9Ð9r   c                  ó   • [        SS/5      $ )Nr›   z-cpur±   rb   r   r   Úsysinfo_cpuÚDataSource.sysinfo_cpu  s   € ä	˜i¨Ð0Ó	1Ð1r   c                  ó   • [        S/5      $ )Nr    r±   rb   r   r   r    ÚDataSource.lscpu  s   € ä	˜g˜YÓ	'Ð'r   c                  ó\   • SS K n U R                  S5      nU(       a  [        SUS   /5      $ g )Nr   z(/proc/device-tree/cpus/*/ibm,pa-featuresr¤   )Úglobr«   )rÑ   Úibm_featuress     r   Úibm_pa_featuresÚDataSource.ibm_pa_features	  s0   € ãà—‘ÐEÓF€,ÞÜ
˜x¨°a©Ð9Ó
:Ð:ð r   c                  ó   • [        / SQ5      $ )N)r¨   Úcpur©   zOName,CurrentClockSpeed,L2CacheSize,L3CacheSize,Description,Caption,Manufacturerz/format:listr±   rb   r   r   Úwmic_cpuÚDataSource.wmic_cpu  s   € ä	ò  Wó  
Xð  Xr   c                  ó:   • [        SS5      n U R                  5       $ )Nú.Hardware\Description\System\CentralProcessor\0ÚProcessorNameString)Ú_read_windows_registry_keyr~   )Úprocessor_brands    r   Úwinreg_processor_brandÚ!DataSource.winreg_processor_brand  s   € ä.Ð/`ÐbwÓx€/Ø	×	Ñ	Ó	 Ð r   c                  ó   • [        SS5      n U $ )NrÚ   ÚVendorIdentifier©rÜ   )Úvendor_id_raws    r   Úwinreg_vendor_id_rawÚDataSource.winreg_vendor_id_raw  s   € ä,Ð-^Ð`rÓs€-Ø	Ðr   c                  ó   • [        SS5      n U $ )Nz<SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentÚPROCESSOR_ARCHITECTURErâ   )Úarch_string_raws    r   Úwinreg_arch_string_rawÚ!DataSource.winreg_arch_string_raw  s   € ä.Ð/nð  qIó  J€/Ø	Ðr   c                  ó4   • [        SS5      n [        U 5      n U $ )NrÚ   z~Mhz)rÜ   Ú_to_decimal_string)Ú	hz_actuals    r   Úwinreg_hz_actualÚDataSource.winreg_hz_actual$  s    € ä(Ð)ZÐ\bÓc€)Ü  Ó+€)Ø	Ðr   c                  ó   • [        SS5      n U $ )NrÚ   Ú
FeatureSetrâ   )Úfeature_bitss    r   Úwinreg_feature_bitsÚDataSource.winreg_feature_bits*  s   € ä+Ð,]Ð_kÓl€,Ø	Ðr   rb   N)0r]   r^   r_   r`   r|   ÚarchitectureÚbitsÚmultiprocessingÚ	cpu_countr}   r   Ú
is_windowsÚmachinerè   r€   Úuname_string_rawÚ	can_cpuidÚstaticmethodrm   rt   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ó   ra   rb   r   r   rd   rd   ¥   sª  † Ø×ÒÓ Ñ"€Ø×&Ò&Ó(€Ø�oŠoÓ×%Ñ%Ó'¨9Ñ4€Ø×#Ò#Ó%€Ø—N’NÓ$ QÑ'ÐØ€àñ)ó ð)ð ñ*ó ð*ð ñDó ðDð ñ1ó ð1ð ñ-ó ð-ð ñ+ó ð+ð ñ,ó ð,ð ñ*ó ð*ð ñ8ó ð8ð
 ñ*ó ð*ð ñ+ó ð+ð ñ-ó ð-ð ñ7ó ð7ð ñ/ó ð/ð ñ1ó ð1ð ñ.ó ð.ð ñ=ó ð=ð ñKó ðKð ñ1ó ð1ð ñ:ó ð:ð ñ2ó ð2ð ñ(ó ð(ð ñ;ó ð;ð ñXó ðXð ñ!ó ð!ð ñó ðð ñó ðð ñó ðð
 ñó ór   rd   c                 óN  • / n[        S [        R                  R                  SS5      R	                  [        R
                  5      5      n[        R                  S   R	                  [        R
                  5       H§  n[        R                  R                  X05      n[        R                  " U[        R                  5      (       a  UR                  U5        U HD  nX4-   n[        R                  " U[        R                  5      (       d  M3  UR                  U5        MF     M©     U$ )NÚPATHEXTr3   ÚPATH)Úfilterrj   Úenvironr©   r<   Úpathseprk   r;   ÚaccessÚX_OKÚappend)Úprogram_nameÚpathsÚextsÚpÚeÚpexts         r   rs   rs   0  s¾   € Ø	€Üˆt”R—Z‘Z—^‘^ I¨rÓ2×8Ñ8¼¿¹ÓDÓE€Ü
�*‰*�VÑ
×
"Ñ
"¤2§:¡:Ö
.€QÜ‡g�g‡l�l�1Ó#€!Ü‡Y‚Yˆq”"—'‘'×ÑØ‡<�<�„?Û€aØ
‰%€4Ü‡i‚i�”b—g‘g×ÓØ	‡L�L�Öó ñ	 /ð 	€r   c                 óâ  • SSK JnJn  [        R	                  SSR                  U 5      -   S-   5        U(       d  U" XX3S9nO2U" XX3S9nU" XR                  X3S9nUR                  R                  5         UR                  5       u  pgUR                  SS	9nUR                  SS	9n[        R                  S
[        UR                  5      5        [        R                  SU5        UR                  U4$ )Nr   ©ÚPopenÚPIPEzRunning command "Ú z" ...©rV   rW   Ústdin)r  rV   rW   úUTF-8©Úencodingzreturn code:zstdout:)Ú
subprocessr  r  Úg_tracerE   r;   rV   ÚcloseÚcommunicateÚdecoderI   r:   r¬   )ÚcommandÚpipe_commandr  r  Úp1Úp2Ústdout_outputÚstderr_outputs           r   r«   r«   =  s×   € ß#ä×ÑÐ+¨c¯h©h°wÓ.?Ñ?À'ÑIÔJö 	ÙˆW¨$Ñ;�"ñ ˆW¨$Ñ;€"Ùˆ\§¡°4ÑE€"Ø‡)�)‡/�/Ôð !#§¡Ó 0Ñ€Ø×%Ñ%¨wÐ%Ð7€Ø×%Ñ%¨wÐ%Ð7€ô 	×Ñ˜¬¨B¯M©MÓ(:Ô;Ü×Ñ˜	 =Ô1ð 	�‰�}Ð$Ð$r   c                 ó†  • [         R                  SR                  X5      5         SS KnWR                  UR                  U 5      nUR                  XA5      S   nUR                  U5        [         R                  S[        U5      5        U$ ! [         a*  n SS Kn S nANv! [         a  n S nA S nAN‰S nAff = fS nAff = f)Nz*Reading Registry key "{0}" field "{1}" ...r   zvalue:)r  rE   r   Ú_winregÚImportErrorÚwinregÚOpenKeyÚHKEY_LOCAL_MACHINEÚQueryValueExÚCloseKeyrI   r:   )Úkey_nameÚ
field_namer%  rX   rO   Úvalues         r   rÜ   rÜ   W  s¦   € Ü×ÑÐD×KÑKÈHÓaÔbðÛð ‡~�~�f×/Ñ/°Ó:€Ø	×	Ñ	˜SÓ	-¨aÑ	0€Ø‡��ÔÜ×Ñ˜¤# e£*Ô-Ø€øô 	ó ðß€=øÜ	ó ß€4ûðþðús/   ¦B Â
C ÂB Â 
B8Â*B;Â3B8Â8B;Â;C c                  ó\   • [        [        R                  5      u  pU S;  a  [        S5      eg )N)
ÚX86_32ÚX86_64ÚARM_7ÚARM_8ÚPPC_64ÚS390XÚMIPS_32ÚMIPS_64ÚRISCV_32ÚRISCV_64zNpy-cpuinfo currently only works on X86 and some ARM/PPC/S390X/MIPS/RISCV CPUs.)Ú_parse_archrd   rè   r=   )Úarchrö   s     r   Ú_check_archr:  i  s:   € Üœ*×4Ñ4Ó5�€Øð ó 	ô 	ð <ó 	=ð =ð	r   c                 ó€   • SS K nSS KnU nUR                  U5      nUR                  U5      nUR	                  S5      nU$ )Nr   Úutf8)ÚpickleÚbase64ÚdumpsÚ	b64encoder  )Úthingr=  r>  ÚaÚbÚcÚds          r   Ú_obj_to_b64rF  q  s=   € ÛÛà
€Ø‡\�\�!ƒ_€Ø×Ñ�aÓ€Ø‡X�XˆfÓ€Ø	€r   c                 ó€   • SS K nSS Kn UR                  U 5      nUR                  U5      nU$ ! [         a    0 s $ f = f©Nr   )r=  r>  Ú	b64decodeÚloadsr=   )rA  r=  r>  rB  rC  s        r   Ú_b64_to_objrK  {  sC   € ÛÛðØ×Ñ�uÓ€!Ø‡l�l�1ƒo€!Ø	
€(øÜó Ø	‚)ðús   Š#. ®=¼=c                 ó  • [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [        5      (       a8  U R	                  5        VVs0 s H  u  p#[        U5      [        U5      _M     snn$ U $ s  snf s  snnf ©N)r9   ÚlistÚ_utf_to_strÚdictÚitems)ÚinputÚelementrO   r,  s       r   rO  rO  †  s~   € Üˆu”d×ÑÙ.3Ó	4ªe 7Œ+�gÖ
©eÑ	4Ð4Ü�œ×Ñà—[‘[”]ô
$Ú"�z€sô �cÓ
œK¨Ó.Ò
.Ù"ò
$ð $ð 
€,ùò 
5ùó
$s   šBÁ!Bc                 óp  • / SQn[         R                  X U5        U H–  nUR                  US 5      (       a  U R                  US 5      (       d  X   X'   M9  US:X  d  MA  UR                  S5      (       d  MY  US    H!  nX@S   ;  d  M  U S   R                  U5        M#     U S   R	                  5         M˜     g )N)rã   Úhardware_rawÚ	brand_rawÚhz_advertised_friendlyÚhz_actual_friendlyÚhz_advertisedrí   r9  rö   Úcountrè   rû   Úl2_cache_sizeÚl2_cache_line_sizeÚl2_cache_associativityÚsteppingÚmodelÚfamilyÚprocessor_typeÚflagsÚl3_cache_sizeÚl1_data_cache_sizeÚl1_instruction_cache_sizerb  )r  rL   r©   r  Úsort)rM   rN   rL   rO   Úfs        r   Ú_copy_new_fieldsrh  �  sž   € ò	€ô 	‡�ˆd˜(Ô#ó €SØ‡\�\�#�t×Ñ T§X¡X¨c°4×%8Ñ%8Ø‰}€4ƒ9Ø
ˆg…~˜(Ÿ,™, w×/Ó/Ø�WÔ€qØ�W‘Õ˜t G™}×3Ñ3°AÖ6ñ àˆ�=×ÑÖò r   c                 óx  • UR                  5        H¦  nU H�  nUR                  5       nSU;   d  M  UR                  SS5      u  pVUR                  5       R                  5       nUR                  5       nXT:X  d  Md  [	        U5      S:”  d  Mu  U (       a  UR                  5       (       d  Us  s  $ M™  Us  s  $    M¨     g )NÚ:r"   r   )Ú
splitlinesr   r<   r~   rr   Úisdigit)Úcant_be_numberÚ
raw_stringÚfield_namesr,   r+  ÚleftÚrights          r   Ú_get_field_actualrr  ¥  s™   € Ø×"Ñ"Ö$€TÛ€jØ× Ñ Ó"€:Ø	ˆT…kØ—*‘*˜S !Ó$�K€DØ�:‰:‹<×ÑÓ€DØ�K‰K‹M€EØÕœc %›j¨1�nÞØ�]‰]�_‰_Ø„|ñ ð „ló  ñ %ð 	r   c                 óz   • [        XU5      nU(       a  U(       a	   U" U5      nUc  UnU$ ! [         a    Un Nf = frM  )rr  r=   )rm  rn  Ú
convert_toÚdefault_valuero  Úretvals         r   Ú
_get_fieldrw  ¶  sK   € Ü
˜N¸Ó
D€ö ŽzðÙ�vÓ€6ð
 �NØ€&à€øô 
ó Ø‚6ðús   œ+ «:¹:c                 ó   •  SR                  U 5      n U R                  SS5      n SR                  S U  5       5      R                  5       n U S:X  a  Sn SU ;  a  SR                  U 5      n U R	                  S5      n U R                  S5      (       a  SR                  U 5      n [        U 5      n SR                  U 5      n U $ ! [         a     g	f = f)
Nú{0}Ú,r   r3   c              3   ó^   #   • U  H#  oR                  5       (       d  US :X  d  M  Uv •  M%     g7f©r   N©rl  ©Ú.0r@   s     r   Ú	<genexpr>Ú%_to_decimal_string.<locals>.<genexpr>Î  s    é € Ð<šU˜§i¡i§k¡k°Q¸±V—!‘!šUùó   ‚-¤	-Ú0z{0}.0z{0}0ú0.0)r   Úreplacer;   r~   ÚrstripÚendswithÚfloatr=   )Útickss    r   rì   rì   Æ  sÇ   € ðà
�,‰,�uÓ
€%à
�-‰-˜˜SÓ
!€%ð �'‰'Ñ<™UÓ<Ó
<×
BÑ
BÓ
D€%Ø
ˆbƒ[Ø€5ð 	�ÓØ�>‰>˜%Ó €5ð �,‰,�sÓ
€%ð ‡^�^�C×ÑØ�=‰=˜Ó€5ô �‹,€%Ø
�,‰,�uÓ
€%Ø	€,øÜó Ù	ðús   ‚B=C  Ã 
CÃCc                 ó~  •  [        U 5      n SR                  U 5      n U R                  S5      nUR                  S5      nUR	                  SS5      nUR                  X-   S-   S5      nX1-   nSR                  US U X$S  5      nUR                  S5      u  pV[        U5      [        U5      peXV4$ ! [         a     gf = f)Nry  rƒ  r   r3   r"   ú{0}.{1}©r   r   )	rˆ  r   ÚlstripÚindexr…  Úljustr<   Úintr=   )r‰  ÚscaleÚhzÚ	old_indexÚ	new_indexrp  rq  s          r   Ú_hz_short_to_fullr•  ä  s¿   € ðä
�‹,€%Ø
�,‰,�uÓ
€%ð ‡|�|�CÓ€"Ø�h‰h�s‹m€)Ø	‡z�z�#�rÓ€"Ø	‡x�x�Ñ! !Ñ# SÓ)€"ØÑ€)Ø×Ñ˜˜:˜I˜¨¨:¨Ó7€"Ø—‘˜“�+€$Ü�D“	œ3˜u›:ˆØ
ˆÐøÜó Ù	ðúó   ‚B,B/ Â/
B<Â;B<c                 ó~  •  U R                  5       R                  5       n Su  pU R                  S5      (       a  SnO1U R                  S5      (       a  SnOU R                  S5      (       a  SnSR                  S	 U  5       5      R                  5       nS
U;  a  US-  n[	        X5      u  pX4$ ! [
         a     gf = f)N©NNÚghzr   Úmhzé   r’  r   r3   c              3   ó^   #   • U  H#  oR                  5       (       d  US :X  d  M  Uv •  M%     g7fr|  r}  r~  s     r   r€  Ú'_hz_friendly_to_full.<locals>.<genexpr>  s    é € Ð=š)�Q§y¡y§{¡{°a¸±f�q‰qš)ùr‚  r   z.0rŒ  )r~   r   r‡  r;   r•  r=   )Ú	hz_stringr’  r‘  s      r   Ú_hz_friendly_to_fullrŸ  ÷  s¸   € ðØ�o‰oÓ×%Ñ%Ó'€)Ø�)€"à×Ñ˜×ÑØ�5Ø×Ñ˜%× Ñ Ø�5Ø×Ñ˜$×ÑØ€5à	‡w�wÑ=™)Ó=Ó=×CÑCÓE€"Ø	�‹Øˆ�:€2ä Ó*�)€"à
ˆÐøÜó Ù	ðúr–  c                 óˆ  •  [        X5      u  p#SR                  X#5      nUR                  S5      nUR                  SS5      nSnSnUS:”  a  SnSnOUS:”  a  S	nSnO
US
:”  a  SnS
nSR                  US U* S-
   XA* S-
  S  5      nSR                  [	        U5      U5      nUR                  S5      nU$ ! [         a     gf = f)Nr‹  r   r3   ÚHzr   r   ÚGHzr›  ÚMHzrD   ÚKHzr"   z{0:.4f} {1}rƒ  z	0.0000 Hz)r•  r   rŽ  r…  rˆ  r†  r=   )r‰  r‘  rp  rq  ÚresultÚ	dot_indexÚsymbols          r   Ú_hz_short_to_friendlyr¨    së   € ðä! %Ó/�+€$Ø×Ñ˜DÓ(€&ð �l‰l˜3Ó€)Ø�>‰>˜#˜rÓ"€&ð €&Ø
€%Ø�ƒ]Ø€6Ø�5Ø�1ƒ}Ø€6Ø�5Ø�1ƒ}Ø€6Ø€5ð ×Ñ˜F 9 U F¨1¡HÐ-¨v°f¸Q±h°iÐ/@ÓA€&ð ×Ñ¤ f£¨vÓ6€&Ø�=‰=˜Ó€&Ø	€-øÜó Ù	ðús   ‚B1B4 Â4
CÃ Cc                 óø   • SS K nU (       d  U $ SR                  U 5      n SSSSS.nUR                  5        H@  u  p4UR                  X05      (       d  M  SR                  U S S	 R	                  5       U5      s  $    U $ )
Nr   ry  ÚBÚKBÚMBÚGB)z	^[0-9]+B$z	^[0-9]+K$z	^[0-9]+M$z	^[0-9]+G$z{0} {1}éÿÿÿÿ)Úrer   rQ  Úmatchr~   )rR  r¯  ÚformatsÚpatternÚfriendly_sizes        r   Ú_to_friendly_bytesr´  /  s}   € Û
æØ	€,Ø	�‰�eÓ	€ð ØØØñ	€ð  'Ÿ}™}žÑ€WØ‡X�Xˆg×ÓØ
×
Ñ
˜5 $ B˜<×-Ñ-Ó/°Ó
?Ò?ñ  /ð 	€r   c                 ó¦  • U R                  5       nSS0SS0SS0SS0SS0S	S0S
S0SS0SS0SS0/
n U H�  n[        UR                  5       5      S   n[        UR                  5       5      S   nUR	                  U5      (       d  MS  [        UR                  U5      S   R                  5       5      U-  s  $    U $ ! [         a  n S nAU $ S nAff = f)NÚgibi   @Úmibi   Úkibé   ÚgbÚmbÚkbÚgÚmÚkrC  r"   r   )	r   rN  rL   Úvaluesr‡  r�  r<   r~   r=   )Úfriendly_bytesrR  r±  Úentryr²  Ú
multiplierrX   s          r   Ú_friendly_bytes_to_intrÄ  C  sú   € Ø	×	Ñ	Ó	€ð 	ÐÐØˆ;ÐØˆ4€.àÐ
ÐØˆ+ÐØˆ$€-àÐ	ÐØˆÐØˆ€,Øˆ€)ð€ðÛ€eÜ�%—*‘*“,Ó Ñ"€7Ü�U—\‘\“^Ó$ QÑ'€:Ø‡n�n�W×ÓÜˆu�{‰{˜7Ó# AÑ&×,Ñ,Ó.Ó/°*Ñ<Ò<ñ	 ð 	Ðøô 	ó ÛàÐûðús   ²AB; Â/B; Â7B; Â;
CÃCc                 óŠ  • SU R                  5       ;  a  gU R                  5       nSnUR                  S5      (       a  SnOUR                  S5      (       a  SnSU;   a  UR                  S5      S	   nOUR                  S S	5      S	   nUR	                  S5      R	                  S5      R                  5       n[        U5      nX4$ )
Nr’  ©r„  r   r   rš  r›  r™  r   Ú@r"   )r   r‡  r<   Úrsplitr†  r~   rì   )Ú
cpu_stringr’  r‘  s      r   Ú_parse_cpu_brand_stringrÊ  a  s³   € à�
× Ñ Ó"Ó"Ø	à×ÑÓ€Ø	
€à‡K�K�×ÑØ
�%Ø‡k�k�%×ÑØ
€%Øˆ2ƒIØ	‡x�x�ƒ}�QÑ�"à	‡y�y��qÓ˜!Ñ€"à‡i�i�Ó×Ñ˜eÓ$×*Ñ*Ó,€Ü˜Ó€à	ˆÐr   c           	      ó,  • SS K nUR                  SU 5       Vs/ s H  o"R                  5       PM     nnUR                  SU 5       Vs/ s H  o"R                  5       PM     nn[        X45       VVs0 s H  u  pVXV_M	     nnnUR	                  5        VV	s/ s H  u  p‰XS-   U	 PM     nnn	Su  p«pÍU Hç  nUR                  S5       HÏ  nUR                  S5       Vs/ s H  nUR                  5       PM     nn[        U5      S:”  d  MC  US   US   nnUS:X  a  UR                  S	5      n
Mf  US
:X  a  [        UR                  S5      S5      nM‰  US:X  a  [        UR                  S5      S5      nM¬  US;   d  M´  [        UR                  S5      S5      nMÑ     Mé     U R                  5       nSnU(       a\  SnU HK  nSR                  U5      nUR                  U5      (       d  M,  US [        U5      *  R                  5       nSnMM     U(       a  M\  [        U5      u  nnUS:X  aN  U HH  nUnS H=  nUU;   d  M  SUS UR                  U5      [        U5      -    -   n[        U5      u  nn  MF     MJ     UUUX«XÍ4$ s  snf s  snf s  snnf s  sn	nf s  snf )Nr   z\(z\)r"   )NNNNrz  rj  Úoriginrx   r^  Ú0xé   r_  ©Úfamr`  TFz({0})r„  )r¢  r£  r¡  zCPU @ )r¯  ÚfinditerÚstartÚziprQ  r<   r~   rr   r�  r�  r   r‡  rÊ  Úfind)rÉ  r¯  r¾  ÚstartsÚendsr¿  ÚvÚinsidesrÒ  ÚendÚ	vendor_idr^  r_  r`  ÚinsideÚpairr@   Únamer,  ÚbrandÚ
is_workingÚfullÚhz_brandr‘  r’  rÂ  s                             r   Ú_parse_cpu_brand_string_dxrâ  w  si  € Û
ð !Ÿk™k¨%°Ô<Ó
=Ò<˜�7‰7Ž9Ñ<€Ð
=ØŸK™K¨¨zÔ:Ó;Ò:�q�‰ŽÑ:€Ð;Ü  Ô.Ô/Ò.‘T�QˆAŠDÑ.€Ñ/Ø8?¿¹¼ÔHº©*¨%ˆJ˜Q‘w Ó%¹€ÑHð '?Ñ#€�eÛ€VØ�l‰l˜3Ö€dØ"Ÿj™j¨œoÓ
.šo˜ˆ1�7‰7Ž9™o€4Ð
.Ü	ˆ$ƒi�!…mØ�q‘'˜4 ™7ˆ%€DØˆxÓØ—‘˜SÓ!‚YØ	�Ó	Ü�E—L‘L Ó&¨Ó+‚XØ	�‹Ü�—‘˜dÓ# RÓ(‚UØ	Ð"Õ	"Ü�%—,‘,˜tÓ$ bÓ)‚Vó  ñ ð  
×	Ñ	Ó	€Ø€ÞØ€*Û€fØ
�.‰.˜Ó
 €4Ø‡n�n�T×ÓØ�;”S˜“Y�JÐ×%Ñ%Ó'€EØ‚Jñ	 ÷ €zô +¨5Ó1�€ˆ5ð �ÓÛ€fØ€2Û$€uØ�…{Ø
�RÐ6˜2Ÿ7™7 5›>¬C°«JÑ6Ð7Ñ
7€RÜ.¨rÓ2�_€XˆuÚ
ó	 %ñ ð 
�5˜% °eÐDÐDùò] >ùÚ;ùÛ/ùÛHùò /s   ™I;ÁJ Á1JÂJÃJc                 ó�  •  U R                  S5      SS  U R                  S5      SS  -   U R                  S5      SS  -   U R                  S5      SS  -   U R                  S5      SS  -   U R                  S5      SS  -   nU Vs/ s H$  o"R                  S5      S	   R                  5       PM&     nnU Vs/ s H  n[        U5      PM     nnS nS	nU H+  n[        U Vs/ s H  owS LPM     sn5      nX…:”  d  M'  UnUnM-     U(       d  0 $ Uu  pšp¼pÞnS
U ;   Gaw  X R	                  S
5      S  R                  S5      S	   nUR                  5       R                  5       nU Vs/ s H!  owR                  5       R                  S5      PM#     nnU Vs/ s H6  owS	   R                  5       R                  5       US   R                  5       0PM8     nnU H½  n[        UR                  5       5      S	   n[        UR                  5       5      S	   nUS:X  a  UR                  S5      nMT  US:X  a  [        UR                  S5      S5      nMw  US:X  a  [        UR                  S5      S5      nMš  US;   d  M¢  [        UR                  S5      S5      nM¿     / nS H@  nUU ;   d  M  UR                  U R                  U5      S   R                  S5      S	   5        MB     / nU H`  nUR                  S5      S   R                  S5      S	   R                  5       nUR                  S5       H  nUR                  U5        M     Mb     UR                  5         [        U5      u  nn
US:X  a  Sn
[        U	5      nUUUUUUS.nU(       a#  US:w  a  [        UU
5      US'   [        Xš5      US'   U(       a#  US:w  a  [!        UU
5      US'   [!        Xš5      US'   UR#                  5        VVs0 s H  u  nnU(       d  M  UU_M     snn$ s  snf s  snf s  snf s  snf s  snf s  snnf ! [$         a   n[&        R)                  U5         S nA0 $ S nAff = f)Nz CPU0:r"   z CPU1:z CPU:z
CPU0:z
CPU1:z
CPU:r4   r   z	  Origin=Ú=rÌ  rx   r^  rÍ  rÎ  r_  rÏ  )z  Features=z  Features2=z  AMD Features=z  AMD Features2=Ú<Ú>rz  r„  r›  )rã   rV  r^  r_  r`  rb  rW  rX  rY  rí   )r<   r~   râ  ÚsumrÔ  r   rN  rL   rÀ  r�  r�  r  rf  rÊ  rì   r¨  r•  rQ  r=   r  rA   )rH   ÚlinesÚlÚcpu_stringsÚbest_stringÚhighest_countrÉ  r@   rZ  rí   r‘  rÝ   rÚ  r^  r_  r`  ÚfieldsÚfieldrÝ  r,  Ú
flag_linesÚcategoryrb  r,   ÚflagrY  rM   r¿  r×  rX   s                                 r   Ú_parse_dmesg_outputrò  «  s%  € ðYà
�,‰,�xÓ
   Ð
$Ø
‡L�L�Ó˜1˜2Ðñà
‡L�L�Ó˜!˜"Ðñð ‡L�L�Ó˜A˜BÐñ ð ‡L�L�Ó˜A˜BÐñ	 ð
 ‡L�L�Ó˜1˜2Ðñ€%ñ .3Ó
3ªU¨�7‰7�4‹=˜Ñ×!Ñ!Ö#©U€%Ð
3ñ 9>Ó>º°1Ô+¨AÖ.¹€+Ð>ð €+Ø€-Û€jÜ¡zÓ2¢z !˜“¡zÑ2Ó3€5ØÕØ€MØ‚Kñ	  ö 
Ø
€9àJUÑG€)�O°Àð �FÔØ—;‘;˜{Ó+Ð-Ð/×5Ñ5°dÓ;¸AÑ>€6Ø�L‰L‹N× Ñ Ó"€6Ù+1Ó2ª6 a�W‰W‹Y�_‰_˜SÖ!©6€6Ð2Ù<BÓCºF°q�‰d�j‰j‹l× Ñ Ó" Q q¡T§Z¡Z£\Ó2¹F€6ÐCã€uÜ�—
‘
“Ó˜aÑ €DÜ�—‘“Ó  Ñ#€EàˆxÓØ—‘˜SÓ!‚YØ	�Ó	Ü�E—L‘L Ó&¨Ó+‚XØ	�‹Ü�—‘˜dÓ# RÓ(‚UØ	Ð"Õ	"Ü�%—,‘,˜tÓ$ bÓ)‚Vñ ð €*ÛX€hØ�&ÕØ×Ñ�f—l‘l 8Ó,¨QÑ/×5Ñ5°dÓ;¸AÑ>Ö?ñ Yð €%Û€dØ
�*‰*�S‹/˜!Ñ
×
"Ñ
" 3Ó
'¨Ñ
*×
0Ñ
0Ó
2€4Ø�z‰z˜#Ž€tØ	‡L�L�Öó ñ ð ‡*�*„,ô 1°ÓAÑ€-�ð �eÓØ€5Ü% iÓ0€=ð ØàØØØñ
€$ö �}¨Ó-Ü$9¸-ÈÓ$O€4Ð Ñ!Ü 5°iÓ G€4ÐÑæ�}¨Ó-Ü,¨]¸EÓB€4ˆÑÜ(¨Ó:€4ˆÑàŸ:™:œ<Ô	-š<‘4�1�a¬1‹$ˆ!ˆQŠ$™<Ò	-Ð-ùò_ 4ùò ?ùò 3ùò 3ùÚCùól 
.øÜó Ü	‡,�,ˆs×Ðð 	€ûð	ús‡   ‚BP Â+O<Â.P Â4PÃ	P ÃP
Ã*
P Ã8P Ä	AP Å(PÆP Æ=PÇ	B"P É/*P ÊEP ÏPÏ1PÏ8P Ï<P Ð
QÐ%Q Ñ Qc                 ó6  • SS K nSu  p#U R                  5       n UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  S	U 5      (       a  S
nSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  S
nSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ U S:X  a  SnSnX#4$ U S:X  a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ UR                  SU 5      (       a  SnSnX#4$ ) Nr   r˜  z4^i\d86$|^x86$|^x86_32$|^i86pc$|^ia32$|^ia-32$|^bepc$r.  é    z9^x64$|^x86_64$|^x86_64t$|^i686-64$|^amd64$|^ia64$|^ia-64$r/  é@   z^armv8-a|aarch64|arm64$r1  z/^armv7$|^armv7[a-z]$|^armv7-[a-z]$|^armv6[a-z]$r0  z"^armv8$|^armv8[a-z]$|^armv8-[a-z]$z ^ppc32$|^prep$|^pmac$|^powermac$ÚPPC_32z^powerpc$|^ppc64$|^ppc64le$r2  z^sparc32$|^sparc$ÚSPARC_32z^sparc64$|^sun4u$|^sun4v$ÚSPARC_64z^s390x$r3  Úmipsr4  Úmips64r5  z^riscv$|^riscv32$|^riscv32be$r6  z^riscv64$|^riscv64be$r7  )r¯  r   r°  )rè   r¯  r9  rö   s       r   r8  r8  
  s<  € Û
à�€Ø"×(Ñ(Ó*€ð ‡H�HÐDÀo×VÑVØ	€$Ø	€$ð\ 
ˆÐð[ 	‡h�hÐKÈ_×]Ñ]Ø	€$Ø	€$ðV 
ˆÐðS 	‡h�hÐ)¨?×;Ñ;Ø	€$Ø	€$ðN 
ˆÐðM 	‡h�hÐAÀ?×SÑSØ	€$Ø	€$ðH 
ˆÐðG 	‡h�hÐ4°o×FÑFØ	€$Ø	€$ðB 
ˆÐð? 	‡h�hÐ2°O×DÑDØ	€$Ø	€$ð: 
ˆÐð9 	‡h�hÐ-¨×?Ñ?Ø	€$Ø	€$ð4 
ˆÐð1 	‡h�hÐ# _×5Ñ5Ø	€$Ø	€$ð, 
ˆÐð+ 	‡h�hÐ+¨_×=Ñ=Ø	€$Ø	€$ð& 
ˆÐð# 	‡h�hˆz˜?×+Ñ+Ø	€$Ø	€$ð 
ˆÐð ˜ÓØ	€$Ø	€$ð 
ˆÐð ˜Ó!Ø	€$Ø	€$ð 
ˆÐð 	‡h�hÐ/°×AÑAØ	€$Ø	€$ð
 
ˆÐð	 	‡h�hÐ'¨×9Ñ9Ø	€$Ø	€$à	ˆÐr   c                 ó   • SU-  nX-  S:„  nU$ )Nr"   r   rb   )ÚregÚbitÚmaskÚis_sets       r   Ú_is_bit_setr   C  s   € Ø	ˆS‰€Ø
‰*�q‰.€Ø€r   c                 ó&  • [         R                  5       (       d  U R                  S5        g[         R                  5       u  pUS:w  a  U R                  S5        gUR	                  5        HQ  nUR                  5       R                  5       nUR                  S5      (       d  M9  UR                  S5      (       a    g  g   SnSnUR	                  5        Hƒ  nUR                  5       R                  5       nUR                  S5      (       a  UR                  S	5      (       a  SnMQ  UR                  S
5      (       d  Mi  UR                  S	5      (       d  M�  SnM…     U R                  SU5        U R                  SU5        U(       + =(       d    U(       + $ )NzFailed to find sestatus.Fr   z$Failed to run sestatus. Skipping ...zcurrent mode:Ú	enforcingTÚallow_execheapÚonÚallow_execmemzcan_selinux_exec_heap:zcan_selinux_exec_memory:)
rd   r‰   rA   r¸   rk  r~   r   Ú
startswithr‡  rI   )Útracer¬   rH   r,   Úcan_selinux_exec_heapÚcan_selinux_exec_memorys         r   Ú_is_selinux_enforcingr
  I  sL  € ä×Ñ×!Ñ!Ø‡*�*Ð'Ô(Ø	ô !×+Ñ+Ó-Ñ€Ø�!ƒOØ‡*�*Ð3Ô4Ø	ð ×ÑÖ €TØ	�‰‹×	Ñ	Ó	€$Ø	‡_�_�_×%Ó%Ø
‡m�m�K× Ñ Ùáñ !ð ÐØ ÐØ×ÑÖ €TØ	�‰‹×	Ñ	Ó	€$Ø	‡_�_Ð%×&Ñ&¨4¯=©=¸×+>Ñ+>ØÒØ‡��×'Ó'¨D¯M©M¸$×,?Ó,?Ø!Òñ !ð ×ÑÐ.Ð0EÔFØ×ÑÐ0Ð2IÔJà"Ô	"×	AÐ*AÔ&AÐBr   c                 óÚ   • 0 nU  Hb  nX   nX1;   a  X   U:X  a  XBU'   M  U(       d  M#  US:X  a  M+  US:X  a  M3  [        U5      [        :X  a  UR                  S5      (       a  M^  XBU'   Md     U$ )NrŒ  r®  r„  )Útyper:   r  )rM   Úacceptable_valuesÚfiltered_inforO   r,  s        r   Ú#_filter_dict_keys_with_empty_valuesr  m  s‡   € Ø€Û€SØ
‰)€%ð 	ÓØÑ Ó%Ø�#ÑÙö 
Ùð ˆfƒ_Ùð ˆbƒ[Ùô 
ˆ%ƒ[”CÓ˜E×,Ñ,¨U×3Ñ3Ùà�Óñ3 ð6 	Ðr   c                   ó6   • \ rS rSrSS/ 4S jrS rS rS rSrg)	ÚASMiŒ  Nrb   c                 ón   • Xl         X l        X0l        S U l        S U l        S U l        S U l        SU l        g rH  )ÚrestypeÚargtypesÚmachine_codeÚ
prochandleÚmmÚfuncÚaddressÚsize)r   r  r  r  s       r   r   ÚASM.__init__�  s5   € Ø„,Ø„-Ø"ÔØ€$„/Ø€$„'Ø€$„)Ø€$„,Ø€$…)r   c                 ó`  • [         R                  SU R                  5      n[        R                  " [        U5      5      U l        [        R                  (       GaÕ  [        U5      nUS:  a  Sn[        R                  " S5      n[        R                  " S5      n[        R                  R                  R                  n[        R                  Ul        U" S [        R                  " U5      X45      U l        U R                  (       d  [!        S5      e[        R"                  " [        R                  [        R                  [        R                  [        R                  5      " [        R$                  5      nU" U R                  X5      S:  a  [!        S5      e[        R                  " S5      n[        R                  " S5      n[        R                  R                  R&                  n	U	" [        R                  " U R                  5      [        R                  " U5      U[        R(                  " U5      5      n
U
(       d  [!        S5      eU R*                  (       dY  [        R                  R                  R,                  n[        R                  Ul        [        R                  " U" 5       5      U l        [        R                  R                  R/                  U R*                  [        R                  " U R                  5      [        R                  " U5      5      n
U
(       d  [!        S	5      eO½SS
KJnJnJnJnJnJn  [         R                  SU R                  5      n[        U5      U l        U" SU R                  XÞ-  UU-  U-  S9U l        U R<                  R?                  U5        [        R@                  " [        RB                  RE                  U R<                  5      5      U l        [        R"                  " U R                  /U RF                  Q76 nU" U R                  5      U l$        g )Nr   i   é   zFailed to VirtualAllocr   zFailed to memmoverÎ  zFailed VirtualProtectzFailed FlushInstructionCache)ÚmmapÚMAP_PRIVATEÚMAP_ANONYMOUSÚ
PROT_WRITEÚ	PROT_READÚ	PROT_EXECr®  )rb  Úprot)%Úbytesr;   r  ÚctypesÚc_size_trr   r  rd   rù   Úc_ulongÚwindllÚkernel32ÚVirtualAllocÚc_void_pr  r  r=   Ú	CFUNCTYPEÚ_memmove_addrÚVirtualProtectÚbyrefr  ÚGetCurrentProcessÚFlushInstructionCacher  r  r   r!  r"  r#  r  r&   Ú	addressofÚc_intÚfrom_bufferr  r  )r   r  r  Ú
MEM_COMMITÚPAGE_READWRITEÚpfnVirtualAllocÚmemmoveÚPAGE_EXECUTEÚold_protectÚpfnVirtualProtectÚresÚpfnGetCurrentProcessr  r  r   r!  r"  r#  Úfunctypes                      r   ÚcompileÚASM.compile—  sÏ  € Ü—‘˜C ×!2Ñ!2Ó3€,Ü�oŠoœc ,Ó/Ó0€$„)ä××Ðä
ˆlÓ
€4à
ˆVƒm˜F�TÜ—’˜vÓ&€:Ü—N’N 3Ó'€>Ü—]‘]×+Ñ+×8Ñ8€?Ü#Ÿ_™_€?ÔÙ! $¬¯ª¸Ó(=¸zÓZ€4„<Ø
�,�,Ü
Ð,Ó
-Ð-ô ×ÒœfŸo™o¬v¯©ÄÇÁÔQW×Q`ÑQ`ÔaÔbh×bvÑbvÓw€7Ùˆd�l‰l˜LÓ/°!Ó3Ü
Ð'Ó
(Ð(ô —.’. Ó&€<Ü—’ Ó"€;Ü—}‘}×-Ñ-×<Ñ<ÐÙ	œ6Ÿ?š?¨4¯<©<Ó8¼&¿/º/È$Ó:OÐQ]Ô_e×_kÒ_kÐlwÓ_xÓ	y€3Þ
Ü
Ð+Ó
,Ð,ð �/�/Ü!Ÿ=™=×1Ñ1×CÑCÐÜ#)§?¡?ÐÔ Ü—o’oÑ&:Ó&<Ó=€D„Oä	�‰×	Ñ	×	5Ñ	5°d·o±oÄvÇÂÐW[×WcÑWcÓGdÔfl×fuÒfuÐvzÓf{Ó	|€3Þ
Ü
Ð2Ó
3Ð3ð ÷ W×Vô —*‘*˜S $×"3Ñ"3Ó4€<Ü�<Ó €4„9Ù�"�d—i‘i {Ñ'BÈÐV_ÑI_ÐbkÑIkÑl€4„7ð ‡7�7‡=�=�ÔÜ×"Ò"¤6§<¡<×#;Ñ#;¸D¿G¹GÓ#DÓE€4„<ô ×Ò˜dŸl™lÐ;¨T¯]©]Ò;€(Ù�t—|‘|Ó$€$…)r   c                 ó&   • U R                  5       nU$ rM  )r  )r   rv  s     r   ÚrunÚASM.runÏ  s   € à�9‰9‹;€&à	€-r   c                 ó�  • [         R                  (       at  [        R                  " S5      n[        R                  R
                  R                  [        R                  " U R                  5      [        R                  " S5      U5        OU R                  R                  5         S U l        S U l
        S U l        S U l        SU l        g )Ni €  r   )rd   rù   r&  r(  r)  r*  ÚVirtualFreer,  r  r'  r  r  r  r  r  )r   ÚMEM_RELEASEs     r   ÚfreeÚASM.freeÕ  s}   € ä××Ü—’ Ó'€;Ü	‡=�=×Ñ×%Ñ%¤f§o¢o°d·l±lÓ&CÄVÇ_Â_ÐUVÓEWÐYdÕeà‡7�7‡=�=„?à€$„/Ø€$„'Ø€$„)Ø€$„,Ø€$…)r   )r  r  r  r  r  r  r  r  )	r]   r^   r_   r`   r   r@  rC  rH  ra   rb   r   r   r  r  Œ  s   † Ø ¨2¸Bô ò6%òpõr   r  c                   ód   • \ rS rSrSS jrSS/ 4S jrS rS rS rS	 r	S
 r
S rS rS rS rSrg)ÚCPUIDiä  Nc                 óB   • Uc  [        SS5      n[        U5      U l        g )NF)r   r
  Úis_selinux_enforcing)r   r  s     r   r   ÚCPUID.__init__å  s"   € Ø
�]Ü�˜Ó€5ô 4°EÓ:€$Õr   rb   c                 ó>   • [        XU5      nUR                  5         U$ rM  )r  r@  )r   r  r  r  Úasms        r   Ú	_asm_funcÚCPUID._asm_funcì  s   € ÜˆG˜|Ó,€#Ø‡+�+„-Ø	€*r   c                 óœ   • [        [        R                  SU5      nUR                  5         UR	                  5       nUR                  5         U$ )Nrb   )r  r&  Úc_uint32r@  rC  rH  )r   r  rP  rv  s       r   Ú_run_asmÚCPUID._run_asmñ  s6   € ÜŒF�O‰O˜R Ó.€#Ø‡+�+„-Ø�7‰7‹9€&Ø‡(�(„*Ø	€-r   c                 óþ   • U R                  SS5      nU R                  SS5      nU R                  SS5      n/ nXU4 H+  nS H"  nUR                  [        XV-	  S-  5      5        M$     M-     SR                  U5      nU$ )Nó   1Àó   ¢‰ØÃó   ¢‰ÈÃó   ¢‰ÐÃ©r   é   rÎ  é   éÿ   r3   )rU  r  Úchrr;   )r   ÚebxÚecxÚedxrÚ  rü  r@   s          r   Úget_vendor_idÚCPUID.get_vendor_idù  s—   € à�‰Øðó	€#ð 	�‰Øðó	€#ð 	�‰Øðó	€#ð €)Ø˜‹_€cÛ€qØ×Ñ”S˜#™( dÑ*Ó+Ö,ó ñ ð �g‰g�iÓ €)à	Ðr   c                 óÎ   • U R                  SS5      nUS-	  S-  nUS-	  S-  nUS-	  S-  nUS-	  S-  nUS	-	  S-  nUS
-	  S-  nSnUS;   a  Xt-   nOUnUS;   a  US-  U-   nUUUUS.$ )Nó   ¸   s   ¢Ãr   é   r  r]  é   rD   rÎ  é   r_  )rh  )r›  rh  )r^  r_  r`  ra  ©rU  )	r   ÚeaxÚstepping_idr_  Ú	family_idra  Úextended_model_idÚextended_family_idr`  s	            r   Úget_infoÚCPUID.get_info  s¹   € à�‰Øðó	€#ð ˜‘˜SÑ €+Ø�!‰8�sÑ
€%Ø�a‰x˜3Ñ€)Ø˜2‘I Ñ$€.Ø˜b‘y CÑ'ÐØ˜r™	 TÑ)ÐØ€&à�$ÓØÑ*�6à€6à�'ÓØ Ñ" eÑ+€5ð ØØØ$ñ	
ð r   c                 ó(   • U R                  S5      nU$ )Ns   ¸   €¢Ãrk  )r   Úmax_extension_supports     r   Úget_max_extension_supportÚCPUID.get_max_extension_support=  s   € àŸ-™-ðóÐð 
Ðr   c                 óü  • U R                  SS5      nU R                  SS5      n0 S[        US5      _S[        US5      _S[        US	5      _S
[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S [        US!5      _S"[        US#5      _S$[        US%5      _0 S&[        US'5      _S([        US)5      _S*[        US+5      _S,[        US-5      _S.[        US/5      _S0[        US15      _S2[        US35      _S4[        US55      _S6[        US75      _S8[        US95      _S:[        US;5      _S<[        US=5      _S>[        US?5      _S@[        US5      _SA[        US5      _SB[        US	5      _SC[        US5      _E0 SD[        US5      _SE[        US5      _SF[        US5      _SG[        US5      _SH[        US5      _SI[        US5      _SJ[        USK5      _SL[        US5      _SM[        US5      _SN[        US5      _SO[        US!5      _SP[        US%5      _SQ[        US'5      _SR[        US)5      _SS[        UST5      _SU[        US+5      _SV[        US-5      _E[        US/5      [        US15      [        US35      [        US55      [        US75      [        US95      [        US;5      [        US=5      [        US?5      SW.	EnUR                  5        VVs/ s H  u  pVU(       d  M  UPM     nnnUS:¼  Gan  U R                  SXSY5      nU R                  SXSZ5      n0 S[[        US	5      _S\[        US5      _S][        US5      _S^[        US5      _S_[        US5      _S`[        US5      _Sa[        US5      _Sb[        USK5      _Sc[        US5      _Sd[        US5      _Se[        US5      _Sf[        US!5      _Sg[        US#5      _Sh[        US%5      _Si[        US'5      _Sj[        US)5      _Sk[        UST5      _0 Sl[        US+5      _Sm[        US-5      _Sn[        US/5      _So[        US15      _Sp[        US35      _Sq[        US55      _Sr[        US75      _Ss[        US95      _St[        US;5      _Su[        US=5      _Sv[        US?5      _Sw[        US5      _Sx[        US5      _Sy[        US	5      _Sz[        US5      _S{[        US5      _S|[        US5      _E[        US5      [        US5      [        USK5      [        US5      [        US5      [        US5      [        US-5      [        US=5      S}.EnUR                  5        VVs/ s H  u  pVU(       d  M  UPM     nnnXH-  nUS~:¼  Ga	  U R                  S5      nU R                  S€5      n0 S[        US5      _S[        US5      _S[        US	5      _S
[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S�[        US5      _S[        US5      _S[        US5      _S[        US5      _S [        US!5      _S"[        US#5      _S$[        US%5      _0 S‚[        US)5      _Sƒ[        UST5      _S„[        US-5      _S.[        US/5      _S0[        US15      _S…[        US35      _S†[        US55      _S‡[        US75      _Sˆ[        US;5      _S‰[        US=5      _SŠ[        US?5      _S‹[        US5      _SŒ[        US5      _S�[        US	5      _SŽ[        US5      _S�[        US5      _S�[        US5      _E0 S‘[        US5      _S’[        US5      _S“[        US5      _S”[        US5      _S•[        USK5      _S–[        US5      _S—[        US5      _S˜[        US5      _S™[        US!5      _Sš[        US#5      _S›[        US%5      _Sœ[        US)5      _S�[        US+5      _Sž[        US-5      _SŸ[        US/5      _S [        US15      _S¡[        US55      _E[        US75      [        US95      S¢.EnUR                  5        VVs/ s H  u  pVU(       d  M  UPM     nnnXH-  nUR                  5         U$ s  snnf s  snnf s  snnf )£Nrg  r[  rZ  Úfpur   Úvmer"   Úder#   ÚpserD   Útscr  Úmsrrg   Úpaer›  Úmceé   Úcx8r]  Úapicr   Úsepé   Úmtrrri  Úpgeé   Úmcaé   Úcmovrh  ÚpatrÎ  Úpse36é   Úpné   Úclflushé   Údtsé   Úacpié   Úmmxé   Úfxsrr^  Ússeé   Ússe2é   Ússé   Úhté   Útmé   Úia64é   Úpbeé   ÚpniÚ	pclmulqdqÚdtes64ÚmonitorÚds_cplÚvmxÚsmxÚestÚtm2Ússse3Úcidé
   ÚfmaÚcx16ÚxtprÚpdcmÚpcidÚdcaÚsse4_1Ússe4_2rj  Úx2apicÚmovbe)	ÚpopcntÚtscdeadlineÚaesÚxsaveÚosxsaveÚavxÚf16cÚrdrndÚ
hypervisors   1És
   ¸   ¢‰ØÃs
   ¸   ¢‰ÈÃÚsgxÚbmi1ÚhleÚavx2ÚsmepÚbmi2ÚermsÚinvpcidÚrtmÚpqmÚmpxÚpqeÚavx512fÚavx512dqÚrdseedÚadxÚsmapÚ
avx512ifmaÚpcommitÚ
clflushoptÚclwbÚintel_ptÚavx512pfÚavx512erÚavx512cdÚshaÚavx512bwÚavx512vlÚprefetchwt1Ú
avx512vbmiÚumipÚpkuÚospkeÚavx512vbmi2)ÚgfniÚvaesÚ
vpclmulqdqÚ
avx512vnniÚavx512bitalgÚavx512vpopcntdqÚrdpidÚsgx_lcl       s
   ¸  €¢‰ØÃs
   ¸  €¢‰ÈÃÚsyscallÚmpÚnxÚmmxextÚfxsr_optÚpdpe1gpÚrdtscpÚlmÚ3dnowextÚ3dnowÚlahf_lmÚ
cmp_legacyÚsvmÚextapicÚ
cr8_legacyÚabmÚsse4aÚmisalignsseÚ3dnowprefetchÚosvwÚibsÚxopÚskinitÚwdtÚlwpÚfma4ÚtceÚ
nodeid_msrÚtbmÚtopoextÚperfctr_coreÚ
perfctr_nbÚdbx)ÚperftscÚpci_l2i)rU  r   rQ  rf  )	r   rt  rc  rb  rb  r¿  r×  ra  Úextended_flagss	            r   Ú	get_flagsÚCPUID.get_flagsH  s3  € à�‰Øðó	€#ð 	�‰Øðó	€#ðBØŒ;�s˜AÓðBàŒ;�s˜AÓðBð Œ+�c˜1Ó
ðBð 	Œ;�s˜AÓð	Bð
 	Œ;�s˜AÓðBð 	Œ;�s˜AÓðBð 	Œ;�s˜AÓðBð 	Œ;�s˜AÓðBð 	Œ;�s˜AÓðBð 
ŒK˜˜QÓðBð 	Œ;�s˜BÓðBð 
ŒK˜˜RÓ ðBð 	Œ;�s˜BÓðBð 	Œ;�s˜BÓðBð  
ŒK˜˜RÓ ð!Bð" 	Œ;�s˜BÓð#Bð$ Œ[˜˜bÓ!ñ%Bð& Œ+�c˜2Ó
ð'Bð( Œ{˜3 Ó#ð)Bð, 	Œ;�s˜BÓð-Bð. 
ŒK˜˜RÓ ð/Bð0 	Œ;�s˜BÓð1Bð2 
ŒK˜˜RÓ ð3Bð4 	Œ;�s˜BÓð5Bð6 
ŒK˜˜RÓ ð7Bð8 Œ+�c˜2Ó
ð9Bð: Œ+�c˜2Ó
ð;Bð< Œ+�c˜2Ó
ð=Bð> 
ŒK˜˜RÓ ð?Bð@ 	Œ;�s˜BÓðABðD 	Œ;�s˜AÓðEBðF ”˜S !Ó$ðGBðH Œk˜#˜qÓ!ðIBðJ Œ{˜3 Ó"òKBðL Œk˜#˜qÓ!ðMBðN 	Œ;�s˜AÓðOBðP 	Œ;�s˜AÓðQBðR 	Œ;�s˜AÓðSBðT 	Œ;�s˜AÓðUBðV Œ[˜˜aÓ ðWBðX 	Œ;�s˜BÓðYBð\ 	Œ;�s˜BÓð]Bð^ 
ŒK˜˜RÓ ð_Bð` 
ŒK˜˜RÓ ðaBðb 
ŒK˜˜RÓ ðcBðf 
ŒK˜˜RÓ ðgBðh 	Œ;�s˜BÓðiBðj Œk˜#˜rÓ"ðkBðl Œk˜#˜rÓ"ðmBðn Œk˜#˜rÓ"ðoBðp Œ[˜˜bÓ!ñqBôr ˜#˜rÓ"Ü˜s BÓ'Ü�s˜BÓÜ˜˜bÓ!Ü˜3 Ó#Ü�s˜BÓÜ˜˜RÓ Ü˜˜bÓ!Ü˜c 2Ó&òCB€%ðJ Ÿ™œÔ
,š‘�¬!�1™€%Ñ
,ð ˜aÔà	�‰Øðó
€3ð 
�‰Øðó
€3ðBð 
ŒK˜˜QÓðBð Œ[˜˜aÓ ð	Bð
 
ŒK˜˜QÓðBð Œ[˜˜aÓ ðBð Œ[˜˜aÓ ðBð Œ[˜˜aÓ ðBð Œ[˜˜aÓ ðBð ”˜C Ó$ðBð 
ŒK˜˜RÓ ðBð 
ŒK˜˜RÓ ðBð 
ŒK˜˜RÓ ðBð  
ŒK˜˜RÓ ð!Bð" ”˜C Ó$ð#Bð$ ”˜S "Ó%ð%Bð& Œ{˜3 Ó#ð'Bð( 
ŒK˜˜RÓ ð)Bð* Œ[˜˜bÓ!ñ+Bð, ”;˜s BÓ'ð-Bð. ”˜C Ó$ð/Bð0 ”;˜s BÓ'ð1Bð2 Œ[˜˜bÓ!ð3Bð4 ”˜S "Ó%ð5Bð6 ”˜S "Ó%ð7Bð8 ”˜S "Ó%ð9Bð: ”˜S "Ó%ð;Bð< 
ŒK˜˜RÓ ð=Bð> ”˜S "Ó%ð?Bð@ ”˜S "Ó%ðABðD ”K  QÓ'ðEBðF ”;˜s AÓ&ðGBðH Œ[˜˜aÓ ðIBðJ 
ŒK˜˜QÓðKBðL Œk˜#˜qÓ!ðMBðP ”K  QÓ'ñQBôT ˜˜aÓ Ü˜˜aÓ Ü˜s BÓ'Ü˜s BÓ'Ü   bÓ)ä# C¨Ó,ô ˜#˜rÓ"ô ˜3 Ó#òAB€>ðJ $2×#7Ñ#7Ô#9Ô?Ò#9™4˜1¼Q—QÑ#9€>Ñ?ØÑ€5ð ˜jÔ(à	�‰ðó
€3ð 
�‰ðó
€3ðBØ	ŒK˜˜QÓðBà	ŒK˜˜QÓðBð 	Œ;�s˜AÓðBð 
ŒK˜˜QÓð	Bð
 
ŒK˜˜QÓðBð 
ŒK˜˜QÓðBð 
ŒK˜˜QÓðBð 
ŒK˜˜QÓðBð 
ŒK˜˜QÓðBð Œ[˜˜aÓ ðBð ”˜C Ó$ðBð Œ[˜˜bÓ!ðBð 
ŒK˜˜RÓ ðBð 
ŒK˜˜RÓ ðBð  Œ[˜˜bÓ!ð!Bð" 
ŒK˜˜RÓ ð#Bð$ Œk˜#˜rÓ"ñ%Bð( 	Œ;�s˜BÓð)Bð* 	Œ;�s˜BÓð+Bð. Œ{˜3 Ó#ð/Bð0 
ŒK˜˜RÓ ð1Bð2 Œ[˜˜bÓ!ð3Bð4 ”˜S "Ó%ð5Bð6 ”˜C Ó$ð7Bð8 Œ{˜3 Ó#ð9Bð< 	Œ;�s˜BÓð=Bð> ”˜S "Ó%ð?Bð@ Œk˜#˜rÓ"ðABðD ”˜C Ó#ðEBðF ”;˜s AÓ&ðGBðH 
ŒK˜˜QÓðIBðJ ”˜C Ó#ðKBðL ”;˜s AÓ&ðMBðN 
ŒK˜˜QÓòOBðP Œk˜#˜qÓ!ðQBðR ”K  QÓ'ðSBðT ”k # qÓ)ðUBðV Œ[˜˜aÓ ðWBðX 
ŒK˜˜RÓ ðYBðZ 
ŒK˜˜RÓ ð[Bð\ Œ{˜3 Ó#ð]Bð^ 
ŒK˜˜RÓ ð_Bðb 
ŒK˜˜RÓ ðcBðd Œ[˜˜bÓ!ðeBðf 
ŒK˜˜RÓ ðgBðj ”;˜s BÓ'ðkBðn 
ŒK˜˜RÓ ðoBðp ”˜C Ó$ðqBðr ”[  bÓ)ðsBðt ”;˜s BÓ'ðuBðx 
ŒK˜˜RÓ ñyBôz ˜C Ó$Ü˜C Ó$ò}B€>ðJ $2×#7Ñ#7Ô#9Ô?Ò#9™4˜1¼Q—QÑ#9€>Ñ?ØÑ€5à‡*�*„,Ø	€,ùów -ùóx @ùóv @s$   Ì;c,Íc,Ö,c2Ö=c2â<c8ãc8c                 óL  • SnUS:¼  a|  / SQnU Hr  nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nXVXx4 H  n	S H  n
U[        Xš-	  S	-  5      -  nM     M!     Mt     UR                  S
5      R                  5       nU$ )Nr3   l       )s   ¸  €s   ¸  €s   ¸  €s   ¢‰ÀÃrY  rZ  r[  r\  r_  Ú )rU  r`  r~   )r   rt  rÝ   ÚinstructionsÚinstructionrl  ra  rb  rc  rü  r@   s              r   Úget_processor_brandÚCPUID.get_processor_brand]  sÖ   € Ø€/ð ˜jÓ(ò€<ó
 #€{à
�-‰-Øðó€Cð �-‰-Øðó€Cð �-‰-Øðó€Cð �-‰-Øðó€Cð ˜#Ó#ˆÛˆØœ˜c™h¨$Ñ.Ó/Ñ/‚oó ó $ñE #ðN $×)Ñ)¨$Ó/×5Ñ5Ó7€/à	Ðr   c                 ól   • 0 nUS:  a  U$ U R                  S5      nUS-  S-  US-	  S-  US-	  S-  S	.nU$ )
Nl       s
   ¸  €¢‰ÈÃr_  r¹  ri  rh  rÎ  iÿÿ  )Úsize_bÚassociativityÚline_size_brk  )r   rt  Ú
cache_inforb  s       r   Ú	get_cacheÚCPUID.get_cache“  sa   € Ø€*ð ˜ZÓ'Ø
Ðð 	�‰ðó	€#ð �T‰z˜TÑ!Ø˜R‘i 3Ñ&Ø˜2‘I Ñ'ñ€*ð 
Ðr   c                 ó   ^• S n[         R                  S:X  az  S n[        R                  " [        R                  5      [        R                  " [        R                  5      4nU R                  X#/ SQ5      nUR                  mU4S jnXTl        UnU$ [         R                  S:X  a(  [        R                  nSnU R                  X#/ SQ5      nUnU$ )NÚ32bit)ó   Us   ‰årX  ó   ¢ó   1s   ‹]s   ‹Ms   ‰s   ‰ó   ]ó   Ãc                  ó   >• [         R                  " S5      n [         R                  " S5      nT" [         R                  " U 5      [         R                  " U5      5        U R                  S-  S-  UR                  -  nU$ )Nr   rô  l       üÿ )r&  rT  r0  r,  )ÚhighÚlowrv  Úold_funcs      €r   Únew_funcÚ&CPUID.get_ticks_func.<locals>.new_funcÃ  s_   ø€ ä�?Š?˜1Ó€DÜ
�/Š/˜!Ó
€CÙŒV�\Š\˜$Ó¤§¢¨cÓ!2Ô3ð �z‰z˜RÑÐ#5Ñ5¸¿¹ÑB€FØ€Mr   Ú64bitrb   )	ó   HrX  r&  r'  r1  s   Áâ r1  s   	Ðr)  )rd   rö   r&  ÚPOINTERÚc_uintrQ  r  Úc_uint64)r   rv  r  r  Úget_ticks_x86_32r.  Úget_ticks_x86_64r-  s          @r   Úget_ticks_funcÚCPUID.get_ticks_funcª  s·   ø€ Ø€&ä‡_�_˜Óà€7Ü�~Š~œfŸm™mÓ,¬f¯nªn¼V¿]¹]Ó.KÐL€8Ø—n‘n WòóÐð" ×#Ñ#€8õð $Ôà€6ð( 
€-ô' ‡�˜'Ó!ä�_‰_€7Ø€8Ø—n‘n Wò
óÐð €6Ø	€-r   c                 óª   • SSK Jn  U R                  5       nUR                  5       nU" S5        UR                  5       nXC-
  nUR	                  5         U$ )Nr   )Úsleepr"   )Útimer:  r7  r  rH  )r   r:  Úticks_fnrÒ  rÙ  r‰  s         r   Ú
get_raw_hzÚCPUID.get_raw_hzä  sE   € Ýà× Ñ Ó"€(à
�-‰-‹/€%Ùˆ„(Ø�‰‹€#à‰;€%Ø
‡-�-„/à	€,r   )rM  rM  )r]   r^   r_   r`   r   rQ  rU  rd  rq  ru  r  r  r!  r7  r=  ra   rb   r   r   rK  rK  ä  sH   † ô;ð "¨B¸Rô ò
ò òFòBòRòj3òlò.8õtr   rK  c                  ó�  • SSK Jn   [        SS5      n0 nUR                  [        l        UR                  [        l         [        [        R                  5      u  p4US;  a#  UR                  S5        UR                  US5      $ [        U5      nUR                  (       a#  UR                  S5        UR                  US5      $ UR                  5       nUR!                  U5      nUR#                  5       nUR%                  U5      nUR'                  5       n	[)        U	5      n	[+        U5      u  p«UR-                  5       SU[/        X«5      [/        U	S5      [1        X«5      [1        U	S5      US   US	   US
   US   US   US   US   UR3                  U5      S.n[5        U5      nUR7                  5         UR                  US5      $ ! [8         aw  nSSKJn  U" 5       nSR?                  URA                  S5       Vs/ s H  nSRC                  U5      PM     Os  snf sn5      S-   Ul"        UR                  US5      s SnA$ SnAff = f)zÉ
Warning! This function has the potential to crash the Python runtime.
Do not call it directly. Use the _get_cpu_info_from_cpuid function instead.
It will safely call this function in another process.
r   r
   T©r.  r/  ú-Not running on X86_32 or X86_64. Skipping ...z"SELinux is enforcing. Skipping ...r3   r  r  r  r^  r_  r`  ra  )rã   rU  rV  rW  rX  rY  rí   r[  r\  r]  r^  r_  r`  ra  rb  r6   r4   r8   NF)#r   r   r   r   ÚsysrV   r   rW   r8  rd   rè   rA   r[   rK  rM  ru  r!  rq  r  r=  rì   rÊ  rd  r¨  r•  r  r  r0   r=   r>   r7   r;   r<   r   r   )r   r  rM   r9  rö   Úcpuidrt  r   rÝ   rí   rY  r‘  rX   r7   r?   r@   s                   r   Ú_get_cpu_info_from_cpuid_actualrD  ò  s  € õ ä	ˆt�TÓ	€Ø
€ð �m‰m„„Ø�m‰m„„ð7#äœ:×5Ñ5Ó6�*€$ð 
Ð%Ó	%Ø‡:�:Ð=Ô>Ø
�-‰-˜˜dÓ
#Ð#ô �‹,€%Ø
××Ø‡:�:Ð2Ô3Ø
�-‰-˜˜dÓ
#Ð#ð  ×9Ñ9Ó;ÐØ�‰Ð4Ó5€*Ø	�‰Ó	€$à×-Ñ-Ð.CÓD€/ð ×ÑÓ €)Ü  Ó+€)ô 1°ÓAÑ€-à×'Ñ'Ó)ØØä2°=ÓHÜ.¨y¸!Ó<Ü% mÓ;Ü! )¨QÓ/à˜xÑ(Ø# MÑ2Ø'¨Ñ8à�JÑØ�‰MØ�(‰^ØÐ*Ñ+Ø�O‰OÐ1Ó2ñ%
€$ô* 
-¨TÓ	2€$Ø‡-�-„/ð 	�‰�d˜EÓ"Ð"øô 	ó #Ý"Ù‹|€*Ø�w‰w°z×7GÑ7GÈÔ7MÓNÒ7M°!˜×*Ñ*¨1Ö-Ò7MùÔNÓOÐRVÑV€%„*Ø	�‰�t˜TÓ	"Õ"ûð	#ús8   Á AG Â>G ÃC/G Ç
IÇ+I Ç9H
È&I È:IÉ Ic                 ó¸   • [         R                  n[         R                  n[        5       nU[         l        U[         l        U R	                  [        U5      5        g rM  )rB  rV   rW   rD  ÚputrF  )ÚqueueÚorig_stdoutÚorig_stderrrH   s       r   Ú+_get_cpu_info_from_cpuid_subprocess_wrapperrJ  =  s;   € Ü�z‰z€Ü�z‰z€ä
)Ó
+€à„„Ø„„à‡�Œ;�vÓÕr   c                  ó<  • [         R                  S5        SSKJn Jn  [
        R                  (       d  [         R                  S5        0 $ [        [
        R                  5      u  p#US;  a  [         R                  S5        0 $  [        (       Ga‰  U" 5       nU " [        U4S9nUR                  5         UR                  5       (       a(  UR                  S5        UR                  5       (       a  M(  UR                  S:w  a  [         R                  S5        0 $ UR!                  5       (       a  [         R                  S	5        0 $ [#        UR%                  5       5      nSS
KnUR)                  SS9nSU;   a"  US   (       a  [         R+                  US   5        SU;   aY  US   (       aO  [,        R.                  R+                  SR1                  US   5      5        [,        R.                  R3                  5         SU;   aY  US   (       aO  [,        R4                  R+                  SR1                  US   5      5        [,        R4                  R3                  5         SU;  a  [         R                  S5        0 $ SU;   aN  US   (       aD  [         R                  S5        [         R+                  US   5        [         R+                  S5        0 $ SU;   a!  US   (       a  [         R+                  S5        0 $ SU;  d
  US   (       d  [         R                  S5        0 $ US   $ [,        R.                  n	[,        R4                  n
[7        5       nU	[,        l        U
[,        l        [         R9                  5         US   $ ! [:         a   n[         R                  U5         S
nA0 $ S
nAff = f)zœ
Returns the CPU info gathered by querying the X86 cpuid register in a new process.
Returns {} on non X86 cpus.
Returns {} if SELinux is in enforcing mode.
z Tying to get info from CPUID ...r   )ÚProcessÚQueuezCan't CPUID. Skipping ...r@  rA  )ÚtargetÚargsz,Failed to run CPUID in process. Skipping ...z7Failed to get anything from CPUID process. Skipping ...Nr  )ÚindentrH   rV   z{0}
rW   rY   z6Failed to get is_fail from CPUID process. Skipping ...rX   z
Failed ...rM   z:Failed to get return info from CPUID process. Skipping ...)r  r-   r÷   rL  rM  rd   rü   rA   r8  rè   ÚCAN_CALL_CPUID_IN_SUBPROCESSrJ  rÒ  Úis_aliver;   ÚexitcodeÚemptyrK  r©   ÚpprintÚPrettyPrinterr&   rB  rV   r   r'   rW   rD  r0   r=   )rL  rM  r9  rö   rG  r
  rH   rU  ÚpprH  rI  rX   s               r   Ú_get_cpu_info_from_cpuidrX  H  s½  € ô 	‡�Ð2Ô3ç+ô 	××Ü	‡,�,Ð+Ô,Ø	€)ô œ*×4Ñ4Ó5�€ð 	Ð$Ó$Ü	‡,�,Ð>Ô?Ø	€)ðGß!Ó!á‹7€5ÙÔAÈÈÑQ€1Ø‡7�7„9ð 
�‰�‰Ø‡F�Fˆ1„Ið 
�‰�‹ð ‡j�j�AƒoÜ‡L�LÐ?Ô@Ø€Ið ‡k�k‡m�mÜ‡L�LÐJÔKØ€Iô ˜Ÿ™›Ó%€FÛØ	×	Ñ	 QÐ	Ð	'€Bð �6Ó˜f X×.Ü‡]�]�6˜(Ñ#Ô$à�6Ó˜f X×.Ü‡Z�Z×Ñ�g—n‘n V¨HÑ%5Ó6Ô7Ü‡Z�Z×ÑÔà�6Ó˜f X×.Ü‡Z�Z×Ñ�g—n‘n V¨HÑ%5Ó6Ô7Ü‡Z�Z×ÑÔà˜ÓÜ‡\�\ÐJÔKØ€Yð �ƒ˜6 %Ÿ=Ü‡\�\Ð@ÔAÜ‡]�]�6˜%‘=Ô!Ü‡]�]�<Ô Ø€Yà�FÓ˜v i×0Ü‡]�]�<Ô Ø€Yà�VÓ 6¨&§>Ü‡\�\ÐNÔOØ€Yà�&‰>Ðô —‘€;Ü—‘€;ä+Ó-€6à„3„:Ø„3„:ä
‡?�?ÔØ
�‰.ÐøÜó Ü	‡,�,ˆs×Ðð 	€ûð	úsL   ÂA*M1 Ã/&M1 Ä+M1 ÅD.M1 É1AM1 Ë&M1 Ë,&M1 ÌM1 ÌAM1 Í1
NÍ;NÎNc                  ój  • [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pU S:w  a  [         R	                  S5        0 $ [        SUSSSS	S
5      n[        SUSSSSSS5      n[        SUSSS5      n[        SU[        SS5      n[        SU[        SS5      n[        SU[        SS5      n[        SUSSS5      n[        SUSSSSS5      n	U	(       a   U	R                  5       n	U	R                  5         U(       d˜   [        SS5       H†  n
SR                  U
5      n[        SUSSU5      nU(       d  M,  UR                  S5       Vs/ s H  oÝR                  S5      PM     nn[        U5      nSU;   d  Mn  US   S:X  d  My  SU;   d  M�  US   n  O    [        SUSSS S!S"S#S$5	      nUR                  5       R                  S%5      R!                  5       n[#        U5      nS&u  nn [%        U5      u  nnUU['        U5      U	UUUUS'.nU(       a  US(:X  a  UnS)nOU(       a  US(:X  a  Un[)        UU5      S*:”  a  [+        UU5      US+'   [)        UU5      US,'   [)        UU5      S*:”  a  [+        US)5      US-'   [)        US)5      US.'   [-        USSSS/.5      n[         R/                  5         U$ s  snf ! [         a     GN(f = f! [         a     NÙf = f! [         a!  n[         R	                  U5        0 s SnA$ SnAff = f)0z]
Returns the CPU info gathered from /proc/cpuinfo.
Returns {} if /proc/cpuinfo is not found.
z(Tying to get info from /proc/cpuinfo ...z*Failed to find /proc/cpuinfo. Skipping ...r   z-Failed to run cat /proc/cpuinfo. Skipping ...FNr3   rÚ  z	vendor idÚvendorTz
model namerÖ   Ú	processorÚuarchz
cache sizer®  r^  r_  z
cpu familyÚHardwarerb  ÚFeaturesúASEs implementedr²  zcache{0}r  rä  ÚlevelÚ3r  zcpu MHzz	cpu speedÚclockzcpu MHz dynamiczcpu MHz staticrš  rH  )rU  rV  rc  rb  rã   r^  r_  r`  r„  r›  rŒ  rW  rY  rX  rí   ©r^  r_  r`  )r  r-   rd   rm   rA   r²   rw  r�  r<   rf  Úranger   rP  r=   r   r†  r~   rì   rÊ  rÄ  r•  r¨  r  r0   )r¬   rH   rÚ  rÝ   Ú
cache_sizer^  r_  r`  Úhardwarerb  ÚirÝ  r,  rÂ  rí   rY  r‘  rM   rX   s                      r   Ú_get_cpu_info_from_proc_cpuinforh  ¬  s>  € ô 	‡�Ð:Ô;ðVä	×	$Ñ	$×	&Ñ	&Ü
‡<�<Ð<Ô=Ø
€9ä!×2Ñ2Ó4Ñ€*Ø�1ƒ_Ü
‡<�<Ð?Ô@Ø
€9ô ˜ ¨¨b°+¸{ÈHÓU€)Ü˜t V¨T°4¸ÀuÈkÐ[bÓc€/Ü˜% ¨¨r°<Ó@€*Ü˜˜v¤s¨B°
Ó;€(Ü
�U˜F¤C¨¨WÓ
5€%Ü�e˜V¤S¨"¨lÓ;€&Ü˜˜v t¨R°Ó<€(ô �U˜F D¨$°¸ÐEWÓ
X€%Þ
Ø�;‰;‹=€5Ø‡:�:„<ö 
ð	Ü�1�bŽ\ˆØ×Ñ˜aÓ €TÜ˜˜v t¨T°4Ó8€UßˆØ-2¯[©[¸Ô-=Ó>Ò-= E�{‰{˜3ÖÑ-=€eÐ>Ü�5‹k€eØ	�EÕ	˜e G™n°Õ3¸À%½Ø˜&‘M€zÙò ô ˜ ¨¨b°)¸[È'ÐSdÐfvÓw€)Ø�o‰oÓ×&Ñ& uÓ-×3Ñ3Ó5€)Ü  Ó+€)ð #Ñ€-�ðÜ1°/ÓBÑ€=�%ð
 Øä*¨:Ó6ØØØØØñ

€$ö 
˜-¨5Ó0Ø€=Ø�5Þ˜	 UÓ*Ø€9ô �} eÓ,¨vÓ5Ü$9¸-ÈÓ$O€4Ð Ñ!Ü,¨]¸EÓB€4ˆÑÜ�y %Ó(¨6Ó1Ü 5°iÀÓ C€4ÐÑÜ(¨°AÓ6€4ˆÑä	,¨T¸qÈ!ÐVWÑ3XÓ	Y€$Ü	‡/�/ÔØ	€+ùòc ?øô
 ó 	Úð	ûô 
ó ÙðûôB 	ó Ü	‡,�,ˆsÔà	…)ûðúsª   —/L Á2L Á:B9L Ä44K& Å,K& Å?K!ÆK& Æ.K& Æ9K& ÇK& ÇL ÇK& Ç
AL ÈK7 È*B6L Ë!K& Ë&
K4Ë0L Ë3K4Ë4L Ë7
LÌL ÌLÌL Ì
L2ÌL-Ì'L2Ì-L2c                  óŠ  • [         R                  S5         Su  p[        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  p#US:w  a  [         R	                  S5        0 $ UR                  S5      S   R                  S5      S   n U R                  S	5      nUS
:w  d   eU SUS-    R                  5       R                  5       n U R                  S5      (       a  SnOU R                  S5      (       a  SnU R                  S5      R                  S5      R                  5       n [        U 5      n [        X5      [        X5      [        X5      [        X5      S.n[        U5      n[         R!                  5         U$ ! ["         a!  n[         R	                  U5        0 s SnA$ SnAff = f)z[
Returns the CPU info gathered from cpufreq-info.
Returns {} if cpufreq-info is not found.
z'Tying to get info from cpufreq-info ...rÆ  z)Failed to find cpufreq-info. Skipping ...r   z(Failed to run cpufreq-info. Skipping ...zcurrent CPU frequency isr"   r4   r¡  r®  r#   rš  r›  r™  r   )rW  rX  rY  rí   N)r  r-   rd   r…   rA   rµ   r<   rÔ  r~   r   r‡  r†  rì   r¨  r•  r  r0   r=   )rá  r‘  r¬   rH   rg  rM   rX   s          r   Ú_get_cpu_info_from_cpufreq_inforj    s„  € ô 	‡�Ð9Ô:ð%Ø�/€(ä	×	$Ñ	$×	&Ñ	&Ü
‡<�<Ð;Ô<Ø
€9ä!×.Ñ.Ó0Ñ€*Ø�1ƒ_Ü
‡<�<Ð:Ô;Ø
€9à�\‰\Ð4Ó5°aÑ8×>Ñ>¸tÓDÀQÑG€(Ø‡m�m�DÓ€!Ø	
ˆb‹€/ˆØ�a˜!˜A™#Ð×$Ñ$Ó&×,Ñ,Ó.€(à×Ñ�u×ÑØ�5Ø×Ñ˜×ÑØ€5Ø�_‰_˜UÓ#×*Ñ*¨5Ó1×7Ñ7Ó9€(Ü Ó)€(ô 4°HÓDÜ/°Ó@Ü& xÓ7Ü" 8Ó3ñ	
€$ô 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+øÜó Ü	‡,�,ˆsÔà	…)ûðús*   —3F Á2F Á>DF Æ
GÆ!F=Æ7GÆ=Gc            	      óØ  • [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pU S:w  a  [         R	                  S5        0 $ 0 n[        SUSSSS5      nU(       aE  [        U5      nS	n[        X45      US
'   [        X45      US'   [        X45      US'   [        X45      US'   [        SUSSSS5      nU(       aE  [        U5      nS	n[        X45      US
'   [        X45      US'   [        X45      US'   [        X45      US'   [        SUSSS5      nU(       a  XRS'   [        SUSSS5      nU(       a  XbS'   O/[        SUSSS5      nU(       a  UR                  5       (       d  XbS'   [        SUSSS5      nU(       a#  UR                  5       (       a  [        U5      US'   [        SUSSS5      nU(       a#  UR                  5       (       a  [        U5      US'   [        SUSSS5      n	U	(       a#  U	R                  5       (       a  [        U	5      US'   [        SUSSS5      n
U
(       a0  U
R                  S5      S   R                  5       n
[        U
5      US'   [        SUSSS5      nU(       a0  UR                  S5      S   R                  5       n[        U5      US'   [        SUSSSS 5      nU(       a0  UR                  S5      S   R                  5       n[        U5      US!'   [        SUSSS"5      nU(       a0  UR                  S5      S   R                  5       n[        U5      US#'   [        SUSSS$S%S&5      nU(       a$  UR                  5       nUR                  5         XâS$'   [!        USSSS'.5      n[         R#                  5         U$ ! [$         a!  n[         R	                  U5        0 s SnA$ SnAff = f)(zM
Returns the CPU info gathered from lscpu.
Returns {} if lscpu is not found.
z Tying to get info from lscpu ...z"Failed to find lscpu. Skipping ...r   z!Failed to run lscpu. Skipping ...FNzCPU max MHzzCPU MHzr›  rW  rX  rY  rí   zCPU dynamic MHzzCPU static MHzz	Vendor IDrã   z
Model namerV  ÚModelz
CPU familyr`  ÚSteppingr^  r_  z	L1d cacheÚ(rd  z	L1i cachere  zL2 cachez	L2d cacher[  zL3 cacherc  rb  r^  r_  rc  )r  r-   rd   r¡   rA   r    rw  rì   r¨  r•  rl  r�  r<   r~   rÄ  rf  r  r0   r=   )r¬   rH   rM   Únew_hzr‘  rÚ  rÞ  r`  r^  r_  rd  re  r[  rc  rb  rX   s                   r   Ú_get_cpu_info_from_lscpurp  ;  sª  € ô 	‡�Ð2Ô3ðWÜ	×	Ñ	×	Ñ	Ü
‡<�<Ð4Ô5Ø
€9ä!×'Ñ'Ó)Ñ€*Ø�1ƒ_Ü
‡<�<Ð3Ô4Ø
€9à	€$ä�e˜V T¨4°À	ÓJ€&ÞÜ˜vÓ&€6Ø€5Ü$9¸&Ó$H€4Ð Ñ!Ü 5°fÓ D€4ÐÑÜ,¨VÓ;€4ˆÑÜ(¨Ó7€4ˆÑä�e˜V T¨4Ð1BÐDTÓU€&ÞÜ˜vÓ&€6Ø€5Ü$9¸&Ó$H€4Ð Ñ!Ü 5°fÓ D€4ÐÑÜ,¨VÓ;€4ˆÑÜ(¨Ó7€4ˆÑä˜ ¨¨d°KÓ@€)ÞØ$ˆÑä
�U˜F D¨$°Ó
=€%Þ
ØˆÒä�e˜V T¨4°Ó9€5Þ�E—M‘M—O‘OØˆÑä�e˜V T¨4°Ó>€&Þ�—‘× Ñ Ü˜“K€4ˆ�>ä˜˜v t¨T°:Ó>€(Þ�(×"Ñ"×$Ñ$Ü˜(“m€4ˆ
Ñä
�U˜F D¨$°Ó
8€%Þ
ˆu�}‰}�‰Ü�u“:€4ˆ�=ä! %¨°°t¸[ÓIÐÞØ*×0Ñ0°Ó5°aÑ8×>Ñ>Ó@ÐÜ 6Ð7IÓ J€4ÐÑä(¨°¸¸dÀKÓPÐÞØ8×>Ñ>¸sÓCÀAÑF×LÑLÓNÐÜ'=Ð>WÓ'X€4Ð#Ñ$ä˜U F¨D°$¸
ÀKÓP€-ÞØ ×&Ñ& sÓ+¨AÑ.×4Ñ4Ó6€=Ü1°-Ó@€4ˆÑä˜U F¨D°$¸
ÓC€-ÞØ ×&Ñ& sÓ+¨AÑ.×4Ñ4Ó6€=Ü1°-Ó@€4ˆÑô �U˜F D¨$°¸ÐEWÓ
X€%Þ
Ø�;‰;‹=€5Ø‡:�:„<Øˆ�=ä	,¨T¸qÈ!ÐVWÑ3XÓ	Y€$Ü	‡/�/ÔØ	€+øÜó Ü	‡,�,ˆsÔà	…)ûðús*   —/N> Á2N> Á:MN> Î>
O)ÏO$ÏO)Ï$O)c                  óª  • [         R                  S5        [        [        R                  5      u  pU S;   a  [         R                  S5        0 $ [        R                  5       (       d  [         R                  S5        0 $ [        R                  5       u  p#Ub  US:w  a  [         R                  S5        0 $ [        U5      n[         R                  5         U$ )zo
Returns the CPU info gathered from dmesg.
Returns {} if dmesg is not found or does not have the desired info.
z$Tying to get info from the dmesg ...)r3  zRunning on S390X. Skipping ...z"Failed to find dmesg. Skipping ...r   z&Failed to run "dmesg -a". Skipping ...)
r  r-   r8  rd   rè   rA   rt   r»   rò  r0   )r9  rö   r¬   rH   rM   s        r   Ú_get_cpu_info_from_dmesgrr  œ  s«   € ô 	‡�Ð6Ô7ô œ*×4Ñ4Ó5�€ØˆIÓÜ	‡,�,Ð/Ô0Ø	€)ô 	×Ñ×ÑÜ	‡,�,Ð3Ô4Ø	€)ô !×(Ñ(Ó*Ñ€Ø
�N�j A“oÜ	‡,�,Ð9Ô:Ø	€)ä˜FÓ#€Ü‡�ÔØ€r   c                  óâ  • [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ UR                  S5      S   R                  5       nU Vs/ s H  o3[        S5      ;   d  M  UPM     nnS	R                  U5      n[        USS
 S5      n[        US
S S5      n0 S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US5      _S[        US
5      _S[        US5      _S[        US5      _S[        US5      _S[        US 5      _S![        US"5      _S#[        US$5      _S%[        US&5      _S'[        US5      _S([        US)5      _[        US*5      [        US+5      [        US,5      [        US-5      [        US.5      [        US/5      [        US5      [        US
5      [        US5      [        US5      [        US5      [        US5      S0.EnUR                  5        VVs/ s H  u  pxU(       d  M  UPM     nnnUR                  5         S1U0n	[        U	5      n	[         R                  5         U	$ s  snf s  snnf ! [          a!  n
[         R	                  U
5        0 s Sn
A
$ Sn
A
ff = f)2z©
Returns the CPU info gathered from lsprop /proc/device-tree/cpus/*/ibm,pa-features
Returns {} if lsprop is not found or ibm,pa-features does not have the desired info.
z!Tying to get info from lsprop ...z#Failed to find lsprop. Skipping ...Nr   zEFailed to glob /proc/device-tree/cpus/*/ibm,pa-features. Skipping ...zibm,pa-featuresr"   Ú0123456789abcfedr3   r]  rÎ  Úmmurx  Úslbr#   rC  rD   Údabrrg   Úner›  Úwtrr€  ÚmcrÚdsisrr   Úlpr²  Úrir„  Údabrxri  Úsprg3r‡  Úrislbr‰  rW  rh  Úvpmzdss_2.05r�  r‘  r“  r•  r—  r^  rš  )ÚdarÚpprzdss_2.02zdss_2.06Úlsd_in_dscrÚugr_in_dscrzsso_2.06ÚleÚcfarÚebzlsq_2.07zdss_2.07rb  )r  r-   rd   r¥   rA   rÓ   r<   r   rN  r;   r�  r   rQ  rf  r  r0   r=   )r¬   rH   r,  Úsrp  rq  rb  r¿  r×  rM   rX   s              r   Ú"_get_cpu_info_from_ibm_pa_featuresrŠ  ¼  s>  € ô 	‡�Ð3Ô4ðtä	×	'Ñ	'×	)Ñ	)Ü
‡<�<Ð5Ô6Ø
€9ô "×1Ñ1Ó3Ñ€*Ø�^�z Q“Ü
‡<�<ÐWÔXØ
€9ð �,‰,Ð(Ó
)¨!Ñ
,×
2Ñ
2Ó
4€%ÙÓ
=’e�¤DÐ);Ó$<Ñ<�1‘e€%Ð
=Ø
�'‰'�%‹.€%ô 
ˆU�1�qˆ\˜2Ó	€$Ü
ˆe�A˜ˆm˜RÓ
 €%ðPàŒ;�t˜QÓðPð 	Œ;�t˜QÓðPð 	Œ;�t˜QÓð	Pð
 	Œ;�t˜QÓðPð 
ŒK˜˜aÓ ðPð Œ+�d˜AÓ
ðPð 	Œ;�t˜QÓðPð 	Œ;�t˜QÓðPð Œ[˜˜qÓ!ðPð Œ+�d˜BÓ
ðPð Œ+�d˜BÓ
ðPð  Œ[˜˜rÓ"ð!Pð" Œ[˜˜rÓ"ð#Pð$ Œ[˜˜rÓ"ð%Pð& Œ+�d˜BÓ
ð'Pð, 	Œ;�t˜RÓ ð-Pð. ”˜D "Ó%ð/Pô2 �t˜RÓ ä�t˜RÓ Ü˜D "Ó%Ü˜D "Ó%ô ˜t RÓ(Ü˜t RÓ(ô ˜E 1Ó%ô �e˜QÓ
Ü˜˜qÓ!Ü
�e˜RÓ
 Ü˜E 2Ó&ô ˜E 2Ó&ò}P€%ðf Ÿ™œÔ
,š‘�¬!�1™€%Ñ
,Ø‡*�*„,ð ˆUð
€$ô 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+ùòG >ùóv -øô 	ó Ü	‡,�,ˆsÔØ	…)ûðúsT   —/K Á5K Á=&K Â#J8Â9J8Â?F*K É)J=É:J=Ê 7K Ê8K Ë
K.ËK)Ë#K.Ë)K.c                  ó:  • [         R                  S5        [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ [        U5      n[         R                  5         U$ )z}
Returns the CPU info gathered from /var/run/dmesg.boot.
Returns {} if dmesg is not found or does not have the desired info.
z6Tying to get info from the /var/run/dmesg.boot log ...z5Failed to find /var/run/dmesg.boot file. Skipping ...r   z5Failed to run "cat /var/run/dmesg.boot". Skipping ...)r  r-   rd   r�   rA   r¾   rò  r0   )r¬   rH   rM   s      r   Ú)_get_cpu_info_from_cat_var_run_dmesg_bootrŒ  ;  s}   € ô 	‡�ÐHÔIô 	×)Ñ)×+Ñ+Ü	‡,�,ÐFÔGØ	€)ô !×7Ñ7Ó9Ñ€Ø
�N�j A“oÜ	‡,�,ÐHÔIØ	€)ä˜FÓ#€Ü‡�ÔØ€r   c                  ó˜  • [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ [        SUSSS5      n[        SUSSS	5      n[        SU[        SS
5      n[        SU[        SS5      n[        SU[        SS5      n[        SU[        SS5      n[        SUSSS5      R                  5       R                  5       nUR                  [        SUSSS5      R                  5       R                  5       5        UR                  [        SUSSS5      R                  5       R                  5       5        UR                  5         [        U5      u  pš[        SUSSS5      n[        U5      nUU[        Xš5      [        US5      [        Xš5      [        US5      [        U5      S-  UUUUS.n[!        U5      n[         R#                  5         U$ ! [$         a!  n[         R	                  U5        0 s SnA$ SnAff = f)zO
Returns the CPU info gathered from sysctl.
Returns {} if sysctl is not found.
z!Tying to get info from sysctl ...z#Failed to find sysctl. Skipping ...Nr   z@Failed to run "sysctl machdep.cpu hw.cpufrequency". Skipping ...Fzmachdep.cpu.vendorTzmachdep.cpu.brand_stringzmachdep.cpu.cache.sizezmachdep.cpu.steppingzmachdep.cpu.modelzmachdep.cpu.familyr3   zmachdep.cpu.featureszmachdep.cpu.leaf7_featureszmachdep.cpu.extfeaturesrÁ   r¹  ©rã   rV  rW  rX  rY  rí   r[  r^  r_  r`  rb  )r  r-   rd   r�   rA   rÂ   rw  r�  r   r<   Úextendrf  rÊ  rì   r¨  r•  r  r0   r=   )r¬   rH   rÚ  rÝ   re  r^  r_  r`  rb  rY  r‘  rí   rM   rX   s                 r   Ú_get_cpu_info_from_sysctlr�  S  s  € ô 	‡�Ð3Ô4ð5ä	×	Ñ	×	 Ñ	 Ü
‡<�<Ð5Ô6Ø
€9ô "×DÑDÓFÑ€*Ø�^�z Q“Ü
‡<�<ÐTÔUØ
€9ô ˜ ¨¨dÐ4HÓI€)Ü˜t V¨T°4Ð9SÓT€/Ü˜% ¬¨aÐ1IÓJ€*Ü˜˜v¤s¨AÐ/EÓF€(Ü
�U˜F¤C¨Ð,?Ó
@€%Ü�e˜V¤S¨!Ð-AÓB€&ô �U˜F D¨"Ð.DÓ
E×
KÑ
KÓ
M×
SÑ
SÓ
U€%Ø‡,�,Œz˜% ¨¨rÐ3OÓP×VÑVÓX×^Ñ^Ó`ÔaØ‡,�,Œz˜% ¨¨rÐ3LÓM×SÑSÓU×[Ñ[Ó]Ô^Ø‡*�*„,ô 1°ÓAÑ€-Ü˜ ¨¨dÐ4EÓF€)Ü  Ó+€)ð Øä2°=ÓHÜ.¨y¸!Ó<Ü% mÓ;Ü! )¨QÓ/ä˜
“O dÑ*àØØØñ
€$ô" 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+øÜó Ü	‡,�,ˆsÔØ	…)ûðús*   —/H Á5H Á=F H È
I	È(IÈ>I	ÉI	c                  óL   • [        5       n U R                  [        5       5        U $ )úQ
Returns the CPU info gathered from sysinfo.
Returns {} if sysinfo is not found.
)Ú_get_cpu_info_from_sysinfo_v1ÚupdateÚ_get_cpu_info_from_sysinfo_v2)rM   s    r   Ú_get_cpu_info_from_sysinfor–  “  s!   € ô 	&Ó'€Ø‡�Ô*Ó,Ô-Ø€r   c                  ó  • [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ SnUR                  S5      S   R                  S	5      S   R                  5       nSn[        UR                  S
5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      n/ nUR                  S5       H_  n	U	R                  S5      (       d  M  U	R                  5       R                  5       R                  5        H  n
UR                  U
5        M     Ma     UR                  5         [        U5      u  p¼UnUU[        X¼5      [        XÜ5      [        X¼5      [        XÜ5      [!        U5      UUUUS.n[#        U5      n[         R%                  5         U$ ! [&         a!  n[         R	                  U5        0 s SnA$ SnAff = f)r’  z,Tying to get info from sysinfo version 1 ...ú$Failed to find sysinfo. Skipping ...Nr   ú*Failed to run "sysinfo -cpu". Skipping ...r3   ú	CPU #0: "r"   ú"
z, stepping rz  z, model z	, family r4   ú		rŽ  )r  r-   rd   r�   rA   rÌ   r<   r~   r�  r  r   r  rf  rÊ  r¨  r•  r´  r  r0   r=   )r¬   rH   rÚ  rÝ   re  r^  r_  r`  rb  r,   rñ  rY  r‘  rí   rM   rX   s                   r   r“  r“  �  s'  € ô 	‡�Ð>Ô?ð7ä	×	Ñ	×	!Ñ	!Ü
‡<�<Ð6Ô7Ø
€9ô "×-Ñ-Ó/Ñ€*Ø�^�z Q“Ü
‡<�<Ð>Ô?Ø
€9ð €)Ø—L‘L Ó-¨aÑ0×6Ñ6°uÓ=¸aÑ@×FÑFÓH€/Ø€*Ü�—‘˜mÓ,¨QÑ/×5Ñ5°cÓ:¸1Ñ=×CÑCÓEÓF€(Ü
ˆf�l‰l˜:Ó& qÑ)×/Ñ/°Ó4°QÑ7×=Ñ=Ó?Ó
@€%Üˆv�|‰|˜KÓ(¨Ñ+×1Ñ1°#Ó6°qÑ9×?Ñ?ÓAÓB€&ð €%Ø�l‰l˜4Ö €dØ
‡o�o�f×ÓØ—
‘
“×"Ñ"Ó$×*Ñ*Ö,ˆØ
‡\�\�$Öó -ñ !ð ‡*�*„,ô 1°ÓAÑ€-Ø€)ð Øä2°=ÓHÜ.¨yÓ@Ü% mÓ;Ü! )Ó3ä& zÓ2àØØØñ
€$ô" 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+øÜó Ü	‡,�,ˆsÔà	…)ûðús1   —/I Á5I Á=DI ÆCI É
JÉ'JÉ=JÊJc                  óÀ  • [         R                  S5         [        R                  5       (       d  [         R	                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R	                  S5        0 $ SnUR                  S5      S   R                  S	5      S   R                  5       nSnUR                  S
5      S   R                  S5      S   R                  5       n[        UR                  S5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      n[        UR                  S5      S   R                  S5      S   R                  5       5      nS n	U	" UR                  S5      S   5      U	" UR                  S5      S   5      -   U	" UR                  S5      S   5      -   n
U
R                  5         UR                  S5       Vs/ s H  o»(       d  M  UPM     nnUS   R                  S5      S   R                  5       R                  5       nUR                  S5      R                  S5      R                  5       n[        U5      nUnSnUR                  S5      (       a  SnOUR                  S5      (       a  SnUU[        UU5      [        UU5      [        UU5      [        UU5      [!        U5      UUUU
S.n[#        U5      n[         R%                  5         U$ s  snf ! [&         a!  n[         R	                  U5        0 s SnA$ SnAff = f)r’  z,Tying to get info from sysinfo version 2 ...r˜  Nr   r™  r3   rš  r"   r›  z
Signature:r4   z	stepping rz  zmodel zfamily c                 ó(  • / nU R                  S5      SS   Hw  nUR                  S5      (       d  UR                  S5      (       d    U$ UR                  5       R                  5       R                  S5       H  nUR	                  U5        M     My     U$ )Nr4   r"   z                rœ  r  )r<   r  r~   r   r  )rH   rv  r,   rÂ  s       r   Úget_subsection_flagsÚ;_get_cpu_info_from_sysinfo_v2.<locals>.get_subsection_flagsý  s�   € Ø€6Ø�|‰|˜DÓ! ! "Ó%€tØ�?‰?Ð-×.Ñ.°t·±Àt×7LÑ7LÈeð €=ð —‘“×#Ñ#Ó%×+Ñ+¨CÖ0ˆØ‡]�]�5Öó 1ñ &ð €=r   z
Features: z Extended Features (0x00000001): z Extended Features (0x80000001): zrunning at rš  r™  r›  r   rŽ  )r  r-   rd   r�   rA   rÌ   r<   r~   r�  rf  r   r†  rì   r‡  r¨  r•  r´  r  r0   r=   )r¬   rH   rÚ  rÝ   re  Ú	signaturer^  r_  r`  rŸ  rb  r@   rè  Úraw_hzrY  rí   r‘  rM   rX   s                      r   r•  r•  Þ  sü  € ô 	‡�Ð>Ô?ðHä	×	Ñ	×	!Ñ	!Ü
‡<�<Ð6Ô7Ø
€9ô "×-Ñ-Ó/Ñ€*Ø�^�z Q“Ü
‡<�<Ð>Ô?Ø
€9ð €)Ø—L‘L Ó-¨aÑ0×6Ñ6°uÓ=¸aÑ@×FÑFÓH€/Ø€*Ø�l‰l˜<Ó(¨Ñ+×1Ñ1°$Ó7¸Ñ:×@Ñ@ÓB€)ä�—‘ Ó-¨aÑ0×6Ñ6°sÓ;¸AÑ>×DÑDÓFÓG€(Ü
ˆi�o‰o˜hÓ'¨Ñ*×0Ñ0°Ó5°aÑ8×>Ñ>Ó@Ó
A€%Üˆy�‰˜yÓ)¨!Ñ,×2Ñ2°3Ó7¸Ñ:×@Ñ@ÓBÓC€&òñ ˜vŸ|™|¨LÓ9¸!Ñ<Ó
=Ù˜Ÿ™Ð&HÓIÈ!ÑLÓMñNá˜Ÿ™Ð&HÓIÈ!ÑLÓMñN€%ð ‡*�*„,ð —l‘l 4Ô(Ó
.Ò(�«A�1Ñ(€%Ð
.Ø�‰8�>‰>˜-Ó(¨Ñ+×1Ñ1Ó3×9Ñ9Ó;€&Ø—-‘- Ó&×-Ñ-¨eÓ4×:Ñ:Ó<€-Ü$ ]Ó3€-Ø€)à
€%Ø‡_�_�U×ÑØ�5Ø‡��u×ÑØ€5ð Øä2°=À%ÓHÜ.¨y¸%Ó@Ü% m°UÓ;Ü! )¨UÓ3ä& zÓ2àØØØñ
€$ô" 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+ùò? /øô@ 	ó Ü	‡,�,ˆsÔà	…)ûðúsC   —/L2 Á5L2 Á=FL2 È
L-È$L-È*DL2 Ì-L2 Ì2
MÌ<MÍMÍMc                  óz  • [         R                  S5         [        R                  (       a  [        R	                  5       (       d  [         R                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R                  S5        0 $ UR                  S5      nU Vs/ s H*  nSU;   d  M  UR                  5       R                  S5      PM,     nnU VVs0 s H  u  pEU(       d  M  XE_M     nnnUR                  S5      n[        U5      u  pxUR                  S	5      n	S
n
U	(       a  [        U	5      n	UR                  S5      nU(       a  [        U5      S-  nUR                  S5      nU(       a  [        U5      S-  nSu  pÞnUR                  S5      =(       d    UR                  S5      nUR                  S5      nSU;   aC  UR                  S5      [        U5      S-
  :  a"  UR                  S5      n[        UUS-      5      nSU;   aC  UR                  S5      [        U5      S-
  :  a"  UR                  S5      n[        UUS-      5      nSU;   aC  UR                  S5      [        U5      S-
  :  a"  UR                  S5      n[        UUS-      5      nUR                  S5      U[        Xx5      [        Xš5      [!        Xx5      [!        Xš5      UUUUUS.n[#        U5      n[         R%                  5         U$ s  snf s  snnf ! [&         a!  n[         R                  U5        0 s SnA$ SnAff = f)za
Returns the CPU info gathered from WMI.
Returns {} if not on Windows, or wmic is not installed.
zTying to get info from wmic ...z4Failed to find WMIC, or not on Windows. Skipping ...Nr   z Failed to run wmic. Skipping ...r4   rä  ÚNameÚCurrentClockSpeedr›  ÚL2CacheSizer¹  ÚL3CacheSize)r3   r3   r3   ÚDescriptionÚCaptionr  ÚFamilyr"   rl  rm  ÚManufacturer)rã   rV  rW  rX  rY  rí   r[  rc  r^  r_  r`  )r  r-   rd   rù   r­   rA   r×   r<   r†  r©   rÊ  rì   r�  rŽ  rr   r¨  r•  r  r0   r=   )r¬   rH   r,  r‰  r¿  r×  rÝ   rY  Úscale_advertisedrí   Úscale_actualr[  rc  r`  r_  r^  ÚdescriptionÚentriesrg  rM   rX   s                        r   Ú_get_cpu_info_from_wmicr°  0	  sÑ  € ô
 	‡�Ð1Ô2ðKä	×	×	¤j×&9Ñ&9×&;Ñ&;Ü
‡<�<ÐFÔGØ
€9ä!×*Ñ*Ó,Ñ€*Ø�^�z Q“Ü
‡<�<Ð2Ô3Ø
€9ð �,‰,�tÓ
€%Ù*/Ó
<ª% Q°3¸!±8Ó ˆ1�8‰8‹:×Ñ˜CÖ ©%€%Ð
<Ù!Ô
'šE‘D�A¤Q‹4ˆ1Š4™E€%Ñ
'ð —I‘I˜fÓ%€/Ü$;¸OÓ$LÑ!€-ð �i‰iÐ+Ó,€)Ø€,ÞÜ! )Ó,€9ð —)‘)˜MÓ*€-ÞÜ�}Ó%¨Ñ,€=à—)‘)˜MÓ*€-ÞÜ�}Ó%¨Ñ,€=ð 'Ñ€&�Ø—	‘	˜-Ó(×@¨E¯I©I°iÓ,@€+Ø×Ñ˜cÓ"€'à�Ó˜WŸ]™]¨8Ó4´s¸7³|ÀA±~ÓEØ‡}�}�XÓ€1Ü�˜˜A™‘Ó€6à�Ó˜GŸM™M¨'Ó2´S¸³\À!±^ÓCØ‡}�}�WÓ€1Üˆw�q˜1‘u‰~Ó€5à�7Ó˜wŸ}™}¨ZÓ8¼3¸w»<È¹>ÓIØ‡}�}�ZÓ €1Ü�'˜!˜a™%‘.Ó!€8ð —Y‘Y˜~Ó.Ø ä3°MÓTÜ/°	ÓHÜ& }ÓGÜ" 9Ó;à"Ø"àØØñ
€$ô" 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+ùòu =ùÛ
'øôt 	ó Ü	‡,�,ˆsÔà	…)ûðúsU   —AL Á5L ÂL Â'
LÂ5#LÃL ÃL	Ã0L	Ã6HL ÌL Ì
L:ÌL5Ì/L:Ì5L:c                  ó^  ^• [         R                  S5         [        R                  (       d  [         R	                  S5        0 $ [        R                  5       R                  5       n [        R                  5       n[        R                  5       n[        U5      u  p4[        R                  5       n[        U5      n[        U 5      u  pgUS:X  a  Sn[        U5      n[        R                  5       mU4S jn0 SU" S5      _SU" S	5      _S
U" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S5      _SU" S 5      _S!U" S"5      _S#U" S$5      _S%U" S&5      _U" S'5      U" S(5      U" S)5      U" S*5      U" S+5      U" S,5      U" S-5      U" S.5      U" S/5      U" S05      U" S15      U" S25      U" S35      S4.En	U	R                  5        V
Vs/ s H  u  p«U(       d  M  U
PM     n	n
nU	R                  5         UU [!        Xg5      [!        US5      [#        Xg5      [#        US5      U	S5.n[%        U5      n[         R'                  5         U$ s  snn
f ! [(         a!  n[         R	                  U5        0 s S6nA$ S6nAff = f)7zX
Returns the CPU info gathered from the Windows Registry.
Returns {} if not on Windows.
z+Tying to get info from Windows registry ...z$Not running on Windows. Skipping ...r„  r›  c                 ó"   >• SU -	  nUT-  S:„  nU$ )Nl        r   rb   )rý  rþ  rv  rò   s      €r   rÿ  Ú+_get_cpu_info_from_registry.<locals>.is_set«	  s!   ø€ Ø
˜Ñ
€4Ø�<Ñ !Ñ#€6Ø
€=r   rx  r   ry  r"   rz  r#   r{  rD   r|  r  r}  rg   r~  r  r€  r�  r]  r‚  r   Úsepamdr²  rƒ  r„  r…  ri  r†  r‡  rˆ  r‰  rŠ  rh  r‹  rÎ  r�  r�  r‘  r“  r•  r—  r^  rš  rœ  rž  r¢  r¤  r¦  )rŒ  Úserialr�  r’  r”  r–  r˜  r™  r›  r�  r¡  r£  rù  )rã   rV  rW  rX  rY  rí   rb  N)r  r-   rd   rù   rA   rÞ   r~   rä   ré   r8  rî   rì   rÊ  ró   rQ  rf  r¨  r•  r  r0   r=   )rÝ   rÚ  rè   r9  rö   rí   rY  r‘  rÿ  rb  r¿  r×  rM   rX   rò   s                 @r   Ú_get_cpu_info_from_registryr¶  „	  sè  ø€ ô 	‡�Ð=Ô>ð_ä	×	×	Ü
‡<�<Ð6Ô7Ø
€9ô ×5Ñ5Ó7×=Ñ=Ó?€/ô ×-Ñ-Ó/€)ô ×5Ñ5Ó7€/Ü˜?Ó+�*€$ô ×)Ñ)Ó+€)Ü  Ó+€)ô 1°ÓAÑ€-ð �eÓØ€5Ü% iÓ0€=ô ×/Ñ/Ó1€,õð!Ø‰6�!‹9ð!à‰6�!‹9ð!ð ‰&�‹)ð!ð 	‰6�!‹9ð	!ð
 	‰6�!‹9ð!ð 	‰6�!‹9ð!ð 	‰6�!‹9ð!ð 	‰6�!‹9ð!ð 	‰6�!‹9ð!ð 
‰F�1‹Ið!ð ‰f�R‹jð!ð 	‰6�"‹:ð!ð 
‰F�2‹Jð!ð 	‰6�"‹:ð!ð 	‰6�"‹:ð!ð  
‰F�2‹Jð!!ð" 	‰6�"‹:ð#!ñ$ �B‹ZÙ�R‹jÙ�b‹zá�"‹:Ù�2‹JÙ�"‹:Ù�2‹JÙ�"‹:Ù�2‹JÙ
�‹*á
�‹*Ù�2‹JÙ�B‹ZòA!€%ðH Ÿ™œÔ
,š‘�¬!�1™€%Ñ
,Ø‡*�*„,ð Øä2°=ÓHÜ.¨y¸!Ó<Ü% mÓ;Ü! )¨QÓ/àñ

€$ô 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+ùó# -øô$ 	ó Ü	‡,�,ˆsÔØ	…)ûðús=   ˜+J ÁF<J È I;ÈI;ÈA#J É;J Ê
J,ÊJ'Ê!J,Ê'J,c                  ó’  • [         R                  S5         [        R                  5       (       a  [        R	                  5       (       d  [         R                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R                  S5        0 $ [        R                  5       u  pUb  U S:w  a  [         R                  S5        0 $ UR                  S5      S   R                  S	5      S   R                  5       nUR                  S
5      S   R                  S	5      S   R                  5       n[        UR                  S5      S   R                  S	5      S   R                  5       5      n[        UR                  S5      S   R                  S	5      S   R                  5       5      n[        UR                  S5      S   R                  S	5      S   R                  5       5      nUR                  5       R                  S	5      S   R                  5       R                  5       R                  5       nUR                  5         Sn	UR                  S5      S   R                  S	5      S   R                  5       n
[        U
5      n
UR                  S5      S   R                  S	5      S   R                  5       n[        U5      nUU[        X©5      [        US5      [        X©5      [        US5      UUUUS.
n[!        U5      n[         R#                  5         U$ ! [$         a!  n[         R                  U5        0 s SnA$ SnAff = f)ze
Returns the CPU info gathered from isainfo and kstat.
Returns {} if isainfo or kstat are not found.
z Tying to get info from kstat ...z,Failed to find isinfo or kstat. Skipping ...Nr   z)Failed to run "isainfo -vb". Skipping ...z/Failed to run "kstat -m cpu_info". Skipping ...z	vendor_id r"   r4   z	brand z
	stepping z	model z	family r®  r›  z	clock_MHz z	current_clock_Hz )
rã   rV  rW  rX  rY  rí   r^  r_  r`  rb  )r  r-   rd   r’   r–   rA   rÅ   rÉ   r<   r~   r�  r   rf  rì   r¨  r•  r  r0   r=   )r¬   Úflag_outputr•   rÚ  rÝ   r^  r_  r`  rb  r‘  rY  rí   rM   rX   s                 r   Ú_get_cpu_info_from_kstatr¹  í	  sÈ  € ô 	‡�Ð2Ô3ð:ä	×	Ñ	×	!Ñ	!¬×)=Ñ)=×)?Ñ)?Ü
‡<�<Ð>Ô?Ø
€9ô '×1Ñ1Ó3Ñ€*ØÑ˜J¨!›OÜ
‡<�<Ð=Ô>Ø
€9ô !×1Ñ1Ó3Ñ€*Ø
�]�j A“oÜ
‡<�<ÐCÔDØ
€9ð �k‰k˜.Ó)¨!Ñ,×2Ñ2°4Ó8¸Ñ;×AÑAÓC€)Ø—K‘K 
Ó+¨AÑ.×4Ñ4°TÓ:¸1Ñ=×CÑCÓE€/Ü�—‘˜]Ó+¨AÑ.×4Ñ4°TÓ:¸1Ñ=×CÑCÓEÓF€(Ü
ˆe�k‰k˜*Ó% aÑ(×.Ñ.¨tÓ4°QÑ7×=Ñ=Ó?Ó
@€%Üˆu�{‰{˜;Ó'¨Ñ*×0Ñ0°Ó6°qÑ9×?Ñ?ÓAÓB€&ð ×
Ñ
Ó
×
#Ñ
# DÓ
)¨"Ñ
-×
3Ñ
3Ó
5×
;Ñ
;Ó
=×
CÑ
CÓ
E€%Ø‡*�*„,ð €%Ø—+‘+˜nÓ-¨aÑ0×6Ñ6°tÓ<¸QÑ?×EÑEÓG€-Ü$ ]Ó3€-ð �k‰kÐ/Ó0°Ñ3×9Ñ9¸$Ó?ÀÑB×HÑHÓJ€)Ü  Ó+€)ð Øä2°=ÓHÜ.¨y¸!Ó<Ü% mÓ;Ü! )¨QÓ/àØØØñ
€$ô 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+øÜó Ü	‡,�,ˆsÔØ	…)ûðús1   —AL Á 5L Â5L ÃIL Ì
MÌ%MÌ;MÍMc                  óø  • [         R                  S5         [        R                  R	                  S5      S   n Su  pnU R	                  S5      nSU;   aB  UR                  S5      [        U5      S-
  :  a!  UR                  S5      n[        XES-      5      nSU;   aB  UR                  S5      [        U5      S-
  :  a!  UR                  S5      n[        XES-      5      nS	U;   aB  UR                  S	5      [        U5      S-
  :  a!  UR                  S	5      n[        XES-      5      nUUUS
.n[        U5      n[         R                  5         U$ ! [         a!  n[         R                  U5        0 s S nA$ S nAff = f)Nz)Tying to get info from platform.uname ...rz  r   )NNNr  rª  r"   rl  rm  )r`  r_  r^  )r  r-   rd   rû   r<   rŽ  rr   r�  r  r0   r=   rA   )r€   r`  r_  r^  r¯  rg  rM   rX   s           r   Ú!_get_cpu_info_from_platform_unamer»  1
  sO  € ä‡�Ð;Ô<ðÜ
×
%Ñ
%×
+Ñ
+¨CÓ
0°Ñ
3€%à.Ñ€&�Ø�K‰K˜Ó€'à�Ó˜WŸ]™]¨8Ó4´s¸7³|ÀA±~ÓEØ‡}�}�XÓ€1Ü�˜A™‘Ó€6à�Ó˜GŸM™M¨'Ó2´S¸³\À!±^ÓCØ‡}�}�WÓ€1Üˆw˜1‘u‰~Ó€5à�7Ó˜wŸ}™}¨ZÓ8¼3¸w»<È¹>ÓIØ‡}�}�ZÓ €1Ü�'˜a™%‘.Ó!€8ð ØØñ
€$ô
 
-¨TÓ	2€$Ü	‡/�/ÔØ	€+øÜó Ü	‡,�,ˆsÔØ	…)ûðús   —D6E Å
E9ÅE4Å.E9Å4E9c                  óz  • [         R                  S5        [        [        R                  5      u  pSSS.R                  [        R                  5      =(       d    SnSR                  " [        R                  6 nSR                  X25      nU[        [        U U[        R                  [        R                  S.n[         R                  S	R                  US
   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [         R                  SR                  US   5      5        [        U[        5       5        [        U[        5       5        [        U[!        5       5        [        U[#        5       5        [        U[%        5       5        [        U['        5       5        [        U[)        5       5        [        U[+        5       5        [        U[-        5       5        [        U[/        5       5        [        U[1        5       5        [        U[3        5       5        [        U[5        5       5        [         R                  S5        U$ )zl
Returns the CPU info by using the best sources of information for your OS.
Returns {} if nothing is found.
zP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!z32 bitz64 bit)iÿÿÿl   ÿÿÿÿ zunknown bitsz{0}.{1}.{2}.{3}.{4}z	{0} ({1}))Úpython_versionÚcpuinfo_versionÚcpuinfo_version_stringr9  rö   rZ  rè   zpython_version: {0}r½  zcpuinfo_version: {0}r¾  z	arch: {0}r9  z	bits: {0}rö   z
count: {0}rZ  zarch_string_raw: {0}rè   )r  r&   r8  rd   rè   r©   rB  Úmaxsizer   Úversion_infoÚCPUINFO_VERSIONÚCPUINFO_VERSION_STRINGrø   rh  r°  r¶  rh  rj  rp  r�  r¹  rr  rŒ  rŠ  r–  rX  r»  )r9  rö   Úfriendly_maxsizeÚfriendly_versionÚPYTHON_VERSIONrM   s         r   Ú_get_cpu_info_internalrÇ  S
  s$  € ô 	‡�ˆxÔô œ*×4Ñ4Ó5�€à'°(Ñ<×@Ñ@ÄÇÁÓM×_ÐQ_ÐØ)×0Ò0´#×2BÑ2BÐCÐØ×$Ñ$Ð%5ÓH€ð $Ü%Ü3ØØÜ× Ñ Ü ×0Ñ0ñ	€ô 	‡�Ð$×+Ñ+¨DÐ1AÑ,BÓCÔDÜ‡�Ð%×,Ñ,¨TÐ2CÑ-DÓEÔFÜ‡�ˆ{×!Ñ! $ v¡,Ó/Ô0Ü‡�ˆ{×!Ñ! $ v¡,Ó/Ô0Ü‡�ˆ|×"Ñ" 4¨¡=Ó1Ô2Ü‡�Ð%×,Ñ,¨TÐ2CÑ-DÓEÔFô �$Ô/Ó1Ô2ô �$Ô3Ó5Ô6ô �$Ô7Ó9Ô:ô �$Ô7Ó9Ô:ô �$Ô0Ó2Ô3ô �$Ô1Ó3Ô4ô �$Ô0Ó2Ô3ô �$Ô0Ó2Ô3ô �$ÔAÓCÔDô �$Ô:Ó<Ô=ô �$Ô2Ó4Ô5ô �$Ô0Ó2Ô3ô �$Ô9Ó;Ô<ä‡�ˆxÔà€r   c                  óL  • SSK n Sn[        [        SS5      (       a.  [        5       nU R	                  U5      nSR                  U5      nU$ SSKJnJn  [        R                  [        S/nU" XTXDS9nUR                  5       S   nUR                  S:w  a  g	UR                  S
S9nU$ )zp
Returns the CPU info by using the best sources of information for your OS.
Returns the result in a json string
r   NÚfrozenFry  r  ú--jsonr  z{}r  r  )ÚjsonÚgetattrrB  rÇ  r?  r   r  r  r  Ú
executableÚ__file__r  r¬   r  )rË  rH   rM   r  r  r  r  s          r   Úget_cpu_info_jsonrÏ  Ÿ
  sž   € ó à
€ô ŒC�˜5×!Ñ!Ü	Ó	!€$Ø�:‰:�dÓ€&Ø�<‰<˜Ó€&ð  	€÷ %ä�^‰^œX xÐ0€'ÙˆW¨$Ñ;€"Ø�>‰>Ó˜AÑ€&à‡]�]�aÓØ
à�=‰= 'ˆ=Ð*€&à€r   c                  óJ   • SSK n [        5       nU R                  U[        S9nU$ )zi
Returns the CPU info by using the best sources of information for your OS.
Returns the result in a dict
r   N)Úobject_hook)rË  rÏ  rJ  rO  )rË  rH   s     r   Úget_cpu_inforÒ  ¿
  s(   € ó ä
Ó
€ð �*‰*�V¬;ˆ*Ð
7€à€r   c            
      óÂ
  • SSK Jn   SS KnU " SS9nUR                  SSSS9  UR                  S	SS
S9  UR                  SSSS9  UR	                  5       n[        UR                  S5      q [        5         [        5       nU(       d5  [        R                  R                  S5        [        R                  " S5        UR                  (       a  [!        UR#                  U5      5        g UR$                  (       a  [!        [&        5        g [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        SR)                  UR+                  SS5      5      5        [!        S R)                  UR+                  S!S5      5      5        [!        S"R)                  UR+                  S#S5      5      5        [!        S$R)                  UR+                  S%S5      5      5        [!        S&R)                  UR+                  S'S5      5      5        [!        S(R)                  UR+                  S)S5      5      5        [!        S*R)                  UR+                  S+S5      5      5        [!        S,R)                  UR+                  S-S5      5      5        [!        S.R)                  UR+                  S/S5      5      5        [!        S0R)                  UR+                  S1S5      5      5        [!        S2R)                  UR+                  S3S5      5      5        [!        S4R)                  UR+                  S5S5      5      5        [!        S6R)                  UR+                  S7S5      5      5        [!        S8R)                  UR+                  S9S5      5      5        [!        S:R)                  UR+                  S;S5      5      5        [!        S<R)                  UR+                  S=S5      5      5        [!        S>R)                  UR+                  S?S5      5      5        [!        S@R)                  SAR-                  UR+                  SBS5      5      5      5        g ! [         aL  n[        R                  R                  [        U5      S-   5        [        R                  " S5         S nAGNäS nAff = f)CNr   )ÚArgumentParserzGets CPU info with pure Python)r®  rÊ  Ú
store_truezReturn the info in JSON format)ÚactionÚhelpz	--versionz Return the version of py-cpuinfoz--tracez/Traces code paths used to find CPU info to fileFr4   r"   zFailed to find cpu info
zPython Version: {0}r½  r3   zCpuinfo Version: {0}r¿  zVendor ID Raw: {0}rã   zHardware Raw: {0}rU  zBrand Raw: {0}rV  zHz Advertised Friendly: {0}rW  zHz Actual Friendly: {0}rX  zHz Advertised: {0}rY  zHz Actual: {0}rí   z	Arch: {0}r9  z	Bits: {0}rö   z
Count: {0}rZ  zArch String Raw: {0}rè   zL1 Data Cache Size: {0}rd  zL1 Instruction Cache Size: {0}re  zL2 Cache Size: {0}r[  zL2 Cache Line Size: {0}r\  zL2 Cache Associativity: {0}r]  zL3 Cache Size: {0}rc  zStepping: {0}r^  z
Model: {0}r_  zFamily: {0}r`  zProcessor Type: {0}ra  z
Flags: {0}z, rb  )ÚargparserÔ  rË  Úadd_argumentÚ
parse_argsr   r  r  r:  r=   rB  rW   r&   r:   ÚexitrÇ  Úprintr?  ÚversionrÃ  r   r©   r;   )rÔ  rË  ÚparserrO  rX   rM   s         r   Úmainrß  Î
  s  € Ý$Ûñ Ð%EÑ
F€Ø×Ñ�X lÐ9YÐÑZØ×Ñ�[¨Ð<^ÐÑ_Ø×Ñ�Y |Ð:kÐÑlØ×ÑÓ€ô �—‘˜UÓ#€ðÜ„-ô
 	Ó €æÜ‡*�*×ÑÐ.Ô/Ü‡(‚(ˆ1„+à‡I‡IÜˆ�
‰
�4ÓÕØ
‡l‡lÜÔÕäÐ×$Ñ$ T§X¡XÐ.>ÀÓ%CÓDÔEÜÐ×%Ñ% d§h¡hÐ/GÈÓ&LÓMÔNÜÐ×#Ñ# D§H¡H¨_¸bÓ$AÓBÔCÜÐ×"Ñ" 4§8¡8¨N¸BÓ#?Ó@ÔAÜÐ×Ñ §¡¨°bÓ 9Ó:Ô;ÜÐ%×,Ñ,¨T¯X©XÐ6NÐPRÓ-SÓTÔUÜÐ!×(Ñ(¨¯©Ð2FÈÓ)KÓLÔMÜÐ×#Ñ# D§H¡H¨_¸bÓ$AÓBÔCÜÐ×Ñ §¡¨°bÓ 9Ó:Ô;Üˆ×Ñ˜4Ÿ8™8 F¨BÓ/Ó0Ô1Üˆ×Ñ˜4Ÿ8™8 F¨BÓ/Ó0Ô1Üˆ×Ñ˜DŸH™H W¨bÓ1Ó2Ô3ÜÐ×%Ñ% d§h¡hÐ/@À"Ó&EÓFÔGÜÐ!×(Ñ(¨¯©Ð2FÈÓ)KÓLÔMÜÐ(×/Ñ/°·±Ð9TÐVXÓ0YÓZÔ[ÜÐ×#Ñ# D§H¡H¨_¸bÓ$AÓBÔCÜÐ!×(Ñ(¨¯©Ð2FÈÓ)KÓLÔMÜÐ%×,Ñ,¨T¯X©XÐ6NÐPRÓ-SÓTÔUÜÐ×#Ñ# D§H¡H¨_¸bÓ$AÓBÔCÜˆ×Ñ˜tŸx™x¨
°BÓ7Ó8Ô9Üˆ×Ñ˜DŸH™H W¨bÓ1Ó2Ô3Üˆ×Ñ˜TŸX™X h°Ó3Ó4Ô5ÜÐ×$Ñ$ T§X¡XÐ.>ÀÓ%CÓDÔEÜˆ×Ñ˜DŸI™I d§h¡h¨w¸Ó&;Ó<Ó=Õ>øôM 	ó Ü‡*�*×Ñ”3�s“8˜d‘?Ô#Ü‡(‚(ˆ1‡+‚+ûðús   Á+
T Ô
UÔAUÕUÚ__main__FrM  )=rÂ  r;   r:   rÃ  rj   rB  r|   r÷   r&  rQ  r  Úobjectr   rd   rs   r«   rÜ   r:  rF  rK  rO  rh  rr  rw  rì   r•  rŸ  r¨  r´  rÄ  rÊ  râ  rò  r8  r   r
  r  r  rK  rD  rJ  rX  rh  rj  rp  rr  rŠ  rŒ  r�  r–  r“  r•  r°  r¶  r¹  r»  rÇ  rÏ  rÒ  rß  r]   )r@   s   0r   Ú<module>râ     s±  ðð8 €ØŸ™±?Ó"C²?¨a¡3 q¦6±?Ñ"CÓDÐ ç Û Û Û ð  $Ð à
€ôyˆFô yôvH�ô HòVô%ò4ò$=ò
ò	òòò,ò"ò ò<ò&ò, òDò(ò<ò,2Eòh]ò~7òrò"CðH CEô ô>Uˆ&ô UôpLˆFô Lò\I#òV	 òbòH^ò@-ò^_òBò@|ò~ò0=ò@ò?òBPòdRòhgòRBòH òDJòXò@ò6?ðr ˆzÓÙ…á�˜Ó€Ù…ùò]W #Ds   ’D