Ë
    f‚Á  ã                   óÒ  — d dl mZ 	 d dlmZ d dlmZ d dlZ	d dl
mZ d dlZd dlZd dlZd dlZddlmZmZmZmZmZ ddlmZ dd	lmZ dZd
ZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/d Z0d!Z1d"Z2d#Z3d$Z4d%Z5i ed&“ed'“ed(“ed)“ed*“ed+“ed,“e d-“e!d.“e"d/“e#d0“e$d1“e%d2“e&d3“e'd4“e(d5“e)d6“e*d7e+d8e,d9e-d:e.d;e/d<e0d=e1d>e2d?e3d@e4dAe5dBi¥Z6dCa7dDZ8dEZ9dF„ Z:dxdG„Z;dxdH„Z<dI„ Z=dJ„ Z>dK„ Z?dL„ Z@dM„ ZA G dN„ dOe«      ZB G dP„ dQeB«      ZC G dR„ dSeC«      ZD G dT„ dUeB«      ZE G dV„ dWeE«      ZF G dX„ dYeE«      ZG G dZ„ d[«      ZH G d\„ d]eE«      ZI G d^„ d_eE«      ZJ G d`„ daeC«      ZK G db„ dceK«      ZL G dd„ deeE«      ZM G df„ dgeB«      ZN G dh„ dieB«      ZO G dj„ dkeE«      ZP G dl„ dmeE«      ZQ G dn„ doeE«      ZR G dp„ dqeE«      ZS G dr„ dseC«      ZT G dt„ dueB«      ZU G dv„ dw«      ZVy# e$ r
 d dlmZ Y �Œ×w xY w)yé    )Úprint_function)ÚMutableMapping)ÚstrftimeN)Úreduceé   )ÚlibÚ_RAW_CB_TYPEÚ_LOST_CB_TYPEÚ_RINGBUF_CB_TYPEÚbcc_perf_buffer_opts)Úget_online_cpus)Úget_possible_cpusé   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   ÚHASHÚARRAYÚ
PROG_ARRAYÚPERF_EVENT_ARRAYÚPERCPU_HASHÚPERCPU_ARRAYÚSTACK_TRACEÚCGROUP_ARRAYÚLRU_HASHÚLRU_PERCPU_HASHÚLPM_TRIEÚARRAY_OF_MAPSÚHASH_OF_MAPSÚDEVMAPÚSOCKMAPÚCPUMAPÚXSKMAPÚSOCKHASHÚCGROUP_STORAGEÚREUSEPORT_SOCKARRAYÚPERCPU_CGROUP_STORAGEÚQUEUEÚSTACKÚ
SK_STORAGEÚDEVMAP_HASHÚ
STRUCT_OPSÚRINGBUFÚINODE_STORAGEÚTASK_STORAGEé(   éA   i  c                 ón   — d}d}	 ||| z  |z  dz
  kD  s||dz
  kD  rn|dz  }|dz  }Œ"| |kD  r|d d dz   }|S )Nr   Ú r   Ú*éÿÿÿÿú+© )ÚvalÚval_maxÚwidthÚiÚtexts        ú+/usr/lib/python3/dist-packages/bcc/table.pyÚ_starsrV   c   sf   € Ø	€AØ€DØØ�˜‘˜wÑ&¨!Ñ+Ò+°°U¸Q±Y²ØØ�‰ˆØ	ˆQ‰ˆð	 ð
 ˆW‚}Ø�C�Rˆy˜3‰ˆØ€Kó    c                 ó   — t        | |d ¬«      S )N)Úsection_bucket)Ú_get_json_hist)ÚvalsÚval_typerY   s      rU   Úget_json_histr]   o   s   € Ü˜$ ¸Ô>Ð>rW   c                 ób  — g }d}t        t        | «      «      D ]  }| |   dk7  sŒ|}Œ d}d}t        t        | «      «      D ]O  }|dk7  sŒ	||k  sŒ|dz  }i }||d<   t        |«      dz
  |d<   t        | |   «      |d<   |j                  |«       |}ŒQ t	        d«      ||dœ}	|r|d   |	|d   <   |	S )	Nr   r   r   zinterval-startzinterval-endÚcountz%Y-%m-%d %H:%M:%S)Útsr\   Údata)ÚrangeÚlenÚintÚappendr   )
r[   r\   rY   Ú	hist_listÚmax_nonzero_idxrS   ÚindexÚprevÚlist_objÚ	histograms
             rU   rZ   rZ   r   sè   € Ø€IØ€OÜ”3�t“9Óò  ˆØ�‰7�a‹<Ø‰Oð ð €EØ€DÜ”3�t“9Óò ˆØ�‹6�a˜?Ó*Ø˜A‘IˆEàˆHØ)-ˆHÐ%Ñ&Ü'*¨5£z°A¡~ˆH�^Ñ$Ü # D¨¡G£ˆH�WÑà×Ñ˜XÔ&à‰Dðô  Ð 3Ó4À(ÐT]Ñ^€IÙØ'5°aÑ'8ˆ	�. Ñ#Ñ$ØÐrW   c                 ó´  — d}d}d}t        | «      D ]  \  }}|dkD  r|}||kD  sŒ|}Œ |dk  rd}d}	t        }
nd}d}	t        t        d	z  «      }
|dkD  rt        ||z  «       t	        d
|d
z   «      D ]e  }d
|z  d
z	  }d
|z  d
z
  }||k(  r|d
z  }| |   }|r$|sŒ't        |	||||
t        |||
«      fz  «       d}ŒHt        |	||||
t        |||
«      fz  «       Œg y )Né@   rM   r   é    z#     %-19s : count     distributionz%10d -> %-10d : %-8d |%-*s|z-               %-29s : count     distributionz%20d -> %-20d : %-8d |%-*s|r   r   F)Ú	enumerateÚ	stars_maxrd   Úprintrb   rV   )r[   r\   Ústrip_leading_zeroÚlog2_dist_maxÚidx_maxrQ   rS   ÚvÚheaderÚbodyÚstarsÚlowÚhighrP   s                 rU   Ú_print_log2_histr{   ‹   s+  € à€MØ€GØ€Gä˜$“ò $‰ˆˆ1ØˆqŠ5˜A�'Øˆw‹; !™ð$ð �"‚}Ø6ˆØ,ˆÜ‰à@ˆØ,ˆÜ”I ‘MÓ"ˆà�‚{Üˆf�xÑÔ ä�1�g ‘kÓ"ò 8ˆØ�A‰v˜!‰mˆØ�Q‘˜!‰|ˆØ�4ŠKØ�1‰HˆCØ�1‰gˆáÚÜ�d˜c 4¨¨eÜ$ S¨'°5Ó9ð;ñ ;ô <à%*Ñ"ä�$˜#˜t S¨%Ü   g¨uÓ5ð7ñ 7õ 8ñ8rW   c                 óD  — d}d}d}t        | «      D ]  \  }}|dkD  r|}||kD  sŒ|}Œ d}d}	t        }
|dk\  rt        ||z  «       t        d|dz   «      D ]I  }| |   }|r#|sŒt        |	|||
t	        |||
«      fz  «       d}Œ-t        |	|||
t	        |||
«      fz  «       ŒK y )Nrm   rM   r   z#     %-13s : count     distributionz        %-10d : %-8d |%-*s|r   F)ro   rp   rq   rb   rV   )r[   r\   rr   rs   rt   rQ   rS   ru   rv   rw   rx   rP   s               rU   Ú_print_linear_histr}   ±   sÞ   € à€MØ€GØ€Gä˜$“ò $‰ˆˆ1ØˆqŠ5˜A�'Øˆw‹; !™ð$ð 3€FØ(€DÜ€Eà�!‚|Üˆf�xÑÔ Ü�1�g ‘kÓ"ò 
<ˆØ�1‰gˆáÚÜ�d˜a  eÜ$ S¨'°5Ó9ð;ñ ;ô <à%*Ñ"ä�d˜a  eÜ$ S¨'°5Ó9ð;ñ ;õ <ñ
<rW   c                 ó4   — 	 t         |    S # t        $ r Y yw xY w)Nz	<unknown>)Úmap_type_nameÚKeyError)Úttypes    rU   Úget_table_type_namer‚   Î   s$   € ðÜ˜UÑ#Ð#øÜò Ùðús   ‚ ‹	–c           	      ó¦  — i dt         j                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “d	t         j
                  “d
t         j
                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “dt         j                  “t         j                  t         j                  t         j                  t         j                  t         j                  dz  t         j                  dz  t         j                  dœ¥}t        j                  d«      }g }t        j                   | j"                  j$                  | j&                  «      }d}||k  �r
t        j(                  | j"                  j$                  | j&                  |«      j+                  «       }t        j,                  d|«      }|j/                  d«      }|j/                  d«      }	t        j,                  d|	«      rd}	|j-                  |	«      }	 |rA|j1                  |||j/                  d«         t3        |j/                  d«      «      z  f«       n|j1                  |||	   f«       |dz  }||k  r�Œ
t?        dt         j@                  fd|i«      S # t4        $ r6 t7        d|	z  t8        j:                  ¬«       t9        j<                  d«       Y Œhw xY w)NÚcharÚs8zunsigned charÚu8zu8 *zchar *ÚshortÚs16zunsigned shortÚu16rd   Ús32Úenumzunsigned intÚu32Úlongzunsigned longr   )z	long longÚs64zunsigned long longÚu64Ú__int128zunsigned __int128zvoid *z(\S+(?: \S+)*) ?\[([0-9]+)\]$r   z	(.*)#(.*)r   zenum .*zGType: '%s' not recognized. Please define the data with ctypes manually.)ÚfilerK   Ú_fields_)!ÚctÚc_charÚc_ubyteÚc_char_pÚc_shortÚc_ushortÚc_intÚc_uintÚc_longÚc_ulongÚ
c_longlongÚc_ulonglongÚc_void_pÚreÚcompiler   Úbpf_perf_event_fieldsÚbpfÚmoduleÚ_nameÚbpf_perf_event_fieldÚdecodeÚmatchÚgroupre   rd   r€   rq   ÚsysÚstderrÚexitÚtypeÚ	Structure)
Ú	event_mapÚ
ct_mappingÚ
array_typeÚfieldsÚ
num_fieldsrS   ÚfieldÚmÚ
field_nameÚ
field_types
             rU   Ú_get_event_classr¸   Õ   sÈ  € ðØœbŸi™iðàœbŸi™iðð 	œbŸj™jðð 	œbŸj™jð	ð
 	œbŸk™kðð 	œbŸk™kðð 	œbŸj™jðð 	œbŸj™jðð 	œbŸk™kðð 	œbŸk™kðð 	œbŸh™hðð 	œbŸh™hðð 	œbŸh™hðð 	œbŸi™iðð 	œbŸi™iðð  	œbŸi™ið!ð" 	œbŸj™jð#ô$ !Ÿm™mÜ Ÿm™mÜ Ÿn™nÜ Ÿn™nÜ!Ÿ}™}¨qÑ0Ü!Ÿ~™~°Ñ1Ü Ÿk™kò1€Jô8 —‘Ð<Ó=€Jà€FÜ×*Ñ*¨9¯=©=×+?Ñ+?ÀÇÁÓQ€JØ	€AØ
