
/* DWARF original prototype: asymbol * group_signature(asection * group, asection * group) */

asymbol * group_signature(asection *group,asection *group_1)

{
  uint uVar1;
  asymbol *paVar2;
  bfd *abfd;
  
  paVar2 = (asymbol *)isympp;
  if (isympp != (asymbol **)0x0) {
    if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&
         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&
        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&
       ((ulong)uVar1 <
        group_1->symbol[2].udata.i /
        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {
      return isympp[uVar1 - 1];
    }
    paVar2 = (asymbol *)0x0;
  }
  return paVar2;
}



long FUN_00107e80(long param_1,long param_2)

{
  uint uVar1;
  long lVar2;
  
  lVar2 = DAT_0012cb40;
  if (DAT_0012cb40 != 0) {
    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&
         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&
        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&
       ((ulong)uVar1 <
        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /
        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {
      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);
    }
    lVar2 = 0;
  }
  return lVar2;
}


MOV RCX,qword ptr [0x0012cb40]
TEST RCX,RCX
JZ 0x00107ee2
MOV RAX,qword ptr [RSI + 0x8]
CMP dword ptr [RAX + 0x8],0x5
JNZ 0x00107ee0
MOV RDX,qword ptr [RSI + 0xf8]
MOV ESI,dword ptr [RDX + 0xc78]
CMP dword ptr [RDI + 0x28],ESI
JNZ 0x00107ee0
MOV ESI,dword ptr [RDI + 0x2c]
TEST ESI,ESI
JZ 0x00107ee0
MOV RAX,qword ptr [RAX + 0x368]
MOV EDI,ESI
MOV RAX,qword ptr [RAX + 0x300]
MOVZX R8D,byte ptr [RAX + 0x5]
MOV RAX,qword ptr [RDX + 0x88]
XOR EDX,EDX
DIV R8
CMP RDI,RAX
JNC 0x00107ee0
LEA EAX,[RSI + -0x1]
MOV RCX,qword ptr [RCX + RAX*0x8]
MOV RAX,RCX
RET
XOR ECX,ECX
MOV RAX,RCX
RET
(translation_unit "long FUN_00107e80(long param_1,long param_2)\n\n{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}\n\n" (function_definition "long FUN_00107e80(long param_1,long param_2)\n\n{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00107e80(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar2 = DAT_0012cb40;" (assignment_expression "lVar2 = DAT_0012cb40" identifier = identifier) ;) (if_statement "if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }" if (parenthesized_expression "(DAT_0012cb40 != 0)" ( (binary_expression "DAT_0012cb40 != 0" identifier != number_literal) )) (compound_statement "{\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }" { (if_statement "if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }" if (parenthesized_expression "((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)))" ( (binary_expression "(((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))" (parenthesized_expression "(((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0))" ( (binary_expression "((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)" (parenthesized_expression "((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78)))" ( (binary_expression "(*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))" (parenthesized_expression "(*(int *)(*(long *)(param_2 + 8) + 8) == 5)" ( (binary_expression "*(int *)(*(long *)(param_2 + 8) + 8) == 5" (pointer_expression "*(int *)(*(long *)(param_2 + 8) + 8)" * (cast_expression "(int *)(*(long *)(param_2 + 8) + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 8) + 8)" ( (binary_expression "*(long *)(param_2 + 8) + 8" (pointer_expression "*(long *)(param_2 + 8)" * (cast_expression "(long *)(param_2 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + number_literal) )))) == number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))" ( (binary_expression "*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) == (pointer_expression "*(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" * (cast_expression "(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 0xf8) + 0xc78)" ( (binary_expression "*(long *)(param_2 + 0xf8) + 0xc78" (pointer_expression "*(long *)(param_2 + 0xf8)" * (cast_expression "(long *)(param_2 + 0xf8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xf8)" ( (binary_expression "param_2 + 0xf8" identifier + number_literal) )))) + number_literal) ))))) ))) )) && (parenthesized_expression "(uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)" ( (comma_expression "uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x2c)" identifier = (pointer_expression "*(uint *)(param_1 + 0x2c)" * (cast_expression "(uint *)(param_1 + 0x2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) ))))) , (binary_expression "uVar1 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))" ( (binary_expression "(ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) < (binary_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (binary_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)" (pointer_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88)" * (cast_expression "(ulong *)(*(long *)(param_2 + 0xf8) + 0x88)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 0xf8) + 0x88)" ( (binary_expression "*(long *)(param_2 + 0xf8) + 0x88" (pointer_expression "*(long *)(param_2 + 0xf8)" * (cast_expression "(long *)(param_2 + 0xf8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xf8)" ( (binary_expression "param_2 + 0xf8" identifier + number_literal) )))) + number_literal) )))) / (parenthesized_expression "(ulong)" ( identifier ))) * (cast_expression "(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" ( (binary_expression "*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5" (pointer_expression "*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" * (cast_expression "(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" ( (binary_expression "*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300" (pointer_expression "*(long *)(*(long *)(param_2 + 8) + 0x368)" * (cast_expression "(long *)(*(long *)(param_2 + 8) + 0x368)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 8) + 0x368)" ( (binary_expression "*(long *)(param_2 + 8) + 0x368" (pointer_expression "*(long *)(param_2 + 8)" * (cast_expression "(long *)(param_2 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + number_literal) )))) + number_literal) )))) + number_literal) ))))) ))) )) (compound_statement "{\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }" { (return_statement "return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);" return (pointer_expression "*(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" * (cast_expression "(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" ( (binary_expression "DAT_0012cb40 + (ulong)(uVar1 - 1) * 8" identifier + (binary_expression "(ulong)(uVar1 - 1) * 8" (call_expression "(ulong)(uVar1 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 - 1)" ( (binary_expression "uVar1 - 1" identifier - number_literal) ))) * number_literal)) )))) ;) })) (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" identifier = number_literal) ;) })) (return_statement "return lVar2;" return identifier ;) })))
(translation_unit "/* DWARF original prototype: asymbol * group_signature(asection * group, asection * group) */\n\nasymbol * group_signature(asection *group,asection *group_1)\n\n{\n  uint uVar1;\n  asymbol *paVar2;\n  bfd *abfd;\n  \n  paVar2 = (asymbol *)isympp;\n  if (isympp != (asymbol **)0x0) {\n    if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {\n      return isympp[uVar1 - 1];\n    }\n    paVar2 = (asymbol *)0x0;\n  }\n  return paVar2;\n}\n\n" comment (function_definition "asymbol * group_signature(asection *group,asection *group_1)\n\n{\n  uint uVar1;\n  asymbol *paVar2;\n  bfd *abfd;\n  \n  paVar2 = (asymbol *)isympp;\n  if (isympp != (asymbol **)0x0) {\n    if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {\n      return isympp[uVar1 - 1];\n    }\n    paVar2 = (asymbol *)0x0;\n  }\n  return paVar2;\n}" type_identifier (pointer_declarator "* group_signature(asection *group,asection *group_1)" * (function_declarator "group_signature(asection *group,asection *group_1)" identifier (parameter_list "(asection *group,asection *group_1)" ( (parameter_declaration "asection *group" type_identifier (pointer_declarator "*group" * identifier)) , (parameter_declaration "asection *group_1" type_identifier (pointer_declarator "*group_1" * identifier)) )))) (compound_statement "{\n  uint uVar1;\n  asymbol *paVar2;\n  bfd *abfd;\n  \n  paVar2 = (asymbol *)isympp;\n  if (isympp != (asymbol **)0x0) {\n    if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {\n      return isympp[uVar1 - 1];\n    }\n    paVar2 = (asymbol *)0x0;\n  }\n  return paVar2;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "asymbol *paVar2;" type_identifier (pointer_declarator "*paVar2" * identifier) ;) (declaration "bfd *abfd;" type_identifier (pointer_declarator "*abfd" * identifier) ;) (expression_statement "paVar2 = (asymbol *)isympp;" (assignment_expression "paVar2 = (asymbol *)isympp" identifier = (cast_expression "(asymbol *)isympp" ( (type_descriptor "asymbol *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (isympp != (asymbol **)0x0) {\n    if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {\n      return isympp[uVar1 - 1];\n    }\n    paVar2 = (asymbol *)0x0;\n  }" if (parenthesized_expression "(isympp != (asymbol **)0x0)" ( (binary_expression "isympp != (asymbol **)0x0" identifier != (cast_expression "(asymbol **)0x0" ( (type_descriptor "asymbol **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {\n      return isympp[uVar1 - 1];\n    }\n    paVar2 = (asymbol *)0x0;\n  }" { (if_statement "if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {\n      return isympp[uVar1 - 1];\n    }" if (parenthesized_expression "((((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5)))" ( (binary_expression "(((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))" (parenthesized_expression "(((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0))" ( (binary_expression "((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)) &&\n        (uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)" (parenthesized_expression "((*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags))" ( (binary_expression "(*(int *)(*(long *)&group_1->id + 8) == 5) &&\n         ((flagword)group->vma == group_1->symbol[0x42].flags)" (parenthesized_expression "(*(int *)(*(long *)&group_1->id + 8) == 5)" ( (binary_expression "*(int *)(*(long *)&group_1->id + 8) == 5" (pointer_expression "*(int *)(*(long *)&group_1->id + 8)" * (cast_expression "(int *)(*(long *)&group_1->id + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)&group_1->id + 8)" ( (binary_expression "*(long *)&group_1->id + 8" (pointer_expression "*(long *)&group_1->id" * (cast_expression "(long *)&group_1->id" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "&group_1->id" & (field_expression "group_1->id" identifier -> field_identifier)))) + number_literal) )))) == number_literal) )) && (parenthesized_expression "((flagword)group->vma == group_1->symbol[0x42].flags)" ( (binary_expression "(flagword)group->vma == group_1->symbol[0x42].flags" (cast_expression "(flagword)group->vma" ( (type_descriptor "flagword" type_identifier) ) (field_expression "group->vma" identifier -> field_identifier)) == (field_expression "group_1->symbol[0x42].flags" (subscript_expression "group_1->symbol[0x42]" (field_expression "group_1->symbol" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ))) )) && (parenthesized_expression "(uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0)" ( (comma_expression "uVar1 = *(uint *)((long)&group->vma + 4), uVar1 != 0" (assignment_expression "uVar1 = *(uint *)((long)&group->vma + 4)" identifier = (pointer_expression "*(uint *)((long)&group->vma + 4)" * (cast_expression "(uint *)((long)&group->vma + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&group->vma + 4)" ( (binary_expression "(long)&group->vma + 4" (cast_expression "(long)&group->vma" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&group->vma" & (field_expression "group->vma" identifier -> field_identifier))) + number_literal) ))))) , (binary_expression "uVar1 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "((ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))" ( (binary_expression "(ulong)uVar1 <\n        group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5)" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) < (binary_expression "group_1->symbol[2].udata.i /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5)" (binary_expression "group_1->symbol[2].udata.i /\n        (ulong)" (field_expression "group_1->symbol[2].udata.i" (field_expression "group_1->symbol[2].udata" (subscript_expression "group_1->symbol[2]" (field_expression "group_1->symbol" identifier -> field_identifier) [ number_literal ]) . field_identifier) . field_identifier) / (parenthesized_expression "(ulong)" ( identifier ))) * (cast_expression "(byte *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5)" ( (binary_expression "*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5" (pointer_expression "*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300)" * (cast_expression "(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)&group_1->id + 0x368) + 0x300)" ( (binary_expression "*(long *)(*(long *)&group_1->id + 0x368) + 0x300" (pointer_expression "*(long *)(*(long *)&group_1->id + 0x368)" * (cast_expression "(long *)(*(long *)&group_1->id + 0x368)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)&group_1->id + 0x368)" ( (binary_expression "*(long *)&group_1->id + 0x368" (pointer_expression "*(long *)&group_1->id" * (cast_expression "(long *)&group_1->id" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "&group_1->id" & (field_expression "group_1->id" identifier -> field_identifier)))) + number_literal) )))) + number_literal) )))) + number_literal) ))))) ))) )) (compound_statement "{\n      return isympp[uVar1 - 1];\n    }" { (return_statement "return isympp[uVar1 - 1];" return (subscript_expression "isympp[uVar1 - 1]" identifier [ (binary_expression "uVar1 - 1" identifier - number_literal) ]) ;) })) (expression_statement "paVar2 = (asymbol *)0x0;" (assignment_expression "paVar2 = (asymbol *)0x0" identifier = (cast_expression "(asymbol *)0x0" ( (type_descriptor "asymbol *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (return_statement "return paVar2;" return identifier ;) })))
(translation_unit "long FUN_00107e80(long param_1,long param_2)\n\n{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}\n\n" (function_definition "long FUN_00107e80(long param_1,long param_2)\n\n{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00107e80(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar2 = DAT_0012cb40;" (assignment_expression "lVar2 = DAT_0012cb40" identifier = identifier) ;) (if_statement "if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }" if (parenthesized_expression "(DAT_0012cb40 != 0)" ( (binary_expression "DAT_0012cb40 != 0" identifier != number_literal) )) (compound_statement "{\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }" { (if_statement "if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }" if (parenthesized_expression "((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)))" ( (binary_expression "(((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))" (parenthesized_expression "(((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0))" ( (binary_expression "((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)" (parenthesized_expression "((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78)))" ( (binary_expression "(*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))" (parenthesized_expression "(*(int *)(*(long *)(param_2 + 8) + 8) == 5)" ( (binary_expression "*(int *)(*(long *)(param_2 + 8) + 8) == 5" (pointer_expression "*(int *)(*(long *)(param_2 + 8) + 8)" * (cast_expression "(int *)(*(long *)(param_2 + 8) + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 8) + 8)" ( (binary_expression "*(long *)(param_2 + 8) + 8" (pointer_expression "*(long *)(param_2 + 8)" * (cast_expression "(long *)(param_2 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + number_literal) )))) == number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))" ( (binary_expression "*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) == (pointer_expression "*(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" * (cast_expression "(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 0xf8) + 0xc78)" ( (binary_expression "*(long *)(param_2 + 0xf8) + 0xc78" (pointer_expression "*(long *)(param_2 + 0xf8)" * (cast_expression "(long *)(param_2 + 0xf8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xf8)" ( (binary_expression "param_2 + 0xf8" identifier + number_literal) )))) + number_literal) ))))) ))) )) && (parenthesized_expression "(uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)" ( (comma_expression "uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x2c)" identifier = (pointer_expression "*(uint *)(param_1 + 0x2c)" * (cast_expression "(uint *)(param_1 + 0x2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) ))))) , (binary_expression "uVar1 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))" ( (binary_expression "(ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) < (binary_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (binary_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)" (pointer_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88)" * (cast_expression "(ulong *)(*(long *)(param_2 + 0xf8) + 0x88)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 0xf8) + 0x88)" ( (binary_expression "*(long *)(param_2 + 0xf8) + 0x88" (pointer_expression "*(long *)(param_2 + 0xf8)" * (cast_expression "(long *)(param_2 + 0xf8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xf8)" ( (binary_expression "param_2 + 0xf8" identifier + number_literal) )))) + number_literal) )))) / (parenthesized_expression "(ulong)" ( identifier ))) * (cast_expression "(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" ( (binary_expression "*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5" (pointer_expression "*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" * (cast_expression "(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" ( (binary_expression "*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300" (pointer_expression "*(long *)(*(long *)(param_2 + 8) + 0x368)" * (cast_expression "(long *)(*(long *)(param_2 + 8) + 0x368)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 8) + 0x368)" ( (binary_expression "*(long *)(param_2 + 8) + 0x368" (pointer_expression "*(long *)(param_2 + 8)" * (cast_expression "(long *)(param_2 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + number_literal) )))) + number_literal) )))) + number_literal) ))))) ))) )) (compound_statement "{\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }" { (return_statement "return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);" return (pointer_expression "*(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" * (cast_expression "(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" ( (binary_expression "DAT_0012cb40 + (ulong)(uVar1 - 1) * 8" identifier + (binary_expression "(ulong)(uVar1 - 1) * 8" (call_expression "(ulong)(uVar1 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 - 1)" ( (binary_expression "uVar1 - 1" identifier - number_literal) ))) * number_literal)) )))) ;) })) (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" identifier = number_literal) ;) })) (return_statement "return lVar2;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) == LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (binary_expression IDENT != LIT)) ))) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) / (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) + LIT) )))) + LIT) ))))) ))) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) * LIT)) )))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) })) (return_statement return IDENT ;) })))
(function_definition "long FUN_00107e80(long param_1,long param_2)\n\n{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00107e80(long param_1,long param_2)" (identifier "FUN_00107e80") (parameter_list "(long param_1,long param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  uint uVar1;\n  long lVar2;\n  \n  lVar2 = DAT_0012cb40;\n  if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }\n  return lVar2;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (expression_statement "lVar2 = DAT_0012cb40;" (assignment_expression "lVar2 = DAT_0012cb40" (identifier "lVar2") (= "=") (identifier "DAT_0012cb40")) (; ";")) (if_statement "if (DAT_0012cb40 != 0) {\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }" (if "if") (parenthesized_expression "(DAT_0012cb40 != 0)" (( "(") (binary_expression "DAT_0012cb40 != 0" (identifier "DAT_0012cb40") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }\n    lVar2 = 0;\n  }" ({ "{") (if_statement "if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }" (if "if") (parenthesized_expression "((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)))" (( "(") (binary_expression "(((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&\n       ((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))" (parenthesized_expression "(((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0))" (( "(") (binary_expression "((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&\n        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)" (parenthesized_expression "((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78)))" (( "(") (binary_expression "(*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&\n         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))" (parenthesized_expression "(*(int *)(*(long *)(param_2 + 8) + 8) == 5)" (( "(") (binary_expression "*(int *)(*(long *)(param_2 + 8) + 8) == 5" (pointer_expression "*(int *)(*(long *)(param_2 + 8) + 8)" (* "*") (cast_expression "(int *)(*(long *)(param_2 + 8) + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_2 + 8) + 8)" (( "(") (binary_expression "*(long *)(param_2 + 8) + 8" (pointer_expression "*(long *)(param_2 + 8)" (* "*") (cast_expression "(long *)(param_2 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "8")) () ")")))) (== "==") (number_literal "5")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))" (( "(") (binary_expression "*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (== "==") (pointer_expression "*(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" (* "*") (cast_expression "(int *)(*(long *)(param_2 + 0xf8) + 0xc78)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_2 + 0xf8) + 0xc78)" (( "(") (binary_expression "*(long *)(param_2 + 0xf8) + 0xc78" (pointer_expression "*(long *)(param_2 + 0xf8)" (* "*") (cast_expression "(long *)(param_2 + 0xf8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xf8)" (( "(") (binary_expression "param_2 + 0xf8" (identifier "param_2") (+ "+") (number_literal "0xf8")) () ")")))) (+ "+") (number_literal "0xc78")) () ")"))))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)" (( "(") (comma_expression "uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x2c)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 0x2c)" (* "*") (cast_expression "(uint *)(param_1 + 0x2c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")"))))) (, ",") (binary_expression "uVar1 != 0" (identifier "uVar1") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))" (( "(") (binary_expression "(ulong)uVar1 <\n        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (cast_expression "(ulong)uVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar1")) (< "<") (binary_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (binary_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /\n        (ulong)" (pointer_expression "*(ulong *)(*(long *)(param_2 + 0xf8) + 0x88)" (* "*") (cast_expression "(ulong *)(*(long *)(param_2 + 0xf8) + 0x88)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_2 + 0xf8) + 0x88)" (( "(") (binary_expression "*(long *)(param_2 + 0xf8) + 0x88" (pointer_expression "*(long *)(param_2 + 0xf8)" (* "*") (cast_expression "(long *)(param_2 + 0xf8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xf8)" (( "(") (binary_expression "param_2 + 0xf8" (identifier "param_2") (+ "+") (number_literal "0xf8")) () ")")))) (+ "+") (number_literal "0x88")) () ")")))) (/ "/") (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")"))) (* "*") (cast_expression "(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5)" (( "(") (binary_expression "*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5" (pointer_expression "*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" (* "*") (cast_expression "(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300)" (( "(") (binary_expression "*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300" (pointer_expression "*(long *)(*(long *)(param_2 + 8) + 0x368)" (* "*") (cast_expression "(long *)(*(long *)(param_2 + 8) + 0x368)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_2 + 8) + 0x368)" (( "(") (binary_expression "*(long *)(param_2 + 8) + 0x368" (pointer_expression "*(long *)(param_2 + 8)" (* "*") (cast_expression "(long *)(param_2 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "0x368")) () ")")))) (+ "+") (number_literal "0x300")) () ")")))) (+ "+") (number_literal "5")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);\n    }" ({ "{") (return_statement "return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);" (return "return") (pointer_expression "*(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" (* "*") (cast_expression "(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8)" (( "(") (binary_expression "DAT_0012cb40 + (ulong)(uVar1 - 1) * 8" (identifier "DAT_0012cb40") (+ "+") (binary_expression "(ulong)(uVar1 - 1) * 8" (call_expression "(ulong)(uVar1 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar1 - 1)" (( "(") (binary_expression "uVar1 - 1" (identifier "uVar1") (- "-") (number_literal "1")) () ")"))) (* "*") (number_literal "8"))) () ")")))) (; ";")) (} "}"))) (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" (identifier "lVar2") (= "=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return lVar2;" (return "return") (identifier "lVar2") (; ";")) (} "}")))

/* DWARF original prototype: asymbol * group_signature(asection * group, asection * group) */

type_1 * function_1(type_2 *group,type_2 *group_1)

{
  type_3 var_2;
  type_1 *paVar2;
  type_4 *abfd;
  
  paVar2 = (type_1 *)var_1;
  if (var_1 != (type_1 **)0x0) {
    if ((((*(int *)(*(long *)&group_1->id + 8) == 5) &&
         ((type_5)group->vma == group_1->symbol[0x42].flags)) &&
        (var_2 = *(type_3 *)((long)&group->vma + 4), var_2 != 0)) &&
       ((type_6)var_2 <
        group_1->symbol[2].udata.i /
        (type_6)*(type_7 *)(*(long *)(*(long *)(*(long *)&group_1->id + 0x368) + 0x300) + 5))) {
      return var_1[var_2 - 1];
    }
    paVar2 = (type_1 *)0x0;
  }
  return paVar2;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (parenthesized_expression (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (number_literal))))) right: (number_literal))))))))) consequence: (compound_statement (return_statement (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (return_statement (identifier)))))

long MASKED(long param_1,long param_2)

{
  uint uVar1;
  long lVar2;
  
  lVar2 = DAT_0012cb40;
  if (DAT_0012cb40 != 0) {
    if ((((*(int *)(*(long *)(param_2 + 8) + 8) == 5) &&
         (*(int *)(param_1 + 0x28) == *(int *)(*(long *)(param_2 + 0xf8) + 0xc78))) &&
        (uVar1 = *(uint *)(param_1 + 0x2c), uVar1 != 0)) &&
       ((ulong)uVar1 <
        *(ulong *)(*(long *)(param_2 + 0xf8) + 0x88) /
        (ulong)*(byte *)(*(long *)(*(long *)(*(long *)(param_2 + 8) + 0x368) + 0x300) + 5))) {
      return *(long *)(DAT_0012cb40 + (ulong)(uVar1 - 1) * 8);
    }
    lVar2 = 0;
  }
  return lVar2;
}

