
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x0017c820) */
/* WARNING: Removing unreachable block (ram,0x0017c7b0) */

char * __regparm3 dlang_function_type(string *decl,char *mangled)

{
  char *pcVar1;
  char *pcVar2;
  char *pcVar3;
  string *in_stack_ffffffa4;
  char *in_stack_ffffffa8;
  string attr;
  string args;
  string type;
  
  pcVar3 = (char *)0x0;
  if ((mangled != (char *)0x0) && (*mangled != '\0')) {
    args.e = (char *)0x0;
    args.p = (char *)0x0;
    args.b = (char *)0x0;
    type.e = (char *)0x0;
    type.p = (char *)0x0;
    type.b = (char *)0x0;
    pcVar3 = dlang_call_convention(decl,mangled);
    if (pcVar3 != (char *)0x0) {
      if (*pcVar3 == '\0') {
        pcVar3 = (char *)0x0;
      }
      else {
        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);
      }
    }
    pcVar3 = dlang_function_args(&args,pcVar3);
    pcVar2 = args.p;
    pcVar1 = args.b;
    if (args.b == args.p) {
      pcVar3 = dlang_type(&type,pcVar3);
      if (type.b != type.p) {
        string_appendn(decl,type.b,(int)type.p - (int)type.b);
      }
      string_append(decl,"(");
    }
    else {
      pcVar3 = dlang_type(&type,pcVar3);
      if (type.b != type.p) {
        string_appendn(decl,type.b,(int)type.p - (int)type.b);
      }
      string_append(decl,"(");
      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);
    }
    string_append(decl,") ");
    if (args.b != (char *)0x0) {
      free(args.b);
      args.p = (char *)0x0;
      args.e = (char *)0x0;
      args.b = (char *)0x0;
    }
    if (type.b != (char *)0x0) {
      free(type.b);
    }
  }
  return pcVar3;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x0017c7dc) */
/* WARNING: Removing unreachable block (ram,0x0017c820) */
/* WARNING: Removing unreachable block (ram,0x0017c75b) */
/* WARNING: Removing unreachable block (ram,0x0017c853) */
/* WARNING: Removing unreachable block (ram,0x0017c76e) */
/* WARNING: Removing unreachable block (ram,0x0017c777) */
/* WARNING: Removing unreachable block (ram,0x0017c7b0) */
/* WARNING: Removing unreachable block (ram,0x0017c808) */

undefined4 __regparm3 FUN_0017c690(undefined4 param_1,char *param_2)

{
  char *pcVar1;
  undefined4 uVar2;
  
  uVar2 = 0;
  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {
    pcVar1 = (char *)FUN_0017b8a0();
    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {
      FUN_0017ba50();
    }
    FUN_0017ceb0();
    uVar2 = FUN_0017c870();
    FUN_0017b850();
    FUN_0017b850();
  }
  return uVar2;
}