ˆj‹.Ü×(Ñ(¨¯©×)=Ñ)=¸y¿¹ÐPQÓR×YÑYÓ[ˆÜ�H‰H�\ 5Ó)ˆØ—W‘W˜Q“Zˆ
Ø—W‘W˜Q“Zˆ
ä�8‰8�J 
Ô+ØˆJà×Ñ˜ZÓ(ˆð
	ÙØ—‘˜z¨:°a·g±g¸a³jÑ+AÄCÈÏÉÐPQË
ÃOÑ+SÐTÕUà—‘˜z¨:°jÑ+AÐBÔCð 	
ˆQ‰ˆð+ ˆjŒ.ô, �”R—\‘\�O j°&Ð%9Ó:Ð:øô ò 	ô Ð[ØñÜ%(§Z¡Zõ1ä�H‰H�QŽKð	ús   ÊAL Ì<MÍMc                 ó  — t        j                  | j                  |«      }d}|t        k(  rt	        | ||||«      }�n»|t
        k(  rt        | ||||«      }�n¡|t        k(  rt        | ||||«      }�n‡|t        k(  rt        | |||||«      }�nl|t        k(  rt        | ||||fi |¤Ž}�nQ|t        k(  rt        | ||||fi |¤Ž}�n6|t        k(  rt!        | ||||«      }�n|t"        k(  rt%        | ||||«      }�n|t&        k(  rt)        | ||||«      }né|t*        k(  rt-        | ||||«      }nÐ|t.        k(  rt1        | ||||«      }n·|t2        k(  rt5        | ||||«      }nž|t6        k(  rt9        | ||||«      }n…|t:        k(  rt=        | ||||«      }nl|t>        k(  rtA        | ||||«      }nS|tB        k(  rtE        | ||||«      }n:|tF        k(  s	|tH        k(  rtK        | |||«      }n|tL        k(  rtO        | |||||«      }|dk(  rtQ        d|z  «      ‚|S )z|Table(bpf, map_id, map_fd, keytype, leaftype, **kwargs)

    Create a python object out of a reference to a bpf table handleNzUnknown table type %d))r   Úbpf_table_type_idr¤   ÚBPF_MAP_TYPE_HASHÚ	HashTableÚBPF_MAP_TYPE_ARRAYÚArrayÚBPF_MAP_TYPE_PROG_ARRAYÚ	ProgArrayÚBPF_MAP_TYPE_PERF_EVENT_ARRAYÚPerfEventArrayÚBPF_MAP_TYPE_PERCPU_HASHÚ
PerCpuHashÚBPF_MAP_TYPE_PERCPU_ARRAYÚPerCpuArrayÚBPF_MAP_TYPE_LPM_TRIEÚLpmTrieÚBPF_MAP_TYPE_STACK_TRACEÚ
StackTraceÚBPF_MAP_TYPE_LRU_HASHÚLruHashÚBPF_MAP_TYPE_LRU_PERCPU_HASHÚLruPerCpuHashÚBPF_MAP_TYPE_CGROUP_ARRAYÚCgroupArrayÚBPF_MAP_TYPE_DEVMAPÚDevMapÚBPF_MAP_TYPE_CPUMAPÚCpuMapÚBPF_MAP_TYPE_XSKMAPÚXskMapÚBPF_MAP_TYPE_ARRAY_OF_MAPSÚMapInMapArrayÚBPF_MAP_TYPE_HASH_OF_MAPSÚMapInMapHashÚBPF_MAP_TYPE_QUEUEÚBPF_MAP_TYPE_STACKÚ
QueueStackÚBPF_MAP_TYPE_RINGBUFÚRingBufÚ	Exception)	r£   Úmap_idÚmap_fdÚkeytypeÚleaftypeÚnameÚkwargsr�   Úts	            rU   ÚTablerè     s6  € ô
 ×!Ñ! #§*¡*¨fÓ5€EØ€AØÔ!Ò!Ü�c˜6 6¨7°HÓ=ŠØ	Ô$Ò	$Ü�#�v˜v w°Ó9ŠØ	Ô)Ò	)Ü�c˜6 6¨7°HÓ=ŠØ	Ô/Ò	/Ü˜3 ¨°¸À4ÓHŠØ	Ô*Ò	*Ü�s˜F F¨G°XÑHÀÑHŠØ	Ô+Ò	+Ü˜˜V V¨W°hÑIÀ&ÑIŠØ	Ô'Ò	'Ü�C˜ ¨°(Ó;ŠØ	Ô*Ò	*Ü�s˜F F¨G°XÓ>ŠØ	Ô'Ò	'Ü�C˜ ¨°(Ó;‰Ø	Ô.Ò	.Ü˜#˜v v¨w¸ÓA‰Ø	Ô+Ò	+Ü˜˜V V¨W°hÓ?‰Ø	Ô%Ò	%Ü�3˜ ¨°Ó:‰Ø	Ô%Ò	%Ü�3˜ ¨°Ó:‰Ø	Ô%Ò	%Ü�3˜ ¨°Ó:‰Ø	Ô,Ò	,Ü˜#˜v v¨w¸ÓA‰Ø	Ô+Ò	+Ü˜˜f f¨g°xÓ@‰Ø	Ô$Ò	$¨Ô1CÒ(CÜ�s˜F F¨HÓ5‰Ø	Ô&Ò	&Ü�C˜ ¨°(¸DÓAˆØˆD‚yÜÐ/°%Ñ7Ó8Ð8Ø€HrW   c                   óú   — e Zd Zd"d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd#d„Zd$d„Zd„ Zd"d„Zd„ Zd„ Zd%d„Zd„ Zd„ Zd„ Zd„ Z G d„ de«      Zd„ Zefd„Z 	 	 d&d„Z!	 	 	 d'd „Z"	 	 	 d'd!„Z#y)(Ú	TableBaseNc                 óÎ  — || _         || _        || _        || _        || _        t        j                  | j                   j                  | j                  «      | _        t        j                  | j                   j                  | j                  «      | _
        i | _        || _        t        t        j                  | j                   j                  | j                  «      «      | _        y ©N)r£   rá   râ   ÚKeyÚLeafr   rº   r¤   r�   Úbpf_table_flags_idÚflagsÚ_cbsr¥   rd   Úbpf_table_max_entries_idÚmax_entries)Úselfr£   rá   râ   rã   rä   rå   s          rU   Ú__init__zTableBase.__init__B  sž   € ØˆŒØˆŒØˆŒØˆŒØˆŒ	Ü×*Ñ*¨4¯8©8¯?©?¸D¿K¹KÓHˆŒ
Ü×+Ñ+¨D¯H©H¯O©O¸T¿[¹[ÓIˆŒ
ØˆŒ	ØˆŒ
Üœs×;Ñ;¸D¿H¹H¿O¹OØ—‘ó ó ˆÕrW   c                 ó   — | j                   S rì   )râ   ©rô   s    rU   Úget_fdzTableBase.get_fdO  s   € Ø�{‰{ÐrW   c           	      óJ  — t        j                  t        j                  | j                  «      dz  «      }t	        j
                  | j                  j                  | j                  |t        |«      t        j                  |«      «      }|dk  rt        d«      ‚|j                  S )Nr   r   zCould not printf key)r“   Úcreate_string_bufferÚsizeofrí   r   Úbpf_table_key_snprintfr£   r¤   rá   rc   Úbyrefrà   Úvalue)rô   ÚkeyÚbufÚress       rU   Úkey_sprintfzTableBase.key_sprintfR  su   € Ü×%Ñ%¤b§i¡i°·±Ó&9¸AÑ&=Ó>ˆÜ×(Ñ(¨¯©¯©¸$¿+¹+ÀsÜ),¨S«´2·8±8¸C³=óBˆà�Š7ÜÐ2Ó3Ð3Ø�y‰yÐrW   c           	      óJ  — t        j                  t        j                  | j                  «      dz  «      }t	        j
                  | j                  j                  | j                  |t        |«      t        j                  |«      «      }|dk  rt        d«      ‚|j                  S ©Nr   r   zCould not printf leaf©r“   rú   rû   rî   r   Úbpf_table_leaf_snprintfr£   r¤   rá   rc   rý   rà   rþ   ©rô   Úleafr   r  s       rU   Úleaf_sprintfzTableBase.leaf_sprintfZ  óu   € Ü×%Ñ%¤b§i¡i°·	±	Ó&:¸QÑ&>Ó?ˆÜ×)Ñ)¨$¯(©(¯/©/¸4¿;¹;ÈÜ*-¨c«(´B·H±H¸T³NóDˆà�Š7ÜÐ3Ó4Ð4Ø�y‰yÐrW   c                 óØ   — | j                  «       }t        j                  | j                  j                  | j
                  |t        j                  |«      «      }|dk  rt        d«      ‚|S )Nr   zCould not scanf key)	rí   r   Úbpf_table_key_sscanfr£   r¤   rá   r“   rý   rà   )rô   Úkey_strrÿ   r  s       rU   Ú	key_scanfzTableBase.key_scanfb  sR   € Ø�h‰h‹jˆÜ×&Ñ& t§x¡x§¡¸¿¹ÀWÜ')§x¡x°£}ó6ˆà�Š7ÜÐ1Ó2Ð2Øˆ
rW   c                 óØ   — | j                  «       }t        j                  | j                  j                  | j
                  |t        j                  |«      «      }|dk  rt        d«      ‚|S ©Nr   zCould not scanf leaf©	rî   r   Úbpf_table_leaf_sscanfr£   r¤   rá   r“   rý   rà   ©rô   Úleaf_strr  r  s       rU   Ú
