
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

ec_curve * ec_curve25519(void)

{
  if (initialised_4776 != '\0') {
    return (ec_curve *)&curve_4775;
  }
  curve_4775 = 1;
  DAT_000aa40c = 0x100;
  DAT_000aa410 = bignum_from_bytes(p_4777,0x20);
  DAT_000aa414 = bignum_from_bytes(a_4778,0x20);
  DAT_000aa418 = bignum_from_bytes(b_4779,0x20);
  DAT_000aa420 = bignum_from_bytes(gx_4780,0x20);
  DAT_000aa41c = &curve_4775;
  DAT_000aa408 = "Curve25519";
  DAT_000aa424 = 0;
  DAT_000aa428 = 0;
  DAT_000aa42c = 0;
  DAT_000aa404 = 0;
  initialised_4776 = 1;
  return (ec_curve *)&curve_4775;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

undefined4 * FUN_000502b0(void)

{
  if (DAT_000aa434 != '\0') {
    return &DAT_000aa400;
  }
  DAT_000aa400 = 1;
  DAT_000aa40c = 0x100;
  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);
  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);
  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);
  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);
  DAT_000aa41c = &DAT_000aa400;
  DAT_000aa408 = "Curve25519";
  DAT_000aa424 = 0;
  DAT_000aa428 = 0;
  DAT_000aa42c = 0;
  DAT_000aa404 = 0;
  DAT_000aa434 = 1;
  return &DAT_000aa400;
}