PUSH EBP
PUSH EDI
XOR EDI,EDI
PUSH ESI
PUSH EBX
CALL 0x00032730
ADD EBX,0x185965
SUB ESP,0x4c
TEST EDX,EDX
JZ 0x0017c814
CMP byte ptr [EDX],0x0
JZ 0x0017c814
MOV ESI,EAX
MOV dword ptr [ESP + 0x24],0x0
MOV dword ptr [ESP + 0x20],0x0
MOV dword ptr [ESP + 0x1c],0x0
MOV dword ptr [ESP + 0x30],0x0
MOV dword ptr [ESP + 0x2c],0x0
MOV dword ptr [ESP + 0x28],0x0
MOV dword ptr [ESP + 0x3c],0x0
MOV dword ptr [ESP + 0x38],0x0
MOV dword ptr [ESP + 0x34],0x0
CALL 0x0017b8a0
MOV EDX,EAX
TEST EAX,EAX
JZ 0x0017c71e
CMP byte ptr [EAX],0x0
JZ 0x0017c838
LEA EAX,[ESP + 0x1c]
CALL 0x0017ba50
MOV EDX,EAX
MOV EAX,dword ptr [ESP + 0x20]
MOV ECX,dword ptr [ESP + 0x1c]
MOV EBP,EAX
SUB EBP,ECX
CMP ECX,EAX
MOV EAX,0x0
CMOVZ EBP,EAX
LEA EAX,[ESP + 0x28]
CALL 0x0017ceb0
MOV EDI,dword ptr [ESP + 0x2c]
MOV EDX,EAX
MOV EAX,dword ptr [ESP + 0x28]
MOV dword ptr [ESP + 0xc],EDI
CMP EAX,EDI
MOV dword ptr [ESP + 0x8],EAX
LEA EAX,[ESP + 0x34]
JZ 0x0017c840
CALL 0x0017c870
MOV EDX,dword ptr [ESP + 0x34]
MOV ECX,dword ptr [ESP + 0x38]
MOV EDI,EAX
CMP EDX,ECX
JZ 0x0017c777
SUB ECX,EDX
MOV EAX,ESI
CALL 0x0017bbd0
LEA EDX,[EBX + 0xfff2b10c]
MOV EAX,ESI
CALL 0x0017b850
MOV EDX,dword ptr [ESP + 0x28]
MOV ECX,dword ptr [ESP + 0xc]
MOV EAX,ESI
SUB ECX,dword ptr [ESP + 0x8]
CALL 0x0017bbd0
LEA EDX,[EBX + 0xfff37616]
MOV EAX,ESI
CALL 0x0017b850
MOV EDX,dword ptr [ESP + 0x1c]
TEST EBP,EBP
JNZ 0x0017c820
TEST EDX,EDX
JZ 0x0017c7d4
SUB ESP,0xc
PUSH EDX
CALL 0x00026410
MOV dword ptr [ESP + 0x30],0x0
MOV dword ptr [ESP + 0x34],0x0
MOV dword ptr [ESP + 0x2c],0x0
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x28]
TEST EAX,EAX
JZ 0x0017c800
SUB ESP,0xc
PUSH EAX
CALL 0x00026410
MOV dword ptr [ESP + 0x3c],0x0
MOV dword ptr [ESP + 0x40],0x0
MOV dword ptr [ESP + 0x38],0x0
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x34]
TEST EAX,EAX
JZ 0x0017c814
SUB ESP,0xc
PUSH EAX
CALL 0x00026410
ADD ESP,0x10
ADD ESP,0x4c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ECX,EBP
MOV EAX,ESI
CALL 0x0017bbd0
MOV EDX,dword ptr [ESP + 0x1c]
JMP 0x0017c7ac
XOR EDX,EDX
JMP 0x0017c71e
CALL 0x0017c870
MOV EDX,dword ptr [ESP + 0x34]
MOV ECX,dword ptr [ESP + 0x38]
MOV EDI,EAX
CMP EDX,ECX
JZ 0x0017c85c
SUB ECX,EDX
MOV EAX,ESI
CALL 0x0017bbd0
LEA EDX,[EBX + 0xfff2b10c]
MOV EAX,ESI
CALL 0x0017b850
JMP 0x0017c797
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Removing unreachable block (ram,0x0017c7dc) */\n/* WARNING: Removing unreachable block (ram,0x0017c820) */\n/* WARNING: Removing unreachable block (ram,0x0017c75b) */\n/* WARNING: Removing unreachable block (ram,0x0017c853) */\n/* WARNING: Removing unreachable block (ram,0x0017c76e) */\n/* WARNING: Removing unreachable block (ram,0x0017c777) */\n/* WARNING: Removing unreachable block (ram,0x0017c7b0) */\n/* WARNING: Removing unreachable block (ram,0x0017c808) */\n\nundefined4 __regparm3 FUN_0017c690(undefined4 param_1,char *param_2)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}\n\n" comment comment comment comment comment comment comment comment comment (function_definition "undefined4 __regparm3 FUN_0017c690(undefined4 param_1,char *param_2)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0017c690(undefined4 param_1,char *param_2)" identifier (parameter_list "(undefined4 param_1,char *param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (if_statement "if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }" if (parenthesized_expression "((param_2 != (char *)0x0) && (*param_2 != '\0'))" ( (binary_expression "(param_2 != (char *)0x0) && (*param_2 != '\0')" (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*param_2 != '\0')" ( (binary_expression "*param_2 != '\0'" (pointer_expression "*param_2" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }" { (expression_statement "pcVar1 = (char *)FUN_0017b8a0();" (assignment_expression "pcVar1 = (char *)FUN_0017b8a0()" identifier = (cast_expression "(char *)FUN_0017b8a0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0017b8a0()" identifier (argument_list "()" ( ))))) ;) (if_statement "if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }" if (parenthesized_expression "((pcVar1 != (char *)0x0) && (*pcVar1 != '\0'))" ( (binary_expression "(pcVar1 != (char *)0x0) && (*pcVar1 != '\0')" (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar1 != '\0')" ( (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n      FUN_0017ba50();\n    }" { (expression_statement "FUN_0017ba50();" (call_expression "FUN_0017ba50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_0017ceb0();" (call_expression "FUN_0017ceb0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar2 = FUN_0017c870();" (assignment_expression "uVar2 = FUN_0017c870()" identifier = (call_expression "FUN_0017c870()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_0017b850();" (call_expression "FUN_0017b850()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0017b850();" (call_expression "FUN_0017b850()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Removing unreachable block (ram,0x0017c820) */\n/* WARNING: Removing unreachable block (ram,0x0017c7b0) */\n\nchar * __regparm3 dlang_function_type(string *decl,char *mangled)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  char *pcVar3;\n  string *in_stack_ffffffa4;\n  char *in_stack_ffffffa8;\n  string attr;\n  string args;\n  string type;\n  \n  pcVar3 = (char *)0x0;\n  if ((mangled != (char *)0x0) && (*mangled != '\0')) {\n    args.e = (char *)0x0;\n    args.p = (char *)0x0;\n    args.b = (char *)0x0;\n    type.e = (char *)0x0;\n    type.p = (char *)0x0;\n    type.b = (char *)0x0;\n    pcVar3 = dlang_call_convention(decl,mangled);\n    if (pcVar3 != (char *)0x0) {\n      if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }\n    }\n    pcVar3 = dlang_function_args(&args,pcVar3);\n    pcVar2 = args.p;\n    pcVar1 = args.b;\n    if (args.b == args.p) {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n    }\n    else {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }\n    string_append(decl,") ");\n    if (args.b != (char *)0x0) {\n      free(args.b);\n      args.p = (char *)0x0;\n      args.e = (char *)0x0;\n      args.b = (char *)0x0;\n    }\n    if (type.b != (char *)0x0) {\n      free(type.b);\n    }\n  }\n  return pcVar3;\n}\n\n" comment comment comment (function_definition "char * __regparm3 dlang_function_type(string *decl,char *mangled)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  char *pcVar3;\n  string *in_stack_ffffffa4;\n  char *in_stack_ffffffa8;\n  string attr;\n  string args;\n  string type;\n  \n  pcVar3 = (char *)0x0;\n  if ((mangled != (char *)0x0) && (*mangled != '\0')) {\n    args.e = (char *)0x0;\n    args.p = (char *)0x0;\n    args.b = (char *)0x0;\n    type.e = (char *)0x0;\n    type.p = (char *)0x0;\n    type.b = (char *)0x0;\n    pcVar3 = dlang_call_convention(decl,mangled);\n    if (pcVar3 != (char *)0x0) {\n      if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }\n    }\n    pcVar3 = dlang_function_args(&args,pcVar3);\n    pcVar2 = args.p;\n    pcVar1 = args.b;\n    if (args.b == args.p) {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n    }\n    else {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }\n    string_append(decl,") ");\n    if (args.b != (char *)0x0) {\n      free(args.b);\n      args.p = (char *)0x0;\n      args.e = (char *)0x0;\n      args.b = (char *)0x0;\n    }\n    if (type.b != (char *)0x0) {\n      free(type.b);\n    }\n  }\n  return pcVar3;\n}" primitive_type (pointer_declarator "* __regparm3 dlang_function_type(string *decl,char *mangled)" * (ERROR "__regparm3" identifier) (function_declarator "dlang_function_type(string *decl,char *mangled)" identifier (parameter_list "(string *decl,char *mangled)" ( (parameter_declaration "string *decl" type_identifier (pointer_declarator "*decl" * identifier)) , (parameter_declaration "char *mangled" primitive_type (pointer_declarator "*mangled" * identifier)) )))) (compound_statement "{\n  char *pcVar1;\n  char *pcVar2;\n  char *pcVar3;\n  string *in_stack_ffffffa4;\n  char *in_stack_ffffffa8;\n  string attr;\n  string args;\n  string type;\n  \n  pcVar3 = (char *)0x0;\n  if ((mangled != (char *)0x0) && (*mangled != '\0')) {\n    args.e = (char *)0x0;\n    args.p = (char *)0x0;\n    args.b = (char *)0x0;\n    type.e = (char *)0x0;\n    type.p = (char *)0x0;\n    type.b = (char *)0x0;\n    pcVar3 = dlang_call_convention(decl,mangled);\n    if (pcVar3 != (char *)0x0) {\n      if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }\n    }\n    pcVar3 = dlang_function_args(&args,pcVar3);\n    pcVar2 = args.p;\n    pcVar1 = args.b;\n    if (args.b == args.p) {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n    }\n    else {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }\n    string_append(decl,") ");\n    if (args.b != (char *)0x0) {\n      free(args.b);\n      args.p = (char *)0x0;\n      args.e = (char *)0x0;\n      args.b = (char *)0x0;\n    }\n    if (type.b != (char *)0x0) {\n      free(type.b);\n    }\n  }\n  return pcVar3;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "string *in_stack_ffffffa4;" type_identifier (pointer_declarator "*in_stack_ffffffa4" * identifier) ;) (declaration "char *in_stack_ffffffa8;" primitive_type (pointer_declarator "*in_stack_ffffffa8" * identifier) ;) (declaration "string attr;" type_identifier identifier ;) (declaration "string args;" type_identifier identifier ;) (declaration "string type;" type_identifier identifier ;) (expression_statement "pcVar3 = (char *)0x0;" (assignment_expression "pcVar3 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((mangled != (char *)0x0) && (*mangled != '\0')) {\n    args.e = (char *)0x0;\n    args.p = (char *)0x0;\n    args.b = (char *)0x0;\n    type.e = (char *)0x0;\n    type.p = (char *)0x0;\n    type.b = (char *)0x0;\n    pcVar3 = dlang_call_convention(decl,mangled);\n    if (pcVar3 != (char *)0x0) {\n      if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }\n    }\n    pcVar3 = dlang_function_args(&args,pcVar3);\n    pcVar2 = args.p;\n    pcVar1 = args.b;\n    if (args.b == args.p) {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n    }\n    else {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }\n    string_append(decl,") ");\n    if (args.b != (char *)0x0) {\n      free(args.b);\n      args.p = (char *)0x0;\n      args.e = (char *)0x0;\n      args.b = (char *)0x0;\n    }\n    if (type.b != (char *)0x0) {\n      free(type.b);\n    }\n  }" if (parenthesized_expression "((mangled != (char *)0x0) && (*mangled != '\0'))" ( (binary_expression "(mangled != (char *)0x0) && (*mangled != '\0')" (parenthesized_expression "(mangled != (char *)0x0)" ( (binary_expression "mangled != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*mangled != '\0')" ( (binary_expression "*mangled != '\0'" (pointer_expression "*mangled" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    args.e = (char *)0x0;\n    args.p = (char *)0x0;\n    args.b = (char *)0x0;\n    type.e = (char *)0x0;\n    type.p = (char *)0x0;\n    type.b = (char *)0x0;\n    pcVar3 = dlang_call_convention(decl,mangled);\n    if (pcVar3 != (char *)0x0) {\n      if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }\n    }\n    pcVar3 = dlang_function_args(&args,pcVar3);\n    pcVar2 = args.p;\n    pcVar1 = args.b;\n    if (args.b == args.p) {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n    }\n    else {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }\n    string_append(decl,") ");\n    if (args.b != (char *)0x0) {\n      free(args.b);\n      args.p = (char *)0x0;\n      args.e = (char *)0x0;\n      args.b = (char *)0x0;\n    }\n    if (type.b != (char *)0x0) {\n      free(type.b);\n    }\n  }" { (expression_statement "args.e = (char *)0x0;" (assignment_expression "args.e = (char *)0x0" (field_expression "args.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "args.p = (char *)0x0;" (assignment_expression "args.p = (char *)0x0" (field_expression "args.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "args.b = (char *)0x0;" (assignment_expression "args.b = (char *)0x0" (field_expression "args.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "type.e = (char *)0x0;" (assignment_expression "type.e = (char *)0x0" (field_expression "type.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "type.p = (char *)0x0;" (assignment_expression "type.p = (char *)0x0" (field_expression "type.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "type.b = (char *)0x0;" (assignment_expression "type.b = (char *)0x0" (field_expression "type.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar3 = dlang_call_convention(decl,mangled);" (assignment_expression "pcVar3 = dlang_call_convention(decl,mangled)" identifier = (call_expression "dlang_call_convention(decl,mangled)" identifier (argument_list "(decl,mangled)" ( identifier , identifier )))) ;) (if_statement "if (pcVar3 != (char *)0x0) {\n      if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }\n    }" if (parenthesized_expression "(pcVar3 != (char *)0x0)" ( (binary_expression "pcVar3 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }\n    }" { (if_statement "if (*pcVar3 == '\0') {\n        pcVar3 = (char *)0x0;\n      }\n      else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }" if (parenthesized_expression "(*pcVar3 == '\0')" ( (binary_expression "*pcVar3 == '\0'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        pcVar3 = (char *)0x0;\n      }" { (expression_statement "pcVar3 = (char *)0x0;" (assignment_expression "pcVar3 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }" else (compound_statement "{\n        pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);\n      }" { (expression_statement "pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8);" (assignment_expression "pcVar3 = dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8)" identifier = (call_expression "dlang_attributes(in_stack_ffffffa4,in_stack_ffffffa8)" identifier (argument_list "(in_stack_ffffffa4,in_stack_ffffffa8)" ( identifier , identifier )))) ;) }))) })) (expression_statement "pcVar3 = dlang_function_args(&args,pcVar3);" (assignment_expression "pcVar3 = dlang_function_args(&args,pcVar3)" identifier = (call_expression "dlang_function_args(&args,pcVar3)" identifier (argument_list "(&args,pcVar3)" ( (pointer_expression "&args" & identifier) , identifier )))) ;) (expression_statement "pcVar2 = args.p;" (assignment_expression "pcVar2 = args.p" identifier = (field_expression "args.p" identifier . field_identifier)) ;) (expression_statement "pcVar1 = args.b;" (assignment_expression "pcVar1 = args.b" identifier = (field_expression "args.b" identifier . field_identifier)) ;) (if_statement "if (args.b == args.p) {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n    }\n    else {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }" if (parenthesized_expression "(args.b == args.p)" ( (binary_expression "args.b == args.p" (field_expression "args.b" identifier . field_identifier) == (field_expression "args.p" identifier . field_identifier)) )) (compound_statement "{\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n    }" { (expression_statement "pcVar3 = dlang_type(&type,pcVar3);" (assignment_expression "pcVar3 = dlang_type(&type,pcVar3)" identifier = (call_expression "dlang_type(&type,pcVar3)" identifier (argument_list "(&type,pcVar3)" ( (pointer_expression "&type" & identifier) , identifier )))) ;) (if_statement "if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }" if (parenthesized_expression "(type.b != type.p)" ( (binary_expression "type.b != type.p" (field_expression "type.b" identifier . field_identifier) != (field_expression "type.p" identifier . field_identifier)) )) (compound_statement "{\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }" { (expression_statement "string_appendn(decl,type.b,(int)type.p - (int)type.b);" (call_expression "string_appendn(decl,type.b,(int)type.p - (int)type.b)" identifier (argument_list "(decl,type.b,(int)type.p - (int)type.b)" ( identifier , (field_expression "type.b" identifier . field_identifier) , (binary_expression "(int)type.p - (int)type.b" (cast_expression "(int)type.p" ( (type_descriptor "int" primitive_type) ) (field_expression "type.p" identifier . field_identifier)) - (cast_expression "(int)type.b" ( (type_descriptor "int" primitive_type) ) (field_expression "type.b" identifier . field_identifier))) ))) ;) })) (expression_statement "string_append(decl,"(");" (call_expression "string_append(decl,"(")" identifier (argument_list "(decl,"(")" ( identifier , (string_literal ""("" " string_content ") ))) ;) }) (else_clause "else {\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }" else (compound_statement "{\n      pcVar3 = dlang_type(&type,pcVar3);\n      if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }\n      string_append(decl,"(");\n      string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);\n    }" { (expression_statement "pcVar3 = dlang_type(&type,pcVar3);" (assignment_expression "pcVar3 = dlang_type(&type,pcVar3)" identifier = (call_expression "dlang_type(&type,pcVar3)" identifier (argument_list "(&type,pcVar3)" ( (pointer_expression "&type" & identifier) , identifier )))) ;) (if_statement "if (type.b != type.p) {\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }" if (parenthesized_expression "(type.b != type.p)" ( (binary_expression "type.b != type.p" (field_expression "type.b" identifier . field_identifier) != (field_expression "type.p" identifier . field_identifier)) )) (compound_statement "{\n        string_appendn(decl,type.b,(int)type.p - (int)type.b);\n      }" { (expression_statement "string_appendn(decl,type.b,(int)type.p - (int)type.b);" (call_expression "string_appendn(decl,type.b,(int)type.p - (int)type.b)" identifier (argument_list "(decl,type.b,(int)type.p - (int)type.b)" ( identifier , (field_expression "type.b" identifier . field_identifier) , (binary_expression "(int)type.p - (int)type.b" (cast_expression "(int)type.p" ( (type_descriptor "int" primitive_type) ) (field_expression "type.p" identifier . field_identifier)) - (cast_expression "(int)type.b" ( (type_descriptor "int" primitive_type) ) (field_expression "type.b" identifier . field_identifier))) ))) ;) })) (expression_statement "string_append(decl,"(");" (call_expression "string_append(decl,"(")" identifier (argument_list "(decl,"(")" ( identifier , (string_literal ""("" " string_content ") ))) ;) (expression_statement "string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1);" (call_expression "string_appendn(decl,args.b,(int)pcVar2 - (int)pcVar1)" identifier (argument_list "(decl,args.b,(int)pcVar2 - (int)pcVar1)" ( identifier , (field_expression "args.b" identifier . field_identifier) , (binary_expression "(int)pcVar2 - (int)pcVar1" (cast_expression "(int)pcVar2" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) }))) (expression_statement "string_append(decl,") ");" (call_expression "string_append(decl,") ")" identifier (argument_list "(decl,") ")" ( identifier , (string_literal "") "" " string_content ") ))) ;) (if_statement "if (args.b != (char *)0x0) {\n      free(args.b);\n      args.p = (char *)0x0;\n      args.e = (char *)0x0;\n      args.b = (char *)0x0;\n    }" if (parenthesized_expression "(args.b != (char *)0x0)" ( (binary_expression "args.b != (char *)0x0" (field_expression "args.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(args.b);\n      args.p = (char *)0x0;\n      args.e = (char *)0x0;\n      args.b = (char *)0x0;\n    }" { (expression_statement "free(args.b);" (call_expression "free(args.b)" identifier (argument_list "(args.b)" ( (field_expression "args.b" identifier . field_identifier) ))) ;) (expression_statement "args.p = (char *)0x0;" (assignment_expression "args.p = (char *)0x0" (field_expression "args.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "args.e = (char *)0x0;" (assignment_expression "args.e = (char *)0x0" (field_expression "args.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "args.b = (char *)0x0;" (assignment_expression "args.b = (char *)0x0" (field_expression "args.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (if_statement "if (type.b != (char *)0x0) {\n      free(type.b);\n    }" if (parenthesized_expression "(type.b != (char *)0x0)" ( (binary_expression "type.b != (char *)0x0" (field_expression "type.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(type.b);\n    }" { (expression_statement "free(type.b);" (call_expression "free(type.b)" identifier (argument_list "(type.b)" ( (field_expression "type.b" identifier . field_identifier) ))) ;) })) })) (return_statement "return pcVar3;" return identifier ;) })))
(translation_unit "undefined4 __regparm3 FUN_0017c690(undefined4 param_1,char *param_2)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_0017c690(undefined4 param_1,char *param_2)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0017c690(undefined4 param_1,char *param_2)" identifier (parameter_list "(undefined4 param_1,char *param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (if_statement "if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }" if (parenthesized_expression "((param_2 != (char *)0x0) && (*param_2 != '\0'))" ( (binary_expression "(param_2 != (char *)0x0) && (*param_2 != '\0')" (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*param_2 != '\0')" ( (binary_expression "*param_2 != '\0'" (pointer_expression "*param_2" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }" { (expression_statement "pcVar1 = (char *)FUN_0017b8a0();" (assignment_expression "pcVar1 = (char *)FUN_0017b8a0()" identifier = (cast_expression "(char *)FUN_0017b8a0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0017b8a0()" identifier (argument_list "()" ( ))))) ;) (if_statement "if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }" if (parenthesized_expression "((pcVar1 != (char *)0x0) && (*pcVar1 != '\0'))" ( (binary_expression "(pcVar1 != (char *)0x0) && (*pcVar1 != '\0')" (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar1 != '\0')" ( (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n      FUN_0017ba50();\n    }" { (expression_statement "FUN_0017ba50();" (call_expression "FUN_0017ba50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_0017ceb0();" (call_expression "FUN_0017ceb0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar2 = FUN_0017c870();" (assignment_expression "uVar2 = FUN_0017c870()" identifier = (call_expression "FUN_0017c870()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_0017b850();" (call_expression "FUN_0017b850()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0017b850();" (call_expression "FUN_0017b850()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (return_statement return IDENT ;) })))
(function_definition "undefined4 __regparm3 FUN_0017c690(undefined4 param_1,char *param_2)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0017c690(undefined4 param_1,char *param_2)" (identifier "FUN_0017c690") (parameter_list "(undefined4 param_1,char *param_2)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  char *pcVar1;\n  undefined4 uVar2;\n  \n  uVar2 = 0;\n  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }\n  return uVar2;\n}" ({ "{") (declaration "char *pcVar1;" (primitive_type "char") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (if_statement "if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }" (if "if") (parenthesized_expression "((param_2 != (char *)0x0) && (*param_2 != '\0'))" (( "(") (binary_expression "(param_2 != (char *)0x0) && (*param_2 != '\0')" (parenthesized_expression "(param_2 != (char *)0x0)" (( "(") (binary_expression "param_2 != (char *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*param_2 != '\0')" (( "(") (binary_expression "*param_2 != '\0'" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    pcVar1 = (char *)FUN_0017b8a0();\n    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }\n    FUN_0017ceb0();\n    uVar2 = FUN_0017c870();\n    FUN_0017b850();\n    FUN_0017b850();\n  }" ({ "{") (expression_statement "pcVar1 = (char *)FUN_0017b8a0();" (assignment_expression "pcVar1 = (char *)FUN_0017b8a0()" (identifier "pcVar1") (= "=") (cast_expression "(char *)FUN_0017b8a0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0017b8a0()" (identifier "FUN_0017b8a0") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n      FUN_0017ba50();\n    }" (if "if") (parenthesized_expression "((pcVar1 != (char *)0x0) && (*pcVar1 != '\0'))" (( "(") (binary_expression "(pcVar1 != (char *)0x0) && (*pcVar1 != '\0')" (parenthesized_expression "(pcVar1 != (char *)0x0)" (( "(") (binary_expression "pcVar1 != (char *)0x0" (identifier "pcVar1") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*pcVar1 != '\0')" (( "(") (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n      FUN_0017ba50();\n    }" ({ "{") (expression_statement "FUN_0017ba50();" (call_expression "FUN_0017ba50()" (identifier "FUN_0017ba50") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_0017ceb0();" (call_expression "FUN_0017ceb0()" (identifier "FUN_0017ceb0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar2 = FUN_0017c870();" (assignment_expression "uVar2 = FUN_0017c870()" (identifier "uVar2") (= "=") (call_expression "FUN_0017c870()" (identifier "FUN_0017c870") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "FUN_0017b850();" (call_expression "FUN_0017b850()" (identifier "FUN_0017b850") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0017b850();" (call_expression "FUN_0017b850()" (identifier "FUN_0017b850") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x0017c820) */
/* WARNING: Removing unreachable block (ram,0x0017c7b0) */

char * __regparm3 function_1(type_1 *decl,char *var_1)

{
  char *pcVar1;
  char *pcVar2;
  char *var_3;
  type_1 *in_stack_ffffffa4;
  char *in_stack_ffffffa8;
  type_1 attr;
  type_1 args;
  type_1 type;
  
  var_3 = (char *)0x0;
  if ((var_1 != (char *)0x0) && (*var_1 != '\0')) {
    args.e = (char *)0x0;
    args.p = (char *)0x0;
    args.b = (char *)0x0;
    type.e = (char *)0x0;
    type.p = (char *)0x0;
    type.b = (char *)0x0;
    var_3 = var_2(decl,var_1);
    if (var_3 != (char *)0x0) {
      if (*var_3 == '\0') {
        var_3 = (char *)0x0;
      }
      else {
        var_3 = var_4(in_stack_ffffffa4,in_stack_ffffffa8);
      }
    }
    var_3 = var_5(&args,var_3);
    pcVar2 = args.p;
    pcVar1 = args.b;
    if (args.b == args.p) {
      var_3 = var_6(&type,var_3);
      if (type.b != type.p) {
        var_7(decl,type.b,(int)type.p - (int)type.b);
      }
      var_8(decl,"(");
    }
    else {
      var_3 = var_6(&type,var_3);
      if (type.b != type.p) {
        var_7(decl,type.b,(int)type.p - (int)type.b);
      }
      var_8(decl,"(");
      var_7(decl,args.b,(int)pcVar2 - (int)pcVar1);
    }
    var_8(decl,") ");
    if (args.b != (char *)0x0) {
      var_9(args.b);
      args.p = (char *)0x0;
      args.e = (char *)0x0;
      args.b = (char *)0x0;
    }
    if (type.b != (char *)0x0) {
      var_9(type.b);
    }
  }
  return var_3;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x0017c7dc) */
/* WARNING: Removing unreachable block (ram,0x0017c820) */
/* WARNING: Removing unreachable block (ram,0x0017c75b) */
/* WARNING: Removing unreachable block (ram,0x0017c853) */
/* WARNING: Removing unreachable block (ram,0x0017c76e) */
/* WARNING: Removing unreachable block (ram,0x0017c777) */
/* WARNING: Removing unreachable block (ram,0x0017c7b0) */
/* WARNING: Removing unreachable block (ram,0x0017c808) */

undefined4 __regparm3 MASKED(undefined4 param_1,char *param_2)

{
  char *pcVar1;
  undefined4 uVar2;
  
  uVar2 = 0;
  if ((param_2 != (char *)0x0) && (*param_2 != '\0')) {
    pcVar1 = (char *)FUN_0017b8a0();
    if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {
      FUN_0017ba50();
    }
    FUN_0017ceb0();
    uVar2 = FUN_0017c870();
    FUN_0017b850();
    FUN_0017b850();
  }
  return uVar2;
}

