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

void * ecdsa_newkey(ssh_signkey *self,char *data,int len)

{
  int *piVar1;
  int iVar2;
  void *key;
  ssh_signkey *self_00;
  char *data_00;
  void *pvVar3;
  undefined4 *puVar4;
  int *piVar5;
  int in_t9;
  int local_res8 [2];
  char *local_3c [2];
  char *p;
  int slen;
  int local_2c;
  
  piVar5 = *(int **)(in_t9 + 0x4fc80);
  local_2c = *piVar5;
  puVar4 = (undefined4 *)self->extra;
  local_res8[0] = len;
  local_3c[0] = data;
  getstring(local_3c,local_res8,&p,&slen);
  if (p == (char *)0x0) {
LAB_0005e1a0:
    puVar4 = (undefined4 *)0x0;
  }
  else {
    piVar1 = (int *)(*(code *)*puVar4)();
    if (*piVar1 == 0) {
      getstring(local_3c,local_res8,&p,&slen);
      if (p == (char *)0x0) goto LAB_0005e1a0;
      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);
      if (iVar2 != 0) goto LAB_0005e110;
      puVar4 = (undefined4 *)0x0;
    }
    else {
      if (*piVar1 != 2) goto LAB_0005e250;
LAB_0005e110:
      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);
      *puVar4 = self;
      puVar4[1] = piVar1;
      *(undefined1 *)(puVar4 + 5) = 0;
      puVar4[2] = 0;
      puVar4[3] = 0;
      puVar4[4] = 0;
      puVar4[6] = 0;
      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));
      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||
          (puVar4[3] == 0)) ||
         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||
          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))
      {
        ecdsa_freekey(puVar4);
        goto LAB_0005e1a0;
      }
    }
  }
  if (local_2c == *piVar5) {
    return puVar4;
  }
  (**(code **)(in_t9 + 0x4fc50))();
LAB_0005e250:
  iVar2 = 0x6e9;
  data_00 = (char *)(*(int *)(in_t9 + 0x4f274) + 0x5700);
  self_00 = (ssh_signkey *)(*(int *)(in_t9 + 0x4f274) + 0x5750);
  (**(code **)(in_t9 + 0x4faac))();
  key = ecdsa_newkey(self_00,data_00,iVar2);
  if (key == (void *)0x0) {
    pvVar3 = (void *)0xffffffff;
  }
  else {
    pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);
    ecdsa_freekey(key);
  }
  return pvVar3;
}



int * FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)

{
  undefined *puVar1;
  int *piVar2;
  int *piVar3;
  int iVar4;
  undefined4 *puVar5;
  undefined4 *puVar6;
  undefined4 *puVar7;
  undefined4 local_res8 [2];
  undefined4 local_3c [2];
  int local_34;
  undefined4 local_30;
  int local_2c;
  
  puVar1 = PTR___stack_chk_guard_000adcd4;
  puVar6 = &local_30;
  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;
  puVar7 = *(undefined4 **)(param_1 + 0x38);
  puVar5 = puVar6;
  local_res8[0] = param_3;
  local_3c[0] = param_2;
  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);
  if (local_34 == 0) {
LAB_0005e1a0:
    puVar6 = puVar5;
    piVar3 = (int *)0x0;
  }
  else {
    piVar2 = (int *)(*(code *)*puVar7)();
    if (*piVar2 == 0) {
      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);
      puVar5 = puVar6;
      if (local_34 == 0) goto LAB_0005e1a0;
      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);
      if (iVar4 != 0) goto LAB_0005e110;
      piVar3 = (int *)0x0;
    }
    else {
      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;
      if (*piVar2 != 2) goto LAB_0005e250;
LAB_0005e110:
      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);
      *piVar3 = param_1;
      piVar3[1] = (int)piVar2;
      *(undefined1 *)(piVar3 + 5) = 0;
      piVar3[2] = 0;
      piVar3[3] = 0;
      piVar3[4] = 0;
      piVar3[6] = 0;
      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);
      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||
         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||
          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {
        FUN_0005a650(piVar3);
        puVar5 = puVar6;
        goto LAB_0005e1a0;
      }
    }
  }
  if (local_2c == *(int *)puVar1) {
    return piVar3;
  }
  (*(code *)PTR___stack_chk_fail_000adca4)();
LAB_0005e250:
  (*(code *)PTR___assert_fail_000adb00)
            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);
  iVar4 = FUN_0005e054();
  if (iVar4 == 0) {
    piVar2 = (int *)0xffffffff;
  }
  else {
    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);
    FUN_0005a650(iVar4);
  }
  return piVar2;
}


