
debug_type_conflict debug_find_tagged_type(void *handle,char *name,debug_type_kind kind)

{
  debug_type pdVar1;
  debug_name *pdVar2;
  int iVar3;
  debug_handle *info;
  debug_type_conflict pdVar4;
  
                    /* WARNING: Load size is inaccurate */
  pdVar4 = *handle;
  if (pdVar4 != (debug_type_conflict)0x0) {
    do {
      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {
        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {
          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;
              pdVar2 = pdVar2->next) {
            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&
                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&
                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {
              return (pdVar2->u).type;
            }
          }
        }
      }
      pdVar4 = *(debug_type_conflict *)pdVar4;
    } while (pdVar4 != (debug_type_conflict)0x0);
    pdVar4 = (debug_type_conflict)0x0;
  }
  return pdVar4;
}



long * FUN_0012dfe0(long *param_1,char *param_2,int param_3)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  int iVar3;
  
  param_1 = (long *)*param_1;
  if (param_1 != (long *)0x0) {
    do {
      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;
          puVar1 = (undefined8 *)*puVar1) {
        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {
          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;
              puVar2 = (undefined8 *)*puVar2) {
            if (((*(int *)((long)puVar2 + 0x14) == 1) &&
                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&
                 (*(char *)puVar2[1] == *param_2)))) &&
               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {
              return (long *)puVar2[4];
            }
          }
        }
      }
      param_1 = (long *)*param_1;
    } while (param_1 != (long *)0x0);
    param_1 = (long *)0x0;
  }
  return param_1;
}


PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV R13,qword ptr [RDI]
TEST R13,R13
JZ 0x0012e060
MOV R14,RSI
MOV R12D,EDX
MOV RBP,qword ptr [R13 + 0x8]
TEST RBP,RBP
JNZ 0x0012e011
JMP 0x0012e06c
MOV RBP,qword ptr [RBP]
TEST RBP,RBP
JZ 0x0012e06c
MOV RAX,qword ptr [RBP + 0x10]
TEST RAX,RAX
JZ 0x0012e008
MOV RBX,qword ptr [RAX]
TEST RBX,RBX
JNZ 0x0012e030
JMP 0x0012e008
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JZ 0x0012e008
CMP dword ptr [RBX + 0x14],0x1
JNZ 0x0012e028
TEST R12D,R12D
JZ 0x0012e044
MOV RAX,qword ptr [RBX + 0x20]
CMP dword ptr [RAX],R12D
JNZ 0x0012e028
MOV RDI,qword ptr [RBX + 0x8]
MOVZX EAX,byte ptr [R14]
CMP byte ptr [RDI],AL
JNZ 0x0012e028
MOV RSI,R14
CALL 0x00107450
TEST EAX,EAX
JNZ 0x0012e028
MOV R13,qword ptr [RBX + 0x20]
POP RBX
MOV RAX,R13
POP RBP
POP R12
POP R13
POP R14
RET
MOV R13,qword ptr [R13]
TEST R13,R13
JNZ 0x0012dff6
JMP 0x0012e060
(translation_unit "long * FUN_0012dfe0(long *param_1,char *param_2,int param_3)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}\n\n" (function_definition "long * FUN_0012dfe0(long *param_1,char *param_2,int param_3)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0012dfe0(long *param_1,char *param_2,int param_3)" * (function_declarator "FUN_0012dfe0(long *param_1,char *param_2,int param_3)" identifier (parameter_list "(long *param_1,char *param_2,int param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "param_1 = (long *)*param_1;" (assignment_expression "param_1 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }" if (parenthesized_expression "(param_1 != (long *)0x0)" ( (binary_expression "param_1 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }" { (do_statement "do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);" do (compound_statement "{\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    }" { (for_statement "for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }" for ( (assignment_expression "puVar1 = (undefined8 *)param_1[1]" identifier = (cast_expression "(undefined8 *)param_1[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ; (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar1 = (undefined8 *)*puVar1" identifier = (cast_expression "(undefined8 *)*puVar1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) ) (compound_statement "{\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }" { (if_statement "if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }" if (parenthesized_expression "((undefined8 *)puVar1[2] != (undefined8 *)0x0)" ( (binary_expression "(undefined8 *)puVar1[2] != (undefined8 *)0x0" (cast_expression "(undefined8 *)puVar1[2]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar1[2]" identifier [ number_literal ])) != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }" { (for_statement "for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }" for ( (assignment_expression "puVar2 = *(undefined8 **)puVar1[2]" identifier = (pointer_expression "*(undefined8 **)puVar1[2]" * (cast_expression "(undefined8 **)puVar1[2]" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "puVar1[2]" identifier [ number_literal ])))) ; (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined8 *)*puVar2" identifier = (cast_expression "(undefined8 *)*puVar2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }" { (if_statement "if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }" if (parenthesized_expression "(((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0))" ( (binary_expression "((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)" (parenthesized_expression "((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2))))" ( (binary_expression "(*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))" (parenthesized_expression "(*(int *)((long)puVar2 + 0x14) == 1)" ( (binary_expression "*(int *)((long)puVar2 + 0x14) == 1" (pointer_expression "*(int *)((long)puVar2 + 0x14)" * (cast_expression "(int *)((long)puVar2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar2 + 0x14)" ( (binary_expression "(long)puVar2 + 0x14" (cast_expression "(long)puVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) && (parenthesized_expression "(((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))" ( (parenthesized_expression "((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2))" ( (binary_expression "(param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)" (parenthesized_expression "(param_3 == 0 || (*(int *)puVar2[4] == param_3))" ( (binary_expression "param_3 == 0 || (*(int *)puVar2[4] == param_3)" (binary_expression "param_3 == 0" identifier == number_literal) || (parenthesized_expression "(*(int *)puVar2[4] == param_3)" ( (binary_expression "*(int *)puVar2[4] == param_3" (pointer_expression "*(int *)puVar2[4]" * (cast_expression "(int *)puVar2[4]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[4]" identifier [ number_literal ]))) == identifier) ))) )) && (parenthesized_expression "(*(char *)puVar2[1] == *param_2)" ( (binary_expression "*(char *)puVar2[1] == *param_2" (pointer_expression "*(char *)puVar2[1]" * (cast_expression "(char *)puVar2[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[1]" identifier [ number_literal ]))) == (pointer_expression "*param_2" * identifier)) ))) )) ))) )) && (parenthesized_expression "(iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)" ( (comma_expression "iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0" (assignment_expression "iVar3 = strcmp((char *)puVar2[1],param_2)" identifier = (call_expression "strcmp((char *)puVar2[1],param_2)" identifier (argument_list "((char *)puVar2[1],param_2)" ( (cast_expression "(char *)puVar2[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[1]" identifier [ number_literal ])) , identifier )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n              return (long *)puVar2[4];\n            }" { (return_statement "return (long *)puVar2[4];" return (cast_expression "(long *)puVar2[4]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[4]" identifier [ number_literal ])) ;) })) })) })) })) (expression_statement "param_1 = (long *)*param_1;" (assignment_expression "param_1 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) }) while (parenthesized_expression "(param_1 != (long *)0x0)" ( (binary_expression "param_1 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "param_1 = (long *)0x0;" (assignment_expression "param_1 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "debug_type_conflict debug_find_tagged_type(void *handle,char *name,debug_type_kind kind)\n\n{\n  debug_type pdVar1;\n  debug_name *pdVar2;\n  int iVar3;\n  debug_handle *info;\n  debug_type_conflict pdVar4;\n  \n                    /* WARNING: Load size is inaccurate */\n  pdVar4 = *handle;\n  if (pdVar4 != (debug_type_conflict)0x0) {\n    do {\n      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }\n      pdVar4 = *(debug_type_conflict *)pdVar4;\n    } while (pdVar4 != (debug_type_conflict)0x0);\n    pdVar4 = (debug_type_conflict)0x0;\n  }\n  return pdVar4;\n}\n\n" (function_definition "debug_type_conflict debug_find_tagged_type(void *handle,char *name,debug_type_kind kind)\n\n{\n  debug_type pdVar1;\n  debug_name *pdVar2;\n  int iVar3;\n  debug_handle *info;\n  debug_type_conflict pdVar4;\n  \n                    /* WARNING: Load size is inaccurate */\n  pdVar4 = *handle;\n  if (pdVar4 != (debug_type_conflict)0x0) {\n    do {\n      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }\n      pdVar4 = *(debug_type_conflict *)pdVar4;\n    } while (pdVar4 != (debug_type_conflict)0x0);\n    pdVar4 = (debug_type_conflict)0x0;\n  }\n  return pdVar4;\n}" type_identifier (function_declarator "debug_find_tagged_type(void *handle,char *name,debug_type_kind kind)" identifier (parameter_list "(void *handle,char *name,debug_type_kind kind)" ( (parameter_declaration "void *handle" primitive_type (pointer_declarator "*handle" * identifier)) , (parameter_declaration "char *name" primitive_type (pointer_declarator "*name" * identifier)) , (parameter_declaration "debug_type_kind kind" type_identifier identifier) ))) (compound_statement "{\n  debug_type pdVar1;\n  debug_name *pdVar2;\n  int iVar3;\n  debug_handle *info;\n  debug_type_conflict pdVar4;\n  \n                    /* WARNING: Load size is inaccurate */\n  pdVar4 = *handle;\n  if (pdVar4 != (debug_type_conflict)0x0) {\n    do {\n      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }\n      pdVar4 = *(debug_type_conflict *)pdVar4;\n    } while (pdVar4 != (debug_type_conflict)0x0);\n    pdVar4 = (debug_type_conflict)0x0;\n  }\n  return pdVar4;\n}" { (declaration "debug_type pdVar1;" type_identifier identifier ;) (declaration "debug_name *pdVar2;" type_identifier (pointer_declarator "*pdVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "debug_handle *info;" type_identifier (pointer_declarator "*info" * identifier) ;) (declaration "debug_type_conflict pdVar4;" type_identifier identifier ;) comment (expression_statement "pdVar4 = *handle;" (assignment_expression "pdVar4 = *handle" identifier = (pointer_expression "*handle" * identifier)) ;) (if_statement "if (pdVar4 != (debug_type_conflict)0x0) {\n    do {\n      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }\n      pdVar4 = *(debug_type_conflict *)pdVar4;\n    } while (pdVar4 != (debug_type_conflict)0x0);\n    pdVar4 = (debug_type_conflict)0x0;\n  }" if (parenthesized_expression "(pdVar4 != (debug_type_conflict)0x0)" ( (binary_expression "pdVar4 != (debug_type_conflict)0x0" identifier != (cast_expression "(debug_type_conflict)0x0" ( (type_descriptor "debug_type_conflict" type_identifier) ) number_literal)) )) (compound_statement "{\n    do {\n      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }\n      pdVar4 = *(debug_type_conflict *)pdVar4;\n    } while (pdVar4 != (debug_type_conflict)0x0);\n    pdVar4 = (debug_type_conflict)0x0;\n  }" { (do_statement "do {\n      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }\n      pdVar4 = *(debug_type_conflict *)pdVar4;\n    } while (pdVar4 != (debug_type_conflict)0x0);" do (compound_statement "{\n      for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }\n      pdVar4 = *(debug_type_conflict *)pdVar4;\n    }" { (for_statement "for (pdVar1 = pdVar4->pointer; pdVar1 != (debug_type)0x0; pdVar1 = *(debug_type *)pdVar1) {\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }" for ( (assignment_expression "pdVar1 = pdVar4->pointer" identifier = (field_expression "pdVar4->pointer" identifier -> field_identifier)) ; (binary_expression "pdVar1 != (debug_type)0x0" identifier != (cast_expression "(debug_type)0x0" ( (type_descriptor "debug_type" type_identifier) ) number_literal)) ; (assignment_expression "pdVar1 = *(debug_type *)pdVar1" identifier = (pointer_expression "*(debug_type *)pdVar1" * (cast_expression "(debug_type *)pdVar1" ( (type_descriptor "debug_type *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ) (compound_statement "{\n        if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }\n      }" { (if_statement "if ((pdVar1->u).knamed != (debug_named_type *)0x0) {\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }" if (parenthesized_expression "((pdVar1->u).knamed != (debug_named_type *)0x0)" ( (binary_expression "(pdVar1->u).knamed != (debug_named_type *)0x0" (field_expression "(pdVar1->u).knamed" (parenthesized_expression "(pdVar1->u)" ( (field_expression "pdVar1->u" identifier -> field_identifier) )) . field_identifier) != (cast_expression "(debug_named_type *)0x0" ( (type_descriptor "debug_named_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }\n        }" { (for_statement "for (pdVar2 = ((pdVar1->u).knamed)->name; pdVar2 != (debug_name *)0x0;\n              pdVar2 = pdVar2->next) {\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }" for ( (assignment_expression "pdVar2 = ((pdVar1->u).knamed)->name" identifier = (field_expression "((pdVar1->u).knamed)->name" (parenthesized_expression "((pdVar1->u).knamed)" ( (field_expression "(pdVar1->u).knamed" (parenthesized_expression "(pdVar1->u)" ( (field_expression "pdVar1->u" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) ; (binary_expression "pdVar2 != (debug_name *)0x0" identifier != (cast_expression "(debug_name *)0x0" ( (type_descriptor "debug_name *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pdVar2 = pdVar2->next" identifier = (field_expression "pdVar2->next" identifier -> field_identifier)) ) (compound_statement "{\n            if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }\n          }" { (if_statement "if (((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)) {\n              return (pdVar2->u).type;\n            }" if (parenthesized_expression "(((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0))" ( (binary_expression "((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))) && (iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)" (parenthesized_expression "((pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name))))" ( (binary_expression "(pdVar2->kind == DEBUG_OBJECT_TAG) &&\n                (((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))" (parenthesized_expression "(pdVar2->kind == DEBUG_OBJECT_TAG)" ( (binary_expression "pdVar2->kind == DEBUG_OBJECT_TAG" (field_expression "pdVar2->kind" identifier -> field_identifier) == identifier) )) && (parenthesized_expression "(((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)))" ( (parenthesized_expression "((kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name))" ( (binary_expression "(kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)) &&\n                 (*pdVar2->name == *name)" (parenthesized_expression "(kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind))" ( (binary_expression "kind == DEBUG_KIND_ILLEGAL || (((pdVar2->u).type)->kind == kind)" (binary_expression "kind == DEBUG_KIND_ILLEGAL" identifier == identifier) || (parenthesized_expression "(((pdVar2->u).type)->kind == kind)" ( (binary_expression "((pdVar2->u).type)->kind == kind" (field_expression "((pdVar2->u).type)->kind" (parenthesized_expression "((pdVar2->u).type)" ( (field_expression "(pdVar2->u).type" (parenthesized_expression "(pdVar2->u)" ( (field_expression "pdVar2->u" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) == identifier) ))) )) && (parenthesized_expression "(*pdVar2->name == *name)" ( (binary_expression "*pdVar2->name == *name" (pointer_expression "*pdVar2->name" * (field_expression "pdVar2->name" identifier -> field_identifier)) == (pointer_expression "*name" * identifier)) ))) )) ))) )) && (parenthesized_expression "(iVar3 = strcmp(pdVar2->name,name), iVar3 == 0)" ( (comma_expression "iVar3 = strcmp(pdVar2->name,name), iVar3 == 0" (assignment_expression "iVar3 = strcmp(pdVar2->name,name)" identifier = (call_expression "strcmp(pdVar2->name,name)" identifier (argument_list "(pdVar2->name,name)" ( (field_expression "pdVar2->name" identifier -> field_identifier) , identifier )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n              return (pdVar2->u).type;\n            }" { (return_statement "return (pdVar2->u).type;" return (field_expression "(pdVar2->u).type" (parenthesized_expression "(pdVar2->u)" ( (field_expression "pdVar2->u" identifier -> field_identifier) )) . field_identifier) ;) })) })) })) })) (expression_statement "pdVar4 = *(debug_type_conflict *)pdVar4;" (assignment_expression "pdVar4 = *(debug_type_conflict *)pdVar4" identifier = (pointer_expression "*(debug_type_conflict *)pdVar4" * (cast_expression "(debug_type_conflict *)pdVar4" ( (type_descriptor "debug_type_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) }) while (parenthesized_expression "(pdVar4 != (debug_type_conflict)0x0)" ( (binary_expression "pdVar4 != (debug_type_conflict)0x0" identifier != (cast_expression "(debug_type_conflict)0x0" ( (type_descriptor "debug_type_conflict" type_identifier) ) number_literal)) )) ;) (expression_statement "pdVar4 = (debug_type_conflict)0x0;" (assignment_expression "pdVar4 = (debug_type_conflict)0x0" identifier = (cast_expression "(debug_type_conflict)0x0" ( (type_descriptor "debug_type_conflict" type_identifier) ) number_literal)) ;) })) (return_statement "return pdVar4;" return identifier ;) })))
(translation_unit "long * FUN_0012dfe0(long *param_1,char *param_2,int param_3)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}\n\n" (function_definition "long * FUN_0012dfe0(long *param_1,char *param_2,int param_3)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0012dfe0(long *param_1,char *param_2,int param_3)" * (function_declarator "FUN_0012dfe0(long *param_1,char *param_2,int param_3)" identifier (parameter_list "(long *param_1,char *param_2,int param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "param_1 = (long *)*param_1;" (assignment_expression "param_1 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }" if (parenthesized_expression "(param_1 != (long *)0x0)" ( (binary_expression "param_1 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }" { (do_statement "do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);" do (compound_statement "{\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    }" { (for_statement "for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }" for ( (assignment_expression "puVar1 = (undefined8 *)param_1[1]" identifier = (cast_expression "(undefined8 *)param_1[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ; (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar1 = (undefined8 *)*puVar1" identifier = (cast_expression "(undefined8 *)*puVar1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) ) (compound_statement "{\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }" { (if_statement "if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }" if (parenthesized_expression "((undefined8 *)puVar1[2] != (undefined8 *)0x0)" ( (binary_expression "(undefined8 *)puVar1[2] != (undefined8 *)0x0" (cast_expression "(undefined8 *)puVar1[2]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar1[2]" identifier [ number_literal ])) != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }" { (for_statement "for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }" for ( (assignment_expression "puVar2 = *(undefined8 **)puVar1[2]" identifier = (pointer_expression "*(undefined8 **)puVar1[2]" * (cast_expression "(undefined8 **)puVar1[2]" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "puVar1[2]" identifier [ number_literal ])))) ; (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined8 *)*puVar2" identifier = (cast_expression "(undefined8 *)*puVar2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }" { (if_statement "if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }" if (parenthesized_expression "(((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0))" ( (binary_expression "((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)" (parenthesized_expression "((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2))))" ( (binary_expression "(*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))" (parenthesized_expression "(*(int *)((long)puVar2 + 0x14) == 1)" ( (binary_expression "*(int *)((long)puVar2 + 0x14) == 1" (pointer_expression "*(int *)((long)puVar2 + 0x14)" * (cast_expression "(int *)((long)puVar2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar2 + 0x14)" ( (binary_expression "(long)puVar2 + 0x14" (cast_expression "(long)puVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) && (parenthesized_expression "(((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))" ( (parenthesized_expression "((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2))" ( (binary_expression "(param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)" (parenthesized_expression "(param_3 == 0 || (*(int *)puVar2[4] == param_3))" ( (binary_expression "param_3 == 0 || (*(int *)puVar2[4] == param_3)" (binary_expression "param_3 == 0" identifier == number_literal) || (parenthesized_expression "(*(int *)puVar2[4] == param_3)" ( (binary_expression "*(int *)puVar2[4] == param_3" (pointer_expression "*(int *)puVar2[4]" * (cast_expression "(int *)puVar2[4]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[4]" identifier [ number_literal ]))) == identifier) ))) )) && (parenthesized_expression "(*(char *)puVar2[1] == *param_2)" ( (binary_expression "*(char *)puVar2[1] == *param_2" (pointer_expression "*(char *)puVar2[1]" * (cast_expression "(char *)puVar2[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[1]" identifier [ number_literal ]))) == (pointer_expression "*param_2" * identifier)) ))) )) ))) )) && (parenthesized_expression "(iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)" ( (comma_expression "iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0" (assignment_expression "iVar3 = strcmp((char *)puVar2[1],param_2)" identifier = (call_expression "strcmp((char *)puVar2[1],param_2)" identifier (argument_list "((char *)puVar2[1],param_2)" ( (cast_expression "(char *)puVar2[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[1]" identifier [ number_literal ])) , identifier )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n              return (long *)puVar2[4];\n            }" { (return_statement "return (long *)puVar2[4];" return (cast_expression "(long *)puVar2[4]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[4]" identifier [ number_literal ])) ;) })) })) })) })) (expression_statement "param_1 = (long *)*param_1;" (assignment_expression "param_1 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) }) while (parenthesized_expression "(param_1 != (long *)0x0)" ( (binary_expression "param_1 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "param_1 = (long *)0x0;" (assignment_expression "param_1 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (do_statement do (compound_statement { (for_statement for ( (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (subscript_expression IDENT [ LIT ])))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (if_statement if (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) == LIT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT == LIT) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) == IDENT) ))) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) == (pointer_expression * IDENT)) ))) )) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , IDENT )))) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) ;) })) })) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) })) (return_statement return IDENT ;) })))
(function_definition "long * FUN_0012dfe0(long *param_1,char *param_2,int param_3)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_0012dfe0(long *param_1,char *param_2,int param_3)" (* "*") (function_declarator "FUN_0012dfe0(long *param_1,char *param_2,int param_3)" (identifier "FUN_0012dfe0") (parameter_list "(long *param_1,char *param_2,int param_3)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")")))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  \n  param_1 = (long *)*param_1;\n  if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }\n  return param_1;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (expression_statement "param_1 = (long *)*param_1;" (assignment_expression "param_1 = (long *)*param_1" (identifier "param_1") (= "=") (cast_expression "(long *)*param_1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (param_1 != (long *)0x0) {\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }" (if "if") (parenthesized_expression "(param_1 != (long *)0x0)" (( "(") (binary_expression "param_1 != (long *)0x0" (identifier "param_1") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);\n    param_1 = (long *)0x0;\n  }" ({ "{") (do_statement "do {\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    } while (param_1 != (long *)0x0);" (do "do") (compound_statement "{\n      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }\n      param_1 = (long *)*param_1;\n    }" ({ "{") (for_statement "for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;\n          puVar1 = (undefined8 *)*puVar1) {\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }" (for "for") (( "(") (assignment_expression "puVar1 = (undefined8 *)param_1[1]" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)param_1[1]" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) (; ";") (binary_expression "puVar1 != (undefined8 *)0x0" (identifier "puVar1") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar1 = (undefined8 *)*puVar1" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)*puVar1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) () ")") (compound_statement "{\n        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }\n      }" ({ "{") (if_statement "if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }" (if "if") (parenthesized_expression "((undefined8 *)puVar1[2] != (undefined8 *)0x0)" (( "(") (binary_expression "(undefined8 *)puVar1[2] != (undefined8 *)0x0" (cast_expression "(undefined8 *)puVar1[2]" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar1[2]" (identifier "puVar1") ([ "[") (number_literal "2") (] "]"))) (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }\n        }" ({ "{") (for_statement "for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;\n              puVar2 = (undefined8 *)*puVar2) {\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }" (for "for") (( "(") (assignment_expression "puVar2 = *(undefined8 **)puVar1[2]" (identifier "puVar2") (= "=") (pointer_expression "*(undefined8 **)puVar1[2]" (* "*") (cast_expression "(undefined8 **)puVar1[2]" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (subscript_expression "puVar1[2]" (identifier "puVar1") ([ "[") (number_literal "2") (] "]"))))) (; ";") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar2 = (undefined8 *)*puVar2" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*puVar2" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) () ")") (compound_statement "{\n            if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }\n          }" ({ "{") (if_statement "if (((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {\n              return (long *)puVar2[4];\n            }" (if "if") (parenthesized_expression "(((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0))" (( "(") (binary_expression "((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))) &&\n               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)" (parenthesized_expression "((*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2))))" (( "(") (binary_expression "(*(int *)((long)puVar2 + 0x14) == 1) &&\n                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))" (parenthesized_expression "(*(int *)((long)puVar2 + 0x14) == 1)" (( "(") (binary_expression "*(int *)((long)puVar2 + 0x14) == 1" (pointer_expression "*(int *)((long)puVar2 + 0x14)" (* "*") (cast_expression "(int *)((long)puVar2 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar2 + 0x14)" (( "(") (binary_expression "(long)puVar2 + 0x14" (cast_expression "(long)puVar2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar2")) (+ "+") (number_literal "0x14")) () ")")))) (== "==") (number_literal "1")) () ")")) (&& "&&") (parenthesized_expression "(((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)))" (( "(") (parenthesized_expression "((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2))" (( "(") (binary_expression "(param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&\n                 (*(char *)puVar2[1] == *param_2)" (parenthesized_expression "(param_3 == 0 || (*(int *)puVar2[4] == param_3))" (( "(") (binary_expression "param_3 == 0 || (*(int *)puVar2[4] == param_3)" (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "(*(int *)puVar2[4] == param_3)" (( "(") (binary_expression "*(int *)puVar2[4] == param_3" (pointer_expression "*(int *)puVar2[4]" (* "*") (cast_expression "(int *)puVar2[4]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar2[4]" (identifier "puVar2") ([ "[") (number_literal "4") (] "]")))) (== "==") (identifier "param_3")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(*(char *)puVar2[1] == *param_2)" (( "(") (binary_expression "*(char *)puVar2[1] == *param_2" (pointer_expression "*(char *)puVar2[1]" (* "*") (cast_expression "(char *)puVar2[1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar2[1]" (identifier "puVar2") ([ "[") (number_literal "1") (] "]")))) (== "==") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")"))) () ")")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)" (( "(") (comma_expression "iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0" (assignment_expression "iVar3 = strcmp((char *)puVar2[1],param_2)" (identifier "iVar3") (= "=") (call_expression "strcmp((char *)puVar2[1],param_2)" (identifier "strcmp") (argument_list "((char *)puVar2[1],param_2)" (( "(") (cast_expression "(char *)puVar2[1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar2[1]" (identifier "puVar2") ([ "[") (number_literal "1") (] "]"))) (, ",") (identifier "param_2") () ")")))) (, ",") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n              return (long *)puVar2[4];\n            }" ({ "{") (return_statement "return (long *)puVar2[4];" (return "return") (cast_expression "(long *)puVar2[4]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar2[4]" (identifier "puVar2") ([ "[") (number_literal "4") (] "]"))) (; ";")) (} "}"))) (} "}"))) (} "}"))) (} "}"))) (expression_statement "param_1 = (long *)*param_1;" (assignment_expression "param_1 = (long *)*param_1" (identifier "param_1") (= "=") (cast_expression "(long *)*param_1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 != (long *)0x0)" (( "(") (binary_expression "param_1 != (long *)0x0" (identifier "param_1") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (expression_statement "param_1 = (long *)0x0;" (assignment_expression "param_1 = (long *)0x0" (identifier "param_1") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

type_1 function_1(void *handle,char *name,type_2 var_5)

{
  type_3 var_2;
  type_4 *var_3;
  int var_8;
  type_5 *info;
  type_1 var_1;
  
                    /* WARNING: Load size is inaccurate */
  var_1 = *handle;
  if (var_1 != (type_1)0x0) {
    do {
      for (var_2 = var_1->pointer; var_2 != (type_3)0x0; var_2 = *(type_3 *)var_2) {
        if ((var_2->u).knamed != (type_6 *)0x0) {
          for (var_3 = ((var_2->u).knamed)->name; var_3 != (type_4 *)0x0;
              var_3 = var_3->next) {
            if (((var_3->var_5 == var_4) &&
                (((var_5 == var_6 || (((var_3->u).type)->var_5 == var_5)) &&
                 (*var_3->name == *name)))) && (var_8 = var_7(var_3->name,name), var_8 == 0)) {
              return (var_3->u).type;
            }
          }
        }
      }
      var_1 = *(type_1 *)var_1;
    } while (var_1 != (type_1)0x0);
    var_1 = (type_1)0x0;
  }
  return var_1;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (do_statement body: (compound_statement (for_statement initializer: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (for_statement initializer: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (subscript_expression argument: (identifier) index: (number_literal))))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) body: (compound_statement (if_statement condition: (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: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) 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: (subscript_expression argument: (identifier) index: (number_literal)))) right: (identifier))))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (pointer_expression argument: (identifier))))))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) (identifier)))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) (return_statement (identifier)))))

long * MASKED(long *param_1,char *param_2,int param_3)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  int iVar3;
  
  param_1 = (long *)*param_1;
  if (param_1 != (long *)0x0) {
    do {
      for (puVar1 = (undefined8 *)param_1[1]; puVar1 != (undefined8 *)0x0;
          puVar1 = (undefined8 *)*puVar1) {
        if ((undefined8 *)puVar1[2] != (undefined8 *)0x0) {
          for (puVar2 = *(undefined8 **)puVar1[2]; puVar2 != (undefined8 *)0x0;
              puVar2 = (undefined8 *)*puVar2) {
            if (((*(int *)((long)puVar2 + 0x14) == 1) &&
                (((param_3 == 0 || (*(int *)puVar2[4] == param_3)) &&
                 (*(char *)puVar2[1] == *param_2)))) &&
               (iVar3 = strcmp((char *)puVar2[1],param_2), iVar3 == 0)) {
              return (long *)puVar2[4];
            }
          }
        }
      }
      param_1 = (long *)*param_1;
    } while (param_1 != (long *)0x0);
    param_1 = (long *)0x0;
  }
  return param_1;
}