leaf_scanfzTableBase.leaf_scanfj  óR   € Ø�y‰y‹{ˆÜ×'Ñ'¨¯©¯©¸¿¹ÀhÜ(*¯©°«ó8ˆà�Š7ÜÐ2Ó3Ð3ØˆrW   c                 óÊ   — | j                  «       }t        j                  | j                  t	        j
                  |«      t	        j
                  |«      «      }|dk  rt        ‚|S ©Nr   ©rî   r   Úbpf_lookup_elemrâ   r“   rý   r€   ©rô   rÿ   r  r  s       rU   Ú__getitem__zTableBase.__getitem__r  sF   € Ø�y‰y‹{ˆÜ×!Ñ! $§+¡+¬r¯x©x¸«}¼b¿h¹hÀt»nÓMˆØ�Š7ÜˆNØˆrW   c                 ó  — t        j                  | j                  t        j                  |«      t        j                  |«      d«      }|dk  r5t        j                  t        j                  «       «      }t        d|z  «      ‚y )Nr   zCould not update table: %s©	r   Úbpf_update_elemrâ   r“   rý   ÚosÚstrerrorÚ	get_errnorà   )rô   rÿ   r  r  Úerrstrs        rU   Ú__setitem__zTableBase.__setitem__y  s]   € Ü×!Ñ! $§+¡+¬r¯x©x¸«}¼b¿h¹hÀt»nÈaÓPˆØ�Š7Ü—[‘[¤§¡£Ó0ˆFÜÐ8¸6ÑAÓBÐBð rW   c                 ó€   — t        j                  | j                  t        j                  |«      «      }|dk  rt
        ‚y r  )r   Úbpf_delete_elemrâ   r“   rý   r€   )rô   rÿ   r  s      rU   Ú__delitem__zTableBase.__delitem__  s1   € Ü×!Ñ! $§+¡+¬r¯x©x¸«}Ó=ˆØ�Š7ÜˆNð rW   c              #   óH   K  — | D ]
  }	 | |   –— Œ y # t         $ r Y Œw xY w­wrì   ©r€   ©rô   rÿ   s     rU   Ú
itervalueszTableBase.itervalues†  s6   è ø€ Øò 	ˆCðØ˜3‘i“ñ		øô
 ò Ùðüs   ‚"‰�"“	œ"žŸ"c              #   óL   K  — | D ]  }	 || |   f–— Œ y # t         $ r Y Œw xY w­wrì   r)  r*  s     rU   Ú	iteritemszTableBase.iteritems�  s<   è ø€ Øò 	ˆCðØ˜D ™IÐ&Ó&ñ	øô ò Ùðüs   ‚$‰	’$•	!ž$ !¡$c                 óH   — | j                  «       D �cg c]  }|‘Œ c}S c c}w rì   )r-  )rô   Úitems     rU   ÚitemszTableBase.items–  s   € Ø!%§¡Ó!1Ö2˜’Ò2Ð2ùÒ2ó   “	c                 óH   — | j                  «       D �cg c]  }|‘Œ c}S c c}w rì   ©r+  ©rô   rþ   s     rU   ÚvalueszTableBase.values™  ó   € Ø#'§?¡?Ó#4Ö5˜%’Ò5Ð5ùÒ5r1  c                 óP   — | j                  «       D ]  }| j                  |«       Œ y rì   )Úkeysr'  ©rô   Úks     rU   ÚclearzTableBase.clearœ  s%   € à—‘“ò 	 ˆAØ×Ñ˜QÕñ	 rW   c                 ó&  — dx}}|s|st        j                  d«      ddfS |s| j                  }n|dk  s|| j                  kD  rt        d«      ‚|r | j                  |z  «       }|r | j
                  |z  «       }t        j                  |«      ||fS )aá  Allocate keys and/or values arrays. Useful for in items_*_batch.

        Args:
            alloc_k (bool): True to allocate keys array, False otherwise.
            Default is False.
            alloc_v (bool): True to allocate values array, False otherwise.
            Default is False.
            count (int): number of elements in the array(s) to allocate. If
            count is None then it allocates the maximum number of elements i.e
            self.max_entries.

        Returns:
            tuple: (count, keys, values). Where count is ct.c_uint32,
            and keys and values an instance of ct.Array
        Raises:
            ValueError: If count is less than 1 or greater than
            self.max_entries.
        Nr   r   zWrong count)r“   Úc_uint32ró   Ú
ValueErrorrí   rî   )rô   Úalloc_kÚalloc_vr_   r8  r5  s         rU   Ú_alloc_keys_valueszTableBase._alloc_keys_values¡  s—   € ð& ÐˆˆvÙ™wÜ—K‘K “N D¨$Ð/Ð/áØ×$Ñ$‰EØ�QŠY˜% $×"2Ñ"2Ò2Ü˜]Ó+Ð+áØ$�D—H‘H˜uÑ$Ó'ˆDÙØ'�d—i‘i %Ñ'Ó*ˆFä—‘˜EÓ" D¨&Ð1Ð1rW   c                 ó(  — d}||fD ]O  }|sŒt        |t        j                  «      st        ‚t	        |«      }|dk  s|| j
                  kD  sŒFt        d«      ‚ |r$|r"t	        |«      t	        |«      k7  rt        d«      ‚t        j                  |«      S )aò  Check if the given keys or values have the right type and size.

        Args:
            keys (ct.Array): keys array to check
            values (ct.Array): values array to check
        Returns:
            ct.c_uint32 : the size of the array(s)
        Raises:
            ValueError: If length of arrays is less than 1 or greater than
            self.max_entries, or when both arrays length are different.
            TypeError: If the keys and values are not an instance of ct.Array
        r   r   zArray's length is wrongz(keys array length != values array length)Ú
isinstancer“   r¾   Ú	TypeErrorrc   ró   r>  r=  )rô   r8  r5  Úarr_lenÚelems        rU   Ú_sanity_check_keys_valuesz#TableBase._sanity_check_keys_valuesÄ  s�   € ð ˆØ˜6�Nò 	@ˆDÚÜ! $¬¯©Ô1Ü#�Oä˜d›)�Ø˜Q’; '¨D×,<Ñ,<Ó"<Ü$Ð%>Ó?Ð?ð	@ñ ‘Fä�4‹yœC ›KÒ'Ü Ð!KÓLÐLä�{‰{˜7Ó#Ð#rW   c              #   óL   K  — | j                  d¬«      D ]  \  }}||f–— Œ y­w)a  Look up all the key-value pairs in the map.

        Args:
            None
        Yields:
            tuple: The tuple of (key,value) for every entries that have
            been looked up.
        Notes: lookup batch on a keys subset is not supported by the kernel.
        F©ÚdeleteN©Ú)_items_lookup_and_optionally_delete_batch©rô   r:  ru   s      rU   Úitems_lookup_batchzTableBase.items_lookup_batchâ  s5   è ø€ ð ×BÑBÈ%ÐBÓPò 	‰DˆAˆqØ�Q�‹Kð	àùó   ‚"$c                 óX  — |�’| j                  |¬«      }t        j                  | j                  t	        j
                  |«      t	        j
                  |«      «      }|dk7  r3t        dt        j                  t	        j                  «       «      z  «      ‚y| j                  «       D ]  } y y)a¨  Delete the key-value pairs related to the keys given as parameters.
        Note that if no key are given, it is faster to call
        lib.bpf_lookup_and_delete_batch than create keys array and then call
        lib.bpf_delete_batch on these keys.

        Args:
            ct_keys (ct.Array): keys array to delete. If an array of keys is
            given then it deletes all the related keys-values.
            If keys is None (default) then it deletes all entries.
        Yields:
            tuple: The tuple of (key,value) for every entries that have
            been deleted.
        Raises:
            Exception: If bpf syscall return value indicates an error.
        N)r8  r   z#BPF_MAP_DELETE_BATCH has failed: %s)rG  r   Úbpf_delete_batchrâ   r“   rý   rà   r   r!  r"  Úitems_lookup_and_delete_batch)rô   Úct_keysÚct_cntr  Ú_s        rU   Úitems_delete_batchzTableBase.items_delete_batchð  s�   € ð  ÐØ×3Ñ3¸Ð3ÓAˆFÜ×&Ñ& t§{¡{Ü')§x¡x°Ó'8Ü')§x¡x°Ó'7ó)ˆCð �q’ÜÐ EÜ"$§+¡+¬b¯l©l«nÓ"=ñ!>ó ?ð ?ð ð
 ×7Ñ7Ó9ò �ÙñrW   c                 óP  — | j                  ||¬«      }t        j                  | j                  t	        j
                  |«      t	        j
                  |«      t	        j
                  |«      «      }|dk7  r3t        dt        j                  t	        j                  «       «      z  «      ‚y)aq  Update all the key-value pairs in the map provided.
        The arrays must be the same length, between 1 and the maximum number
        of entries.

        Args:
            ct_keys (ct.Array): keys array to update
            ct_values (ct.Array): values array to update
        Raises:
            Exception: If bpf syscall return value indicates an error.
        )r8  r5  r   z#BPF_MAP_UPDATE_BATCH has failed: %sN)
rG  r   Úbpf_update_batchrâ   r“   rý   rà   r   r!  r"  )rô   rS  Ú	ct_valuesrT  r  s        rU   Úitems_update_batchzTableBase.items_update_batch  sˆ   € ð ×/Ñ/°WÀYÐ/ÓOˆÜ×"Ñ" 4§;¡;Ü#%§8¡8¨GÓ#4Ü#%§8¡8¨IÓ#6Ü#%§8¡8¨FÓ#3ó%ˆð
 �1ŠHÜÐAÜ Ÿk™k¬"¯,©,«.Ó9ñ:ó ;ð ;ð rW   c              #   óL   K  — | j                  d¬«      D ]  \  }}||f–— Œ y­w)a?  Look up and delete all the key-value pairs in the map.

        Args:
            None
        Yields:
            tuple: The tuple of (key,value) for every entries that have
            been looked up and deleted.
        Notes: lookup and delete batch on a keys subset is not supported by
        the kernel.
        TrI  NrK  rM  s      rU   rR  z'TableBase.items_lookup_and_delete_batch#  s5   è ø€ ð ×BÑBÈ$ÐBÓOò 	‰DˆAˆqØ�Q�‹Kð	àùrO  c              #   óZ  K  — |du rt         j                  }d}nt         j                  }d}| j                  dd¬«      \  }}}t	        j
                  d«      x}}d}		 |j                  |	z
  |_         || j                  |	rt	        j                  |«      ndt	        j                  |«      t	        j                  |t	        j                  | j                  «      |	z  «      t	        j                  |t	        j                  | j                  «      |	z  «      t	        j                  |«      «      }