lui gp,0x5
addiu gp,gp,0x723c
addu gp,gp,t9
addiu sp,sp,-0x58
sw s4,0x44(sp)
sw s0,0x34(sp)
lw s4,-0x75bc(gp)
lw s0,-0x79e0(gp)
sw s7,0x50(sp)
addiu s7,sp,0x28
sw s6,0x4c(sp)
addiu s6,sp,0x24
sw s3,0x40(sp)
addiu s0,s0,-0x2b50
sw s2,0x3c(sp)
addiu s3,sp,0x1c
sw gp,0x10(sp)
addiu s2,sp,0x60
sw s5,0x48(sp)
or a3,s7,zero
sw s1,0x38(sp)
or s5,a0,zero
sw a1,0x1c(sp)
or t9,s0,zero
sw a2,0x60(sp)
or a1,s2,zero
sw ra,0x54(sp)
or a2,s6,zero
lw v0,0x0(s4)
lw s1,0x38(a0)
or a0,s3,zero
sw v0,0x2c(sp)
bal 0x0005d4b0
_nop
lw v0,0x24(sp)
beq v0,zero,0x0005e1a0
_lw gp,0x10(sp)
lw t9,0x0(s1)
jalr t9
_nop
or s1,v0,zero
lw v0,0x0(v0)
beq v0,zero,0x0005e1e0
_lw gp,0x10(sp)
li v1,0x2
bne v0,v1,0x0005e250
_lw a3,-0x7fc8(gp)
lw t9,-0x7e7c(gp)
li a1,0x1c
jalr t9
_li a0,0x1
or a1,s2,zero
lw gp,0x10(sp)
addiu a2,v0,0x4
sw s5,0x0(v0)
or a0,s3,zero
sw s1,0x4(v0)
or s0,v0,zero
sb zero,0x14(v0)
sw zero,0x8(v0)
sw zero,0xc(v0)
sw zero,0x10(v0)
lw t9,-0x79e0(gp)
addiu t9,t9,-0x204c
bal 0x0005dfb4
_sw zero,0x18(v0)
beq v0,zero,0x0005e18c
_lw gp,0x10(sp)
lw a0,0x8(s0)
beq a0,zero,0x0005e190
_lw t9,-0x79e0(gp)
lw v0,0xc(s0)
beq v0,zero,0x0005e18c
_lw t9,-0x7a2c(gp)
bal 0x000506e8
_lw a1,0x10(s1)
bltz v0,0x0005e224
_lw gp,0x10(sp)
lw t9,-0x79e0(gp)
addiu t9,t9,-0x59b0
bal 0x0005a650
_or a0,s0,zero
lw gp,0x10(sp)
or s0,zero,zero
lw a0,0x2c(sp)
or v0,s0,zero
lw v1,0x0(s4)
bne a0,v1,0x0005e244
_lw ra,0x54(sp)
lw s7,0x50(sp)
lw s6,0x4c(sp)
lw s5,0x48(sp)
lw s4,0x44(sp)
lw s3,0x40(sp)
lw s2,0x3c(sp)
lw s1,0x38(sp)
lw s0,0x34(sp)
jr ra
_addiu sp,sp,0x58
or a1,s2,zero
or a3,s7,zero
or a2,s6,zero
or t9,s0,zero
bal 0x0005d4b0
_or a0,s3,zero
lw a1,0x24(sp)
beq a1,zero,0x0005e1a0
_lw gp,0x10(sp)
lw t9,-0x799c(gp)
lw a2,0x4(s1)
jalr t9
_lw a0,0x28(sp)
bne v0,zero,0x0005e110
_lw gp,0x10(sp)
b 0x0005e1a4
_or s0,zero,zero
lw t9,-0x7a2c(gp)
lw a1,0x10(s1)
bal 0x000506e8
_lw a0,0xc(s0)
bltz v0,0x0005e1a4
_lw gp,0x10(sp)
b 0x0005e190
_lw t9,-0x79e0(gp)
lw t9,-0x75ec(gp)
jalr t9
_nop
li a2,0x6e9
lw a1,-0x7fc8(gp)
lw a0,-0x7fc8(gp)
lw t9,-0x7790(gp)
addiu a3,a3,0x5cb0
addiu a1,a1,0x5700
jalr t9
_addiu a0,a0,0x5750
lui gp,0x5
addiu gp,gp,0x7020
addu gp,gp,t9
lw t9,-0x79e0(gp)
addiu sp,sp,-0x20
addiu t9,t9,-0x1fac
sw gp,0x10(sp)
sw ra,0x1c(sp)
bal 0x0005e054
_sw s0,0x18(sp)
beq v0,zero,0x0005e2cc
_lw gp,0x10(sp)
lw t9,-0x79e0(gp)
or a0,v0,zero
lw v0,0x4(v0)
addiu t9,t9,-0x59b0
bal 0x0005a650
_lw s0,0xc(v0)
lw ra,0x1c(sp)
or v0,s0,zero
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x20
b 0x0005e2b8
_li s0,-0x1
(translation_unit "int * FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}\n\n" (function_definition "int * FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}" primitive_type (pointer_declarator "* FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)" * (function_declarator "FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined4 local_res8 [2];" type_identifier (array_declarator "local_res8 [2]" identifier [ number_literal ]) ;) (declaration "undefined4 local_3c [2];" type_identifier (array_declarator "local_3c [2]" identifier [ number_literal ]) ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "undefined4 local_30;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000adcd4;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000adcd4" identifier = identifier) ;) (expression_statement "puVar6 = &local_30;" (assignment_expression "puVar6 = &local_30" identifier = (pointer_expression "&local_30" & identifier)) ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000adcd4;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000adcd4" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000adcd4" * (cast_expression "(int *)PTR___stack_chk_guard_000adcd4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "puVar7 = *(undefined4 **)(param_1 + 0x38);" (assignment_expression "puVar7 = *(undefined4 **)(param_1 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x38)" * (cast_expression "(undefined4 **)(param_1 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (expression_statement "local_res8[0] = param_3;" (assignment_expression "local_res8[0] = param_3" (subscript_expression "local_res8[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_3c[0] = param_2;" (assignment_expression "local_3c[0] = param_2" (subscript_expression "local_3c[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);" (call_expression "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6)" identifier (argument_list "(local_3c,local_res8,&local_34,puVar6)" ( identifier , identifier , (pointer_expression "&local_34" & identifier) , identifier ))) ;) (if_statement "if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" if (parenthesized_expression "(local_34 == 0)" ( (binary_expression "local_34 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }" { (labeled_statement "LAB_0005e1a0:\n    puVar6 = puVar5;" statement_identifier : (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" identifier = identifier) ;)) (expression_statement "piVar3 = (int *)0x0;" (assignment_expression "piVar3 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" else (compound_statement "{\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" { (expression_statement "piVar2 = (int *)(*(code *)*puVar7)();" (assignment_expression "piVar2 = (int *)(*(code *)*puVar7)()" identifier = (cast_expression "(int *)(*(code *)*puVar7)()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)*puVar7)()" (parenthesized_expression "(*(code *)*puVar7)" ( (pointer_expression "*(code *)*puVar7" * (cast_expression "(code *)*puVar7" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar7" * identifier))) )) (argument_list "()" ( ))))) ;) (if_statement "if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" if (parenthesized_expression "(*piVar2 == 0)" ( (binary_expression "*piVar2 == 0" (pointer_expression "*piVar2" * identifier) == number_literal) )) (compound_statement "{\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }" { (expression_statement "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);" (call_expression "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6)" identifier (argument_list "(local_3c,local_res8,&local_34,puVar6)" ( identifier , identifier , (pointer_expression "&local_34" & identifier) , identifier ))) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (if_statement "if (local_34 == 0) goto LAB_0005e1a0;" if (parenthesized_expression "(local_34 == 0)" ( (binary_expression "local_34 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0005e1a0;" goto statement_identifier ;)) (expression_statement "iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);" (assignment_expression "iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1])" identifier = (call_expression "(*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1])" (parenthesized_expression "(*(code *)PTR_match_ssh_id_000ad8f4)" ( (pointer_expression "*(code *)PTR_match_ssh_id_000ad8f4" * (cast_expression "(code *)PTR_match_ssh_id_000ad8f4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_30,local_34,piVar2[1])" ( identifier , identifier , (subscript_expression "piVar2[1]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar4 != 0) goto LAB_0005e110;" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0005e110;" goto statement_identifier ;)) (expression_statement "piVar3 = (int *)0x0;" (assignment_expression "piVar3 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" else (compound_statement "{\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" { (expression_statement "puVar6 = (undefined4 *)PTR_DAT_000ad2c8;" (assignment_expression "puVar6 = (undefined4 *)PTR_DAT_000ad2c8" identifier = (cast_expression "(undefined4 *)PTR_DAT_000ad2c8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (*piVar2 != 2) goto LAB_0005e250;" if (parenthesized_expression "(*piVar2 != 2)" ( (binary_expression "*piVar2 != 2" (pointer_expression "*piVar2" * identifier) != number_literal) )) (goto_statement "goto LAB_0005e250;" goto statement_identifier ;)) (labeled_statement "LAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);" statement_identifier : (expression_statement "piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);" (assignment_expression "piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" identifier = (cast_expression "(int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" (parenthesized_expression "(*(code *)PTR_safemalloc_000ad414)" ( (pointer_expression "*(code *)PTR_safemalloc_000ad414" * (cast_expression "(code *)PTR_safemalloc_000ad414" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(1,0x1c)" ( number_literal , number_literal ))))) ;)) (expression_statement "*piVar3 = param_1;" (assignment_expression "*piVar3 = param_1" (pointer_expression "*piVar3" * identifier) = identifier) ;) (expression_statement "piVar3[1] = (int)piVar2;" (assignment_expression "piVar3[1] = (int)piVar2" (subscript_expression "piVar3[1]" identifier [ number_literal ]) = (cast_expression "(int)piVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*(undefined1 *)(piVar3 + 5) = 0;" (assignment_expression "*(undefined1 *)(piVar3 + 5) = 0" (pointer_expression "*(undefined1 *)(piVar3 + 5)" * (cast_expression "(undefined1 *)(piVar3 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + 5)" ( (binary_expression "piVar3 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "piVar3[2] = 0;" (assignment_expression "piVar3[2] = 0" (subscript_expression "piVar3[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar3[3] = 0;" (assignment_expression "piVar3[3] = 0" (subscript_expression "piVar3[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar3[4] = 0;" (assignment_expression "piVar3[4] = 0" (subscript_expression "piVar3[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar3[6] = 0;" (assignment_expression "piVar3[6] = 0" (subscript_expression "piVar3[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);" (assignment_expression "iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1)" identifier = (call_expression "FUN_0005dfb4(local_3c,local_res8,piVar3 + 1)" identifier (argument_list "(local_3c,local_res8,piVar3 + 1)" ( identifier , identifier , (binary_expression "piVar3 + 1" identifier + number_literal) )))) ;) (if_statement "if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }" if (parenthesized_expression "((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4))))" ( (binary_expression "(((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))" (parenthesized_expression "(((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0))" ( (binary_expression "((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)" (parenthesized_expression "((iVar4 == 0) || (piVar3[2] == 0))" ( (binary_expression "(iVar4 == 0) || (piVar3[2] == 0)" (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) || (parenthesized_expression "(piVar3[2] == 0)" ( (binary_expression "piVar3[2] == 0" (subscript_expression "piVar3[2]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "(piVar3[3] == 0)" ( (binary_expression "piVar3[3] == 0" (subscript_expression "piVar3[3]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))" ( (parenthesized_expression "(iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4))" ( (comma_expression "iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" (assignment_expression "iVar4 = bignum_cmp(piVar3[2],piVar2[4])" identifier = (call_expression "bignum_cmp(piVar3[2],piVar2[4])" identifier (argument_list "(piVar3[2],piVar2[4])" ( (subscript_expression "piVar3[2]" identifier [ number_literal ]) , (subscript_expression "piVar2[4]" identifier [ number_literal ]) )))) , (binary_expression "-1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" (binary_expression "-1 < iVar4" number_literal < identifier) || (parenthesized_expression "(iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" ( (comma_expression "iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4" (assignment_expression "iVar4 = bignum_cmp(piVar3[3],piVar2[4])" identifier = (call_expression "bignum_cmp(piVar3[3],piVar2[4])" identifier (argument_list "(piVar3[3],piVar2[4])" ( (subscript_expression "piVar3[3]" identifier [ number_literal ]) , (subscript_expression "piVar2[4]" identifier [ number_literal ]) )))) , (binary_expression "-1 < iVar4" number_literal < identifier)) )))) )) ))) )) (compound_statement "{\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }" { (expression_statement "FUN_0005a650(piVar3);" (call_expression "FUN_0005a650(piVar3)" identifier (argument_list "(piVar3)" ( identifier ))) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (goto_statement "goto LAB_0005e1a0;" goto statement_identifier ;) })) }))) }))) (if_statement "if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }" if (parenthesized_expression "(local_2c == *(int *)puVar1)" ( (binary_expression "local_2c == *(int *)puVar1" identifier == (pointer_expression "*(int *)puVar1" * (cast_expression "(int *)puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return piVar3;\n  }" { (return_statement "return piVar3;" return identifier ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_000adca4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000adca4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000adca4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000adca4" * (cast_expression "(code *)PTR___stack_chk_fail_000adca4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (labeled_statement "LAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);" statement_identifier : (expression_statement "(*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);" (call_expression "(*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000adb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000adb00" * (cast_expression "(code *)PTR___assert_fail_000adb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c)" ( (binary_expression "PTR_DAT_000ad2c8 + 0x5750" identifier + number_literal) , (binary_expression "PTR_DAT_000ad2c8 + 0x5700" identifier + number_literal) , number_literal , (binary_expression "puVar6 + 0x172c" identifier + number_literal) ))) ;)) (expression_statement "iVar4 = FUN_0005e054();" (assignment_expression "iVar4 = FUN_0005e054()" identifier = (call_expression "FUN_0005e054()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    piVar2 = (int *)0xffffffff;\n  }" { (expression_statement "piVar2 = (int *)0xffffffff;" (assignment_expression "piVar2 = (int *)0xffffffff" identifier = (cast_expression "(int *)0xffffffff" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" else (compound_statement "{\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" { (expression_statement "piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);" (assignment_expression "piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc)" identifier = (pointer_expression "*(int **)(*(int *)(iVar4 + 4) + 0xc)" * (cast_expression "(int **)(*(int *)(iVar4 + 4) + 0xc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(iVar4 + 4) + 0xc)" ( (binary_expression "*(int *)(iVar4 + 4) + 0xc" (pointer_expression "*(int *)(iVar4 + 4)" * (cast_expression "(int *)(iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "FUN_0005a650(iVar4);" (call_expression "FUN_0005a650(iVar4)" identifier (argument_list "(iVar4)" ( identifier ))) ;) }))) (return_statement "return piVar2;" return identifier ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nvoid * ecdsa_newkey(ssh_signkey *self,char *data,int len)\n\n{\n  int *piVar1;\n  int iVar2;\n  void *key;\n  ssh_signkey *self_00;\n  char *data_00;\n  void *pvVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int in_t9;\n  int local_res8 [2];\n  char *local_3c [2];\n  char *p;\n  int slen;\n  int local_2c;\n  \n  piVar5 = *(int **)(in_t9 + 0x4fc80);\n  local_2c = *piVar5;\n  puVar4 = (undefined4 *)self->extra;\n  local_res8[0] = len;\n  local_3c[0] = data;\n  getstring(local_3c,local_res8,&p,&slen);\n  if (p == (char *)0x0) {\nLAB_0005e1a0:\n    puVar4 = (undefined4 *)0x0;\n  }\n  else {\n    piVar1 = (int *)(*(code *)*puVar4)();\n    if (*piVar1 == 0) {\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }\n    else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *piVar5) {\n    return puVar4;\n  }\n  (**(code **)(in_t9 + 0x4fc50))();\nLAB_0005e250:\n  iVar2 = 0x6e9;\n  data_00 = (char *)(*(int *)(in_t9 + 0x4f274) + 0x5700);\n  self_00 = (ssh_signkey *)(*(int *)(in_t9 + 0x4f274) + 0x5750);\n  (**(code **)(in_t9 + 0x4faac))();\n  key = ecdsa_newkey(self_00,data_00,iVar2);\n  if (key == (void *)0x0) {\n    pvVar3 = (void *)0xffffffff;\n  }\n  else {\n    pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);\n    ecdsa_freekey(key);\n  }\n  return pvVar3;\n}\n\n" comment (function_definition "void * ecdsa_newkey(ssh_signkey *self,char *data,int len)\n\n{\n  int *piVar1;\n  int iVar2;\n  void *key;\n  ssh_signkey *self_00;\n  char *data_00;\n  void *pvVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int in_t9;\n  int local_res8 [2];\n  char *local_3c [2];\n  char *p;\n  int slen;\n  int local_2c;\n  \n  piVar5 = *(int **)(in_t9 + 0x4fc80);\n  local_2c = *piVar5;\n  puVar4 = (undefined4 *)self->extra;\n  local_res8[0] = len;\n  local_3c[0] = data;\n  getstring(local_3c,local_res8,&p,&slen);\n  if (p == (char *)0x0) {\nLAB_0005e1a0:\n    puVar4 = (undefined4 *)0x0;\n  }\n  else {\n    piVar1 = (int *)(*(code *)*puVar4)();\n    if (*piVar1 == 0) {\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }\n    else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *piVar5) {\n    return puVar4;\n  }\n  (**(code **)(in_t9 + 0x4fc50))();\nLAB_0005e250:\n  iVar2 = 0x6e9;\n  data_00 = (char *)(*(int *)(in_t9 + 0x4f274) + 0x5700);\n  self_00 = (ssh_signkey *)(*(int *)(in_t9 + 0x4f274) + 0x5750);\n  (**(code **)(in_t9 + 0x4faac))();\n  key = ecdsa_newkey(self_00,data_00,iVar2);\n  if (key == (void *)0x0) {\n    pvVar3 = (void *)0xffffffff;\n  }\n  else {\n    pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);\n    ecdsa_freekey(key);\n  }\n  return pvVar3;\n}" primitive_type (pointer_declarator "* ecdsa_newkey(ssh_signkey *self,char *data,int len)" * (function_declarator "ecdsa_newkey(ssh_signkey *self,char *data,int len)" identifier (parameter_list "(ssh_signkey *self,char *data,int len)" ( (parameter_declaration "ssh_signkey *self" type_identifier (pointer_declarator "*self" * identifier)) , (parameter_declaration "char *data" primitive_type (pointer_declarator "*data" * identifier)) , (parameter_declaration "int len" primitive_type identifier) )))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  void *key;\n  ssh_signkey *self_00;\n  char *data_00;\n  void *pvVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int in_t9;\n  int local_res8 [2];\n  char *local_3c [2];\n  char *p;\n  int slen;\n  int local_2c;\n  \n  piVar5 = *(int **)(in_t9 + 0x4fc80);\n  local_2c = *piVar5;\n  puVar4 = (undefined4 *)self->extra;\n  local_res8[0] = len;\n  local_3c[0] = data;\n  getstring(local_3c,local_res8,&p,&slen);\n  if (p == (char *)0x0) {\nLAB_0005e1a0:\n    puVar4 = (undefined4 *)0x0;\n  }\n  else {\n    piVar1 = (int *)(*(code *)*puVar4)();\n    if (*piVar1 == 0) {\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }\n    else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *piVar5) {\n    return puVar4;\n  }\n  (**(code **)(in_t9 + 0x4fc50))();\nLAB_0005e250:\n  iVar2 = 0x6e9;\n  data_00 = (char *)(*(int *)(in_t9 + 0x4f274) + 0x5700);\n  self_00 = (ssh_signkey *)(*(int *)(in_t9 + 0x4f274) + 0x5750);\n  (**(code **)(in_t9 + 0x4faac))();\n  key = ecdsa_newkey(self_00,data_00,iVar2);\n  if (key == (void *)0x0) {\n    pvVar3 = (void *)0xffffffff;\n  }\n  else {\n    pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);\n    ecdsa_freekey(key);\n  }\n  return pvVar3;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "void *key;" primitive_type (pointer_declarator "*key" * identifier) ;) (declaration "ssh_signkey *self_00;" type_identifier (pointer_declarator "*self_00" * identifier) ;) (declaration "char *data_00;" primitive_type (pointer_declarator "*data_00" * identifier) ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int in_t9;" primitive_type identifier ;) (declaration "int local_res8 [2];" primitive_type (array_declarator "local_res8 [2]" identifier [ number_literal ]) ;) (declaration "char *local_3c [2];" primitive_type (pointer_declarator "*local_3c [2]" * (array_declarator "local_3c [2]" identifier [ number_literal ])) ;) (declaration "char *p;" primitive_type (pointer_declarator "*p" * identifier) ;) (declaration "int slen;" primitive_type identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "piVar5 = *(int **)(in_t9 + 0x4fc80);" (assignment_expression "piVar5 = *(int **)(in_t9 + 0x4fc80)" identifier = (pointer_expression "*(int **)(in_t9 + 0x4fc80)" * (cast_expression "(int **)(in_t9 + 0x4fc80)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x4fc80)" ( (binary_expression "in_t9 + 0x4fc80" identifier + number_literal) ))))) ;) (expression_statement "local_2c = *piVar5;" (assignment_expression "local_2c = *piVar5" identifier = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "puVar4 = (undefined4 *)self->extra;" (assignment_expression "puVar4 = (undefined4 *)self->extra" identifier = (cast_expression "(undefined4 *)self->extra" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "self->extra" identifier -> field_identifier))) ;) (expression_statement "local_res8[0] = len;" (assignment_expression "local_res8[0] = len" (subscript_expression "local_res8[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_3c[0] = data;" (assignment_expression "local_3c[0] = data" (subscript_expression "local_3c[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "getstring(local_3c,local_res8,&p,&slen);" (call_expression "getstring(local_3c,local_res8,&p,&slen)" identifier (argument_list "(local_3c,local_res8,&p,&slen)" ( identifier , identifier , (pointer_expression "&p" & identifier) , (pointer_expression "&slen" & identifier) ))) ;) (if_statement "if (p == (char *)0x0) {\nLAB_0005e1a0:\n    puVar4 = (undefined4 *)0x0;\n  }\n  else {\n    piVar1 = (int *)(*(code *)*puVar4)();\n    if (*piVar1 == 0) {\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }\n    else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }\n  }" if (parenthesized_expression "(p == (char *)0x0)" ( (binary_expression "p == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0005e1a0:\n    puVar4 = (undefined4 *)0x0;\n  }" { (labeled_statement "LAB_0005e1a0:\n    puVar4 = (undefined4 *)0x0;" statement_identifier : (expression_statement "puVar4 = (undefined4 *)0x0;" (assignment_expression "puVar4 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) }) (else_clause "else {\n    piVar1 = (int *)(*(code *)*puVar4)();\n    if (*piVar1 == 0) {\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }\n    else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }\n  }" else (compound_statement "{\n    piVar1 = (int *)(*(code *)*puVar4)();\n    if (*piVar1 == 0) {\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }\n    else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }\n  }" { (expression_statement "piVar1 = (int *)(*(code *)*puVar4)();" (assignment_expression "piVar1 = (int *)(*(code *)*puVar4)()" identifier = (cast_expression "(int *)(*(code *)*puVar4)()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)*puVar4)()" (parenthesized_expression "(*(code *)*puVar4)" ( (pointer_expression "*(code *)*puVar4" * (cast_expression "(code *)*puVar4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) )) (argument_list "()" ( ))))) ;) (if_statement "if (*piVar1 == 0) {\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }\n    else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }" if (parenthesized_expression "(*piVar1 == 0)" ( (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) )) (compound_statement "{\n      getstring(local_3c,local_res8,&p,&slen);\n      if (p == (char *)0x0) goto LAB_0005e1a0;\n      iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);\n      if (iVar2 != 0) goto LAB_0005e110;\n      puVar4 = (undefined4 *)0x0;\n    }" { (expression_statement "getstring(local_3c,local_res8,&p,&slen);" (call_expression "getstring(local_3c,local_res8,&p,&slen)" identifier (argument_list "(local_3c,local_res8,&p,&slen)" ( identifier , identifier , (pointer_expression "&p" & identifier) , (pointer_expression "&slen" & identifier) ))) ;) (if_statement "if (p == (char *)0x0) goto LAB_0005e1a0;" if (parenthesized_expression "(p == (char *)0x0)" ( (binary_expression "p == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0005e1a0;" goto statement_identifier ;)) (expression_statement "iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1]);" (assignment_expression "iVar2 = (**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1])" identifier = (call_expression "(**(code **)(in_t9 + 0x4f8a0))(slen,p,piVar1[1])" (parenthesized_expression "(**(code **)(in_t9 + 0x4f8a0))" ( (pointer_expression "**(code **)(in_t9 + 0x4f8a0)" * (pointer_expression "*(code **)(in_t9 + 0x4f8a0)" * (cast_expression "(code **)(in_t9 + 0x4f8a0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x4f8a0)" ( (binary_expression "in_t9 + 0x4f8a0" identifier + number_literal) ))))) )) (argument_list "(slen,p,piVar1[1])" ( identifier , identifier , (subscript_expression "piVar1[1]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar2 != 0) goto LAB_0005e110;" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0005e110;" goto statement_identifier ;)) (expression_statement "puVar4 = (undefined4 *)0x0;" (assignment_expression "puVar4 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }" else (compound_statement "{\n      if (*piVar1 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);\n      *puVar4 = self;\n      puVar4[1] = piVar1;\n      *(undefined1 *)(puVar4 + 5) = 0;\n      puVar4[2] = 0;\n      puVar4[3] = 0;\n      puVar4[4] = 0;\n      puVar4[6] = 0;\n      iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));\n      if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }\n    }" { (if_statement "if (*piVar1 != 2) goto LAB_0005e250;" if (parenthesized_expression "(*piVar1 != 2)" ( (binary_expression "*piVar1 != 2" (pointer_expression "*piVar1" * identifier) != number_literal) )) (goto_statement "goto LAB_0005e250;" goto statement_identifier ;)) (labeled_statement "LAB_0005e110:\n      puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);" statement_identifier : (expression_statement "puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c);" (assignment_expression "puVar4 = (undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c)" identifier = (cast_expression "(undefined4 *)(**(code **)(in_t9 + 0x4f3c0))(1,0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(in_t9 + 0x4f3c0))(1,0x1c)" (parenthesized_expression "(**(code **)(in_t9 + 0x4f3c0))" ( (pointer_expression "**(code **)(in_t9 + 0x4f3c0)" * (pointer_expression "*(code **)(in_t9 + 0x4f3c0)" * (cast_expression "(code **)(in_t9 + 0x4f3c0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x4f3c0)" ( (binary_expression "in_t9 + 0x4f3c0" identifier + number_literal) ))))) )) (argument_list "(1,0x1c)" ( number_literal , number_literal ))))) ;)) (expression_statement "*puVar4 = self;" (assignment_expression "*puVar4 = self" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar4[1] = piVar1;" (assignment_expression "puVar4[1] = piVar1" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined1 *)(puVar4 + 5) = 0;" (assignment_expression "*(undefined1 *)(puVar4 + 5) = 0" (pointer_expression "*(undefined1 *)(puVar4 + 5)" * (cast_expression "(undefined1 *)(puVar4 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 5)" ( (binary_expression "puVar4 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar4[2] = 0;" (assignment_expression "puVar4[2] = 0" (subscript_expression "puVar4[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4[3] = 0;" (assignment_expression "puVar4[3] = 0" (subscript_expression "puVar4[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4[4] = 0;" (assignment_expression "puVar4[4] = 0" (subscript_expression "puVar4[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4[6] = 0;" (assignment_expression "puVar4[6] = 0" (subscript_expression "puVar4[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1));" (assignment_expression "iVar2 = getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1))" identifier = (call_expression "getmppoint(local_3c,local_res8,(ec_point *)(puVar4 + 1))" identifier (argument_list "(local_3c,local_res8,(ec_point *)(puVar4 + 1))" ( identifier , identifier , (cast_expression "(ec_point *)(puVar4 + 1)" ( (type_descriptor "ec_point *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 1)" ( (binary_expression "puVar4 + 1" identifier + number_literal) ))) )))) ;) (if_statement "if ((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))\n      {\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }" if (parenthesized_expression "((((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))))" ( (binary_expression "(((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)) ||\n         ((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2)))" (parenthesized_expression "(((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0))" ( (binary_expression "((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)) ||\n          (puVar4[3] == 0)" (parenthesized_expression "((iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0))" ( (binary_expression "(iVar2 == 0) || ((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "((Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0)" ( (binary_expression "(Bignum_conflict)puVar4[2] == (Bignum_conflict)0x0" (cast_expression "(Bignum_conflict)puVar4[2]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "puVar4[2]" identifier [ number_literal ])) == (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) ))) )) || (parenthesized_expression "(puVar4[3] == 0)" ( (binary_expression "puVar4[3] == 0" (subscript_expression "puVar4[3]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "((iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2)))" ( (parenthesized_expression "(iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2))" ( (comma_expression "iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4]), -1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2)" (assignment_expression "iVar2 = bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4])" identifier = (call_expression "bignum_cmp((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4])" identifier (argument_list "((Bignum_conflict)puVar4[2],(Bignum_conflict)piVar1[4])" ( (cast_expression "(Bignum_conflict)puVar4[2]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "puVar4[2]" identifier [ number_literal ])) , (cast_expression "(Bignum_conflict)piVar1[4]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "piVar1[4]" identifier [ number_literal ])) )))) , (binary_expression "-1 < iVar2 ||\n          (iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2)" (binary_expression "-1 < iVar2" number_literal < identifier) || (parenthesized_expression "(iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2)" ( (comma_expression "iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4]), -1 < iVar2" (assignment_expression "iVar2 = bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4])" identifier = (call_expression "bignum_cmp((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4])" identifier (argument_list "((Bignum_conflict)puVar4[3],(Bignum_conflict)piVar1[4])" ( (cast_expression "(Bignum_conflict)puVar4[3]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "puVar4[3]" identifier [ number_literal ])) , (cast_expression "(Bignum_conflict)piVar1[4]" ( (type_descriptor "Bignum_conflict" type_identifier) ) (subscript_expression "piVar1[4]" identifier [ number_literal ])) )))) , (binary_expression "-1 < iVar2" number_literal < identifier)) )))) )) ))) )) (compound_statement "{\n        ecdsa_freekey(puVar4);\n        goto LAB_0005e1a0;\n      }" { (expression_statement "ecdsa_freekey(puVar4);" (call_expression "ecdsa_freekey(puVar4)" identifier (argument_list "(puVar4)" ( identifier ))) ;) (goto_statement "goto LAB_0005e1a0;" goto statement_identifier ;) })) }))) }))) (if_statement "if (local_2c == *piVar5) {\n    return puVar4;\n  }" if (parenthesized_expression "(local_2c == *piVar5)" ( (binary_expression "local_2c == *piVar5" identifier == (pointer_expression "*piVar5" * identifier)) )) (compound_statement "{\n    return puVar4;\n  }" { (return_statement "return puVar4;" return identifier ;) })) (expression_statement "(**(code **)(in_t9 + 0x4fc50))();" (call_expression "(**(code **)(in_t9 + 0x4fc50))()" (parenthesized_expression "(**(code **)(in_t9 + 0x4fc50))" ( (pointer_expression "**(code **)(in_t9 + 0x4fc50)" * (pointer_expression "*(code **)(in_t9 + 0x4fc50)" * (cast_expression "(code **)(in_t9 + 0x4fc50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x4fc50)" ( (binary_expression "in_t9 + 0x4fc50" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (labeled_statement "LAB_0005e250:\n  iVar2 = 0x6e9;" statement_identifier : (expression_statement "iVar2 = 0x6e9;" (assignment_expression "iVar2 = 0x6e9" identifier = number_literal) ;)) (expression_statement "data_00 = (char *)(*(int *)(in_t9 + 0x4f274) + 0x5700);" (assignment_expression "data_00 = (char *)(*(int *)(in_t9 + 0x4f274) + 0x5700)" identifier = (cast_expression "(char *)(*(int *)(in_t9 + 0x4f274) + 0x5700)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(in_t9 + 0x4f274) + 0x5700)" ( (binary_expression "*(int *)(in_t9 + 0x4f274) + 0x5700" (pointer_expression "*(int *)(in_t9 + 0x4f274)" * (cast_expression "(int *)(in_t9 + 0x4f274)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_t9 + 0x4f274)" ( (binary_expression "in_t9 + 0x4f274" identifier + number_literal) )))) + number_literal) )))) ;) (expression_statement "self_00 = (ssh_signkey *)(*(int *)(in_t9 + 0x4f274) + 0x5750);" (assignment_expression "self_00 = (ssh_signkey *)(*(int *)(in_t9 + 0x4f274) + 0x5750)" identifier = (cast_expression "(ssh_signkey *)(*(int *)(in_t9 + 0x4f274) + 0x5750)" ( (type_descriptor "ssh_signkey *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(in_t9 + 0x4f274) + 0x5750)" ( (binary_expression "*(int *)(in_t9 + 0x4f274) + 0x5750" (pointer_expression "*(int *)(in_t9 + 0x4f274)" * (cast_expression "(int *)(in_t9 + 0x4f274)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_t9 + 0x4f274)" ( (binary_expression "in_t9 + 0x4f274" identifier + number_literal) )))) + number_literal) )))) ;) (expression_statement "(**(code **)(in_t9 + 0x4faac))();" (call_expression "(**(code **)(in_t9 + 0x4faac))()" (parenthesized_expression "(**(code **)(in_t9 + 0x4faac))" ( (pointer_expression "**(code **)(in_t9 + 0x4faac)" * (pointer_expression "*(code **)(in_t9 + 0x4faac)" * (cast_expression "(code **)(in_t9 + 0x4faac)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x4faac)" ( (binary_expression "in_t9 + 0x4faac" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "key = ecdsa_newkey(self_00,data_00,iVar2);" (assignment_expression "key = ecdsa_newkey(self_00,data_00,iVar2)" identifier = (call_expression "ecdsa_newkey(self_00,data_00,iVar2)" identifier (argument_list "(self_00,data_00,iVar2)" ( identifier , identifier , identifier )))) ;) (if_statement "if (key == (void *)0x0) {\n    pvVar3 = (void *)0xffffffff;\n  }\n  else {\n    pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);\n    ecdsa_freekey(key);\n  }" if (parenthesized_expression "(key == (void *)0x0)" ( (binary_expression "key == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pvVar3 = (void *)0xffffffff;\n  }" { (expression_statement "pvVar3 = (void *)0xffffffff;" (assignment_expression "pvVar3 = (void *)0xffffffff" identifier = (cast_expression "(void *)0xffffffff" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);\n    ecdsa_freekey(key);\n  }" else (compound_statement "{\n    pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);\n    ecdsa_freekey(key);\n  }" { (expression_statement "pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc);" (assignment_expression "pvVar3 = *(void **)(*(int *)((int)key + 4) + 0xc)" identifier = (pointer_expression "*(void **)(*(int *)((int)key + 4) + 0xc)" * (cast_expression "(void **)(*(int *)((int)key + 4) + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)((int)key + 4) + 0xc)" ( (binary_expression "*(int *)((int)key + 4) + 0xc" (pointer_expression "*(int *)((int)key + 4)" * (cast_expression "(int *)((int)key + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)key + 4)" ( (binary_expression "(int)key + 4" (cast_expression "(int)key" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + number_literal) ))))) ;) (expression_statement "ecdsa_freekey(key);" (call_expression "ecdsa_freekey(key)" identifier (argument_list "(key)" ( identifier ))) ;) }))) (return_statement "return pvVar3;" return identifier ;) })))
(translation_unit "int * FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}\n\n" (function_definition "int * FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}" primitive_type (pointer_declarator "* FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)" * (function_declarator "FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined4 local_res8 [2];" type_identifier (array_declarator "local_res8 [2]" identifier [ number_literal ]) ;) (declaration "undefined4 local_3c [2];" type_identifier (array_declarator "local_3c [2]" identifier [ number_literal ]) ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "undefined4 local_30;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000adcd4;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000adcd4" identifier = identifier) ;) (expression_statement "puVar6 = &local_30;" (assignment_expression "puVar6 = &local_30" identifier = (pointer_expression "&local_30" & identifier)) ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000adcd4;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000adcd4" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000adcd4" * (cast_expression "(int *)PTR___stack_chk_guard_000adcd4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "puVar7 = *(undefined4 **)(param_1 + 0x38);" (assignment_expression "puVar7 = *(undefined4 **)(param_1 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x38)" * (cast_expression "(undefined4 **)(param_1 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (expression_statement "local_res8[0] = param_3;" (assignment_expression "local_res8[0] = param_3" (subscript_expression "local_res8[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_3c[0] = param_2;" (assignment_expression "local_3c[0] = param_2" (subscript_expression "local_3c[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);" (call_expression "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6)" identifier (argument_list "(local_3c,local_res8,&local_34,puVar6)" ( identifier , identifier , (pointer_expression "&local_34" & identifier) , identifier ))) ;) (if_statement "if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" if (parenthesized_expression "(local_34 == 0)" ( (binary_expression "local_34 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }" { (labeled_statement "LAB_0005e1a0:\n    puVar6 = puVar5;" statement_identifier : (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" identifier = identifier) ;)) (expression_statement "piVar3 = (int *)0x0;" (assignment_expression "piVar3 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" else (compound_statement "{\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" { (expression_statement "piVar2 = (int *)(*(code *)*puVar7)();" (assignment_expression "piVar2 = (int *)(*(code *)*puVar7)()" identifier = (cast_expression "(int *)(*(code *)*puVar7)()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)*puVar7)()" (parenthesized_expression "(*(code *)*puVar7)" ( (pointer_expression "*(code *)*puVar7" * (cast_expression "(code *)*puVar7" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar7" * identifier))) )) (argument_list "()" ( ))))) ;) (if_statement "if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" if (parenthesized_expression "(*piVar2 == 0)" ( (binary_expression "*piVar2 == 0" (pointer_expression "*piVar2" * identifier) == number_literal) )) (compound_statement "{\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }" { (expression_statement "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);" (call_expression "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6)" identifier (argument_list "(local_3c,local_res8,&local_34,puVar6)" ( identifier , identifier , (pointer_expression "&local_34" & identifier) , identifier ))) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (if_statement "if (local_34 == 0) goto LAB_0005e1a0;" if (parenthesized_expression "(local_34 == 0)" ( (binary_expression "local_34 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0005e1a0;" goto statement_identifier ;)) (expression_statement "iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);" (assignment_expression "iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1])" identifier = (call_expression "(*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1])" (parenthesized_expression "(*(code *)PTR_match_ssh_id_000ad8f4)" ( (pointer_expression "*(code *)PTR_match_ssh_id_000ad8f4" * (cast_expression "(code *)PTR_match_ssh_id_000ad8f4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_30,local_34,piVar2[1])" ( identifier , identifier , (subscript_expression "piVar2[1]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar4 != 0) goto LAB_0005e110;" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0005e110;" goto statement_identifier ;)) (expression_statement "piVar3 = (int *)0x0;" (assignment_expression "piVar3 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" else (compound_statement "{\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" { (expression_statement "puVar6 = (undefined4 *)PTR_DAT_000ad2c8;" (assignment_expression "puVar6 = (undefined4 *)PTR_DAT_000ad2c8" identifier = (cast_expression "(undefined4 *)PTR_DAT_000ad2c8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (*piVar2 != 2) goto LAB_0005e250;" if (parenthesized_expression "(*piVar2 != 2)" ( (binary_expression "*piVar2 != 2" (pointer_expression "*piVar2" * identifier) != number_literal) )) (goto_statement "goto LAB_0005e250;" goto statement_identifier ;)) (labeled_statement "LAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);" statement_identifier : (expression_statement "piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);" (assignment_expression "piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" identifier = (cast_expression "(int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" (parenthesized_expression "(*(code *)PTR_safemalloc_000ad414)" ( (pointer_expression "*(code *)PTR_safemalloc_000ad414" * (cast_expression "(code *)PTR_safemalloc_000ad414" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(1,0x1c)" ( number_literal , number_literal ))))) ;)) (expression_statement "*piVar3 = param_1;" (assignment_expression "*piVar3 = param_1" (pointer_expression "*piVar3" * identifier) = identifier) ;) (expression_statement "piVar3[1] = (int)piVar2;" (assignment_expression "piVar3[1] = (int)piVar2" (subscript_expression "piVar3[1]" identifier [ number_literal ]) = (cast_expression "(int)piVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*(undefined1 *)(piVar3 + 5) = 0;" (assignment_expression "*(undefined1 *)(piVar3 + 5) = 0" (pointer_expression "*(undefined1 *)(piVar3 + 5)" * (cast_expression "(undefined1 *)(piVar3 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3 + 5)" ( (binary_expression "piVar3 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "piVar3[2] = 0;" (assignment_expression "piVar3[2] = 0" (subscript_expression "piVar3[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar3[3] = 0;" (assignment_expression "piVar3[3] = 0" (subscript_expression "piVar3[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar3[4] = 0;" (assignment_expression "piVar3[4] = 0" (subscript_expression "piVar3[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar3[6] = 0;" (assignment_expression "piVar3[6] = 0" (subscript_expression "piVar3[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);" (assignment_expression "iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1)" identifier = (call_expression "FUN_0005dfb4(local_3c,local_res8,piVar3 + 1)" identifier (argument_list "(local_3c,local_res8,piVar3 + 1)" ( identifier , identifier , (binary_expression "piVar3 + 1" identifier + number_literal) )))) ;) (if_statement "if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }" if (parenthesized_expression "((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4))))" ( (binary_expression "(((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))" (parenthesized_expression "(((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0))" ( (binary_expression "((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)" (parenthesized_expression "((iVar4 == 0) || (piVar3[2] == 0))" ( (binary_expression "(iVar4 == 0) || (piVar3[2] == 0)" (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) || (parenthesized_expression "(piVar3[2] == 0)" ( (binary_expression "piVar3[2] == 0" (subscript_expression "piVar3[2]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "(piVar3[3] == 0)" ( (binary_expression "piVar3[3] == 0" (subscript_expression "piVar3[3]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))" ( (parenthesized_expression "(iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4))" ( (comma_expression "iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" (assignment_expression "iVar4 = bignum_cmp(piVar3[2],piVar2[4])" identifier = (call_expression "bignum_cmp(piVar3[2],piVar2[4])" identifier (argument_list "(piVar3[2],piVar2[4])" ( (subscript_expression "piVar3[2]" identifier [ number_literal ]) , (subscript_expression "piVar2[4]" identifier [ number_literal ]) )))) , (binary_expression "-1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" (binary_expression "-1 < iVar4" number_literal < identifier) || (parenthesized_expression "(iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" ( (comma_expression "iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4" (assignment_expression "iVar4 = bignum_cmp(piVar3[3],piVar2[4])" identifier = (call_expression "bignum_cmp(piVar3[3],piVar2[4])" identifier (argument_list "(piVar3[3],piVar2[4])" ( (subscript_expression "piVar3[3]" identifier [ number_literal ]) , (subscript_expression "piVar2[4]" identifier [ number_literal ]) )))) , (binary_expression "-1 < iVar4" number_literal < identifier)) )))) )) ))) )) (compound_statement "{\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }" { (expression_statement "FUN_0005a650(piVar3);" (call_expression "FUN_0005a650(piVar3)" identifier (argument_list "(piVar3)" ( identifier ))) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (goto_statement "goto LAB_0005e1a0;" goto statement_identifier ;) })) }))) }))) (if_statement "if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }" if (parenthesized_expression "(local_2c == *(int *)puVar1)" ( (binary_expression "local_2c == *(int *)puVar1" identifier == (pointer_expression "*(int *)puVar1" * (cast_expression "(int *)puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return piVar3;\n  }" { (return_statement "return piVar3;" return identifier ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_000adca4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000adca4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000adca4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000adca4" * (cast_expression "(code *)PTR___stack_chk_fail_000adca4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (labeled_statement "LAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);" statement_identifier : (expression_statement "(*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);" (call_expression "(*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000adb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000adb00" * (cast_expression "(code *)PTR___assert_fail_000adb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c)" ( (binary_expression "PTR_DAT_000ad2c8 + 0x5750" identifier + number_literal) , (binary_expression "PTR_DAT_000ad2c8 + 0x5700" identifier + number_literal) , number_literal , (binary_expression "puVar6 + 0x172c" identifier + number_literal) ))) ;)) (expression_statement "iVar4 = FUN_0005e054();" (assignment_expression "iVar4 = FUN_0005e054()" identifier = (call_expression "FUN_0005e054()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    piVar2 = (int *)0xffffffff;\n  }" { (expression_statement "piVar2 = (int *)0xffffffff;" (assignment_expression "piVar2 = (int *)0xffffffff" identifier = (cast_expression "(int *)0xffffffff" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" else (compound_statement "{\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" { (expression_statement "piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);" (assignment_expression "piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc)" identifier = (pointer_expression "*(int **)(*(int *)(iVar4 + 4) + 0xc)" * (cast_expression "(int **)(*(int *)(iVar4 + 4) + 0xc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(iVar4 + 4) + 0xc)" ( (binary_expression "*(int *)(iVar4 + 4) + 0xc" (pointer_expression "*(int *)(iVar4 + 4)" * (cast_expression "(int *)(iVar4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "FUN_0005a650(iVar4);" (call_expression "FUN_0005a650(iVar4)" identifier (argument_list "(iVar4)" ( identifier ))) ;) }))) (return_statement "return piVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) )) (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( LIT , LIT ))))) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) || (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) )))) , (binary_expression (binary_expression LIT < IDENT) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) )))) , (binary_expression LIT < IDENT)) )))) )) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) }))) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT + LIT) ))) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "int * FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}" (primitive_type "int") (pointer_declarator "* FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)" (* "*") (function_declarator "FUN_0005e054(int param_1,undefined4 param_2,undefined4 param_3)" (identifier "FUN_0005e054") (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (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  undefined *puVar1;\n  int *piVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 local_res8 [2];\n  undefined4 local_3c [2];\n  int local_34;\n  undefined4 local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000adcd4;\n  puVar6 = &local_30;\n  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;\n  puVar7 = *(undefined4 **)(param_1 + 0x38);\n  puVar5 = puVar6;\n  local_res8[0] = param_3;\n  local_3c[0] = param_2;\n  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n  if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }\n  if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_000adca4)();\nLAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);\n  iVar4 = FUN_0005e054();\n  if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }\n  return piVar2;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "undefined4 *puVar6;" (type_identifier "undefined4") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "undefined4 *puVar7;" (type_identifier "undefined4") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "undefined4 local_res8 [2];" (type_identifier "undefined4") (array_declarator "local_res8 [2]" (identifier "local_res8") ([ "[") (number_literal "2") (] "]")) (; ";")) (declaration "undefined4 local_3c [2];" (type_identifier "undefined4") (array_declarator "local_3c [2]" (identifier "local_3c") ([ "[") (number_literal "2") (] "]")) (; ";")) (declaration "int local_34;" (primitive_type "int") (identifier "local_34") (; ";")) (declaration "undefined4 local_30;" (type_identifier "undefined4") (identifier "local_30") (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (expression_statement "puVar1 = PTR___stack_chk_guard_000adcd4;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000adcd4" (identifier "puVar1") (= "=") (identifier "PTR___stack_chk_guard_000adcd4")) (; ";")) (expression_statement "puVar6 = &local_30;" (assignment_expression "puVar6 = &local_30" (identifier "puVar6") (= "=") (pointer_expression "&local_30" (& "&") (identifier "local_30"))) (; ";")) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000adcd4;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000adcd4" (identifier "local_2c") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_000adcd4" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_000adcd4" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000adcd4")))) (; ";")) (expression_statement "puVar7 = *(undefined4 **)(param_1 + 0x38);" (assignment_expression "puVar7 = *(undefined4 **)(param_1 + 0x38)" (identifier "puVar7") (= "=") (pointer_expression "*(undefined4 **)(param_1 + 0x38)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x38)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" (identifier "puVar5") (= "=") (identifier "puVar6")) (; ";")) (expression_statement "local_res8[0] = param_3;" (assignment_expression "local_res8[0] = param_3" (subscript_expression "local_res8[0]" (identifier "local_res8") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_3c[0] = param_2;" (assignment_expression "local_3c[0] = param_2" (subscript_expression "local_3c[0]" (identifier "local_3c") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);" (call_expression "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6)" (identifier "FUN_0005d4b0") (argument_list "(local_3c,local_res8,&local_34,puVar6)" (( "(") (identifier "local_3c") (, ",") (identifier "local_res8") (, ",") (pointer_expression "&local_34" (& "&") (identifier "local_34")) (, ",") (identifier "puVar6") () ")"))) (; ";")) (if_statement "if (local_34 == 0) {\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }\n  else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(local_34 == 0)" (( "(") (binary_expression "local_34 == 0" (identifier "local_34") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0005e1a0:\n    puVar6 = puVar5;\n    piVar3 = (int *)0x0;\n  }" ({ "{") (labeled_statement "LAB_0005e1a0:\n    puVar6 = puVar5;" (statement_identifier "LAB_0005e1a0") (: ":") (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" (identifier "puVar6") (= "=") (identifier "puVar5")) (; ";"))) (expression_statement "piVar3 = (int *)0x0;" (assignment_expression "piVar3 = (int *)0x0" (identifier "piVar3") (= "=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" (else "else") (compound_statement "{\n    piVar2 = (int *)(*(code *)*puVar7)();\n    if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }\n  }" ({ "{") (expression_statement "piVar2 = (int *)(*(code *)*puVar7)();" (assignment_expression "piVar2 = (int *)(*(code *)*puVar7)()" (identifier "piVar2") (= "=") (cast_expression "(int *)(*(code *)*puVar7)()" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)*puVar7)()" (parenthesized_expression "(*(code *)*puVar7)" (( "(") (pointer_expression "*(code *)*puVar7" (* "*") (cast_expression "(code *)*puVar7" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar7" (* "*") (identifier "puVar7")))) () ")")) (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (*piVar2 == 0) {\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }\n    else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" (if "if") (parenthesized_expression "(*piVar2 == 0)" (( "(") (binary_expression "*piVar2 == 0" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);\n      puVar5 = puVar6;\n      if (local_34 == 0) goto LAB_0005e1a0;\n      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);\n      if (iVar4 != 0) goto LAB_0005e110;\n      piVar3 = (int *)0x0;\n    }" ({ "{") (expression_statement "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);" (call_expression "FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6)" (identifier "FUN_0005d4b0") (argument_list "(local_3c,local_res8,&local_34,puVar6)" (( "(") (identifier "local_3c") (, ",") (identifier "local_res8") (, ",") (pointer_expression "&local_34" (& "&") (identifier "local_34")) (, ",") (identifier "puVar6") () ")"))) (; ";")) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" (identifier "puVar5") (= "=") (identifier "puVar6")) (; ";")) (if_statement "if (local_34 == 0) goto LAB_0005e1a0;" (if "if") (parenthesized_expression "(local_34 == 0)" (( "(") (binary_expression "local_34 == 0" (identifier "local_34") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0005e1a0;" (goto "goto") (statement_identifier "LAB_0005e1a0") (; ";"))) (expression_statement "iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);" (assignment_expression "iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1])" (identifier "iVar4") (= "=") (call_expression "(*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1])" (parenthesized_expression "(*(code *)PTR_match_ssh_id_000ad8f4)" (( "(") (pointer_expression "*(code *)PTR_match_ssh_id_000ad8f4" (* "*") (cast_expression "(code *)PTR_match_ssh_id_000ad8f4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_match_ssh_id_000ad8f4"))) () ")")) (argument_list "(local_30,local_34,piVar2[1])" (( "(") (identifier "local_30") (, ",") (identifier "local_34") (, ",") (subscript_expression "piVar2[1]" (identifier "piVar2") ([ "[") (number_literal "1") (] "]")) () ")")))) (; ";")) (if_statement "if (iVar4 != 0) goto LAB_0005e110;" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0005e110;" (goto "goto") (statement_identifier "LAB_0005e110") (; ";"))) (expression_statement "piVar3 = (int *)0x0;" (assignment_expression "piVar3 = (int *)0x0" (identifier "piVar3") (= "=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" (else "else") (compound_statement "{\n      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;\n      if (*piVar2 != 2) goto LAB_0005e250;\nLAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);\n      *piVar3 = param_1;\n      piVar3[1] = (int)piVar2;\n      *(undefined1 *)(piVar3 + 5) = 0;\n      piVar3[2] = 0;\n      piVar3[3] = 0;\n      piVar3[4] = 0;\n      piVar3[6] = 0;\n      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);\n      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }\n    }" ({ "{") (expression_statement "puVar6 = (undefined4 *)PTR_DAT_000ad2c8;" (assignment_expression "puVar6 = (undefined4 *)PTR_DAT_000ad2c8" (identifier "puVar6") (= "=") (cast_expression "(undefined4 *)PTR_DAT_000ad2c8" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_000ad2c8"))) (; ";")) (if_statement "if (*piVar2 != 2) goto LAB_0005e250;" (if "if") (parenthesized_expression "(*piVar2 != 2)" (( "(") (binary_expression "*piVar2 != 2" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (!= "!=") (number_literal "2")) () ")")) (goto_statement "goto LAB_0005e250;" (goto "goto") (statement_identifier "LAB_0005e250") (; ";"))) (labeled_statement "LAB_0005e110:\n      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);" (statement_identifier "LAB_0005e110") (: ":") (expression_statement "piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);" (assignment_expression "piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" (identifier "piVar3") (= "=") (cast_expression "(int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000ad414)(1,0x1c)" (parenthesized_expression "(*(code *)PTR_safemalloc_000ad414)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000ad414" (* "*") (cast_expression "(code *)PTR_safemalloc_000ad414" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000ad414"))) () ")")) (argument_list "(1,0x1c)" (( "(") (number_literal "1") (, ",") (number_literal "0x1c") () ")"))))) (; ";"))) (expression_statement "*piVar3 = param_1;" (assignment_expression "*piVar3 = param_1" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (= "=") (identifier "param_1")) (; ";")) (expression_statement "piVar3[1] = (int)piVar2;" (assignment_expression "piVar3[1] = (int)piVar2" (subscript_expression "piVar3[1]" (identifier "piVar3") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(int)piVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar2"))) (; ";")) (expression_statement "*(undefined1 *)(piVar3 + 5) = 0;" (assignment_expression "*(undefined1 *)(piVar3 + 5) = 0" (pointer_expression "*(undefined1 *)(piVar3 + 5)" (* "*") (cast_expression "(undefined1 *)(piVar3 + 5)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3 + 5)" (( "(") (binary_expression "piVar3 + 5" (identifier "piVar3") (+ "+") (number_literal "5")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar3[2] = 0;" (assignment_expression "piVar3[2] = 0" (subscript_expression "piVar3[2]" (identifier "piVar3") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar3[3] = 0;" (assignment_expression "piVar3[3] = 0" (subscript_expression "piVar3[3]" (identifier "piVar3") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar3[4] = 0;" (assignment_expression "piVar3[4] = 0" (subscript_expression "piVar3[4]" (identifier "piVar3") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar3[6] = 0;" (assignment_expression "piVar3[6] = 0" (subscript_expression "piVar3[6]" (identifier "piVar3") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);" (assignment_expression "iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1)" (identifier "iVar4") (= "=") (call_expression "FUN_0005dfb4(local_3c,local_res8,piVar3 + 1)" (identifier "FUN_0005dfb4") (argument_list "(local_3c,local_res8,piVar3 + 1)" (( "(") (identifier "local_3c") (, ",") (identifier "local_res8") (, ",") (binary_expression "piVar3 + 1" (identifier "piVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }" (if "if") (parenthesized_expression "((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4))))" (( "(") (binary_expression "(((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||\n         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))" (parenthesized_expression "(((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0))" (( "(") (binary_expression "((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)" (parenthesized_expression "((iVar4 == 0) || (piVar3[2] == 0))" (( "(") (binary_expression "(iVar4 == 0) || (piVar3[2] == 0)" (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(piVar3[2] == 0)" (( "(") (binary_expression "piVar3[2] == 0" (subscript_expression "piVar3[2]" (identifier "piVar3") ([ "[") (number_literal "2") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(piVar3[3] == 0)" (( "(") (binary_expression "piVar3[3] == 0" (subscript_expression "piVar3[3]" (identifier "piVar3") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))" (( "(") (parenthesized_expression "(iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4))" (( "(") (comma_expression "iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" (assignment_expression "iVar4 = bignum_cmp(piVar3[2],piVar2[4])" (identifier "iVar4") (= "=") (call_expression "bignum_cmp(piVar3[2],piVar2[4])" (identifier "bignum_cmp") (argument_list "(piVar3[2],piVar2[4])" (( "(") (subscript_expression "piVar3[2]" (identifier "piVar3") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "piVar2[4]" (identifier "piVar2") ([ "[") (number_literal "4") (] "]")) () ")")))) (, ",") (binary_expression "-1 < iVar4 ||\n          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" (binary_expression "-1 < iVar4" (number_literal "-1") (< "<") (identifier "iVar4")) (|| "||") (parenthesized_expression "(iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)" (( "(") (comma_expression "iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4" (assignment_expression "iVar4 = bignum_cmp(piVar3[3],piVar2[4])" (identifier "iVar4") (= "=") (call_expression "bignum_cmp(piVar3[3],piVar2[4])" (identifier "bignum_cmp") (argument_list "(piVar3[3],piVar2[4])" (( "(") (subscript_expression "piVar3[3]" (identifier "piVar3") ([ "[") (number_literal "3") (] "]")) (, ",") (subscript_expression "piVar2[4]" (identifier "piVar2") ([ "[") (number_literal "4") (] "]")) () ")")))) (, ",") (binary_expression "-1 < iVar4" (number_literal "-1") (< "<") (identifier "iVar4"))) () ")")))) () ")")) () ")"))) () ")")) (compound_statement "{\n        FUN_0005a650(piVar3);\n        puVar5 = puVar6;\n        goto LAB_0005e1a0;\n      }" ({ "{") (expression_statement "FUN_0005a650(piVar3);" (call_expression "FUN_0005a650(piVar3)" (identifier "FUN_0005a650") (argument_list "(piVar3)" (( "(") (identifier "piVar3") () ")"))) (; ";")) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" (identifier "puVar5") (= "=") (identifier "puVar6")) (; ";")) (goto_statement "goto LAB_0005e1a0;" (goto "goto") (statement_identifier "LAB_0005e1a0") (; ";")) (} "}"))) (} "}")))) (} "}")))) (if_statement "if (local_2c == *(int *)puVar1) {\n    return piVar3;\n  }" (if "if") (parenthesized_expression "(local_2c == *(int *)puVar1)" (( "(") (binary_expression "local_2c == *(int *)puVar1" (identifier "local_2c") (== "==") (pointer_expression "*(int *)puVar1" (* "*") (cast_expression "(int *)puVar1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1")))) () ")")) (compound_statement "{\n    return piVar3;\n  }" ({ "{") (return_statement "return piVar3;" (return "return") (identifier "piVar3") (; ";")) (} "}"))) (expression_statement "(*(code *)PTR___stack_chk_fail_000adca4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000adca4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000adca4)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000adca4" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000adca4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000adca4"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (labeled_statement "LAB_0005e250:\n  (*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);" (statement_identifier "LAB_0005e250") (: ":") (expression_statement "(*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);" (call_expression "(*(code *)PTR___assert_fail_000adb00)\n            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000adb00)" (( "(") (pointer_expression "*(code *)PTR___assert_fail_000adb00" (* "*") (cast_expression "(code *)PTR___assert_fail_000adb00" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___assert_fail_000adb00"))) () ")")) (argument_list "(PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c)" (( "(") (binary_expression "PTR_DAT_000ad2c8 + 0x5750" (identifier "PTR_DAT_000ad2c8") (+ "+") (number_literal "0x5750")) (, ",") (binary_expression "PTR_DAT_000ad2c8 + 0x5700" (identifier "PTR_DAT_000ad2c8") (+ "+") (number_literal "0x5700")) (, ",") (number_literal "0x6e9") (, ",") (binary_expression "puVar6 + 0x172c" (identifier "puVar6") (+ "+") (number_literal "0x172c")) () ")"))) (; ";"))) (expression_statement "iVar4 = FUN_0005e054();" (assignment_expression "iVar4 = FUN_0005e054()" (identifier "iVar4") (= "=") (call_expression "FUN_0005e054()" (identifier "FUN_0005e054") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n    piVar2 = (int *)0xffffffff;\n  }\n  else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    piVar2 = (int *)0xffffffff;\n  }" ({ "{") (expression_statement "piVar2 = (int *)0xffffffff;" (assignment_expression "piVar2 = (int *)0xffffffff" (identifier "piVar2") (= "=") (cast_expression "(int *)0xffffffff" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xffffffff"))) (; ";")) (} "}")) (else_clause "else {\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" (else "else") (compound_statement "{\n    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);\n    FUN_0005a650(iVar4);\n  }" ({ "{") (expression_statement "piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);" (assignment_expression "piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc)" (identifier "piVar2") (= "=") (pointer_expression "*(int **)(*(int *)(iVar4 + 4) + 0xc)" (* "*") (cast_expression "(int **)(*(int *)(iVar4 + 4) + 0xc)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(iVar4 + 4) + 0xc)" (( "(") (binary_expression "*(int *)(iVar4 + 4) + 0xc" (pointer_expression "*(int *)(iVar4 + 4)" (* "*") (cast_expression "(int *)(iVar4 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "FUN_0005a650(iVar4);" (call_expression "FUN_0005a650(iVar4)" (identifier "FUN_0005a650") (argument_list "(iVar4)" (( "(") (identifier "iVar4") () ")"))) (; ";")) (} "}")))) (return_statement "return piVar2;" (return "return") (identifier "piVar2") (; ";")) (} "}")))

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

void * function_1(type_1 *self,char *data,int len)

{
  int *piVar1;
  int var_4;
  void *var_10;
  type_1 *self_00;
  char *data_00;
  void *pvVar3;
  type_2 *var_5;
  int *piVar5;
  int var_1;
  int local_res8 [2];
  char *local_3c [2];
  char *var_3;
  int slen;
  int var_9;
  
  piVar5 = *(int **)(var_1 + 0x4fc80);
  var_9 = *piVar5;
  var_5 = (type_2 *)self->extra;
  local_res8[0] = len;
  local_3c[0] = data;
  var_2(local_3c,local_res8,&var_3,&slen);
  if (var_3 == (char *)0x0) {
LAB_0005e1a0:
    var_5 = (type_2 *)0x0;
  }
  else {
    piVar1 = (int *)(*(type_3 *)*var_5)();
    if (*piVar1 == 0) {
      var_2(local_3c,local_res8,&var_3,&slen);
      if (var_3 == (char *)0x0) goto LAB_0005e1a0;
      var_4 = (**(type_3 **)(var_1 + 0x4f8a0))(slen,var_3,piVar1[1]);
      if (var_4 != 0) goto LAB_0005e110;
      var_5 = (type_2 *)0x0;
    }
    else {
      if (*piVar1 != 2) goto LAB_0005e250;
LAB_0005e110:
      var_5 = (type_2 *)(**(type_3 **)(var_1 + 0x4f3c0))(1,0x1c);
      *var_5 = self;
      var_5[1] = piVar1;
      *(type_4 *)(var_5 + 5) = 0;
      var_5[2] = 0;
      var_5[3] = 0;
      var_5[4] = 0;
      var_5[6] = 0;
      var_4 = var_6(local_3c,local_res8,(type_5 *)(var_5 + 1));
      if ((((var_4 == 0) || ((type_6)var_5[2] == (type_6)0x0)) ||
          (var_5[3] == 0)) ||
         ((var_4 = var_7((type_6)var_5[2],(type_6)piVar1[4]), -1 < var_4 ||
          (var_4 = var_7((type_6)var_5[3],(type_6)piVar1[4]), -1 < var_4))))
      {
        var_8(var_5);
        goto LAB_0005e1a0;
      }
    }
  }
  if (var_9 == *piVar5) {
    return var_5;
  }
  (**(type_3 **)(var_1 + 0x4fc50))();
LAB_0005e250:
  var_4 = 0x6e9;
  data_00 = (char *)(*(int *)(var_1 + 0x4f274) + 0x5700);
  self_00 = (type_1 *)(*(int *)(var_1 + 0x4f274) + 0x5750);
  (**(type_3 **)(var_1 + 0x4faac))();
  var_10 = function_1(self_00,data_00,var_4);
  if (var_10 == (void *)0x0) {
    pvVar3 = (void *)0xffffffff;
  }
  else {
    pvVar3 = *(void **)(*(int *)((int)var_10 + 4) + 0xc);
    var_8(var_10);
  }
  return pvVar3;
}


(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (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: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) arguments: (argument_list))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (identifier) (subscript_expression argument: (identifier) index: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (number_literal) (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (parenthesized_expression (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal))))) right: (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal))))) right: (binary_expression left: (number_literal) right: (identifier)))))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (return_statement (identifier)))))

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

{
  undefined *puVar1;
  int *piVar2;
  int *piVar3;
  int iVar4;
  undefined4 *puVar5;
  undefined4 *puVar6;
  undefined4 *puVar7;
  undefined4 local_res8 [2];
  undefined4 local_3c [2];
  int local_34;
  undefined4 local_30;
  int local_2c;
  
  puVar1 = PTR___stack_chk_guard_000adcd4;
  puVar6 = &local_30;
  local_2c = *(int *)PTR___stack_chk_guard_000adcd4;
  puVar7 = *(undefined4 **)(param_1 + 0x38);
  puVar5 = puVar6;
  local_res8[0] = param_3;
  local_3c[0] = param_2;
  FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);
  if (local_34 == 0) {
LAB_0005e1a0:
    puVar6 = puVar5;
    piVar3 = (int *)0x0;
  }
  else {
    piVar2 = (int *)(*(code *)*puVar7)();
    if (*piVar2 == 0) {
      FUN_0005d4b0(local_3c,local_res8,&local_34,puVar6);
      puVar5 = puVar6;
      if (local_34 == 0) goto LAB_0005e1a0;
      iVar4 = (*(code *)PTR_match_ssh_id_000ad8f4)(local_30,local_34,piVar2[1]);
      if (iVar4 != 0) goto LAB_0005e110;
      piVar3 = (int *)0x0;
    }
    else {
      puVar6 = (undefined4 *)PTR_DAT_000ad2c8;
      if (*piVar2 != 2) goto LAB_0005e250;
LAB_0005e110:
      piVar3 = (int *)(*(code *)PTR_safemalloc_000ad414)(1,0x1c);
      *piVar3 = param_1;
      piVar3[1] = (int)piVar2;
      *(undefined1 *)(piVar3 + 5) = 0;
      piVar3[2] = 0;
      piVar3[3] = 0;
      piVar3[4] = 0;
      piVar3[6] = 0;
      iVar4 = FUN_0005dfb4(local_3c,local_res8,piVar3 + 1);
      if ((((iVar4 == 0) || (piVar3[2] == 0)) || (piVar3[3] == 0)) ||
         ((iVar4 = bignum_cmp(piVar3[2],piVar2[4]), -1 < iVar4 ||
          (iVar4 = bignum_cmp(piVar3[3],piVar2[4]), -1 < iVar4)))) {
        FUN_0005a650(piVar3);
        puVar5 = puVar6;
        goto LAB_0005e1a0;
      }
    }
  }
  if (local_2c == *(int *)puVar1) {
    return piVar3;
  }
  (*(code *)PTR___stack_chk_fail_000adca4)();
LAB_0005e250:
  (*(code *)PTR___assert_fail_000adb00)
            (PTR_DAT_000ad2c8 + 0x5750,PTR_DAT_000ad2c8 + 0x5700,0x6e9,puVar6 + 0x172c);
  iVar4 = MASKED();
  if (iVar4 == 0) {
    piVar2 = (int *)0xffffffff;
  }
  else {
    piVar2 = *(int **)(*(int *)(iVar4 + 4) + 0xc);
    FUN_0005a650(iVar4);
  }
  return piVar2;
}

