
    b1                     6   d dl Z d dl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	 d dl
mZ d dlZd ee           vre j        e _        e j        e _        ej        eej        eej        eej        eej        eej        eej        eej        eej        eej        eej        eej         e!iZ"d Z#d Z$d Z%d Z&d	 Z'd
 Z(d Z)g dZ*g dZ+g dZ,g dZ-g dZ.g dZ/e*e+e,e-e/e.dZ0dddddiZ1ddddddddd d!dd"d#d$d%d&d'd(d)d*d+d,d-
d.d/d0d1d2d3Z2d4  e3e14                                          D             Z5d5  e3e24                                          D             Z6e1e5fe2e6fd6Z7d7 Z8d8 Z9d9Z:d: Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@e?iZAd@e@iZBdA ZCdB ZDdC ZEdIdEZFdIdFZGdG ZHdH ZIdS )J    N)IPv4AddressIPv6Address
ip_address)FieldDescriptorencodebytesc                 ^    |                                  j        t          j                 j        S N)
GetOptions
Extensionsopts_pb2criuhexfields    7/usr/lib/python3/dist-packages/pycriu/images/pb2dict.py_marked_as_hexr   2   !    (7;;    c                 ^    |                                  j        t          j                 j        S r	   )r
   r   r   r   ipaddr   s    r   _marked_as_ipr   6   !    (7==r   c                 ^    |                                  j        t          j                 j        S r	   )r
   r   r   r   flagsr   s    r   _marked_as_flagsr   :   r   r   c                 ^    |                                  j        t          j                 j        S r	   )r
   r   r   r   devr   s    r   _marked_as_devr   >   r   r   c                 ^    |                                  j        t          j                 j        S r	   )r
   r   r   r   odevr   s    r   _marked_as_odevr!   B   !    (7<<r   c                 ^    |                                  j        t          j                 j        S r	   )r
   r   r   r   dictr   s    r   _marked_as_dictr%   F   r"   r   c                 ^    |                                  j        t          j                 j        S r	   )r
   r   r   r   convr   s    r   _custom_convr(   J   r"   r   ))	PROT_READ   )
PROT_WRITE   )	PROT_EXEC   ))
MAP_SHAREDr*   )MAP_PRIVATEr,   )MAP_ANON    )MAP_GROWSDOWN   ))VMA_AREA_NONEr   )VMA_AREA_REGULARr*   )VMA_AREA_STACKr,   )VMA_AREA_VSYSCALLr.   )VMA_AREA_VDSO   )VMA_AREA_HEAPr2   )VMA_FILE_PRIVATE@   )VMA_FILE_SHARED   )VMA_ANON_SHAREDr4   )VMA_ANON_PRIVATE   )VMA_AREA_SYSVIPC   )VMA_AREA_SOCKET   )VMA_AREA_VVAR   )VMA_AREA_AIORING    )
VMA_UNSUPPl        ))O_WRONLYr*   )O_RDWRr,   )O_CREATr=   )O_EXCLr?   )O_NOCTTYr4   )O_TRUNCrB   )O_APPENDrD   )
O_NONBLOCKrF   )O_DSYNCrH   )FASYNCrJ   )O_DIRECTi @  )O_LARGEFILEi   )O_DIRECTORYi   )
O_NOFOLLOWi   )	O_NOATIMEi   )	O_CLOEXECi   ))F_SEAL_SEALr*   )F_SEAL_SHRINKr,   )F_SEAL_GROWr.   )F_SEAL_WRITEr:   )F_SEAL_FUTURE_WRITE   ))	PE_PARENTr*   )PE_LAZYr,   )
PE_PRESENTr.   )z	mmap.protz
mmap.flagszmmap.statuszrfile.flagsz
pmap.flagszseals.flags
task_stateAliveZombieStopped)r*         UNIXINETINET6NETLINKPACKET)r*   r,   
   ra      STREAMDGRAMRAW	SEQPACKET)r*   r,   ri      rp   ESTABLISHEDSYN_SENTSYN_RECV	FIN_WAIT1	FIN_WAIT2	TIME_WAITCLOSE
