
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

ec_point * ecp_mul_(ec_point *a,Bignum b,int aminus3)

{
  ec_point *point;
  ec_point *point_00;
  int iVar1;
  code *pcVar2;
  int iVar3;
  code *pcVar4;
  
  point = ec_point_copy(a);
  point_00 = ec_point_new(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01');
  iVar1 = bignum_bitcount((Bignum_conflict)b);
  if (0 < iVar1) {
    pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4);
    pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270);
    iVar3 = bignum_bit((Bignum_conflict)b,0);
    if (iVar3 != 0) {
      (*pcVar2)(point_00,point,aminus3);
                    /* WARNING: Subroutine does not return */
      ec_point_free(point_00);
    }
    if (iVar1 != 1) {
      (*pcVar4)(point,aminus3);
                    /* WARNING: Subroutine does not return */
      ec_point_free(point);
    }
  }
                    /* WARNING: Subroutine does not return */
  ec_point_free(point);
}



undefined4 FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)

{
  undefined4 uVar1;
  undefined4 uVar2;
  int iVar3;
  code *pcVar4;
  undefined4 uVar5;
  int iVar6;
  int iVar7;
  code *pcVar8;
  
  uVar1 = FUN_0006a39c();
  uVar2 = FUN_0006a314(*param_1,0,0,0,1);
  iVar3 = bignum_bitcount(param_2);
  if (0 < iVar3) {
    iVar7 = 0;
    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);
    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);
    uVar5 = uVar2;
    while( true ) {
      iVar6 = bignum_bit(param_2,iVar7);
      uVar2 = uVar5;
      if (iVar6 != 0) {
        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);
        ec_point_free(uVar5);
      }
      iVar7 = iVar7 + 1;
      if (iVar7 == iVar3) break;
      uVar5 = (*pcVar8)(uVar1,param_3);
      ec_point_free(uVar1);
      uVar1 = uVar5;
      uVar5 = uVar2;
    }
  }
  ec_point_free(uVar1);
  return uVar2;
}