t	        j                  «       }|	|j                  z  }	|
dk7  r6|t        j                  k7  r#t        |›dt!        j"                  |«      ›�«      ‚|
dk7  rn"|	|j                  k(  rn|j                  dk(  rn�ŒVt%        d|	«      D ]h  }||   }||   }t'        |t        j(                  «      s| j                  |«      }t'        |t        j(                  «      s| j                  |«      }||f–— Œj y­w)aý  Look up and optionally delete all the key-value pairs in the map.

        Args:
            delete (bool) : look up and delete the key-value pairs when True,
            else just look up.
        Yields:
            tuple: The tuple of (key,value) for every entries that have
            been looked up and deleted.
        Raises:
            Exception: If bpf syscall return value indicates an error.
        Notes: lookup and delete batch on a keys subset is not supported by
        the kernel.
        TÚBPF_MAP_LOOKUP_AND_DELETE_BATCHÚBPF_MAP_LOOKUP_BATCH)r?  r@  r   Nz has failed: )r   Úbpf_lookup_and_delete_batchÚbpf_lookup_batchrA  r“   r=  rþ   râ   rý   rû   rí   rî   r"  ÚerrnoÚENOENTrà   r   r!  rb   rC  r®   )rô   rJ  Ú	bpf_batchÚbpf_cmdÚct_buf_sizerS  rY  Úct_out_batchrT  Útotalr  ÚerrcoderS   r:  ru   s                  rU   rL  z3TableBase._items_lookup_and_optionally_delete_batch2  sã  è ø€ ð �T‰>Ü×7Ñ7ˆIØ7‰Gä×,Ñ,ˆIØ,ˆGð +/×*AÑ*AÈ$ØJNð +Bó +PÑ'ˆ�W˜iä "§¡¨A£Ð.ˆ�vØˆØØ&×,Ñ,¨uÑ4ˆFŒLÙ˜DŸK™KÙ6;œBŸH™H \Ô2ÀÜŸH™H \Ó2ÜŸH™H W¬b¯i©i¸¿¹Ó.AÀEÑ.IÓJÜŸH™H Y´·	±	¸$¿)¹)Ó0DÀuÑ0LÓMÜŸH™H VÓ,óˆCô —l‘l“nˆGØ�V—\‘\Ñ!ˆEØ�q’˜W¬¯©Ò4Ü²wÜ79·{±{À7Ô7Kð!Mó Nð Nð �aŠxØà˜×)Ñ)Ò)Øà�|‰|˜qÒ ð ñ1 ô4 �q˜%“ò 	ˆAØ˜‘
ˆAØ˜!‘ˆAÜ˜a¤§¡Ô.Ø—H‘H˜Q“K�Ü˜a¤§¡Ô.Ø—I‘I˜a“L�Ø�a�&‹Lñ	ùs   ‚H)H+c                 óf   — t        | j                  «       «      D ]  }| j                  «       | |<   Œ y rì   )Úlistr8  rî   r9  s     rU   ÚzerozTableBase.zeroo  s-   € ô
 �d—i‘i“kÓ"ò 	"ˆAØ—i‘i“kˆD�ŠGñ	"rW   c                 ó,   — t         j                  | «      S rì   )rê   ÚIterr÷   s    rU   Ú__iter__zTableBase.__iter__w  s   € Ü�~‰~˜dÓ#Ð#rW   c                 ó"   — | j                  «       S rì   ©rn  r÷   s    rU   ÚiterzTableBase.iterz  ó   € ˜4Ÿ=™=›?Ð*rW   c                 ó"   — | j                  «       S rì   rp  r÷   s    rU   r8  zTableBase.keys{  rr  rW   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)úTableBase.Iterc                 ó    — || _         d | _        y rì   )Útablerÿ   )rô   rw  s     rU   rõ   zTableBase.Iter.__init__~  s   € ØˆDŒJØˆD�HrW   c                 ó   — | S rì   rO   r÷   s    rU   rn  zTableBase.Iter.__iter__�  ó   € ØˆKrW   c                 ó"   — | j                  «       S rì   ©Únextr÷   s    rU   Ú__next__zTableBase.Iter.__next__ƒ  ó   € Ø—9‘9“;ÐrW   c                 ón   — | j                   j                  | j                  «      | _        | j                  S rì   )rw  r|  rÿ   r÷   s    rU   r|  zTableBase.Iter.next…  s#   € Ø—z‘z—‘ t§x¡xÓ0ˆDŒHØ—8‘8ˆOrW   N©Ú__name__Ú
__module__Ú__qualname__rõ   rn  r}  r|  rO   rW   rU   rm  ru  }  s   „ ò	ò	ò	ó	rW   rm  c                 óz  — | j                  «       }|€Rt        j                  | j                  t	        j
                  |«      t	        j                  | j                   «      «      }nGt        j                  | j                  t	        j
                  |«      t	        j
                  |«      «      }|dk  r
t        «       ‚|S r  )	rí   r   Úbpf_get_first_keyrâ   r“   rý   rû   Úbpf_get_next_keyÚStopIteration)rô   rÿ   Únext_keyr  s       rU   r|  zTableBase.next‰  s‡   € Ø—8‘8“:ˆàˆ;Ü×'Ñ'¨¯©´R·X±X¸hÓ5GÜ(*¯	©	°$·(±(Ó(;ó=‰Cô ×&Ñ& t§{¡{´B·H±H¸S³MÜ')§x¡x°Ó'9ó;ˆCð �Š7Ü“/Ð!ØˆrW   c                 ó8  — | j                   j                  d   d   }| j                   j                  d   d   }|dk(  r>t        | j                   j                  «      dk(  r| j                   j                  d   d   }| j                  «       D ]Q  \  }}	t	        ||«      }
|r ||
«      }
|j                  |
dg|z  «      x}||
<   t	        ||«      }|	j                  ||<   ŒS t        |j                  «       «      }|r ||«      }|D ]  }
|j                  |
«       Œ y )Nr   r   Ú__pad_1r   r   )
rí   r’   rc   r0  ÚgetattrÚgetrþ   rj  r8  re   )rô   ÚtmpÚbucketsÚ	bucket_fnÚbucket_sort_fnÚ	index_maxÚf1Úf2r:  ru   Úbucketr[   ÚslotÚbuckets_lsts                 rU   Údecode_c_structzTableBase.decode_c_struct—  s  € Ø�X‰X×Ñ˜qÑ! !Ñ$ˆØ�X‰X×Ñ˜qÑ! !Ñ$ˆð �Š?œs 4§8¡8×#4Ñ#4Ó5¸Ò:Ø—‘×"Ñ" 1Ñ% aÑ(ˆBØ—J‘J“Lò 	!‰DˆAˆqÜ˜Q “^ˆFÙÙ" 6Ó*�Ø!$§¡¨°!°°y±Ó!AÐAˆD�3�v‘;Ü˜1˜b“>ˆDØŸ™ˆD�ŠJð	!ô ˜3Ÿ8™8›:Ó&ˆÙÙ(¨Ó5ˆKØ!ò 	#ˆFØ�N‰N˜6Õ"ñ	#rW   c                 óŒ  — t        | j                  «       t        j                  «      rLi }g }| j	                  ||||«       |D ].  }||   }	|r| ||«      f}
n||f}
t        t        |	||
«      «       Œ0 ydgt        z  }	| j                  «       D ]  \  }}|j                  |	|j                  <   Œ  t        t        |	|«      «       y)a.  print_json_hist(val_type="value", section_header="Bucket ptr",
                                   section_print_fn=None, bucket_fn=None,
                                   bucket_sort_fn=None):

                Prints a table as a json histogram. The table must be stored as
                log2. The val_type argument is optional, and is a column header.
                If the histogram has a secondary key, the dictionary will be split by secondary key
                If section_print_fn is not None, it will be passed the bucket value
                to format into a string as it sees fit. If bucket_fn is not None,
                it will be used to produce a bucket value for the histogram keys.
                If bucket_sort_fn is not None, it will be used to sort the buckets
                before iterating them, and it is useful when there are multiple fields
                in the secondary key.
                The maximum index allowed is log2_index_max (65), which will
                accommodate any 64-bit integer in the histogram.
                r   N)
rC  rí   r“   r®   r—  rq   rZ   Úlog2_index_maxr0  rþ   )rô   r\   Úsection_headerÚsection_print_fnr�  r�  r�  rŽ  r”  r[   rY   r:  ru   s                rU   Úprint_json_histzTableBase.print_json_hist®  sÅ   € ô$ �d—h‘h“j¤"§,¡,Ô/ØˆCØˆGØ× Ñ   g¨y¸.ÔIØ!ò F�Ø˜6‘{�Ù#Ø&4Ñ6FÀvÓ6NÐ%O‘Nà&4°fÐ%=�NÜ”n T¨8°^ÓDÕEñFð �3œÑ'ˆDØŸ
™
›ò (‘��1Ø !§¡��Q—W‘W’ð(ä”.  xÓ0Õ1rW   c           	      óž  — t        | j                  «       t        j                  «      r]i }g }| j	                  ||||«       |D ]?  }	||	   }
|rt        d|›d ||	«      ›�«       nt        d|›d|	›�«       t        |
||«       ŒA ydgt        z  }
| j                  «       D ]  \  }}|j                  |
|j                  <   Œ  t        |
||«       y)a“  print_log2_hist(val_type="value", section_header="Bucket ptr",
                           section_print_fn=None, bucket_fn=None,
                           strip_leading_zero=None, bucket_sort_fn=None):

        Prints a table as a log2 histogram. The table must be stored as
        log2. The val_type argument is optional, and is a column header.
        If the histogram has a secondary key, multiple tables will print
        and section_header can be used as a header description for each.
        If section_print_fn is not None, it will be passed the bucket value
        to format into a string as it sees fit. If bucket_fn is not None,
        it will be used to produce a bucket value for the histogram keys.
        If the value of strip_leading_zero is not False, prints a histogram
        that is omitted leading zeros from the beginning.
        If bucket_sort_fn is not None, it will be used to sort the buckets
        before iterating them, and it is useful when there are multiple fields
        in the secondary key.
        The maximum index allowed is log2_index_max (65), which will
        accommodate any 64-bit integer in the histogram.
        ú
ú = r   N)
rC  rí   r“   r®   r—  rq   r{   r™  r0  rþ   ©rô   r\   rš  r›  r�  rr   r�  r�  rŽ  r”  r[   r:  ru   s                rU   Úprint_log2_histzTableBase.print_log2_histÒ  sË   € ô, �d—h‘h“j¤"§,¡,Ô/ØˆCØˆGØ× Ñ   g¨y¸.ÔIØ!ò E�Ø˜6‘{�Ù#ÝªÙ(¨Ô0ð2õ 3õ ª¹Ð@ÔAÜ   xÐ1CÕDñEð �3œÑ'ˆDØŸ
™
›ò (‘��1Ø !§¡��Q—W‘W’ð(ä˜T 8Ð-?Õ@rW   c           	      ó   — t        | j                  «       t        j                  «      rbi }g }| j	                  ||||t
        «       |D ]?  }	||	   }