CLOSE_WAITLAST_ACKLISTEN)
r*   r,   ri   r.   rv   rj      r:   	   rp   IPTCPUDPUDPLITE)r   rj   rq      )familytypestateprotoc                 l    i | ]1\  }}|d  t          |                                          D             2S )c                     i | ]\  }}||	S  r   .0k2v2s      r   
<dictcomp>z<dictcomp>.<dictcomp>   .     ' ' 'B 	B ' ' 'r   listitemsr   kvs      r   r   r      sX        	1  ' '17799oo' ' '  r   c                 l    i | ]1\  }}|d  t          |                                          D             2S )c                     i | ]\  }}||	S r   r   r   s      r   r   z<dictcomp>.<dictcomp>   r   r   r   r   s      r   r   r      sX        	1  ' '17799oo' ' '  r   )genskc                      d  fd|D             D             } t          d |D                        z    r|                    d z             d                    |          S )Nc                     g | ]
}|d          S r   r   r   xs     r   
<listcomp>zmap_flags.<locals>.<listcomp>   s    	?	?	?1!A$	?	?	?r   c                 *    g | ]}|d          z  |S r*   r   )r   r   values     r   r   zmap_flags.<locals>.<listcomp>   s&    >>>q1>>>>r   c                     g | ]
}|d          S r   r   r   s     r   r   zmap_flags.<locals>.<listcomp>   s    +++A1Q4+++r   0x%xz | )sumappendjoin)r   	flags_mapbss   `  r   	map_flagsr      s}    	?	?>>>>I>>>	?	?	?B	c+++++,,,,E "
		&5.!!!::b>>r   c                     | dk    rdS t          |          t          fdd |                     d          D             D                       S )N r   c           
      r    g | ]3}t          t                              ||                    d           4S r   )intstrget)r   r   bds     r   r   zunmap_flags.<locals>.<listcomp>   sG        	Cq!q!!  r   c                 6    g | ]}|                                 S r   )stripr   s     r   r   zunmap_flags.<locals>.<listcomp>   s     666!''))666r   |)r$   r   split)r   r   r   s     @r   unmap_flagsr      sn    {{q	iB    66U[[%5%5666     r      c                     t          |           r+dt          j        |          t          j        |          fz  S d|t          z	  |dt          z  dz
  z  fz  S )Nz%d:%dr*   )r!   osmajorminorkern_minorbits)r   r   s     r   
decode_devr      s]    u ?"(5//28E??;;;%>1A$71#<=? ? 	?r   c                     d |                     d          D             }t          |           r!t          j        |d         |d                   S |d         t          z  |d         z  S )Nc                 ,    g | ]}t          |          S r   )r   r   s     r   r   zencode_dev.<locals>.<listcomp>   s    
,
,
,a3q66
,
,
,r   :r   r*   )r   r!   r   makedevr   )r   r   r   s      r   
encode_devr      sc    
,
,5;;s++
,
,
,Cu 1z#a&#a&)))1v'#a&00r   c                     t           j        dk    r&t          j        |                                           S t          j        |           S N)ri   r   )sysversion_infobase64r   decoder   s    r   encode_base64r      s>    6!!!%((//111!%(((r   c                     t           j        dk    r,t          j        t                              |                     S t          j        |           S r   )r   r   r   decodebytesr   encoder   s    r   decode_base64r      s>    6!!!#**U"3"3444!%(((r   c                 *    t          j        |           S r	   )quopriencodestringr   s    r   encode_unixr         u%%%r   c                 *    t          j        |           S r	   )r   decodestringr   s    r   decode_unixr     r   r   	unix_namec                 L    t          |           }|rt          |         S t          S r	   )r(   r   r   r   cs     r   get_bytes_encr     '    UA ayr   c                 L    t          |           }|rt          |         S t          S r	   )r(   r   r   r   s     r   get_bytes_decr     r   r   c                 `    dt           v rt          }nt          t          f}t	          | |          S )N
basestring)__builtins__r   r   bytes
isinstance)r   string_typess     r   	is_stringr   #  s-    |##!U|e\***r   Fc                 V   |st          |           }| j        t          j        k    rt	          |||          S | j        t          j        k    r t          |           |          S | j        t          j        k    r%| j        j	        
                    |d           j        S | j        t          v rt          | j                 }|r|t          k    r|rd|z  S t          |           rt          | |          S t!          |           }|r3	 t"          |         }t%          ||          S # t&          $ r d|z  cY S w xY wt)          |           }|r;t*          |         d         | j                 
                    | ||                    S  ||          S t'          d| j        | j        fz            )Nr   r   !Field(%s) has unsupported type %d)r   r   FDTYPE_MESSAGEpb2dict
TYPE_BYTESr   	TYPE_ENUM	enum_typevalues_by_numberr   name_basic_castr   r   r   r   
flags_mapsr   	Exceptionr%   	dict_maps)r   r   prettyis_hexcastr   r   dcts           r   _pb2dict_castr   ,  s    '&&zR_$$uff---	r}	$	$#}U##E***	r|	#	#/33E4@@EE	{	"	"5:& 	Mts{{ & ~%e$$ 0!%///$U++E 77 *5 1I %UI666 ! * * *!E>)))*
 "%((C M ~a(488ULLLtE{{;UZ01 2 2 	2s   D! !D32D3c           
      `   |rt          j                    ni }|                                 D ]\  }}|j        t          j        k    rg }|rt          |          rt          |          dk    r*t          j	        |d                   }t          |          }ndt          j	        |d                   dz  z   t          j	        |d                   dz  z   t          j	        |d                   dz  z   t          j	        |d                   z   }t          |          }|                    |j                   n=|D ]'}|                    t          ||||                     (nt          ||||          }t          |          t           k    r|                                n|||j        <   |S )z^
    Convert protobuf msg to dictionary.
    Takes a protobuf message and returns a dict.
    r*   r   `   r=   r,   r2   ri   )collectionsOrderedDict