PUSH ESI
PUSH EBX
CALL 0x00014970
ADD EBX,0x59ad9
SUB ESP,0x4
CMP byte ptr [EBX + 0x6a4],0x0
LEA ESI,[EBX + 0x670]
JZ 0x000502e0
ADD ESP,0x4
MOV EAX,ESI
POP EBX
POP ESI
RET
SUB ESP,0x8
LEA EAX,[EBX + 0xfffd4810]
MOV dword ptr [EBX + 0x670],0x1
PUSH 0x20
PUSH EAX
MOV dword ptr [EBX + 0x67c],0x100
CALL 0x00045d60
MOV dword ptr [EBX + 0x680],EAX
POP EAX
LEA EAX,[EBX + 0xfffd47f0]
POP EDX
PUSH 0x20
PUSH EAX
CALL 0x00045d60
POP ECX
MOV dword ptr [EBX + 0x684],EAX
POP EAX
LEA EAX,[EBX + 0xfffd47d0]
PUSH 0x20
PUSH EAX
CALL 0x00045d60
MOV dword ptr [EBX + 0x688],EAX
POP EAX
LEA EAX,[EBX + 0xfffd47b0]
POP EDX
PUSH 0x20
PUSH EAX
CALL 0x00045d60
ADD ESP,0x10
MOV dword ptr [EBX + 0x68c],ESI
MOV dword ptr [EBX + 0x690],EAX
LEA EAX,[EBX + 0xfffd4660]
MOV dword ptr [EBX + 0x678],EAX
MOV EAX,ESI
MOV dword ptr [EBX + 0x694],0x0
MOV dword ptr [EBX + 0x698],0x0
MOV byte ptr [EBX + 0x69c],0x0
MOV dword ptr [EBX + 0x674],0x0
MOV byte ptr [EBX + 0x6a4],0x1
ADD ESP,0x4
POP EBX
POP ESI
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 * FUN_000502b0(void)\n\n{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}\n\n" comment (function_definition "undefined4 * FUN_000502b0(void)\n\n{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}" type_identifier (pointer_declarator "* FUN_000502b0(void)" * (function_declarator "FUN_000502b0(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) )))) (compound_statement "{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}" { (if_statement "if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }" if (parenthesized_expression "(DAT_000aa434 != '\0')" ( (binary_expression "DAT_000aa434 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return &DAT_000aa400;\n  }" { (return_statement "return &DAT_000aa400;" return (pointer_expression "&DAT_000aa400" & identifier) ;) })) (expression_statement "DAT_000aa400 = 1;" (assignment_expression "DAT_000aa400 = 1" identifier = number_literal) ;) (expression_statement "DAT_000aa40c = 0x100;" (assignment_expression "DAT_000aa40c = 0x100" identifier = number_literal) ;) (expression_statement "DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);" (assignment_expression "DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e5a0,0x20)" identifier (argument_list "(&DAT_0007e5a0,0x20)" ( (pointer_expression "&DAT_0007e5a0" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);" (assignment_expression "DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e580,0x20)" identifier (argument_list "(&DAT_0007e580,0x20)" ( (pointer_expression "&DAT_0007e580" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);" (assignment_expression "DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e560,0x20)" identifier (argument_list "(&DAT_0007e560,0x20)" ( (pointer_expression "&DAT_0007e560" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);" (assignment_expression "DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e540,0x20)" identifier (argument_list "(&DAT_0007e540,0x20)" ( (pointer_expression "&DAT_0007e540" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa41c = &DAT_000aa400;" (assignment_expression "DAT_000aa41c = &DAT_000aa400" identifier = (pointer_expression "&DAT_000aa400" & identifier)) ;) (expression_statement "DAT_000aa408 = "Curve25519";" (assignment_expression "DAT_000aa408 = "Curve25519"" identifier = (string_literal ""Curve25519"" " string_content ")) ;) (expression_statement "DAT_000aa424 = 0;" (assignment_expression "DAT_000aa424 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa428 = 0;" (assignment_expression "DAT_000aa428 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa42c = 0;" (assignment_expression "DAT_000aa42c = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa404 = 0;" (assignment_expression "DAT_000aa404 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa434 = 1;" (assignment_expression "DAT_000aa434 = 1" identifier = number_literal) ;) (return_statement "return &DAT_000aa400;" return (pointer_expression "&DAT_000aa400" & identifier) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nec_curve * ec_curve25519(void)\n\n{\n  if (initialised_4776 != '\0') {\n    return (ec_curve *)&curve_4775;\n  }\n  curve_4775 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = bignum_from_bytes(p_4777,0x20);\n  DAT_000aa414 = bignum_from_bytes(a_4778,0x20);\n  DAT_000aa418 = bignum_from_bytes(b_4779,0x20);\n  DAT_000aa420 = bignum_from_bytes(gx_4780,0x20);\n  DAT_000aa41c = &curve_4775;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  initialised_4776 = 1;\n  return (ec_curve *)&curve_4775;\n}\n\n" comment comment comment (function_definition "ec_curve * ec_curve25519(void)\n\n{\n  if (initialised_4776 != '\0') {\n    return (ec_curve *)&curve_4775;\n  }\n  curve_4775 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = bignum_from_bytes(p_4777,0x20);\n  DAT_000aa414 = bignum_from_bytes(a_4778,0x20);\n  DAT_000aa418 = bignum_from_bytes(b_4779,0x20);\n  DAT_000aa420 = bignum_from_bytes(gx_4780,0x20);\n  DAT_000aa41c = &curve_4775;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  initialised_4776 = 1;\n  return (ec_curve *)&curve_4775;\n}" type_identifier (pointer_declarator "* ec_curve25519(void)" * (function_declarator "ec_curve25519(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) )))) (compound_statement "{\n  if (initialised_4776 != '\0') {\n    return (ec_curve *)&curve_4775;\n  }\n  curve_4775 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = bignum_from_bytes(p_4777,0x20);\n  DAT_000aa414 = bignum_from_bytes(a_4778,0x20);\n  DAT_000aa418 = bignum_from_bytes(b_4779,0x20);\n  DAT_000aa420 = bignum_from_bytes(gx_4780,0x20);\n  DAT_000aa41c = &curve_4775;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  initialised_4776 = 1;\n  return (ec_curve *)&curve_4775;\n}" { (if_statement "if (initialised_4776 != '\0') {\n    return (ec_curve *)&curve_4775;\n  }" if (parenthesized_expression "(initialised_4776 != '\0')" ( (binary_expression "initialised_4776 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return (ec_curve *)&curve_4775;\n  }" { (return_statement "return (ec_curve *)&curve_4775;" return (cast_expression "(ec_curve *)&curve_4775" ( (type_descriptor "ec_curve *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&curve_4775" & identifier)) ;) })) (expression_statement "curve_4775 = 1;" (assignment_expression "curve_4775 = 1" identifier = number_literal) ;) (expression_statement "DAT_000aa40c = 0x100;" (assignment_expression "DAT_000aa40c = 0x100" identifier = number_literal) ;) (expression_statement "DAT_000aa410 = bignum_from_bytes(p_4777,0x20);" (assignment_expression "DAT_000aa410 = bignum_from_bytes(p_4777,0x20)" identifier = (call_expression "bignum_from_bytes(p_4777,0x20)" identifier (argument_list "(p_4777,0x20)" ( identifier , number_literal )))) ;) (expression_statement "DAT_000aa414 = bignum_from_bytes(a_4778,0x20);" (assignment_expression "DAT_000aa414 = bignum_from_bytes(a_4778,0x20)" identifier = (call_expression "bignum_from_bytes(a_4778,0x20)" identifier (argument_list "(a_4778,0x20)" ( identifier , number_literal )))) ;) (expression_statement "DAT_000aa418 = bignum_from_bytes(b_4779,0x20);" (assignment_expression "DAT_000aa418 = bignum_from_bytes(b_4779,0x20)" identifier = (call_expression "bignum_from_bytes(b_4779,0x20)" identifier (argument_list "(b_4779,0x20)" ( identifier , number_literal )))) ;) (expression_statement "DAT_000aa420 = bignum_from_bytes(gx_4780,0x20);" (assignment_expression "DAT_000aa420 = bignum_from_bytes(gx_4780,0x20)" identifier = (call_expression "bignum_from_bytes(gx_4780,0x20)" identifier (argument_list "(gx_4780,0x20)" ( identifier , number_literal )))) ;) (expression_statement "DAT_000aa41c = &curve_4775;" (assignment_expression "DAT_000aa41c = &curve_4775" identifier = (pointer_expression "&curve_4775" & identifier)) ;) (expression_statement "DAT_000aa408 = "Curve25519";" (assignment_expression "DAT_000aa408 = "Curve25519"" identifier = (string_literal ""Curve25519"" " string_content ")) ;) (expression_statement "DAT_000aa424 = 0;" (assignment_expression "DAT_000aa424 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa428 = 0;" (assignment_expression "DAT_000aa428 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa42c = 0;" (assignment_expression "DAT_000aa42c = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa404 = 0;" (assignment_expression "DAT_000aa404 = 0" identifier = number_literal) ;) (expression_statement "initialised_4776 = 1;" (assignment_expression "initialised_4776 = 1" identifier = number_literal) ;) (return_statement "return (ec_curve *)&curve_4775;" return (cast_expression "(ec_curve *)&curve_4775" ( (type_descriptor "ec_curve *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&curve_4775" & identifier)) ;) })))
(translation_unit "undefined4 * FUN_000502b0(void)\n\n{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}\n\n" (function_definition "undefined4 * FUN_000502b0(void)\n\n{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}" type_identifier (pointer_declarator "* FUN_000502b0(void)" * (function_declarator "FUN_000502b0(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) )))) (compound_statement "{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}" { (if_statement "if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }" if (parenthesized_expression "(DAT_000aa434 != '\0')" ( (binary_expression "DAT_000aa434 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return &DAT_000aa400;\n  }" { (return_statement "return &DAT_000aa400;" return (pointer_expression "&DAT_000aa400" & identifier) ;) })) (expression_statement "DAT_000aa400 = 1;" (assignment_expression "DAT_000aa400 = 1" identifier = number_literal) ;) (expression_statement "DAT_000aa40c = 0x100;" (assignment_expression "DAT_000aa40c = 0x100" identifier = number_literal) ;) (expression_statement "DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);" (assignment_expression "DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e5a0,0x20)" identifier (argument_list "(&DAT_0007e5a0,0x20)" ( (pointer_expression "&DAT_0007e5a0" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);" (assignment_expression "DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e580,0x20)" identifier (argument_list "(&DAT_0007e580,0x20)" ( (pointer_expression "&DAT_0007e580" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);" (assignment_expression "DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e560,0x20)" identifier (argument_list "(&DAT_0007e560,0x20)" ( (pointer_expression "&DAT_0007e560" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);" (assignment_expression "DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20)" identifier = (call_expression "FUN_00045d60(&DAT_0007e540,0x20)" identifier (argument_list "(&DAT_0007e540,0x20)" ( (pointer_expression "&DAT_0007e540" & identifier) , number_literal )))) ;) (expression_statement "DAT_000aa41c = &DAT_000aa400;" (assignment_expression "DAT_000aa41c = &DAT_000aa400" identifier = (pointer_expression "&DAT_000aa400" & identifier)) ;) (expression_statement "DAT_000aa408 = "Curve25519";" (assignment_expression "DAT_000aa408 = "Curve25519"" identifier = (string_literal ""Curve25519"" " string_content ")) ;) (expression_statement "DAT_000aa424 = 0;" (assignment_expression "DAT_000aa424 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa428 = 0;" (assignment_expression "DAT_000aa428 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa42c = 0;" (assignment_expression "DAT_000aa42c = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa404 = 0;" (assignment_expression "DAT_000aa404 = 0" identifier = number_literal) ;) (expression_statement "DAT_000aa434 = 1;" (assignment_expression "DAT_000aa434 = 1" identifier = number_literal) ;) (return_statement "return &DAT_000aa400;" return (pointer_expression "&DAT_000aa400" & identifier) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE) )))) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return (pointer_expression & IDENT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (return_statement return (pointer_expression & IDENT) ;) })))
(function_definition "undefined4 * FUN_000502b0(void)\n\n{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}" (type_identifier "undefined4") (pointer_declarator "* FUN_000502b0(void)" (* "*") (function_declarator "FUN_000502b0(void)" (identifier "FUN_000502b0") (parameter_list "(void)" (( "(") (parameter_declaration "void" (primitive_type "void")) () ")")))) (compound_statement "{\n  if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }\n  DAT_000aa400 = 1;\n  DAT_000aa40c = 0x100;\n  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);\n  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);\n  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);\n  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);\n  DAT_000aa41c = &DAT_000aa400;\n  DAT_000aa408 = "Curve25519";\n  DAT_000aa424 = 0;\n  DAT_000aa428 = 0;\n  DAT_000aa42c = 0;\n  DAT_000aa404 = 0;\n  DAT_000aa434 = 1;\n  return &DAT_000aa400;\n}" ({ "{") (if_statement "if (DAT_000aa434 != '\0') {\n    return &DAT_000aa400;\n  }" (if "if") (parenthesized_expression "(DAT_000aa434 != '\0')" (( "(") (binary_expression "DAT_000aa434 != '\0'" (identifier "DAT_000aa434") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    return &DAT_000aa400;\n  }" ({ "{") (return_statement "return &DAT_000aa400;" (return "return") (pointer_expression "&DAT_000aa400" (& "&") (identifier "DAT_000aa400")) (; ";")) (} "}"))) (expression_statement "DAT_000aa400 = 1;" (assignment_expression "DAT_000aa400 = 1" (identifier "DAT_000aa400") (= "=") (number_literal "1")) (; ";")) (expression_statement "DAT_000aa40c = 0x100;" (assignment_expression "DAT_000aa40c = 0x100" (identifier "DAT_000aa40c") (= "=") (number_literal "0x100")) (; ";")) (expression_statement "DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);" (assignment_expression "DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20)" (identifier "DAT_000aa410") (= "=") (call_expression "FUN_00045d60(&DAT_0007e5a0,0x20)" (identifier "FUN_00045d60") (argument_list "(&DAT_0007e5a0,0x20)" (( "(") (pointer_expression "&DAT_0007e5a0" (& "&") (identifier "DAT_0007e5a0")) (, ",") (number_literal "0x20") () ")")))) (; ";")) (expression_statement "DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);" (assignment_expression "DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20)" (identifier "DAT_000aa414") (= "=") (call_expression "FUN_00045d60(&DAT_0007e580,0x20)" (identifier "FUN_00045d60") (argument_list "(&DAT_0007e580,0x20)" (( "(") (pointer_expression "&DAT_0007e580" (& "&") (identifier "DAT_0007e580")) (, ",") (number_literal "0x20") () ")")))) (; ";")) (expression_statement "DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);" (assignment_expression "DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20)" (identifier "DAT_000aa418") (= "=") (call_expression "FUN_00045d60(&DAT_0007e560,0x20)" (identifier "FUN_00045d60") (argument_list "(&DAT_0007e560,0x20)" (( "(") (pointer_expression "&DAT_0007e560" (& "&") (identifier "DAT_0007e560")) (, ",") (number_literal "0x20") () ")")))) (; ";")) (expression_statement "DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);" (assignment_expression "DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20)" (identifier "DAT_000aa420") (= "=") (call_expression "FUN_00045d60(&DAT_0007e540,0x20)" (identifier "FUN_00045d60") (argument_list "(&DAT_0007e540,0x20)" (( "(") (pointer_expression "&DAT_0007e540" (& "&") (identifier "DAT_0007e540")) (, ",") (number_literal "0x20") () ")")))) (; ";")) (expression_statement "DAT_000aa41c = &DAT_000aa400;" (assignment_expression "DAT_000aa41c = &DAT_000aa400" (identifier "DAT_000aa41c") (= "=") (pointer_expression "&DAT_000aa400" (& "&") (identifier "DAT_000aa400"))) (; ";")) (expression_statement "DAT_000aa408 = "Curve25519";" (assignment_expression "DAT_000aa408 = "Curve25519"" (identifier "DAT_000aa408") (= "=") (string_literal ""Curve25519"" (" """) (string_content "Curve25519") (" """))) (; ";")) (expression_statement "DAT_000aa424 = 0;" (assignment_expression "DAT_000aa424 = 0" (identifier "DAT_000aa424") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_000aa428 = 0;" (assignment_expression "DAT_000aa428 = 0" (identifier "DAT_000aa428") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_000aa42c = 0;" (assignment_expression "DAT_000aa42c = 0" (identifier "DAT_000aa42c") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_000aa404 = 0;" (assignment_expression "DAT_000aa404 = 0" (identifier "DAT_000aa404") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_000aa434 = 1;" (assignment_expression "DAT_000aa434 = 1" (identifier "DAT_000aa434") (= "=") (number_literal "1")) (; ";")) (return_statement "return &DAT_000aa400;" (return "return") (pointer_expression "&DAT_000aa400" (& "&") (identifier "DAT_000aa400")) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

type_1 * function_1(void)

{
  if (var_1 != '\0') {
    return (type_1 *)&curve_4775;
  }
  curve_4775 = 1;
  DAT_000aa40c = 0x100;
  DAT_000aa410 = var_2(p_4777,0x20);
  DAT_000aa414 = var_2(a_4778,0x20);
  DAT_000aa418 = var_2(b_4779,0x20);
  DAT_000aa420 = var_2(gx_4780,0x20);
  DAT_000aa41c = &curve_4775;
  DAT_000aa408 = "Curve25519";
  DAT_000aa424 = 0;
  DAT_000aa428 = 0;
  DAT_000aa42c = 0;
  DAT_000aa404 = 0;
  var_1 = 1;
  return (type_1 *)&curve_4775;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

undefined4 * MASKED(void)

{
  if (DAT_000aa434 != '\0') {
    return &DAT_000aa400;
  }
  DAT_000aa400 = 1;
  DAT_000aa40c = 0x100;
  DAT_000aa410 = FUN_00045d60(&DAT_0007e5a0,0x20);
  DAT_000aa414 = FUN_00045d60(&DAT_0007e580,0x20);
  DAT_000aa418 = FUN_00045d60(&DAT_0007e560,0x20);
  DAT_000aa420 = FUN_00045d60(&DAT_0007e540,0x20);
  DAT_000aa41c = &DAT_000aa400;
  DAT_000aa408 = "Curve25519";
  DAT_000aa424 = 0;
  DAT_000aa428 = 0;
  DAT_000aa42c = 0;
  DAT_000aa404 = 0;
  DAT_000aa434 = 1;
  return &DAT_000aa400;
}