|rt        d|›d ||	«      ›�«       nt        d|›d|	›�«       t        |
||«       ŒA ydgt
        z  }
| j                  «       D ]  \  }}	 |j                  |
|j                  <   Œ! t        |
||«       y# t        $ r t        d|j                  t
        fz  «      ‚w xY w)a¶  print_linear_hist(val_type="value", section_header="Bucket ptr",
                           section_print_fn=None, bucket_fn=None,
                           strip_leading_zero=None, bucket_sort_fn=None)

        Prints a table as a linear histogram. This is intended to span integer
        ranges, eg, from 0 to 100. The val_type argument is optional, and is a
        column header.  If the histogram has a secondary key, multiple tables
        will print and section_header can be used as a header description for
        each.  If section_print_fn is not None, it will be passed the bucket
        value to format into a string as it sees fit. If bucket_fn is not None,
        it will be used to produce a bucket value for the histogram keys.
        If the value of strip_leading_zero is not False, prints a histogram
        that is omitted leading zeros from the beginning.
        If bucket_sort_fn is not None, it will be used to sort the buckets
        before iterating them, and it is useful when there are multiple fields
        in the secondary key.
        The maximum index allowed is linear_index_max (1025), which is hoped
        to be sufficient for integer ranges spanned.
        rž  rŸ  r   z5Index in print_linear_hist() of %d exceeds max of %d.N)rC  rí   r“   r®   r—  Úlinear_index_maxrq   r}   r0  rþ   Ú
IndexErrorr   s                rU   Úprint_linear_histzTableBase.print_linear_histú  s  € ô, �d—h‘h“j¤"§,¡,Ô/ØˆCØˆGØ× Ñ   g¨y¸.ÔJZÔ[à!ò G�Ø˜6‘{�Ù#ÝªÙ(¨Ô0ð2õ 3õ ª¹Ð@ÔAÜ" 4¨Ð3EÕFñGð �3Ô)Ñ)ˆDØŸ
™
›ò M‘��1ðMØ$%§G¡G�D˜Ÿ™’MðMô ˜t XÐ/AÕBøô "ò Mô %ð '-Ø12·±Ô:JÐ0Kñ&Ló Mð MðMús   Â,CÃ(C=rì   )FFN)NN)T)rþ   ú
Bucket ptrNNN)rþ   r¦  NNNN)$r�  r‚  rƒ  rõ   rø   r  r	  r  r  r  r$  r'  r+  r-  r0  r5  r;  rA  rG  rN  rV  rZ  rR  rL  rk  rn  rq  r8  Úobjectrm  r|  r™  r—  rœ  r¡  r¥  rO   rW   rU   rê   rê   @  sÔ   „ óòòòòòòòCòòòò3ò6ò ó
!2óF$ò<óò<;ò*ó;òz"ò$ò +Ú*ô
ˆvô 
òð R`ó #ð. @LØNRó"2ðH @LØFJØó&AðP BNØFJØô-CrW   rê   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r¼   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )Úsuperr¼   rõ   ©rô   Úargsræ   Ú	__class__s      €rU   rõ   zHashTable.__init__+  ó   ø€ ÜŒi˜Ñ'¨Ð8°Ó8rW   c                 ó"   — d}| D ]  }|dz  }Œ	 |S ©Nr   r   rO   ©rô   rS   r:  s      rU   Ú__len__zHashTable.__len__.  ó   € ØˆØÒˆA�q˜A‘v‘qÐØˆrW   ©r�  r‚  rƒ  rõ   r²  Ú__classcell__©r­  s   @rU   r¼   r¼   *  s   ø„ ô9örW   r¼   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rÌ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÌ   rõ   r«  s      €rU   rõ   zLruHash.__init__4  ó   ø€ ÜŒg�tÑ% tÐ6¨vÓ6rW   ©r�  r‚  rƒ  rõ   rµ  r¶  s   @rU   rÌ   rÌ   3  s   ø„ ÷7ð 7rW   rÌ   c                   ój   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zd„ Z	d„ Z
 G d	„ d
e«      Zˆ xZS )Ú	ArrayBasec                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  r¼  rõ   r«  s      €rU   rõ   zArrayBase.__init__8  r®  rW   c                 óþ   — t        |t        «      r$|dk  rt        | «      |z   }| j                  |«      }t        |t        j
                  «      st        d«      ‚|j                  t        | «      k\  rt        d«      ‚|S )Nr   z#Array index must be an integer typezArray index out of range)rC  rd   rc   rí   r“   Ú_SimpleCDatar¤  rþ   r*  s     rU   Ú_normalize_keyzArrayBase._normalize_key;  sh   € Ü�cœ3ÔØ�QŠwÜ˜$“i #‘o�Ø—(‘(˜3“-ˆCÜ˜#œrŸ™Ô/ÜÐBÓCÐCØ�9‰9œ˜D›	Ò!ÜÐ7Ó8Ð8Øˆ
rW   c                 ó   — | j                   S rì   )ró   r÷   s    rU   r²  zArrayBase.__len__F  s   € Ø×ÑÐrW   c                 óL   •— | j                  |«      }t        t        | �  |«      S rì   )rÀ  rª  r¼  r  ©rô   rÿ   r­  s     €rU   r  zArrayBase.__getitem__I  s%   ø€ Ø×!Ñ! #Ó&ˆÜ”Y Ñ1°#Ó6Ð6rW   c                 óP   •— | j                  |«      }t        t        | �  ||«       y rì   )rÀ  rª  r¼  r$  ©rô   rÿ   r  r­  s      €rU   r$  zArrayBase.__setitem__M  s$   ø€ Ø×!Ñ! #Ó&ˆÜŒi˜Ñ*¨3°Õ5rW   c                 óN   •— | j                  |«      }t        t        | �  |«       y rì   )rÀ  rª  r¼  r'  rÃ  s     €rU   r'  zArrayBase.__delitem__Q  s"   ø€ Ø×!Ñ! #Ó&ˆÜŒi˜Ñ*¨3Õ/rW   c                 óö   — | j                  |«      }| j                  «       }t        j                  | j                  t        j                  |«      t        j                  |«      d«      }|dk  rt        d«      ‚y )Nr   zCould not clear item)rÀ  rî   r   r  râ   r“   rý   rà   r  s       rU   Ú	clearitemzArrayBase.clearitemU  s_   € Ø×!Ñ! #Ó&ˆØ�y‰y‹{ˆÜ×!Ñ! $§+¡+¬r¯x©x¸«}¼b¿h¹hÀt»nÈaÓPˆØ�Š7ÜÐ2Ó3Ð3ð rW   c                 óB   — t         j                  | | j                  «      S rì   )r¼  rm  rí   r÷   s    rU   rn  zArrayBase.__iter__\  s   € Ü�~‰~˜d D§H¡HÓ-Ð-rW   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)úArrayBase.Iterc                 ó.   — || _         || _        d| _        y ©NrM   )rí   rw  rS   )rô   rw  rã   s      rU   rõ   zArrayBase.Iter.__init__`  s   € ØˆDŒHØˆDŒJØˆD�FrW   c                 ó   — | S rì   rO   r÷   s    rU   rn  zArrayBase.Iter.__iter__e  ry  rW   c                 ó"   — | j                  «       S rì   r{  r÷   s    rU   r}  zArrayBase.Iter.__next__g  r~  rW   c                 óº   — | xj                   dz  c_         | j                   t        | j                  «      k(  r
t        «       ‚| j	                  | j                   «      S ©Nr   )rS   rc   rw  r‡  rí   r÷   s    rU   r|  zArrayBase.Iter.nexti  s>   € Ø�FŠF�a‰K�FØ�v‰vœ˜TŸZ™Z›Ò(Ü#“oÐ%Ø—8‘8˜DŸF™FÓ#Ð#rW   Nr€  rO   rW   rU   rm  rË  _  s   „ ò	ò
	ò	ó	$rW   rm  )r�  r‚  rƒ  rõ   rÀ  r²  r  r$  r'  rÈ  rn  r§  rm  rµ  r¶  s   @rU   r¼  r¼  7  s<   ø„ ô9ò	ò ô7ô6ô0ò4ò.ô$ˆv÷ $ð $rW   r¼  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r¾   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  r¾   rõ   r«  s      €rU   rõ   zArray.__init__p  s   ø€ ÜŒe�TÑ# TÐ4¨VÓ4rW   c                 ó&   — | j                  |«       y rì   ©rÈ  r*  s     rU   r'  zArray.__delitem__s  ó   € à�‰�sÕrW   )r�  r‚  rƒ  rõ   r'  rµ  r¶  s   @rU   r¾   r¾   o  s   ø„ ô5örW   r¾   c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )rÀ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÀ   rõ   r«  s      €rU   rõ   zProgArray.__init__x  r®  rW   c                 óæ   •— t        |t        «      r| j                  |«      }t        || j                  j                  «      r| j                  |j
                  «      }t        t        | �#  ||«       y rì   )	rC  rd   rî   r£   ÚFunctionÚfdrª  rÀ   r$  rÅ  s      €rU   r$  zProgArray.__setitem__{  sQ   ø€ Ü�dœCÔ Ø—9‘9˜T“?ˆDÜ�d˜DŸH™H×-Ñ-Ô.Ø—9‘9˜TŸW™WÓ%ˆDÜŒi˜Ñ*¨3°Õ5rW   ©r�  r‚  rƒ  rõ   r$  rµ  r¶  s   @rU   rÀ   rÀ   w  s   ø„ ô9÷6ð 6rW   rÀ   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚFileDescc                 ó6   — |�|dk  rt        d«      ‚|| _        y )Nr   zInvalid file descriptor)rà   rÛ  )rô   rÛ  s     rU   rõ   zFileDesc.__init__ƒ  s    € ØˆJ˜B šFÜÐ5Ó6Ð6Øˆ�rW   c                 óŠ   — | j                   �7| j                   dk\  r't        j                  | j                   «       d | _         y y y r  )rÛ  r   Úcloser÷   s    rU   Úclean_upzFileDesc.clean_upˆ  s5   € Ø�G‰GÐ d§g¡g°¢lÜ�H‰H�T—W‘WÔØˆD�Gð '3ÐrW   c                 ó$   — | j                  «        y rì   ©râ  r÷   s    rU   Ú__del__zFileDesc.__del__�  ó   € Ø�‰�rW   c                 ó   — | S rì   rO   ©rô   r¬  ræ   s      rU   Ú	__enter__zFileDesc.__enter__�  s   € ØˆrW   c                 ó$   — | j                  «        y rì   rä  rè  s      rU   Ú__exit__zFileDesc.__exit__“  ræ  rW   N)r�  r‚  rƒ  rõ   râ  rå  ré  rë  rO   rW   rU   rÞ  rÞ  ‚  s   „ òò