ListFieldslabelr   LABEL_REPEATEDr   lensocketntohlr   r   r   
compressedr   r   r   r   r   )	pbr   r   dr   r   d_valr   addrs	            r   r   r   T  s   
 &,3!!!A J Ju;"+++E J-.. Ju::??U1X..A&q>>DDV\%(33?@#\%(33?A#\%(33?A $\%(335A 'q>>DT_---- J JALLua!H!HIIIIJ "%??E*.u++*>*>E%*Hr   c                    | j         t          j        k    r t          |           |          S | j         t          j        k    r%| j        j                            |d           j        S | j         t          v rt          | j                  }|t          k    rt          |          rt          |           rt          | |          S t          |           }|r.	 t          |         }t!          ||          S # t"          $ r Y nw xY wt%          |           }|rBt&          |         d         | j                                     |d           }| ||d          }|S  ||d          S  ||          S t#          d| j        | j         fz            )Nr*   r   r   )r   r   r   r   r   r   values_by_namer   numberr   r   r   r   r   r   r   r   r   r%   r   r   )r   r   r   r   r   r   rets          r   _dict2pb_castr  s  s    zR]""#}U##E***	r|	#	#-11%>>EE	{	"	"5:&CKKYu--Ke$$ 0!%///$U++E 99 *5 1I 'ui888 !   D
 "%((C nQ'
377tDD;$ua..C
 4q>>!4;;;UZ01 2 2 	2s   C0 0
C=<C=c           	      D   |j         j        D ]}|j        | vr| |j                 }|j        t          j        k    rt          ||j        d          }t          |d                   rMt          |          r=t          |d                   }|j
        dk    r5|                    t          j        t          |                               n|j
        dk    rt          |          }|                    t          j        |dz	  dz                       |                    t          j        |dz	  dz                       |                    t          j        |dz	  dz                       |                    t          j        |dz	  dz                       nt          d	|j
        z            |D ]]}|j        t          j        k    r#t%          ||                                           :|                    t)          ||                     ^|j        t          j        k    rMt          ||j                                                   t%          |t          ||j        d                     mt-          ||j        t)          ||                     |S )
zd
    Convert dictionary to protobuf msg.
    Takes dict and protobuf message to be merged into.
    Nr   r.   rj   r   l    r=   r2   zUnknown IP address version %d)
DESCRIPTORfieldsr   r  r   r  getattrr   r   r   versionr   r  htonlr   r   r   r   dict2pbaddr  SetInParentsetattr)r
  r	  r   r   pb_valvalivalr   s           r   r  r    sh   
 % #E #E:Q%*;"+++RT22Fq"" }U';';  q**;!##MM&,s3xx"8"89999[A%%s88DMM&,0@J/N"O"OPPPMM&,0@J/N"O"OPPPMM&,0@J/N"O"OPPPMM&,0@J/N"O"OPPPP#$C$'K%0 1 1 1 ; ;:00Avzz||,,,,MM-q"9"9::::	; zR_,, EJ''33555wr5:t<<====EJeU(C(CDDDDIr   )FF)Jr   r   r   r   r  r   	ipaddressr   r   r   google.protobuf.descriptorr   r   r   dirr   r   r   r   TYPE_FIXED64r   TYPE_FIXED32TYPE_SFIXED64TYPE_SFIXED32
TYPE_INT64TYPE_UINT64TYPE_SINT64
TYPE_INT32TYPE_UINT32TYPE_SINT32	TYPE_BOOLboolTYPE_STRINGr   r   r   r   r   r   r!   r%   r(   mmap_prot_mapmmap_flags_mapmmap_status_maprfile_flags_mapseals_flags_mappmap_flags_mapr   gen_mapssk_mapsr   r   	gen_rmapssk_rmapsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   <module>r9     s*        				   



 : : : : : : : : : : < < < < < < F##,F,F( OSOSccM3NCNCM3NCNCL$NC < < <> > >> > >< < <= = == = == = =      $  &      "" " 
         	 7! !F  X^^%%&&  	
  W]]__%%   i H
 	     ? ? ?1 1 1) ) )) ) )& & && & & {	#
{	#    + + +%2 %2 %2 %2P   >%2 %2 %2P) ) ) ) )r   