{"name": "uip_icmp6_error_output", "code": "__int64 __fastcall uip_icmp6_error_output ( char @@a1@@ , char @@a2@@ , unsigned int @@a3@@ ) { __int64 @@result@@ ; __int64 v4 ; __int64 v5 ; _DWORD * @@v6@@ ; if ( uip_ext_len ) { if ( uip_aligned_buf [ uip_ext_len + Number ] == Number ) { @@result@@ = ( unsigned __int8 ) uip_aligned_buf [ uip_ext_len + Number ] ; if ( ( @@result@@ & Number ) == Number L ) { uip_len = Number ; return @@result@@ ; } } } else if ( uip_aligned_buf [ Number ] == Number ) { @@result@@ = ( unsigned __int8 ) uip_aligned_buf [ uip_ext_len + Number ] ; if ( ( @@result@@ & Number ) == Number L ) { uip_len = Number ; return @@result@@ ; } } uip_ext_len = rpl_invert_header ( ) ; v4 = * ( _QWORD * ) ( ( char * ) & loc_8 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) ) ; tmp_ipaddr = * ( _QWORD * ) ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) ; qword_748 = v4 ; uip_len += Number ; if ( uip_len > Number ) uip_len = Number ; memmove ( & uip_aligned_buf [ uip_ext_len + Number + uip_ext_len ] , uip_aligned_buf , uip_len - Number - uip_ext_len - Number ) ; uip_aligned_buf [ Number ] = Number ; uip_aligned_buf [ Number ] = Number ; * ( _WORD * ) & uip_aligned_buf [ Number ] = Number ; if ( uip_ext_len ) * ( _BYTE * ) ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) = Number ; else uip_aligned_buf [ Number ] = Number ; uip_aligned_buf [ Number ] = uip_ds6_if [ Number ] ; if ( * ( _WORD * ) ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) || * ( _WORD * ) ( ( char * ) & loc_1 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) + Number ) || * ( _WORD * ) ( ( char * ) & loc_4 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) ) || * ( _WORD * ) ( ( char * ) & loc_4 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) + Number ) || * ( _WORD * ) ( ( char * ) & loc_8 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) ) || * ( _WORD * ) ( ( char * ) & loc_8 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) + Number ) || * ( _WORD * ) ( ( char * ) & loc_8 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) + Number ) || ( @@result@@ = * ( unsigned __int16 * ) ( ( char * ) & loc_D + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) + Number ) , ( _WORD ) @@result@@ ) ) { v5 = * ( _QWORD * ) ( ( char * ) & loc_8 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) ) ; * ( _QWORD * ) ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) = * ( _QWORD * ) ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) ; * ( _QWORD * ) ( ( char * ) & loc_8 + ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) ) = v5 ; @@result@@ = ( unsigned __int8 ) tmp_ipaddr ; if ( ( _BYTE ) tmp_ipaddr != Number || @@a1@@ == Number && @@a2@@ == Number ) { uip_ds6_select_src ( ( unsigned int ) ( ( _DWORD ) uip_aligned_buf + Number ) , & tmp_ipaddr ) ; uip_aligned_buf [ uip_ext_len + Number ] = @@a1@@ ; uip_aligned_buf [ uip_ext_len + Number ] = @@a2@@ ; @@v6@@ = & uip_aligned_buf [ uip_ext_len + Number ] ; * @@v6@@ = uip_htonl ( @@a3@@ ) ; uip_aligned_buf [ Number ] = ( unsigned __int16 ) ( uip_len - Number ) >> Number ; uip_aligned_buf [ Number ] = uip_len - Number ; * ( _WORD * ) & uip_aligned_buf [ uip_ext_len + Number ] = Number ; @@result@@ = ( unsigned int ) ~ uip_icmp6chksum ( ) ; * ( _WORD * ) & uip_aligned_buf [ uip_ext_len + Number ] = @@result@@ ; } else { uip_len = Number ; } } else { uip_len = Number ; } return @@result@@ ; }", "source": [{"n": "a3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r16"}, {"n": "v6", "t": {"T": 3, "t": "_DWORD"}, "location": "r32"}, {"n": "a1", "t": {"T": 1, "n": "char", "s": 1}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "char", "s": 1}, "location": "r64"}, {"n": "result", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r8"}]}