ò
òórW   rÞ  c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )rÐ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÐ   rõ   r«  s      €rU   rõ   zCgroupArray.__init__—  s   ø€ ÜŒk˜4Ñ)¨4Ð:°6Ó:rW   c                 ó‚  •— t        |t        «      r$t        t        | �  || j                  |«      «       y t        |t        «      rdt        t        j                  |t        j                  «      «      5 }t        t        | �  || j                  |j                  «      «       d d d «       y t        d«      ‚# 1 sw Y   y xY w)Nz1Cgroup array key must be either FD or cgroup path)rC  rd   rª  rÐ   r$  rî   ÚstrrÞ  r   ÚopenÚO_RDONLYrÛ  rà   )rô   rÿ   r  Úfr­  s       €rU   r$  zCgroupArray.__setitem__š  s“   ø€ Ü�dœCÔ Ü”+˜tÑ0°°d·i±iÀ³oÕFÜ˜œcÔ"äœ"Ÿ'™' $¬¯©Ó4Ó5ð K¸Ü”k 4Ñ4°S¸$¿)¹)ÀAÇDÁD»/ÔJ÷Kð Kô ÐOÓPÐP÷Kð Kús   Á3.B5Â5B>rÜ  r¶  s   @rU   rÐ   rÐ   –  s   ø„ ô;÷Qð QrW   rÐ   c                   óR   ‡ — e Zd Zˆ fd„Zd„ Zˆ fd„Zd„ Zd	d„Zd„ Zd
d„Z	d
d„Z
ˆ xZS )rÂ   c                 óH   •— t        t        | �
  |i |¤Ž i | _        d | _        y rì   )rª  rÂ   rõ   Ú_open_key_fdsÚ_event_classr«  s      €rU   rõ   zPerfEventArray.__init__¦  s'   ø€ ÜŒn˜dÑ,¨dÐ=°fÒ=ØˆÔØ ˆÕrW   c                 ó^   — t        | j                  j                  «       «      }|D ]  }| |= Œ y rì   )rj  rõ  r8  )rô   r8  rÿ   s      rU   rå  zPerfEventArray.__del__«  s1   € Ü�D×&Ñ&×+Ñ+Ó-Ó.ˆØò 	ˆCØ�S‘	ñ	rW   c                 ó”  •— || j                   vry t        t        | �  |«       t	        | «      |f}|| j
                  j                  v rQt        j                  | j
                  j                  |   «       | j
                  j                  |= | j                  |= n"t        j                  | j                   |   «       | j                   |= y rì   )rõ  rª  rÂ   r'  Úidr£   Úperf_buffersr   Úperf_reader_freerñ   Úbpf_close_perf_event_fd)rô   rÿ   Úkey_idr­  s      €rU   r'  zPerfEventArray.__delitem__°  s¥   ø€ Ø�d×(Ñ(Ñ(ØäŒn˜dÑ/°Ô4Ü�T“(˜C�ˆØ�T—X‘X×*Ñ*Ñ*ä× Ñ  §¡×!6Ñ!6°vÑ!>Ô?Ø—‘×%Ñ% fÐ-Ø—	‘	˜#‘ô ×'Ñ'¨×(:Ñ(:¸3Ñ(?Ô@Ø×Ñ˜sÑ#rW   c                 óº   — | j                   dk(  rt        | «      | _         t        j                  |t        j                  | j                   «      «      j
                  S )a	  event(data)

        When perf buffers are opened to receive custom perf event,
        the underlying event data struct which is defined in C in
        the BPF program can be deduced via this function. This avoids
        redundant definitions in Python.
        N©rö  r¸   r“   ÚcastÚPOINTERÚcontents©rô   ra   s     rU   ÚeventzPerfEventArray.eventÀ  óE   € ð ×Ñ Ò$Ü 0°Ó 6ˆDÔÜ�w‰w�tœRŸZ™Z¨×(9Ñ(9Ó:Ó;×DÑDÐDrW   c                 óx   — ||dz
  z  dk7  rt        d«      ‚t        «       D ]  }| j                  |||||«       Œ y)az  open_perf_buffers(callback)

        Opens a set of per-cpu ring buffer to receive custom perf event
        data from the bpf program. The callback will be invoked for each
        event submitted from the kernel, up to millions per second. Use
        page_cnt to change the size of the per-cpu ring buffer. The value
        must be a power of two and defaults to 8.
        r   r   z+Perf buffer page_cnt must be a power of twoN)rà   r   Ú_open_perf_buffer)rô   ÚcallbackÚpage_cntÚlost_cbÚwakeup_eventsrS   s         rU   Úopen_perf_bufferzPerfEventArray.open_perf_bufferÌ  sK   € ð �x !‘|Ñ$¨Ò)ÜÐIÓJÐJä Ó"ò 	RˆAØ×"Ñ" 1 h°¸'À=ÕQñ	RrW   c           	      ó,  ‡‡‡— ˆˆfd„}ˆfd„}t        |«      }‰rt        |«      nt        j                  d t        «      }	t	        «       }