lui gp,0x5
addiu gp,gp,0x7bec
addu gp,gp,t9
addiu sp,sp,-0x50
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s7,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
sw gp,0x18(sp)
or s0,a0,zero
or s6,a1,zero
or s3,a2,zero
lw t9,-0x78b0(gp)
addiu t9,t9,-0x5c64
bal 0x0006a39c
_nop
lw gp,0x18(sp)
or s1,v0,zero
li v0,0x1
sw v0,0x10(sp)
or a3,zero,zero
or a2,zero,zero
or a1,zero,zero
lw a0,0x0(s0)
lw t9,-0x78b0(gp)
addiu t9,t9,-0x5cec
bal 0x0006a314
_nop
lw gp,0x18(sp)
or s7,v0,zero
or a0,s6,zero
lw t9,-0x7b14(gp)
bal 0x0005eaa4
_nop
lw gp,0x18(sp)
blez v0,0x0006e8e4
_or s5,v0,zero
or s0,zero,zero
lw v0,-0x78b0(gp)
addiu v0,v0,-0x47e4
sw v0,0x24(sp)
lw s4,-0x7870(gp)
lw s8,-0x78b0(gp)
b 0x0006e8b8
_addiu s8,s8,-0x5270
or a1,s1,zero
or a0,s7,zero
lw t9,0x24(sp)
jalr t9
_nop
lw gp,0x18(sp)
or s2,v0,zero
or a0,s7,zero
or t9,s4,zero
bal 0x0006e6ec
_nop
lw gp,0x18(sp)
b 0x0006e8d8
_or s7,s2,zero
or a0,s1,zero
or t9,s8,zero
jalr t9
_nop
lw gp,0x18(sp)
or s2,v0,zero
or a0,s1,zero
or t9,s4,zero
bal 0x0006e6ec
_nop
lw gp,0x18(sp)
or s1,s2,zero
or a1,s0,zero
or a0,s6,zero
lw t9,-0x787c(gp)
bal 0x0005ec98
_nop
lw gp,0x18(sp)
bne v0,zero,0x0006e850
_or a2,s3,zero
addiu s0,s0,0x1
bne s0,s5,0x0006e888
_or a1,s3,zero
or a0,s1,zero
lw t9,-0x7870(gp)
bal 0x0006e6ec
_nop
lw gp,0x18(sp)
or v0,s7,zero
lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
(translation_unit "undefined4 FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}\n\n" (function_definition "undefined4 FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}" type_identifier (function_declarator "FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (expression_statement "uVar1 = FUN_0006a39c();" (assignment_expression "uVar1 = FUN_0006a39c()" identifier = (call_expression "FUN_0006a39c()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar2 = FUN_0006a314(*param_1,0,0,0,1);" (assignment_expression "uVar2 = FUN_0006a314(*param_1,0,0,0,1)" identifier = (call_expression "FUN_0006a314(*param_1,0,0,0,1)" identifier (argument_list "(*param_1,0,0,0,1)" ( (pointer_expression "*param_1" * identifier) , number_literal , number_literal , number_literal , number_literal )))) ;) (expression_statement "iVar3 = bignum_bitcount(param_2);" (assignment_expression "iVar3 = bignum_bitcount(param_2)" identifier = (call_expression "bignum_bitcount(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4)" identifier = (cast_expression "(code *)(PTR_LAB_000beac0 + -0x47e4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000beac0 + -0x47e4)" ( (binary_expression "PTR_LAB_000beac0 + -0x47e4" identifier + number_literal) )))) ;) (expression_statement "pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270)" identifier = (cast_expression "(code *)(PTR_LAB_000beac0 + -0x5270)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000beac0 + -0x5270)" ( (binary_expression "PTR_LAB_000beac0 + -0x5270" identifier + number_literal) )))) ;) (expression_statement "uVar5 = uVar2;" (assignment_expression "uVar5 = uVar2" identifier = identifier) ;) (while_statement "while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }" { (expression_statement "iVar6 = bignum_bit(param_2,iVar7);" (assignment_expression "iVar6 = bignum_bit(param_2,iVar7)" identifier = (call_expression "bignum_bit(param_2,iVar7)" identifier (argument_list "(param_2,iVar7)" ( identifier , identifier )))) ;) (expression_statement "uVar2 = uVar5;" (assignment_expression "uVar2 = uVar5" identifier = identifier) ;) (if_statement "if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }" { (expression_statement "uVar2 = (*pcVar4)(uVar5,uVar1,param_3);" (assignment_expression "uVar2 = (*pcVar4)(uVar5,uVar1,param_3)" identifier = (call_expression "(*pcVar4)(uVar5,uVar1,param_3)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(uVar5,uVar1,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "ec_point_free(uVar5);" (call_expression "ec_point_free(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (if_statement "if (iVar7 == iVar3) break;" if (parenthesized_expression "(iVar7 == iVar3)" ( (binary_expression "iVar7 == iVar3" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = (*pcVar8)(uVar1,param_3);" (assignment_expression "uVar5 = (*pcVar8)(uVar1,param_3)" identifier = (call_expression "(*pcVar8)(uVar1,param_3)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(uVar1,param_3)" ( identifier , identifier )))) ;) (expression_statement "ec_point_free(uVar1);" (call_expression "ec_point_free(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = uVar5;" (assignment_expression "uVar1 = uVar5" identifier = identifier) ;) (expression_statement "uVar5 = uVar2;" (assignment_expression "uVar5 = uVar2" identifier = identifier) ;) })) })) (expression_statement "ec_point_free(uVar1);" (call_expression "ec_point_free(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nec_point * ecp_mul_(ec_point *a,Bignum b,int aminus3)\n\n{\n  ec_point *point;\n  ec_point *point_00;\n  int iVar1;\n  code *pcVar2;\n  int iVar3;\n  code *pcVar4;\n  \n  point = ec_point_copy(a);\n  point_00 = ec_point_new(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01');\n  iVar1 = bignum_bitcount((Bignum_conflict)b);\n  if (0 < iVar1) {\n    pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4);\n    pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270);\n    iVar3 = bignum_bit((Bignum_conflict)b,0);\n    if (iVar3 != 0) {\n      (*pcVar2)(point_00,point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point_00);\n    }\n    if (iVar1 != 1) {\n      (*pcVar4)(point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point);\n    }\n  }\n                    /* WARNING: Subroutine does not return */\n  ec_point_free(point);\n}\n\n" comment (function_definition "ec_point * ecp_mul_(ec_point *a,Bignum b,int aminus3)\n\n{\n  ec_point *point;\n  ec_point *point_00;\n  int iVar1;\n  code *pcVar2;\n  int iVar3;\n  code *pcVar4;\n  \n  point = ec_point_copy(a);\n  point_00 = ec_point_new(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01');\n  iVar1 = bignum_bitcount((Bignum_conflict)b);\n  if (0 < iVar1) {\n    pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4);\n    pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270);\n    iVar3 = bignum_bit((Bignum_conflict)b,0);\n    if (iVar3 != 0) {\n      (*pcVar2)(point_00,point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point_00);\n    }\n    if (iVar1 != 1) {\n      (*pcVar4)(point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point);\n    }\n  }\n                    /* WARNING: Subroutine does not return */\n  ec_point_free(point);\n}" type_identifier (pointer_declarator "* ecp_mul_(ec_point *a,Bignum b,int aminus3)" * (function_declarator "ecp_mul_(ec_point *a,Bignum b,int aminus3)" identifier (parameter_list "(ec_point *a,Bignum b,int aminus3)" ( (parameter_declaration "ec_point *a" type_identifier (pointer_declarator "*a" * identifier)) , (parameter_declaration "Bignum b" type_identifier identifier) , (parameter_declaration "int aminus3" primitive_type identifier) )))) (compound_statement "{\n  ec_point *point;\n  ec_point *point_00;\n  int iVar1;\n  code *pcVar2;\n  int iVar3;\n  code *pcVar4;\n  \n  point = ec_point_copy(a);\n  point_00 = ec_point_new(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01');\n  iVar1 = bignum_bitcount((Bignum_conflict)b);\n  if (0 < iVar1) {\n    pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4);\n    pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270);\n    iVar3 = bignum_bit((Bignum_conflict)b,0);\n    if (iVar3 != 0) {\n      (*pcVar2)(point_00,point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point_00);\n    }\n    if (iVar1 != 1) {\n      (*pcVar4)(point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point);\n    }\n  }\n                    /* WARNING: Subroutine does not return */\n  ec_point_free(point);\n}" { (declaration "ec_point *point;" type_identifier (pointer_declarator "*point" * identifier) ;) (declaration "ec_point *point_00;" type_identifier (pointer_declarator "*point_00" * identifier) ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (expression_statement "point = ec_point_copy(a);" (assignment_expression "point = ec_point_copy(a)" identifier = (call_expression "ec_point_copy(a)" identifier (argument_list "(a)" ( identifier )))) ;) (expression_statement "point_00 = ec_point_new(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01');" (assignment_expression "point_00 = ec_point_new(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01')" identifier = (call_expression "ec_point_new(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01')" identifier (argument_list "(a->curve,(Bignum)0x0,(Bignum)0x0,(Bignum)0x0,'\x01')" ( (field_expression "a->curve" identifier -> field_identifier) , (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal) , (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal) , (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal) , (char_literal "'\x01'" ' escape_sequence ') )))) ;) (expression_statement "iVar1 = bignum_bitcount((Bignum_conflict)b);" (assignment_expression "iVar1 = bignum_bitcount((Bignum_conflict)b)" identifier = (call_expression "bignum_bitcount((Bignum_conflict)b)" identifier (argument_list "((Bignum_conflict)b)" ( (cast_expression "(Bignum_conflict)b" ( (type_descriptor "Bignum_conflict" type_identifier) ) identifier) )))) ;) (if_statement "if (0 < iVar1) {\n    pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4);\n    pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270);\n    iVar3 = bignum_bit((Bignum_conflict)b,0);\n    if (iVar3 != 0) {\n      (*pcVar2)(point_00,point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point_00);\n    }\n    if (iVar1 != 1) {\n      (*pcVar4)(point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point);\n    }\n  }" if (parenthesized_expression "(0 < iVar1)" ( (binary_expression "0 < iVar1" number_literal < identifier) )) (compound_statement "{\n    pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4);\n    pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270);\n    iVar3 = bignum_bit((Bignum_conflict)b,0);\n    if (iVar3 != 0) {\n      (*pcVar2)(point_00,point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point_00);\n    }\n    if (iVar1 != 1) {\n      (*pcVar4)(point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point);\n    }\n  }" { (expression_statement "pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4);" (assignment_expression "pcVar2 = (code *)(PTR_DAT_000beac0 + -0x47e4)" identifier = (cast_expression "(code *)(PTR_DAT_000beac0 + -0x47e4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000beac0 + -0x47e4)" ( (binary_expression "PTR_DAT_000beac0 + -0x47e4" identifier + number_literal) )))) ;) (expression_statement "pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270);" (assignment_expression "pcVar4 = (code *)(PTR_DAT_000beac0 + -0x5270)" identifier = (cast_expression "(code *)(PTR_DAT_000beac0 + -0x5270)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000beac0 + -0x5270)" ( (binary_expression "PTR_DAT_000beac0 + -0x5270" identifier + number_literal) )))) ;) (expression_statement "iVar3 = bignum_bit((Bignum_conflict)b,0);" (assignment_expression "iVar3 = bignum_bit((Bignum_conflict)b,0)" identifier = (call_expression "bignum_bit((Bignum_conflict)b,0)" identifier (argument_list "((Bignum_conflict)b,0)" ( (cast_expression "(Bignum_conflict)b" ( (type_descriptor "Bignum_conflict" type_identifier) ) identifier) , number_literal )))) ;) (if_statement "if (iVar3 != 0) {\n      (*pcVar2)(point_00,point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point_00);\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      (*pcVar2)(point_00,point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point_00);\n    }" { (expression_statement "(*pcVar2)(point_00,point,aminus3);" (call_expression "(*pcVar2)(point_00,point,aminus3)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(point_00,point,aminus3)" ( identifier , identifier , identifier ))) ;) comment (expression_statement "ec_point_free(point_00);" (call_expression "ec_point_free(point_00)" identifier (argument_list "(point_00)" ( identifier ))) ;) })) (if_statement "if (iVar1 != 1) {\n      (*pcVar4)(point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point);\n    }" if (parenthesized_expression "(iVar1 != 1)" ( (binary_expression "iVar1 != 1" identifier != number_literal) )) (compound_statement "{\n      (*pcVar4)(point,aminus3);\n                    /* WARNING: Subroutine does not return */\n      ec_point_free(point);\n    }" { (expression_statement "(*pcVar4)(point,aminus3);" (call_expression "(*pcVar4)(point,aminus3)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(point,aminus3)" ( identifier , identifier ))) ;) comment (expression_statement "ec_point_free(point);" (call_expression "ec_point_free(point)" identifier (argument_list "(point)" ( identifier ))) ;) })) })) comment (expression_statement "ec_point_free(point);" (call_expression "ec_point_free(point)" identifier (argument_list "(point)" ( identifier ))) ;) })))
(translation_unit "undefined4 FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}\n\n" (function_definition "undefined4 FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}" type_identifier (function_declarator "FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (expression_statement "uVar1 = FUN_0006a39c();" (assignment_expression "uVar1 = FUN_0006a39c()" identifier = (call_expression "FUN_0006a39c()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar2 = FUN_0006a314(*param_1,0,0,0,1);" (assignment_expression "uVar2 = FUN_0006a314(*param_1,0,0,0,1)" identifier = (call_expression "FUN_0006a314(*param_1,0,0,0,1)" identifier (argument_list "(*param_1,0,0,0,1)" ( (pointer_expression "*param_1" * identifier) , number_literal , number_literal , number_literal , number_literal )))) ;) (expression_statement "iVar3 = bignum_bitcount(param_2);" (assignment_expression "iVar3 = bignum_bitcount(param_2)" identifier = (call_expression "bignum_bitcount(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4)" identifier = (cast_expression "(code *)(PTR_LAB_000beac0 + -0x47e4)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000beac0 + -0x47e4)" ( (binary_expression "PTR_LAB_000beac0 + -0x47e4" identifier + number_literal) )))) ;) (expression_statement "pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270)" identifier = (cast_expression "(code *)(PTR_LAB_000beac0 + -0x5270)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000beac0 + -0x5270)" ( (binary_expression "PTR_LAB_000beac0 + -0x5270" identifier + number_literal) )))) ;) (expression_statement "uVar5 = uVar2;" (assignment_expression "uVar5 = uVar2" identifier = identifier) ;) (while_statement "while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }" { (expression_statement "iVar6 = bignum_bit(param_2,iVar7);" (assignment_expression "iVar6 = bignum_bit(param_2,iVar7)" identifier = (call_expression "bignum_bit(param_2,iVar7)" identifier (argument_list "(param_2,iVar7)" ( identifier , identifier )))) ;) (expression_statement "uVar2 = uVar5;" (assignment_expression "uVar2 = uVar5" identifier = identifier) ;) (if_statement "if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }" { (expression_statement "uVar2 = (*pcVar4)(uVar5,uVar1,param_3);" (assignment_expression "uVar2 = (*pcVar4)(uVar5,uVar1,param_3)" identifier = (call_expression "(*pcVar4)(uVar5,uVar1,param_3)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(uVar5,uVar1,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "ec_point_free(uVar5);" (call_expression "ec_point_free(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (if_statement "if (iVar7 == iVar3) break;" if (parenthesized_expression "(iVar7 == iVar3)" ( (binary_expression "iVar7 == iVar3" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = (*pcVar8)(uVar1,param_3);" (assignment_expression "uVar5 = (*pcVar8)(uVar1,param_3)" identifier = (call_expression "(*pcVar8)(uVar1,param_3)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(uVar1,param_3)" ( identifier , identifier )))) ;) (expression_statement "ec_point_free(uVar1);" (call_expression "ec_point_free(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = uVar5;" (assignment_expression "uVar1 = uVar5" identifier = identifier) ;) (expression_statement "uVar5 = uVar2;" (assignment_expression "uVar5 = uVar2" identifier = identifier) ;) })) })) (expression_statement "ec_point_free(uVar1);" (call_expression "ec_point_free(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , LIT , LIT , LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })))
(function_definition "undefined4 FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}" (type_identifier "undefined4") (function_declarator "FUN_0006e784(undefined4 *param_1,undefined4 param_2,undefined4 param_3)" (identifier "FUN_0006e784") (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  code *pcVar8;\n  \n  uVar1 = FUN_0006a39c();\n  uVar2 = FUN_0006a314(*param_1,0,0,0,1);\n  iVar3 = bignum_bitcount(param_2);\n  if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }\n  ec_point_free(uVar1);\n  return uVar2;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "code *pcVar4;" (type_identifier "code") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "code *pcVar8;" (type_identifier "code") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (expression_statement "uVar1 = FUN_0006a39c();" (assignment_expression "uVar1 = FUN_0006a39c()" (identifier "uVar1") (= "=") (call_expression "FUN_0006a39c()" (identifier "FUN_0006a39c") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar2 = FUN_0006a314(*param_1,0,0,0,1);" (assignment_expression "uVar2 = FUN_0006a314(*param_1,0,0,0,1)" (identifier "uVar2") (= "=") (call_expression "FUN_0006a314(*param_1,0,0,0,1)" (identifier "FUN_0006a314") (argument_list "(*param_1,0,0,0,1)" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "1") () ")")))) (; ";")) (expression_statement "iVar3 = bignum_bitcount(param_2);" (assignment_expression "iVar3 = bignum_bitcount(param_2)" (identifier "iVar3") (= "=") (call_expression "bignum_bitcount(param_2)" (identifier "bignum_bitcount") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (0 < iVar3) {\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }" (if "if") (parenthesized_expression "(0 < iVar3)" (( "(") (binary_expression "0 < iVar3" (number_literal "0") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n    iVar7 = 0;\n    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);\n    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);\n    uVar5 = uVar2;\n    while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }\n  }" ({ "{") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);" (assignment_expression "pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4)" (identifier "pcVar4") (= "=") (cast_expression "(code *)(PTR_LAB_000beac0 + -0x47e4)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000beac0 + -0x47e4)" (( "(") (binary_expression "PTR_LAB_000beac0 + -0x47e4" (identifier "PTR_LAB_000beac0") (+ "+") (number_literal "-0x47e4")) () ")")))) (; ";")) (expression_statement "pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270)" (identifier "pcVar8") (= "=") (cast_expression "(code *)(PTR_LAB_000beac0 + -0x5270)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000beac0 + -0x5270)" (( "(") (binary_expression "PTR_LAB_000beac0 + -0x5270" (identifier "PTR_LAB_000beac0") (+ "+") (number_literal "-0x5270")) () ")")))) (; ";")) (expression_statement "uVar5 = uVar2;" (assignment_expression "uVar5 = uVar2" (identifier "uVar5") (= "=") (identifier "uVar2")) (; ";")) (while_statement "while( true ) {\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      iVar6 = bignum_bit(param_2,iVar7);\n      uVar2 = uVar5;\n      if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }\n      iVar7 = iVar7 + 1;\n      if (iVar7 == iVar3) break;\n      uVar5 = (*pcVar8)(uVar1,param_3);\n      ec_point_free(uVar1);\n      uVar1 = uVar5;\n      uVar5 = uVar2;\n    }" ({ "{") (expression_statement "iVar6 = bignum_bit(param_2,iVar7);" (assignment_expression "iVar6 = bignum_bit(param_2,iVar7)" (identifier "iVar6") (= "=") (call_expression "bignum_bit(param_2,iVar7)" (identifier "bignum_bit") (argument_list "(param_2,iVar7)" (( "(") (identifier "param_2") (, ",") (identifier "iVar7") () ")")))) (; ";")) (expression_statement "uVar2 = uVar5;" (assignment_expression "uVar2 = uVar5" (identifier "uVar2") (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (iVar6 != 0) {\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);\n        ec_point_free(uVar5);\n      }" ({ "{") (expression_statement "uVar2 = (*pcVar4)(uVar5,uVar1,param_3);" (assignment_expression "uVar2 = (*pcVar4)(uVar5,uVar1,param_3)" (identifier "uVar2") (= "=") (call_expression "(*pcVar4)(uVar5,uVar1,param_3)" (parenthesized_expression "(*pcVar4)" (( "(") (pointer_expression "*pcVar4" (* "*") (identifier "pcVar4")) () ")")) (argument_list "(uVar5,uVar1,param_3)" (( "(") (identifier "uVar5") (, ",") (identifier "uVar1") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "ec_point_free(uVar5);" (call_expression "ec_point_free(uVar5)" (identifier "ec_point_free") (argument_list "(uVar5)" (( "(") (identifier "uVar5") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar7 == iVar3) break;" (if "if") (parenthesized_expression "(iVar7 == iVar3)" (( "(") (binary_expression "iVar7 == iVar3" (identifier "iVar7") (== "==") (identifier "iVar3")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar5 = (*pcVar8)(uVar1,param_3);" (assignment_expression "uVar5 = (*pcVar8)(uVar1,param_3)" (identifier "uVar5") (= "=") (call_expression "(*pcVar8)(uVar1,param_3)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(uVar1,param_3)" (( "(") (identifier "uVar1") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "ec_point_free(uVar1);" (call_expression "ec_point_free(uVar1)" (identifier "ec_point_free") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (expression_statement "uVar1 = uVar5;" (assignment_expression "uVar1 = uVar5" (identifier "uVar1") (= "=") (identifier "uVar5")) (; ";")) (expression_statement "uVar5 = uVar2;" (assignment_expression "uVar5 = uVar2" (identifier "uVar5") (= "=") (identifier "uVar2")) (; ";")) (} "}"))) (} "}"))) (expression_statement "ec_point_free(uVar1);" (call_expression "ec_point_free(uVar1)" (identifier "ec_point_free") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

type_1 * function_1(type_1 *a,type_2 b,int aminus3)

{
  type_1 *point;
  type_1 *point_00;
  int var_4;
  type_3 *pcVar2;
  int var_7;
  type_3 *pcVar4;
  
  point = var_1(a);
  point_00 = var_2(a->curve,(type_2)0x0,(type_2)0x0,(type_2)0x0,'\x01');
  var_4 = var_3((type_4)b);
  if (0 < var_4) {
    pcVar2 = (type_3 *)(var_5 + -0x47e4);
    pcVar4 = (type_3 *)(var_5 + -0x5270);
    var_7 = var_6((type_4)b,0);
    if (var_7 != 0) {
      (*pcVar2)(point_00,point,aminus3);
                    /* WARNING: Subroutine does not return */
      var_8(point_00);
    }
    if (var_4 != 1) {
      (*pcVar4)(point,aminus3);
                    /* WARNING: Subroutine does not return */
      var_8(point);
    }
  }
                    /* WARNING: Subroutine does not return */
  var_8(point);
}


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

undefined4 MASKED(undefined4 *param_1,undefined4 param_2,undefined4 param_3)

{
  undefined4 uVar1;
  undefined4 uVar2;
  int iVar3;
  code *pcVar4;
  undefined4 uVar5;
  int iVar6;
  int iVar7;
  code *pcVar8;
  
  uVar1 = FUN_0006a39c();
  uVar2 = FUN_0006a314(*param_1,0,0,0,1);
  iVar3 = bignum_bitcount(param_2);
  if (0 < iVar3) {
    iVar7 = 0;
    pcVar4 = (code *)(PTR_LAB_000beac0 + -0x47e4);
    pcVar8 = (code *)(PTR_LAB_000beac0 + -0x5270);
    uVar5 = uVar2;
    while( true ) {
      iVar6 = bignum_bit(param_2,iVar7);
      uVar2 = uVar5;
      if (iVar6 != 0) {
        uVar2 = (*pcVar4)(uVar5,uVar1,param_3);
        ec_point_free(uVar5);
      }
      iVar7 = iVar7 + 1;
      if (iVar7 == iVar3) break;
      uVar5 = (*pcVar8)(uVar1,param_3);
      ec_point_free(uVar1);
      uVar1 = uVar5;
      uVar5 = uVar2;
    }
  }
  ec_point_free(uVar1);
  return uVar2;
}