d|
_        ‰|
_        ||
_        t        j                  ||	d |t        j                  |
«      «      }|st        d«      ‚t        j                  |«      }| j                  |«      | | j                  ‰«      <   || j                  j                   t#        | «      ‰f<   ||	f| j$                  ‰<   d| j&                  ‰<   y )Nc                 óœ   •— 	  ‰‰||«       y # t         $ r4}|j                  t        j                  k(  rt        «        n|‚Y d }~y d }~ww xY wrì   ©ÚIOErrorra  ÚEPIPEr¬   )rU  ra   ÚsizeÚer  Úcpus       €€rU   Úraw_cb_z1PerfEventArray._open_perf_buffer.<locals>.raw_cb_Ý  sC   ø€ ðÙ˜˜d DÕ)øÜò Ø—7‘7œeŸk™kÒ)Ü•Fà�Gô ûðús   ƒ
 Ž	A—*AÁAc                 ó˜   •— 	  ‰|«       y # t         $ r4}|j                  t        j                  k(  rt        «        n|‚Y d }~y d }~ww xY wrì   r  )rU  Úlostr  r
  s      €rU   Úlost_cb_z2PerfEventArray._open_perf_buffer.<locals>.lost_cb_å  s>   ø€ ðÙ˜•øÜò Ø—7‘7œeŸk™kÒ)Ü•Fà�Gô ûðús   ƒ Œ	A	•*AÁA	rM   zCould not open perf buffer)r	   r
   r“   r   r   Úpidr  r  r   Úbpf_open_perf_buffer_optsrý   rà   Úperf_reader_fdrî   rí   r£   rú  rù  rñ   rõ  )rô   r  r  r	  r
  r  r  r  ÚfnÚlost_fnÚoptsÚreaderrÛ  s    `` `        rU   r  z PerfEventArray._open_perf_bufferÜ  sç   ú€ õ	ô	ô ˜'Ó"ˆÙ-4”- Ô)¼"¿'¹'À$ÌÓ:VˆÜ#Ó%ˆØˆŒØˆŒØ*ˆÔÜ×.Ñ.¨r°7¸DÀ(ÌBÏHÉHÐUYËNÓ[ˆÙÜÐ8Ó9Ð9Ü×Ñ Ó'ˆØ"Ÿi™i¨›mˆˆT�X‰X�c‹]ÑØ17ˆ�‰×Ñœr $›x¨˜oÑ.à˜g˜ˆ�	‰	�#‰à"$ˆ×Ñ˜3ÒrW   c                 ó¸   — t        j                  ||||«      }|dk  rt        d«      ‚| j                  |«      | | j	                  |«      <   || j
                  |<   y )Nr   zbpf_open_perf_event failed)r   Úbpf_open_perf_eventrà   rî   rí   rõ  )rô   r  ÚtypÚconfigr  rÛ  s         rU   Ú_open_perf_eventzPerfEventArray._open_perf_eventþ  sU   € Ü×$Ñ$ S¨&°#°sÓ;ˆØ�Š6ÜÐ8Ó9Ð9Ø"Ÿi™i¨›mˆˆT�X‰X�c‹]ÑØ"$ˆ×Ñ˜3ÒrW   c                 óJ   — t        «       D ]  }| j                  ||||«       Œ y)zæopen_perf_event(typ, config)

        Configures the table such that calls from the bpf program to
        table.perf_read(CUR_CPU_IDENTIFIER) will return the hardware
        counter denoted by event ev on the local cpu.
        N)r   r$  )rô   r"  r#  r  rS   s        rU   Úopen_perf_eventzPerfEventArray.open_perf_event  s*   € ô !Ó"ò 	7ˆAØ×!Ñ! ! S¨&°#Õ6ñ	7rW   )r   Nr   )rM   )r�  r‚  rƒ  rõ   rå  r'  r  r  r  r$  r&  rµ  r¶  s   @rU   rÂ   rÂ   ¤  s.   ø„ ô!ò
ô
$ò 
EóRò  %óD%÷7rW   rÂ   c                   óJ   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zˆ fd„Zd„ Zd„ Zd„ Z	ˆ xZ
S )rÄ   c                 ój  •— |j                  dd «      | _        t        t        | �  |i |¤Ž | j
                  | _        t        t        «       «      | _	        t        j                  | j                  «      dz  | _        | j                  dk(  r| j                  | j                  z  | _        y | j                  t        j                  k(  r#t        j                  | j                  z  | _        y | j                  t        j                  k(  r#t        j                   | j                  z  | _        y t#        d«      ‚©NÚreducerr   r   zLeaf must be aligned to 8 bytes)Úpopr*  rª  rÄ   rõ   rî   ÚsLeafrc   r   Ú	total_cpur“   rû   Ú	alignmentrš   Úc_uint64r™   Úc_int64r¤  r«  s      €rU   rõ   zPerCpuHash.__init__  sÓ   ø€ Ø—z‘z )¨TÓ2ˆŒÜŒj˜$Ñ(¨$Ð9°&Ò9Ø—Y‘YˆŒ
ÜÔ.Ó0Ó1ˆŒäŸ™ 4§:¡:Ó.°Ñ2ˆŒØ�>‰>˜QÒØŸ
™
 T§^¡^Ñ3ˆD�Ið �z‰zœRŸY™YÒ&ÜŸK™K¨$¯.©.Ñ8�•	Ø—‘œrŸx™xÒ'ÜŸJ™J¨¯©Ñ7�•	ä Ð!BÓCÐCrW   c                 óÖ   •— t         t        | �  |«      }| j                  dk(  r|}|S  | j                  | j
                  z  «       }t        d| j
                  «      D ]
  }||   ||<   Œ |S r  )rª  rÄ   r  r.  r,  r-  rb   ©rô   rÿ   ÚresultÚretrS   r­  s        €rU   ÚgetvaluezPerCpuHash.getvalue#  sq   ø€ Ü”z 4Ñ4°SÓ9ˆØ�>‰>˜QÒØˆCð
 ˆ
ð /�4—:‘: §¡Ñ.Ó1ˆCÜ˜1˜dŸn™nÓ-ò #�Ø ™��A’ð#àˆ
rW   c                 ó†   — | j                   r%t        | j                   | j                  |«      «      S | j                  |«      S rì   ©r*  r   r5  r*  s     rU   r  zPerCpuHash.__getitem__-  s2   € Ø�<Š<Ü˜$Ÿ,™,¨¯©°cÓ(:Ó;Ð;à—=‘= Ó%Ð%rW   c                 ó.   •— t         t        | �  ||«       y rì   )rª  rÄ   r$  rÅ  s      €rU   r$  zPerCpuHash.__setitem__3  s   ø€ ÜŒj˜$Ñ+¨C°Õ6rW   c                 óº   — t        | j                  «       t        j                  «      rt	        d«      ‚| j                  t        | j                  |«      «      «      S ©Nz6Leaf must be an integer type for default sum functions©rC  rî   r“   r®   r¤  r,  Úsumr5  r*  s     rU   r<  zPerCpuHash.sum6  ó?   € Ü�d—i‘i“k¤2§<¡<Ô0ÜÐUÓVÐVØ�z‰zœ#˜dŸm™m¨CÓ0Ó1Ó2Ð2rW   c                 óº   — t        | j                  «       t        j                  «      rt	        d«      ‚| j                  t        | j                  |«      «      «      S ©Nz6Leaf must be an integer type for default max functions©rC  rî   r“   r®   r¤  r,  Úmaxr5  r*  s     rU   rA  zPerCpuHash.max;  r=  rW   c                 óV   — | j                  |«      }|j                  | j                  z  S rì   ©r<  rþ   r-  ©rô   rÿ   r3  s      rU   ÚaveragezPerCpuHash.average@  ó"   € Ø—‘˜#“ˆØ�|‰|˜dŸn™nÑ,Ð,rW   )r�  r‚  rƒ  rõ   r5  r  r$  r<  rA  rE  rµ  r¶  s   @rU   rÄ   rÄ     s'   ø„ ôDô$ò&ô7ò3ò
3ö
-rW   rÄ   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rÎ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÎ   rõ   r«  s      €rU   rõ   zLruPerCpuHash.__init__E  ó   ø€ ÜŒm˜TÑ+¨TÐ<°VÓ<rW   rº  r¶  s   @rU   rÎ   rÎ   D  ó   ø„ ÷=ð =rW   rÎ   c                   óP   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	rÆ   c                 ój  •— |j                  dd «      | _        t        t        | �  |i |¤Ž | j
                  | _        t        t        «       «      | _	        t        j                  | j                  «      dz  | _        | j                  dk(  r| j                  | j                  z  | _        y | j                  t        j                  k(  r#t        j                  | j                  z  | _        y | j                  t        j                  k(  r#t        j                   | j                  z  | _        y t#        d«      ‚r)  )r+  r*  rª  rÆ   rõ   rî   r,  rc   r   r-  r“   rû   r.  rš   r/  r™   r0  r¤  r«  s      €rU   rõ   zPerCpuArray.__init__I  sÓ   ø€ Ø—z‘z )¨TÓ2ˆŒÜŒk˜4Ñ)¨4Ð:°6Ò:Ø—Y‘YˆŒ
ÜÔ.Ó0Ó1ˆŒäŸ™ 4§:¡:Ó.°Ñ2ˆŒØ�>‰>˜QÒØŸ
™
 T§^¡^Ñ3ˆD�Ið �z‰zœRŸY™YÒ&ÜŸK™K¨$¯.©.Ñ8�•	Ø—‘œrŸx™xÒ'ÜŸJ™J¨¯©Ñ7�•	ä Ð!BÓCÐCrW   c                 óÖ   •— t         t        | �  |«      }| j                  dk(  r|}|S  | j                  | j
                  z  «       }t        d| j
                  «      D ]
  }||   ||<   Œ |S r  )rª  rÆ   r  r.  r,  r-  rb   r2  s        €rU   r5  zPerCpuArray.getvalue[  sq   ø€ Ü”{ DÑ5°cÓ:ˆØ�>‰>˜QÒØˆCð
 ˆ
ð /�4—:‘: §¡Ñ.Ó1ˆCÜ˜1˜dŸn™nÓ-ò #�Ø ™��A’ð#àˆ
rW   c                 ó†   — | j                   r%t        | j                   | j                  |«      «      S | j                  |«      S rì   r7  r*  s     rU   r  zPerCpuArray.__getitem__e  s2   € Ø�LŠLÜ˜$Ÿ,™,¨¯©°cÓ(:Ó;Ð;à—=‘= Ó%Ð%rW   c                 ó.   •— t         t        | �  ||«       y rì   )rª  rÆ   r$  rÅ  s      €rU   r$  zPerCpuArray.__setitem__k  s   ø€ ÜŒk˜4Ñ,¨S°$Õ7rW   c                 ó&   — | j                  |«       y rì   rÕ  r*  s     rU   r'  zPerCpuArray.__delitem__n  rÖ  rW   c                 óº   — t        | j                  «       t        j                  «      rt	        d«      ‚| j                  t        | j                  |«      «      «      S r:  r;  r*  s     rU   r<  zPerCpuArray.sumr  r=  rW   c                 óº   — t        | j                  «       t        j                  «      rt	        d«      ‚| j                  t        | j                  |«      «      «      S r?  r@  r*  s     rU   rA  zPerCpuArray.maxw  r=  rW   c                 óV   — | j                  |«      }|j                  | j                  z  S rì   rC  rD  s      rU   rE  zPerCpuArray.average|  rF  rW   )r�  r‚  rƒ  rõ   r5  r  r$  r'  r<  rA  rE  rµ  r¶  s   @rU   rÆ   rÆ   H  s,   ø„ ôDô$ò&ô8òò3ò
3ö
-rW   rÆ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rÈ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÈ   rõ   r«  s      €rU   rõ   zLpmTrie.__init__�  r¹  rW   c                 ó   — t         ‚rì   )ÚNotImplementedErrorr÷   s    rU   r²  zLpmTrie.__len__„  s   € Ü!Ð!rW   r´  r¶  s   @rU   rÈ   rÈ   €  s   ø„ ô7ö"rW   rÈ   c                   ó\   ‡ — e Zd ZdZdZdZdZdZˆ fd„Z G d„ de	«      Z
dd	„Zd
„ Zd„ Zˆ xZS )rÊ   é   rn   r   r   r   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÊ   rõ   r«  s      €rU   rõ   zStackTrace.__init__�  s   ø€ ÜŒj˜$Ñ(¨$Ð9°&Ó9rW   c                   ó&   — e Zd Zdd„Zd„ Zd„ Zd„ Zy)úStackTrace.StackWalkerNc                 ó<   — || _         d| _        || _        || _        y rÍ  )ÚstackÚnÚresolverð   )rô   r^  rð   r`  s       rU   rõ   zStackTrace.StackWalker.__init__“  s   € ØˆDŒJØˆDŒFØ"ˆDŒLØˆD�JrW   c                 ó   — | S rì   rO   r÷   s    rU   rn  zStackTrace.StackWalker.__iter__™  ry  rW   c                 ó"   — | j                  «       S rì   r{  r÷   s    rU   r}  zStackTrace.StackWalker.__next__œ  r~  rW   c                 ó$  — | xj                   dz  c_         | j                   t        j                  k(  r
t        «       ‚| j                  t        j
                  z  rg| j                  j                  | j                      }|j                  t        j                  k(  s|j                  t        j                  k(  r-t        «       ‚| j                  j                  | j                      }|dk(  r
t        «       ‚| j                  r| j                  |«      S |S )Nr   r   )r_  rÊ   Ú	MAX_DEPTHr‡  rð   ÚBPF_F_STACK_BUILD_IDr^  ÚtraceÚstatusÚBPF_STACK_BUILD_ID_IPÚBPF_STACK_BUILD_ID_EMPTYÚipr`  )rô   Úaddrs     rU   r|  zStackTrace.StackWalker.nextŸ  s¾   € Ø�FŠF�a‰K�FØ�v‰vœ×-Ñ-Ò-Ü#“oÐ%à�z‰zœJ×;Ñ;Ò;Ø—Z‘Z×%Ñ% d§f¡fÑ-ˆdØ—‘¤
× @Ñ @Ò@Ø—‘¤
× CÑ CÒCÜ%›Ð'à—Z‘Z—]‘] 4§6¡6Ñ*ˆdà�qŠyÜ#“oÐ%à)-¯ª�4—<‘< Ó%Ð?¸4Ð?rW   rì   r€  rO   rW   rU   ÚStackWalkerr\  ’  s   „ ó	ò	ò	ó	@rW   rl  c                 óh   — t         j                  | | j                  |«         | j                  |«      S rì   )rÊ   rl  rí   rð   )rô   Ústack_idr`  s      rU   ÚwalkzStackTrace.walk±  s)   € Ü×%Ñ% d¨4¯8©8°HÓ+=Ñ&>ÀÇ
Á
ÈGÓTÐTrW   c                 ó"   — d}| D ]  }|dz  }Œ	 |S r°  rO   r±  s      rU   r²  zStackTrace.__len__´  r³  rW   c                  ó   — y rì   rO   r÷   s    rU   r;  zStackTrace.clear¹  ó   € ØrW   rì   )r�  r‚  rƒ  rd  re  ri  ÚBPF_STACK_BUILD_ID_VALIDrh  rõ   r§  rl  ro  r²  r;  rµ  r¶  s   @rU   rÊ   rÊ   ˆ  sC   ø„ Ø€IØ ÐØ !ÐØ ÐØÐô:ô@�fô @ó>Uòö
rW   rÊ   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rÒ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÒ   rõ   r«  s      €rU   rõ   zDevMap.__init__½  ó   ø€ ÜŒf�dÑ$ dÐ5¨fÓ5rW   rº  r¶  s   @rU   rÒ   rÒ   ¼  ó   ø„ ÷6ð 6rW   rÒ   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rÔ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÔ   rõ   r«  s      €rU   rõ   zCpuMap.__init__Á  rv  rW   rº  r¶  s   @rU   rÔ   rÔ   À  rw  rW   rÔ   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rÖ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÖ   rõ   r«  s      €rU   rõ   zXskMap.__init__Å  rv  rW   rº  r¶  s   @rU   rÖ   rÖ   Ä  rw  rW   rÖ   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rØ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rØ   rõ   r«  s      €rU   rõ   zMapInMapArray.__init__É  rI  rW   rº  r¶  s   @rU   rØ   rØ   È  rJ  rW   rØ   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rÚ   c                 ó,   •— t        t        | �
  |i |¤Ž y rì   )rª  rÚ   rõ   r«  s      €rU   rõ   zMapInMapHash.__init__Í  s   ø€ ÜŒl˜DÑ*¨DÐ;°FÓ;rW   rº  r¶  s   @rU   rÚ   rÚ   Ì  s   ø„ ÷<ð <rW   rÚ   c                   ó>   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zdd„Zˆ xZ	S )rß   c                 óH   •— t        t        | �
  |i |¤Ž d | _        d | _        y rì   )rª  rß   rõ   Ú_ringbufrö  r«  s      €rU   rõ   zRingBuf.__init__Ñ  s&   ø€ ÜŒg�tÑ% tÐ6¨vÒ6ØˆŒØ ˆÕrW   c                  ó   — y rì   rO   r*  s     rU   Ú	__delitemzRingBuf.__delitemÖ  rr  rW   c                  ó   — y rì   rO   r÷   s    rU   rå  zRingBuf.__del__Ù  rr  rW   c                  ó   — yr  rO   r÷   s    rU   r²  zRingBuf.__len__Ü  s   € ØrW   c                 óº   — | j                   dk(  rt        | «      | _         t        j                  |t        j                  | j                   «      «      j
                  S )a  event(data)

        When ring buffers are opened to receive custom event,
        the underlying event data struct which is defined in C in
        the BPF program can be deduced via this function. This avoids
        redundant definitions in Python.
        Nrÿ  r  s     rU   r  zRingBuf.eventß  r  rW   c                 ó’   ‡— ˆfd„}t        |«      }| j                  j                  | j                  ||«       || j                  d<   y)zåopen_ring_buffer(callback)

        Opens a ring buffer to receive custom event data from the bpf program.
        The callback will be invoked for each event submitted from the kernel,
        up to millions per second.
        c                 óÌ   •— 	  ‰| ||«      }	 t        |«      }|S #  d}Y |S xY w# t        $ r5}|j                  t        j                  k(  rt	        «        n|‚Y d }~S d }~ww xY wr  )rd   r  ra  r  r¬   )Úctxra   r  r4  r  r  s        €rU   Úringbuf_cb_z-RingBuf.open_ring_buffer.<locals>.ringbuf_cb_ó  su   ø€ ðÙ˜s D¨$Ó/�ðÜ˜c›(�Cð ˆJøðØ‘Cð ˆJûô ò Ø—7‘7œeŸk™kÒ)Ü•Fà�Gó ð ˆJûðús$   ƒ
% Ž ›"Ÿ% ¢% ¥	A#®*AÁA#r   N)r   r£   Ú_open_ring_bufferrâ   rñ   )rô   r  rŠ  r‹  r  s    `   rU   Úopen_ring_bufferzRingBuf.open_ring_bufferë  s;   ø€ ô	ô" ˜kÓ*ˆØ�‰×"Ñ" 4§;¡;°°CÔ8àˆ�	‰	�!ŠrW   rì   )
r�  r‚  rƒ  rõ   Ú_RingBuf__delitemrå  r²  r  r�  rµ  r¶  s   @rU   rß   rß   Ð  s"   ø„ ô!ò
òòò
E÷rW   rß   c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d„ Z
d	„ Zy
)rÝ   r   c                 ó¤  — || _         || _        || _        || _        t	        j
                  | j                   j                  | j                  «      | _        t	        j                  | j                   j                  | j                  «      | _	        t        t	        j                  | j                   j                  | j                  «      «      | _        y rì   )r£   rá   râ   rî   r   rº   r¤   r�   rï   rð   rd   rò   ró   )rô   r£   rá   râ   rä   s        rU   rõ   zQueueStack.__init__  s‰   € ØˆŒØˆŒØˆŒØˆŒ	Ü×*Ñ*¨4¯8©8¯?©?¸D¿K¹KÓHˆŒ
Ü×+Ñ+¨D¯H©H¯O©O¸T¿[¹[ÓIˆŒ
Üœs×;Ñ;¸D¿H¹H¿O¹OØ—‘ó ó ˆÕrW   c           	      óJ  — t        j                  t        j                  | j                  «      dz  «      }t	        j
                  | j                  j                  | j                  |t        |«      t        j                  |«      «      }|dk  rt        d«      ‚|j                  S r  r  r  s       rU   r	  zQueueStack.leaf_sprintf  r
  rW   c                 óØ   — | j                  «       }t        j                  | j                  j                  | j
                  |t        j                  |«      «      }|dk  rt        d«      ‚|S r  r  r  s       rU   r  zQueueStack.leaf_scanf  r  rW   c                 óâ   — t        j                  | j                  d t        j                  |«      |«      }|dk  r5t        j                  t        j                  «       «      }t        d|z  «      ‚y )Nr   zCould not push to table: %sr  )rô   r  rð   r  r#  s        rU   ÚpushzQueueStack.push'  sU   € Ü×!Ñ! $§+¡+¨t´R·X±X¸d³^ÀUÓKˆØ�Š7Ü—[‘[¤§¡£Ó0ˆFÜÐ9¸FÑBÓCÐCð rW   c                 ó®   — | j                  «       }t        j                  | j                  d t	        j
                  |«      «      }|dk  rt        d«      ‚|S )Nr   zCould not pop from table)rî   r   Úbpf_lookup_and_deleterâ   r“   rý   r€   ©rô   r  r  s      rU   r+  zQueueStack.pop-  sE   € Ø�y‰y‹{ˆÜ×'Ñ'¨¯©°T¼2¿8¹8ÀD»>ÓJˆØ�Š7ÜÐ5Ó6Ð6ØˆrW   c                 ó®   — | j                  «       }t        j                  | j                  d t	        j
                  |«      «      }|dk  rt        d«      ‚|S )Nr   zCould not peek tabler  r—  s      rU   ÚpeekzQueueStack.peek4  sE   € Ø�y‰y‹{ˆÜ×!Ñ! $§+¡+¨t´R·X±X¸d³^ÓDˆØ�Š7ÜÐ1Ó2Ð2ØˆrW   c              #   ó~   K  — | j                   }|r	 | j                  «       –— |dz  }|rŒy y # t        $ r Y y w xY w­wrÑ  )ró   r+  r€   )rô   Úcnts     rU   r+  zQueueStack.itervalues;  sF   è ø€ à×ÑˆÙðØ—h‘h“jÒ!Ø�q‘�ô øô ò Ùðüs    ‚=’. ©=¬=®	:·=¹:º=c                 óH   — | j                  «       D �cg c]  }|‘Œ c}S c c}w rì   r3  r4  s     rU   r5  zQueueStack.valuesE  r6  r1  N)r   )r�  r‚  rƒ  Ú	BPF_EXISTrõ   r	  r  r”  r+  r™  r+  r5  rO   rW   rU   rÝ   rÝ   	  s0   „ à€IòòòóDòòòó6rW   rÝ   rì   )WÚ
__future__r   Úcollections.abcr   ÚImportErrorÚcollectionsÚtimer   Úctypesr“   Ú	functoolsr   r   ra  r    rª   Úlibbccr   r	   r
   r   r   Úutilsr   r   r»   r½   r¿   rÁ   rÃ   rÅ   rÉ   rÏ   rË   rÍ   rÇ   r×   rÙ   rÑ   ÚBPF_MAP_TYPE_SOCKMAPrÓ   rÕ   ÚBPF_MAP_TYPE_SOCKHASHÚBPF_MAP_TYPE_CGROUP_STORAGEÚ BPF_MAP_TYPE_REUSEPORT_SOCKARRAYÚ"BPF_MAP_TYPE_PERCPU_CGROUP_STORAGErÛ   rÜ   ÚBPF_MAP_TYPE_SK_STORAGEÚBPF_MAP_TYPE_DEVMAP_HASHÚBPF_MAP_TYPE_STRUCT_OPSrÞ   ÚBPF_MAP_TYPE_INODE_STORAGEÚBPF_MAP_TYPE_TASK_STORAGEr   rp   r™  r£  rV   r]   rZ   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Ý   rO   rW   rU   ú<module>r±     sW  ðõ &ð+Ý.õ Û Ý Û 	Û Û 	Û 
ç \Õ \Ý "Ý $àÐ ØÐ ØÐ Ø !Ð ØÐ ØÐ ØÐ ØÐ ØÐ Ø!Ð ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ Ø Ð Ø#%Ð  Ø%'Ð "ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ðØ�vðà˜ðð ˜\ðð "Ð#5ð	ð
 ˜mðð ˜~ðð ˜mðð ˜~ðð ˜:ðð !Ð"3ðð ˜:ðð  ðð ˜~ðð ˜ðð ˜)ðð  ˜ð!ð" ˜ð#ð$ ˜:ØÐ!1Ø$Ð&;Ø&Ð(?Ø˜Ø˜Ø˜\Ø˜mØ˜\Ø˜)Ø Ø˜~ñ;€ð@ €	Ø€ØÐ ò
ó?óò2$8òL<ò:ò8;òv-ô`gC�ô gCôT�	ô ô7ˆiô 7ô6$�	ô 6$ôpˆIô ô	6�	ô 	6÷ñ ô(Q�)ô Qôi7�Yô i7ôX2-�ô 2-ôh=�Jô =ô6-�)ô 6-ôp"ˆiô "ô2�ô 2ôh6ˆYô 6ô6ˆYô 6ô6ˆYô 6ô=�Iô =ô<�9ô <ô7ˆiô 7÷r=6ò =6øðo' ò +ß*Ð*ð+ús   ˆG ÇG&Ç%G&