
void monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)

{
  BignumInt BVar1;
  uint uVar2;
  BignumInt *pBVar3;
  uint uVar4;
  uint uVar5;
  BignumInt *pBVar6;
  int iVar7;
  uint uVar8;
  BignumInt *pBVar9;
  uint *puVar10;
  int iVar11;
  
  pBVar6 = x + len;
  internal_mul_low(pBVar6,mninv,tmp,len,tmp + len * 3);
  iVar11 = len * 2 + -1;
  internal_mul(tmp,n,tmp + len,len,tmp + len * 3);
  if (iVar11 < 0) {
    uVar4 = 0;
  }
  else {
    pBVar3 = pBVar6 + len;
    uVar4 = 0;
    pBVar9 = tmp + len + iVar11;
    do {
      uVar8 = pBVar3[-1];
      pBVar3 = pBVar3 + -1;
      BVar1 = *pBVar9;
      pBVar9 = pBVar9 + -1;
      uVar2 = uVar8 + BVar1;
      uVar5 = uVar4 + uVar2;
      *pBVar3 = uVar5;
      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);
    } while (x != pBVar3);
  }
  if (0 < len) {
    iVar11 = 0;
    pBVar3 = x;
    do {
      iVar11 = iVar11 + 1;
      pBVar3[len] = *pBVar3;
      *pBVar3 = 0;
      pBVar3 = pBVar3 + 1;
    } while (iVar11 < len);
    if (uVar4 == 0) {
      uVar4 = *pBVar6;
      uVar2 = *n;
      if (uVar4 == uVar2) {
        iVar11 = 0;
        pBVar3 = n + 1;
        do {
          iVar11 = iVar11 + 1;
          if (len == iVar11) goto LAB_00026e60;
          uVar4 = pBVar6[1];
          uVar2 = *pBVar3;
          pBVar6 = pBVar6 + 1;
          pBVar3 = pBVar3 + 1;
        } while (uVar4 == uVar2);
      }
      if (uVar4 <= uVar2) {
        return;
      }
      goto LAB_00026e60;
    }
  }
  if (len + -1 < 0) {
    return;
  }
LAB_00026e60:
  iVar7 = len + -1;
  iVar11 = 1;
  puVar10 = n + iVar7;
  pBVar6 = x + iVar7 + len;
  do {
    uVar8 = *pBVar6;
    uVar2 = *puVar10;
    iVar7 = iVar7 + -1;
    puVar10 = puVar10 + -1;
    uVar4 = uVar8 + iVar11;
    uVar5 = ~uVar2 + uVar4;
    *pBVar6 = uVar5;
    iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8);
    pBVar6 = pBVar6 + -1;
  } while (iVar7 != -1);
  return;
}



void FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)

{
  uint uVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  uint *puVar5;
  uint uVar6;
  int *piVar7;
  int iVar8;
  int iVar9;
  
  puVar5 = param_1 + param_5;
  iVar9 = param_4 + param_5 * 0xc;
  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);
  iVar8 = param_5 * 2 + -1;
  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);
  if (iVar8 < 0) {
    uVar3 = 0;
  }
  else {
    puVar2 = puVar5 + param_5;
    uVar3 = 0;
    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);
    do {
      uVar6 = puVar2[-1];
      puVar2 = puVar2 + -1;
      iVar8 = *piVar7;
      piVar7 = piVar7 + -1;
      uVar1 = uVar6 + iVar8;
      uVar4 = uVar3 + uVar1;
      *puVar2 = uVar4;
      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);
    } while (param_1 != puVar2);
  }
  if (0 < param_5) {
    iVar8 = 0;
    puVar2 = param_1;
    do {
      iVar8 = iVar8 + 1;
      puVar2[param_5] = *puVar2;
      *puVar2 = 0;
      puVar2 = puVar2 + 1;
    } while (iVar8 < param_5);
    if (uVar3 == 0) {
      uVar3 = *puVar5;
      uVar1 = *param_2;
      if (uVar3 == uVar1) {
        iVar8 = 0;
        puVar2 = param_2 + 1;
        do {
          iVar8 = iVar8 + 1;
          if (param_5 == iVar8) goto LAB_00026e60;
          uVar3 = puVar5[1];
          uVar1 = *puVar2;
          puVar5 = puVar5 + 1;
          puVar2 = puVar2 + 1;
        } while (uVar3 == uVar1);
      }
      if (uVar3 <= uVar1) {
        return;
      }
      goto LAB_00026e60;
    }
  }
  if (param_5 + -1 < 0) {
    return;
  }
LAB_00026e60:
  iVar9 = param_5 + -1;
  iVar8 = 1;
  param_2 = param_2 + iVar9;
  puVar5 = param_1 + iVar9 + param_5;
  do {
    uVar6 = *puVar5;
    uVar1 = *param_2;
    iVar9 = iVar9 + -1;
    param_2 = param_2 + -1;
    uVar3 = uVar6 + iVar8;
    uVar4 = ~uVar1 + uVar3;
    *puVar5 = uVar4;
    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);
    puVar5 = puVar5 + -1;
  } while (iVar9 != -1);
  return;
}


lui gp,0x5
addiu gp,gp,-0x4ccc
addu gp,gp,t9
addiu sp,sp,-0x48
lw t9,-0x7e7c(gp)
or v0,a2,zero
sw s0,0x24(sp)
addiu t9,t9,0x6a54
sw s6,0x3c(sp)
lw s0,0x58(sp)
sw s7,0x40(sp)
sw s3,0x30(sp)
sll s6,s0,0x1
sw s5,0x38(sp)
sll s3,s0,0x2
sw s2,0x2c(sp)
addu s7,s6,s0
sw gp,0x18(sp)
addu s5,a0,s3
sw ra,0x44(sp)
sll s7,s7,0x2
sw s4,0x34(sp)
or s2,a3,zero
sw s1,0x28(sp)
addu s7,a3,s7
or s1,a1,zero
or a3,s0,zero
sw s7,0x10(sp)
or a1,v0,zero
or a2,s2,zero
or s4,a0,zero
bal 0x00026a54
_or a0,s5,zero
addiu s6,s6,-0x1
lw gp,0x18(sp)
addu a2,s2,s3
or a3,s0,zero
sw s7,0x10(sp)
or a1,s1,zero
lw t9,-0x7e7c(gp)
addiu t9,t9,0x6580
bal 0x00026580
_or a0,s2,zero
bltz s6,0x00026ed8
_sll s6,s6,0x2
addu a1,s5,s3
addu a3,s6,s3
or v1,zero,zero
addu a3,s2,a3
lw a2,-0x4(a1)
addiu a1,a1,-0x4
lw v0,0x0(a3)
addiu a3,a3,-0x4
addu v0,a2,v0
addu a0,v1,v0
sltu v0,v0,a2
sltu v1,a0,v1
sw a0,0x0(a1)
bne s4,a1,0x00026dc0
_addu v1,v1,v0
blez s0,0x00026ee4
_addiu a0,s0,-0x1
or a0,zero,zero
or v0,s4,zero
lw a3,0x0(v0)
addu a2,v0,s3
addiu a0,a0,0x1
addiu v0,v0,0x4
slt a1,a0,s0
sw a3,0x0(a2)
bne a1,zero,0x00026dfc
_sw zero,-0x4(v0)
bne v1,zero,0x00026ee0
_nop
lw a1,0x0(s5)
lw a2,0x0(s1)
bne a1,a2,0x00026ef4
_or a0,s5,zero
addiu v1,s1,0x4
b 0x00026e50
_or v0,zero,zero
lw a1,0x4(a0)
lw a2,-0x4(v1)
bne a1,a2,0x00026ef4
_addiu a0,a0,0x4
addiu v0,v0,0x1
bne s0,v0,0x00026e40
_addiu v1,v1,0x4
addiu a0,s0,-0x1
sll v1,a0,0x2
li v0,0x1
addu a1,s3,v1
addu s1,s1,v1
addu a1,s4,a1
li t0,-0x1
lw a3,0x0(a1)
addiu a1,a1,-0x4
lw v1,0x0(s1)
addiu a0,a0,-0x1
addiu s1,s1,-0x4
addu v0,a3,v0
nor v1,zero,v1
addu a2,v1,v0
sltu v0,v0,a3
sltu v1,a2,v1
sw a2,0x4(a1)
bne a0,t0,0x00026e78
_addu v0,v1,v0
lw ra,0x44(sp)
lw s7,0x40(sp)
lw s6,0x3c(sp)
lw s5,0x38(sp)
lw s4,0x34(sp)
lw s3,0x30(sp)
lw s2,0x2c(sp)
lw s1,0x28(sp)
lw s0,0x24(sp)
jr ra
_addiu sp,sp,0x48
bgtz s0,0x00026df4
_or v1,zero,zero
addiu a0,s0,-0x1
bgez a0,0x00026e60
_lw ra,0x44(sp)
b 0x00026eb4
_lw s7,0x40(sp)
sltu a1,a2,a1
beq a1,zero,0x00026eb0
_lw ra,0x44(sp)
b 0x00026e60
_addiu a0,s0,-0x1
(translation_unit "void FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}\n\n" (function_definition "void FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}" primitive_type (function_declarator "FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)" identifier (parameter_list "(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (expression_statement "puVar5 = param_1 + param_5;" (assignment_expression "puVar5 = param_1 + param_5" identifier = (binary_expression "param_1 + param_5" identifier + identifier)) ;) (expression_statement "iVar9 = param_4 + param_5 * 0xc;" (assignment_expression "iVar9 = param_4 + param_5 * 0xc" identifier = (binary_expression "param_4 + param_5 * 0xc" identifier + (binary_expression "param_5 * 0xc" identifier * number_literal))) ;) (expression_statement "FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);" (call_expression "FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9)" identifier (argument_list "(puVar5,param_3,param_4,param_5,iVar9)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "iVar8 = param_5 * 2 + -1;" (assignment_expression "iVar8 = param_5 * 2 + -1" identifier = (binary_expression "param_5 * 2 + -1" (binary_expression "param_5 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);" (call_expression "FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9)" identifier (argument_list "(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9)" ( identifier , identifier , (binary_expression "param_4 + param_5 * 4" identifier + (binary_expression "param_5 * 4" identifier * number_literal)) , identifier , identifier ))) ;) (if_statement "if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" if (parenthesized_expression "(iVar8 < 0)" ( (binary_expression "iVar8 < 0" identifier < number_literal) )) (compound_statement "{\n    uVar3 = 0;\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" else (compound_statement "{\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" { (expression_statement "puVar2 = puVar5 + param_5;" (assignment_expression "puVar2 = puVar5 + param_5" identifier = (binary_expression "puVar5 + param_5" identifier + identifier)) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);" (assignment_expression "piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4)" identifier = (cast_expression "(int *)(param_4 + iVar8 * 4 + param_5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + iVar8 * 4 + param_5 * 4)" ( (binary_expression "param_4 + iVar8 * 4 + param_5 * 4" (binary_expression "param_4 + iVar8 * 4" identifier + (binary_expression "iVar8 * 4" identifier * number_literal)) + (binary_expression "param_5 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);" do (compound_statement "{\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    }" { (expression_statement "uVar6 = puVar2[-1];" (assignment_expression "uVar6 = puVar2[-1]" identifier = (subscript_expression "puVar2[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar2 = puVar2 + -1;" (assignment_expression "puVar2 = puVar2 + -1" identifier = (binary_expression "puVar2 + -1" identifier + number_literal)) ;) (expression_statement "iVar8 = *piVar7;" (assignment_expression "iVar8 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;) (expression_statement "piVar7 = piVar7 + -1;" (assignment_expression "piVar7 = piVar7 + -1" identifier = (binary_expression "piVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar1 = uVar6 + iVar8;" (assignment_expression "uVar1 = uVar6 + iVar8" identifier = (binary_expression "uVar6 + iVar8" identifier + identifier)) ;) (expression_statement "uVar4 = uVar3 + uVar1;" (assignment_expression "uVar4 = uVar3 + uVar1" identifier = (binary_expression "uVar3 + uVar1" identifier + identifier)) ;) (expression_statement "*puVar2 = uVar4;" (assignment_expression "*puVar2 = uVar4" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);" (assignment_expression "uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6)" identifier = (binary_expression "(uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6)" (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar3)" ( (binary_expression "uVar4 < uVar3" identifier < identifier) ))) + (call_expression "(uint)(uVar1 < uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 < uVar6)" ( (binary_expression "uVar1 < uVar6" identifier < identifier) ))))) ;) }) while (parenthesized_expression "(param_1 != puVar2)" ( (binary_expression "param_1 != puVar2" identifier != identifier) )) ;) }))) (if_statement "if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" if (parenthesized_expression "(0 < param_5)" ( (binary_expression "0 < param_5" number_literal < identifier) )) (compound_statement "{\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "puVar2 = param_1;" (assignment_expression "puVar2 = param_1" identifier = identifier) ;) (do_statement "do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);" do (compound_statement "{\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    }" { (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "puVar2[param_5] = *puVar2;" (assignment_expression "puVar2[param_5] = *puVar2" (subscript_expression "puVar2[param_5]" identifier [ identifier ]) = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "*puVar2 = 0;" (assignment_expression "*puVar2 = 0" (pointer_expression "*puVar2" * identifier) = number_literal) ;) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar8 < param_5)" ( (binary_expression "iVar8 < param_5" identifier < identifier) )) ;) (if_statement "if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" { (expression_statement "uVar3 = *puVar5;" (assignment_expression "uVar3 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }" if (parenthesized_expression "(uVar3 == uVar1)" ( (binary_expression "uVar3 == uVar1" identifier == identifier) )) (compound_statement "{\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "puVar2 = param_2 + 1;" (assignment_expression "puVar2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (do_statement "do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);" do (compound_statement "{\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        }" { (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (if_statement "if (param_5 == iVar8) goto LAB_00026e60;" if (parenthesized_expression "(param_5 == iVar8)" ( (binary_expression "param_5 == iVar8" identifier == identifier) )) (goto_statement "goto LAB_00026e60;" goto statement_identifier ;)) (expression_statement "uVar3 = puVar5[1];" (assignment_expression "uVar3 = puVar5[1]" identifier = (subscript_expression "puVar5[1]" identifier [ number_literal ])) ;) (expression_statement "uVar1 = *puVar2;" (assignment_expression "uVar1 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar3 == uVar1)" ( (binary_expression "uVar3 == uVar1" identifier == identifier) )) ;) })) (if_statement "if (uVar3 <= uVar1) {\n        return;\n      }" if (parenthesized_expression "(uVar3 <= uVar1)" ( (binary_expression "uVar3 <= uVar1" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_00026e60;" goto statement_identifier ;) })) })) (if_statement "if (param_5 + -1 < 0) {\n    return;\n  }" if (parenthesized_expression "(param_5 + -1 < 0)" ( (binary_expression "param_5 + -1 < 0" (binary_expression "param_5 + -1" identifier + number_literal) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_00026e60:\n  iVar9 = param_5 + -1;" statement_identifier : (expression_statement "iVar9 = param_5 + -1;" (assignment_expression "iVar9 = param_5 + -1" identifier = (binary_expression "param_5 + -1" identifier + number_literal)) ;)) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) (expression_statement "param_2 = param_2 + iVar9;" (assignment_expression "param_2 = param_2 + iVar9" identifier = (binary_expression "param_2 + iVar9" identifier + identifier)) ;) (expression_statement "puVar5 = param_1 + iVar9 + param_5;" (assignment_expression "puVar5 = param_1 + iVar9 + param_5" identifier = (binary_expression "param_1 + iVar9 + param_5" (binary_expression "param_1 + iVar9" identifier + identifier) + identifier)) ;) (do_statement "do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);" do (compound_statement "{\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  }" { (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" identifier = (binary_expression "iVar9 + -1" identifier + number_literal)) ;) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (expression_statement "uVar3 = uVar6 + iVar8;" (assignment_expression "uVar3 = uVar6 + iVar8" identifier = (binary_expression "uVar6 + iVar8" identifier + identifier)) ;) (expression_statement "uVar4 = ~uVar1 + uVar3;" (assignment_expression "uVar4 = ~uVar1 + uVar3" identifier = (binary_expression "~uVar1 + uVar3" (unary_expression "~uVar1" ~ identifier) + identifier)) ;) (expression_statement "*puVar5 = uVar4;" (assignment_expression "*puVar5 = uVar4" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);" (assignment_expression "iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6)" identifier = (binary_expression "(uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6)" (call_expression "(uint)(uVar4 < ~uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < ~uVar1)" ( (binary_expression "uVar4 < ~uVar1" identifier < (unary_expression "~uVar1" ~ identifier)) ))) + (call_expression "(uint)(uVar3 < uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar6)" ( (binary_expression "uVar3 < uVar6" identifier < identifier) ))))) ;) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar9 != -1)" ( (binary_expression "iVar9 != -1" identifier != number_literal) )) ;) (return_statement "return;" return ;) })))
(translation_unit "void monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)\n\n{\n  BignumInt BVar1;\n  uint uVar2;\n  BignumInt *pBVar3;\n  uint uVar4;\n  uint uVar5;\n  BignumInt *pBVar6;\n  int iVar7;\n  uint uVar8;\n  BignumInt *pBVar9;\n  uint *puVar10;\n  int iVar11;\n  \n  pBVar6 = x + len;\n  internal_mul_low(pBVar6,mninv,tmp,len,tmp + len * 3);\n  iVar11 = len * 2 + -1;\n  internal_mul(tmp,n,tmp + len,len,tmp + len * 3);\n  if (iVar11 < 0) {\n    uVar4 = 0;\n  }\n  else {\n    pBVar3 = pBVar6 + len;\n    uVar4 = 0;\n    pBVar9 = tmp + len + iVar11;\n    do {\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    } while (x != pBVar3);\n  }\n  if (0 < len) {\n    iVar11 = 0;\n    pBVar3 = x;\n    do {\n      iVar11 = iVar11 + 1;\n      pBVar3[len] = *pBVar3;\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar11 < len);\n    if (uVar4 == 0) {\n      uVar4 = *pBVar6;\n      uVar2 = *n;\n      if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }\n      if (uVar4 <= uVar2) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (len + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar7 = len + -1;\n  iVar11 = 1;\n  puVar10 = n + iVar7;\n  pBVar6 = x + iVar7 + len;\n  do {\n    uVar8 = *pBVar6;\n    uVar2 = *puVar10;\n    iVar7 = iVar7 + -1;\n    puVar10 = puVar10 + -1;\n    uVar4 = uVar8 + iVar11;\n    uVar5 = ~uVar2 + uVar4;\n    *pBVar6 = uVar5;\n    iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8);\n    pBVar6 = pBVar6 + -1;\n  } while (iVar7 != -1);\n  return;\n}\n\n" (function_definition "void monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)\n\n{\n  BignumInt BVar1;\n  uint uVar2;\n  BignumInt *pBVar3;\n  uint uVar4;\n  uint uVar5;\n  BignumInt *pBVar6;\n  int iVar7;\n  uint uVar8;\n  BignumInt *pBVar9;\n  uint *puVar10;\n  int iVar11;\n  \n  pBVar6 = x + len;\n  internal_mul_low(pBVar6,mninv,tmp,len,tmp + len * 3);\n  iVar11 = len * 2 + -1;\n  internal_mul(tmp,n,tmp + len,len,tmp + len * 3);\n  if (iVar11 < 0) {\n    uVar4 = 0;\n  }\n  else {\n    pBVar3 = pBVar6 + len;\n    uVar4 = 0;\n    pBVar9 = tmp + len + iVar11;\n    do {\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    } while (x != pBVar3);\n  }\n  if (0 < len) {\n    iVar11 = 0;\n    pBVar3 = x;\n    do {\n      iVar11 = iVar11 + 1;\n      pBVar3[len] = *pBVar3;\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar11 < len);\n    if (uVar4 == 0) {\n      uVar4 = *pBVar6;\n      uVar2 = *n;\n      if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }\n      if (uVar4 <= uVar2) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (len + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar7 = len + -1;\n  iVar11 = 1;\n  puVar10 = n + iVar7;\n  pBVar6 = x + iVar7 + len;\n  do {\n    uVar8 = *pBVar6;\n    uVar2 = *puVar10;\n    iVar7 = iVar7 + -1;\n    puVar10 = puVar10 + -1;\n    uVar4 = uVar8 + iVar11;\n    uVar5 = ~uVar2 + uVar4;\n    *pBVar6 = uVar5;\n    iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8);\n    pBVar6 = pBVar6 + -1;\n  } while (iVar7 != -1);\n  return;\n}" primitive_type (function_declarator "monty_reduce(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)" identifier (parameter_list "(BignumInt *x,BignumInt *n,BignumInt *mninv,BignumInt *tmp,int len)" ( (parameter_declaration "BignumInt *x" type_identifier (pointer_declarator "*x" * identifier)) , (parameter_declaration "BignumInt *n" type_identifier (pointer_declarator "*n" * identifier)) , (parameter_declaration "BignumInt *mninv" type_identifier (pointer_declarator "*mninv" * identifier)) , (parameter_declaration "BignumInt *tmp" type_identifier (pointer_declarator "*tmp" * identifier)) , (parameter_declaration "int len" primitive_type identifier) ))) (compound_statement "{\n  BignumInt BVar1;\n  uint uVar2;\n  BignumInt *pBVar3;\n  uint uVar4;\n  uint uVar5;\n  BignumInt *pBVar6;\n  int iVar7;\n  uint uVar8;\n  BignumInt *pBVar9;\n  uint *puVar10;\n  int iVar11;\n  \n  pBVar6 = x + len;\n  internal_mul_low(pBVar6,mninv,tmp,len,tmp + len * 3);\n  iVar11 = len * 2 + -1;\n  internal_mul(tmp,n,tmp + len,len,tmp + len * 3);\n  if (iVar11 < 0) {\n    uVar4 = 0;\n  }\n  else {\n    pBVar3 = pBVar6 + len;\n    uVar4 = 0;\n    pBVar9 = tmp + len + iVar11;\n    do {\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    } while (x != pBVar3);\n  }\n  if (0 < len) {\n    iVar11 = 0;\n    pBVar3 = x;\n    do {\n      iVar11 = iVar11 + 1;\n      pBVar3[len] = *pBVar3;\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar11 < len);\n    if (uVar4 == 0) {\n      uVar4 = *pBVar6;\n      uVar2 = *n;\n      if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }\n      if (uVar4 <= uVar2) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (len + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar7 = len + -1;\n  iVar11 = 1;\n  puVar10 = n + iVar7;\n  pBVar6 = x + iVar7 + len;\n  do {\n    uVar8 = *pBVar6;\n    uVar2 = *puVar10;\n    iVar7 = iVar7 + -1;\n    puVar10 = puVar10 + -1;\n    uVar4 = uVar8 + iVar11;\n    uVar5 = ~uVar2 + uVar4;\n    *pBVar6 = uVar5;\n    iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8);\n    pBVar6 = pBVar6 + -1;\n  } while (iVar7 != -1);\n  return;\n}" { (declaration "BignumInt BVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "BignumInt *pBVar3;" type_identifier (pointer_declarator "*pBVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "BignumInt *pBVar6;" type_identifier (pointer_declarator "*pBVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "BignumInt *pBVar9;" type_identifier (pointer_declarator "*pBVar9" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (expression_statement "pBVar6 = x + len;" (assignment_expression "pBVar6 = x + len" identifier = (binary_expression "x + len" identifier + identifier)) ;) (expression_statement "internal_mul_low(pBVar6,mninv,tmp,len,tmp + len * 3);" (call_expression "internal_mul_low(pBVar6,mninv,tmp,len,tmp + len * 3)" identifier (argument_list "(pBVar6,mninv,tmp,len,tmp + len * 3)" ( identifier , identifier , identifier , identifier , (binary_expression "tmp + len * 3" identifier + (binary_expression "len * 3" identifier * number_literal)) ))) ;) (expression_statement "iVar11 = len * 2 + -1;" (assignment_expression "iVar11 = len * 2 + -1" identifier = (binary_expression "len * 2 + -1" (binary_expression "len * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "internal_mul(tmp,n,tmp + len,len,tmp + len * 3);" (call_expression "internal_mul(tmp,n,tmp + len,len,tmp + len * 3)" identifier (argument_list "(tmp,n,tmp + len,len,tmp + len * 3)" ( identifier , identifier , (binary_expression "tmp + len" identifier + identifier) , identifier , (binary_expression "tmp + len * 3" identifier + (binary_expression "len * 3" identifier * number_literal)) ))) ;) (if_statement "if (iVar11 < 0) {\n    uVar4 = 0;\n  }\n  else {\n    pBVar3 = pBVar6 + len;\n    uVar4 = 0;\n    pBVar9 = tmp + len + iVar11;\n    do {\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    } while (x != pBVar3);\n  }" if (parenthesized_expression "(iVar11 < 0)" ( (binary_expression "iVar11 < 0" identifier < number_literal) )) (compound_statement "{\n    uVar4 = 0;\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    pBVar3 = pBVar6 + len;\n    uVar4 = 0;\n    pBVar9 = tmp + len + iVar11;\n    do {\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    } while (x != pBVar3);\n  }" else (compound_statement "{\n    pBVar3 = pBVar6 + len;\n    uVar4 = 0;\n    pBVar9 = tmp + len + iVar11;\n    do {\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    } while (x != pBVar3);\n  }" { (expression_statement "pBVar3 = pBVar6 + len;" (assignment_expression "pBVar3 = pBVar6 + len" identifier = (binary_expression "pBVar6 + len" identifier + identifier)) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "pBVar9 = tmp + len + iVar11;" (assignment_expression "pBVar9 = tmp + len + iVar11" identifier = (binary_expression "tmp + len + iVar11" (binary_expression "tmp + len" identifier + identifier) + identifier)) ;) (do_statement "do {\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    } while (x != pBVar3);" do (compound_statement "{\n      uVar8 = pBVar3[-1];\n      pBVar3 = pBVar3 + -1;\n      BVar1 = *pBVar9;\n      pBVar9 = pBVar9 + -1;\n      uVar2 = uVar8 + BVar1;\n      uVar5 = uVar4 + uVar2;\n      *pBVar3 = uVar5;\n      uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);\n    }" { (expression_statement "uVar8 = pBVar3[-1];" (assignment_expression "uVar8 = pBVar3[-1]" identifier = (subscript_expression "pBVar3[-1]" identifier [ number_literal ])) ;) (expression_statement "pBVar3 = pBVar3 + -1;" (assignment_expression "pBVar3 = pBVar3 + -1" identifier = (binary_expression "pBVar3 + -1" identifier + number_literal)) ;) (expression_statement "BVar1 = *pBVar9;" (assignment_expression "BVar1 = *pBVar9" identifier = (pointer_expression "*pBVar9" * identifier)) ;) (expression_statement "pBVar9 = pBVar9 + -1;" (assignment_expression "pBVar9 = pBVar9 + -1" identifier = (binary_expression "pBVar9 + -1" identifier + number_literal)) ;) (expression_statement "uVar2 = uVar8 + BVar1;" (assignment_expression "uVar2 = uVar8 + BVar1" identifier = (binary_expression "uVar8 + BVar1" identifier + identifier)) ;) (expression_statement "uVar5 = uVar4 + uVar2;" (assignment_expression "uVar5 = uVar4 + uVar2" identifier = (binary_expression "uVar4 + uVar2" identifier + identifier)) ;) (expression_statement "*pBVar3 = uVar5;" (assignment_expression "*pBVar3 = uVar5" (pointer_expression "*pBVar3" * identifier) = identifier) ;) (expression_statement "uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8);" (assignment_expression "uVar4 = (uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8)" identifier = (binary_expression "(uint)(uVar5 < uVar4) + (uint)(uVar2 < uVar8)" (call_expression "(uint)(uVar5 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < uVar4)" ( (binary_expression "uVar5 < uVar4" identifier < identifier) ))) + (call_expression "(uint)(uVar2 < uVar8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar8)" ( (binary_expression "uVar2 < uVar8" identifier < identifier) ))))) ;) }) while (parenthesized_expression "(x != pBVar3)" ( (binary_expression "x != pBVar3" identifier != identifier) )) ;) }))) (if_statement "if (0 < len) {\n    iVar11 = 0;\n    pBVar3 = x;\n    do {\n      iVar11 = iVar11 + 1;\n      pBVar3[len] = *pBVar3;\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar11 < len);\n    if (uVar4 == 0) {\n      uVar4 = *pBVar6;\n      uVar2 = *n;\n      if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }\n      if (uVar4 <= uVar2) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" if (parenthesized_expression "(0 < len)" ( (binary_expression "0 < len" number_literal < identifier) )) (compound_statement "{\n    iVar11 = 0;\n    pBVar3 = x;\n    do {\n      iVar11 = iVar11 + 1;\n      pBVar3[len] = *pBVar3;\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar11 < len);\n    if (uVar4 == 0) {\n      uVar4 = *pBVar6;\n      uVar2 = *n;\n      if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }\n      if (uVar4 <= uVar2) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (expression_statement "pBVar3 = x;" (assignment_expression "pBVar3 = x" identifier = identifier) ;) (do_statement "do {\n      iVar11 = iVar11 + 1;\n      pBVar3[len] = *pBVar3;\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar11 < len);" do (compound_statement "{\n      iVar11 = iVar11 + 1;\n      pBVar3[len] = *pBVar3;\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    }" { (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "pBVar3[len] = *pBVar3;" (assignment_expression "pBVar3[len] = *pBVar3" (subscript_expression "pBVar3[len]" identifier [ identifier ]) = (pointer_expression "*pBVar3" * identifier)) ;) (expression_statement "*pBVar3 = 0;" (assignment_expression "*pBVar3 = 0" (pointer_expression "*pBVar3" * identifier) = number_literal) ;) (expression_statement "pBVar3 = pBVar3 + 1;" (assignment_expression "pBVar3 = pBVar3 + 1" identifier = (binary_expression "pBVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar11 < len)" ( (binary_expression "iVar11 < len" identifier < identifier) )) ;) (if_statement "if (uVar4 == 0) {\n      uVar4 = *pBVar6;\n      uVar2 = *n;\n      if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }\n      if (uVar4 <= uVar2) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar4 = *pBVar6;\n      uVar2 = *n;\n      if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }\n      if (uVar4 <= uVar2) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" { (expression_statement "uVar4 = *pBVar6;" (assignment_expression "uVar4 = *pBVar6" identifier = (pointer_expression "*pBVar6" * identifier)) ;) (expression_statement "uVar2 = *n;" (assignment_expression "uVar2 = *n" identifier = (pointer_expression "*n" * identifier)) ;) (if_statement "if (uVar4 == uVar2) {\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }" if (parenthesized_expression "(uVar4 == uVar2)" ( (binary_expression "uVar4 == uVar2" identifier == identifier) )) (compound_statement "{\n        iVar11 = 0;\n        pBVar3 = n + 1;\n        do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);\n      }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (expression_statement "pBVar3 = n + 1;" (assignment_expression "pBVar3 = n + 1" identifier = (binary_expression "n + 1" identifier + number_literal)) ;) (do_statement "do {\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        } while (uVar4 == uVar2);" do (compound_statement "{\n          iVar11 = iVar11 + 1;\n          if (len == iVar11) goto LAB_00026e60;\n          uVar4 = pBVar6[1];\n          uVar2 = *pBVar3;\n          pBVar6 = pBVar6 + 1;\n          pBVar3 = pBVar3 + 1;\n        }" { (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (if_statement "if (len == iVar11) goto LAB_00026e60;" if (parenthesized_expression "(len == iVar11)" ( (binary_expression "len == iVar11" identifier == identifier) )) (goto_statement "goto LAB_00026e60;" goto statement_identifier ;)) (expression_statement "uVar4 = pBVar6[1];" (assignment_expression "uVar4 = pBVar6[1]" identifier = (subscript_expression "pBVar6[1]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = *pBVar3;" (assignment_expression "uVar2 = *pBVar3" identifier = (pointer_expression "*pBVar3" * identifier)) ;) (expression_statement "pBVar6 = pBVar6 + 1;" (assignment_expression "pBVar6 = pBVar6 + 1" identifier = (binary_expression "pBVar6 + 1" identifier + number_literal)) ;) (expression_statement "pBVar3 = pBVar3 + 1;" (assignment_expression "pBVar3 = pBVar3 + 1" identifier = (binary_expression "pBVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar4 == uVar2)" ( (binary_expression "uVar4 == uVar2" identifier == identifier) )) ;) })) (if_statement "if (uVar4 <= uVar2) {\n        return;\n      }" if (parenthesized_expression "(uVar4 <= uVar2)" ( (binary_expression "uVar4 <= uVar2" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_00026e60;" goto statement_identifier ;) })) })) (if_statement "if (len + -1 < 0) {\n    return;\n  }" if (parenthesized_expression "(len + -1 < 0)" ( (binary_expression "len + -1 < 0" (binary_expression "len + -1" identifier + number_literal) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_00026e60:\n  iVar7 = len + -1;" statement_identifier : (expression_statement "iVar7 = len + -1;" (assignment_expression "iVar7 = len + -1" identifier = (binary_expression "len + -1" identifier + number_literal)) ;)) (expression_statement "iVar11 = 1;" (assignment_expression "iVar11 = 1" identifier = number_literal) ;) (expression_statement "puVar10 = n + iVar7;" (assignment_expression "puVar10 = n + iVar7" identifier = (binary_expression "n + iVar7" identifier + identifier)) ;) (expression_statement "pBVar6 = x + iVar7 + len;" (assignment_expression "pBVar6 = x + iVar7 + len" identifier = (binary_expression "x + iVar7 + len" (binary_expression "x + iVar7" identifier + identifier) + identifier)) ;) (do_statement "do {\n    uVar8 = *pBVar6;\n    uVar2 = *puVar10;\n    iVar7 = iVar7 + -1;\n    puVar10 = puVar10 + -1;\n    uVar4 = uVar8 + iVar11;\n    uVar5 = ~uVar2 + uVar4;\n    *pBVar6 = uVar5;\n    iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8);\n    pBVar6 = pBVar6 + -1;\n  } while (iVar7 != -1);" do (compound_statement "{\n    uVar8 = *pBVar6;\n    uVar2 = *puVar10;\n    iVar7 = iVar7 + -1;\n    puVar10 = puVar10 + -1;\n    uVar4 = uVar8 + iVar11;\n    uVar5 = ~uVar2 + uVar4;\n    *pBVar6 = uVar5;\n    iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8);\n    pBVar6 = pBVar6 + -1;\n  }" { (expression_statement "uVar8 = *pBVar6;" (assignment_expression "uVar8 = *pBVar6" identifier = (pointer_expression "*pBVar6" * identifier)) ;) (expression_statement "uVar2 = *puVar10;" (assignment_expression "uVar2 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar8 + iVar11;" (assignment_expression "uVar4 = uVar8 + iVar11" identifier = (binary_expression "uVar8 + iVar11" identifier + identifier)) ;) (expression_statement "uVar5 = ~uVar2 + uVar4;" (assignment_expression "uVar5 = ~uVar2 + uVar4" identifier = (binary_expression "~uVar2 + uVar4" (unary_expression "~uVar2" ~ identifier) + identifier)) ;) (expression_statement "*pBVar6 = uVar5;" (assignment_expression "*pBVar6 = uVar5" (pointer_expression "*pBVar6" * identifier) = identifier) ;) (expression_statement "iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8);" (assignment_expression "iVar11 = (uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8)" identifier = (binary_expression "(uint)(uVar5 < ~uVar2) + (uint)(uVar4 < uVar8)" (call_expression "(uint)(uVar5 < ~uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < ~uVar2)" ( (binary_expression "uVar5 < ~uVar2" identifier < (unary_expression "~uVar2" ~ identifier)) ))) + (call_expression "(uint)(uVar4 < uVar8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar8)" ( (binary_expression "uVar4 < uVar8" identifier < identifier) ))))) ;) (expression_statement "pBVar6 = pBVar6 + -1;" (assignment_expression "pBVar6 = pBVar6 + -1" identifier = (binary_expression "pBVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != -1)" ( (binary_expression "iVar7 != -1" identifier != number_literal) )) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}\n\n" (function_definition "void FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}" primitive_type (function_declarator "FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)" identifier (parameter_list "(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (expression_statement "puVar5 = param_1 + param_5;" (assignment_expression "puVar5 = param_1 + param_5" identifier = (binary_expression "param_1 + param_5" identifier + identifier)) ;) (expression_statement "iVar9 = param_4 + param_5 * 0xc;" (assignment_expression "iVar9 = param_4 + param_5 * 0xc" identifier = (binary_expression "param_4 + param_5 * 0xc" identifier + (binary_expression "param_5 * 0xc" identifier * number_literal))) ;) (expression_statement "FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);" (call_expression "FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9)" identifier (argument_list "(puVar5,param_3,param_4,param_5,iVar9)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "iVar8 = param_5 * 2 + -1;" (assignment_expression "iVar8 = param_5 * 2 + -1" identifier = (binary_expression "param_5 * 2 + -1" (binary_expression "param_5 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);" (call_expression "FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9)" identifier (argument_list "(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9)" ( identifier , identifier , (binary_expression "param_4 + param_5 * 4" identifier + (binary_expression "param_5 * 4" identifier * number_literal)) , identifier , identifier ))) ;) (if_statement "if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" if (parenthesized_expression "(iVar8 < 0)" ( (binary_expression "iVar8 < 0" identifier < number_literal) )) (compound_statement "{\n    uVar3 = 0;\n  }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" else (compound_statement "{\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" { (expression_statement "puVar2 = puVar5 + param_5;" (assignment_expression "puVar2 = puVar5 + param_5" identifier = (binary_expression "puVar5 + param_5" identifier + identifier)) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);" (assignment_expression "piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4)" identifier = (cast_expression "(int *)(param_4 + iVar8 * 4 + param_5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + iVar8 * 4 + param_5 * 4)" ( (binary_expression "param_4 + iVar8 * 4 + param_5 * 4" (binary_expression "param_4 + iVar8 * 4" identifier + (binary_expression "iVar8 * 4" identifier * number_literal)) + (binary_expression "param_5 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);" do (compound_statement "{\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    }" { (expression_statement "uVar6 = puVar2[-1];" (assignment_expression "uVar6 = puVar2[-1]" identifier = (subscript_expression "puVar2[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar2 = puVar2 + -1;" (assignment_expression "puVar2 = puVar2 + -1" identifier = (binary_expression "puVar2 + -1" identifier + number_literal)) ;) (expression_statement "iVar8 = *piVar7;" (assignment_expression "iVar8 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;) (expression_statement "piVar7 = piVar7 + -1;" (assignment_expression "piVar7 = piVar7 + -1" identifier = (binary_expression "piVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar1 = uVar6 + iVar8;" (assignment_expression "uVar1 = uVar6 + iVar8" identifier = (binary_expression "uVar6 + iVar8" identifier + identifier)) ;) (expression_statement "uVar4 = uVar3 + uVar1;" (assignment_expression "uVar4 = uVar3 + uVar1" identifier = (binary_expression "uVar3 + uVar1" identifier + identifier)) ;) (expression_statement "*puVar2 = uVar4;" (assignment_expression "*puVar2 = uVar4" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);" (assignment_expression "uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6)" identifier = (binary_expression "(uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6)" (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar3)" ( (binary_expression "uVar4 < uVar3" identifier < identifier) ))) + (call_expression "(uint)(uVar1 < uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 < uVar6)" ( (binary_expression "uVar1 < uVar6" identifier < identifier) ))))) ;) }) while (parenthesized_expression "(param_1 != puVar2)" ( (binary_expression "param_1 != puVar2" identifier != identifier) )) ;) }))) (if_statement "if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" if (parenthesized_expression "(0 < param_5)" ( (binary_expression "0 < param_5" number_literal < identifier) )) (compound_statement "{\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "puVar2 = param_1;" (assignment_expression "puVar2 = param_1" identifier = identifier) ;) (do_statement "do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);" do (compound_statement "{\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    }" { (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "puVar2[param_5] = *puVar2;" (assignment_expression "puVar2[param_5] = *puVar2" (subscript_expression "puVar2[param_5]" identifier [ identifier ]) = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "*puVar2 = 0;" (assignment_expression "*puVar2 = 0" (pointer_expression "*puVar2" * identifier) = number_literal) ;) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar8 < param_5)" ( (binary_expression "iVar8 < param_5" identifier < identifier) )) ;) (if_statement "if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" { (expression_statement "uVar3 = *puVar5;" (assignment_expression "uVar3 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }" if (parenthesized_expression "(uVar3 == uVar1)" ( (binary_expression "uVar3 == uVar1" identifier == identifier) )) (compound_statement "{\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "puVar2 = param_2 + 1;" (assignment_expression "puVar2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (do_statement "do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);" do (compound_statement "{\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        }" { (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (if_statement "if (param_5 == iVar8) goto LAB_00026e60;" if (parenthesized_expression "(param_5 == iVar8)" ( (binary_expression "param_5 == iVar8" identifier == identifier) )) (goto_statement "goto LAB_00026e60;" goto statement_identifier ;)) (expression_statement "uVar3 = puVar5[1];" (assignment_expression "uVar3 = puVar5[1]" identifier = (subscript_expression "puVar5[1]" identifier [ number_literal ])) ;) (expression_statement "uVar1 = *puVar2;" (assignment_expression "uVar1 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar3 == uVar1)" ( (binary_expression "uVar3 == uVar1" identifier == identifier) )) ;) })) (if_statement "if (uVar3 <= uVar1) {\n        return;\n      }" if (parenthesized_expression "(uVar3 <= uVar1)" ( (binary_expression "uVar3 <= uVar1" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_00026e60;" goto statement_identifier ;) })) })) (if_statement "if (param_5 + -1 < 0) {\n    return;\n  }" if (parenthesized_expression "(param_5 + -1 < 0)" ( (binary_expression "param_5 + -1 < 0" (binary_expression "param_5 + -1" identifier + number_literal) < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_00026e60:\n  iVar9 = param_5 + -1;" statement_identifier : (expression_statement "iVar9 = param_5 + -1;" (assignment_expression "iVar9 = param_5 + -1" identifier = (binary_expression "param_5 + -1" identifier + number_literal)) ;)) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) (expression_statement "param_2 = param_2 + iVar9;" (assignment_expression "param_2 = param_2 + iVar9" identifier = (binary_expression "param_2 + iVar9" identifier + identifier)) ;) (expression_statement "puVar5 = param_1 + iVar9 + param_5;" (assignment_expression "puVar5 = param_1 + iVar9 + param_5" identifier = (binary_expression "param_1 + iVar9 + param_5" (binary_expression "param_1 + iVar9" identifier + identifier) + identifier)) ;) (do_statement "do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);" do (compound_statement "{\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  }" { (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" identifier = (binary_expression "iVar9 + -1" identifier + number_literal)) ;) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (expression_statement "uVar3 = uVar6 + iVar8;" (assignment_expression "uVar3 = uVar6 + iVar8" identifier = (binary_expression "uVar6 + iVar8" identifier + identifier)) ;) (expression_statement "uVar4 = ~uVar1 + uVar3;" (assignment_expression "uVar4 = ~uVar1 + uVar3" identifier = (binary_expression "~uVar1 + uVar3" (unary_expression "~uVar1" ~ identifier) + identifier)) ;) (expression_statement "*puVar5 = uVar4;" (assignment_expression "*puVar5 = uVar4" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);" (assignment_expression "iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6)" identifier = (binary_expression "(uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6)" (call_expression "(uint)(uVar4 < ~uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < ~uVar1)" ( (binary_expression "uVar4 < ~uVar1" identifier < (unary_expression "~uVar1" ~ identifier)) ))) + (call_expression "(uint)(uVar3 < uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar6)" ( (binary_expression "uVar3 < uVar6" identifier < identifier) ))))) ;) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar9 != -1)" ( (binary_expression "iVar9 != -1" identifier != number_literal) )) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + (binary_expression IDENT * LIT)) , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + (binary_expression IDENT * LIT)) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT == IDENT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return ;) })) (goto_statement goto statement_identifier ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (return_statement return ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression ~ IDENT) + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (unary_expression ~ IDENT)) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (return_statement return ;) })))
(function_definition "void FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00026cfc(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)" (identifier "FUN_00026cfc") (parameter_list "(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int *piVar7;\n  int iVar8;\n  int iVar9;\n  \n  puVar5 = param_1 + param_5;\n  iVar9 = param_4 + param_5 * 0xc;\n  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);\n  iVar8 = param_5 * 2 + -1;\n  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);\n  if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }\n  if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }\n  if (param_5 + -1 < 0) {\n    return;\n  }\nLAB_00026e60:\n  iVar9 = param_5 + -1;\n  iVar8 = 1;\n  param_2 = param_2 + iVar9;\n  puVar5 = param_1 + iVar9 + param_5;\n  do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (expression_statement "puVar5 = param_1 + param_5;" (assignment_expression "puVar5 = param_1 + param_5" (identifier "puVar5") (= "=") (binary_expression "param_1 + param_5" (identifier "param_1") (+ "+") (identifier "param_5"))) (; ";")) (expression_statement "iVar9 = param_4 + param_5 * 0xc;" (assignment_expression "iVar9 = param_4 + param_5 * 0xc" (identifier "iVar9") (= "=") (binary_expression "param_4 + param_5 * 0xc" (identifier "param_4") (+ "+") (binary_expression "param_5 * 0xc" (identifier "param_5") (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);" (call_expression "FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9)" (identifier "FUN_00026a54") (argument_list "(puVar5,param_3,param_4,param_5,iVar9)" (( "(") (identifier "puVar5") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (identifier "iVar9") () ")"))) (; ";")) (expression_statement "iVar8 = param_5 * 2 + -1;" (assignment_expression "iVar8 = param_5 * 2 + -1" (identifier "iVar8") (= "=") (binary_expression "param_5 * 2 + -1" (binary_expression "param_5 * 2" (identifier "param_5") (* "*") (number_literal "2")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);" (call_expression "FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9)" (identifier "FUN_00026580") (argument_list "(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9)" (( "(") (identifier "param_4") (, ",") (identifier "param_2") (, ",") (binary_expression "param_4 + param_5 * 4" (identifier "param_4") (+ "+") (binary_expression "param_5 * 4" (identifier "param_5") (* "*") (number_literal "4"))) (, ",") (identifier "param_5") (, ",") (identifier "iVar9") () ")"))) (; ";")) (if_statement "if (iVar8 < 0) {\n    uVar3 = 0;\n  }\n  else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" (if "if") (parenthesized_expression "(iVar8 < 0)" (( "(") (binary_expression "iVar8 < 0" (identifier "iVar8") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = 0;\n  }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" (else "else") (compound_statement "{\n    puVar2 = puVar5 + param_5;\n    uVar3 = 0;\n    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);\n    do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);\n  }" ({ "{") (expression_statement "puVar2 = puVar5 + param_5;" (assignment_expression "puVar2 = puVar5 + param_5" (identifier "puVar2") (= "=") (binary_expression "puVar5 + param_5" (identifier "puVar5") (+ "+") (identifier "param_5"))) (; ";")) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);" (assignment_expression "piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4)" (identifier "piVar7") (= "=") (cast_expression "(int *)(param_4 + iVar8 * 4 + param_5 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + iVar8 * 4 + param_5 * 4)" (( "(") (binary_expression "param_4 + iVar8 * 4 + param_5 * 4" (binary_expression "param_4 + iVar8 * 4" (identifier "param_4") (+ "+") (binary_expression "iVar8 * 4" (identifier "iVar8") (* "*") (number_literal "4"))) (+ "+") (binary_expression "param_5 * 4" (identifier "param_5") (* "*") (number_literal "4"))) () ")")))) (; ";")) (do_statement "do {\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    } while (param_1 != puVar2);" (do "do") (compound_statement "{\n      uVar6 = puVar2[-1];\n      puVar2 = puVar2 + -1;\n      iVar8 = *piVar7;\n      piVar7 = piVar7 + -1;\n      uVar1 = uVar6 + iVar8;\n      uVar4 = uVar3 + uVar1;\n      *puVar2 = uVar4;\n      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);\n    }" ({ "{") (expression_statement "uVar6 = puVar2[-1];" (assignment_expression "uVar6 = puVar2[-1]" (identifier "uVar6") (= "=") (subscript_expression "puVar2[-1]" (identifier "puVar2") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "puVar2 = puVar2 + -1;" (assignment_expression "puVar2 = puVar2 + -1" (identifier "puVar2") (= "=") (binary_expression "puVar2 + -1" (identifier "puVar2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "iVar8 = *piVar7;" (assignment_expression "iVar8 = *piVar7" (identifier "iVar8") (= "=") (pointer_expression "*piVar7" (* "*") (identifier "piVar7"))) (; ";")) (expression_statement "piVar7 = piVar7 + -1;" (assignment_expression "piVar7 = piVar7 + -1" (identifier "piVar7") (= "=") (binary_expression "piVar7 + -1" (identifier "piVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar1 = uVar6 + iVar8;" (assignment_expression "uVar1 = uVar6 + iVar8" (identifier "uVar1") (= "=") (binary_expression "uVar6 + iVar8" (identifier "uVar6") (+ "+") (identifier "iVar8"))) (; ";")) (expression_statement "uVar4 = uVar3 + uVar1;" (assignment_expression "uVar4 = uVar3 + uVar1" (identifier "uVar4") (= "=") (binary_expression "uVar3 + uVar1" (identifier "uVar3") (+ "+") (identifier "uVar1"))) (; ";")) (expression_statement "*puVar2 = uVar4;" (assignment_expression "*puVar2 = uVar4" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);" (assignment_expression "uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6)" (identifier "uVar3") (= "=") (binary_expression "(uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6)" (call_expression "(uint)(uVar4 < uVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar3)" (( "(") (binary_expression "uVar4 < uVar3" (identifier "uVar4") (< "<") (identifier "uVar3")) () ")"))) (+ "+") (call_expression "(uint)(uVar1 < uVar6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar1 < uVar6)" (( "(") (binary_expression "uVar1 < uVar6" (identifier "uVar1") (< "<") (identifier "uVar6")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 != puVar2)" (( "(") (binary_expression "param_1 != puVar2" (identifier "param_1") (!= "!=") (identifier "puVar2")) () ")")) (; ";")) (} "}")))) (if_statement "if (0 < param_5) {\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" (if "if") (parenthesized_expression "(0 < param_5)" (( "(") (binary_expression "0 < param_5" (number_literal "0") (< "<") (identifier "param_5")) () ")")) (compound_statement "{\n    iVar8 = 0;\n    puVar2 = param_1;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);\n    if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }\n  }" ({ "{") (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar2 = param_1;" (assignment_expression "puVar2 = param_1" (identifier "puVar2") (= "=") (identifier "param_1")) (; ";")) (do_statement "do {\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (iVar8 < param_5);" (do "do") (compound_statement "{\n      iVar8 = iVar8 + 1;\n      puVar2[param_5] = *puVar2;\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    }" ({ "{") (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" (identifier "iVar8") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar2[param_5] = *puVar2;" (assignment_expression "puVar2[param_5] = *puVar2" (subscript_expression "puVar2[param_5]" (identifier "puVar2") ([ "[") (identifier "param_5") (] "]")) (= "=") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (; ";")) (expression_statement "*puVar2 = 0;" (assignment_expression "*puVar2 = 0" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" (identifier "puVar2") (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar8 < param_5)" (( "(") (binary_expression "iVar8 < param_5" (identifier "iVar8") (< "<") (identifier "param_5")) () ")")) (; ";")) (if_statement "if (uVar3 == 0) {\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar3 = *puVar5;\n      uVar1 = *param_2;\n      if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }\n      if (uVar3 <= uVar1) {\n        return;\n      }\n      goto LAB_00026e60;\n    }" ({ "{") (expression_statement "uVar3 = *puVar5;" (assignment_expression "uVar3 = *puVar5" (identifier "uVar3") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" (identifier "uVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (uVar3 == uVar1) {\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }" (if "if") (parenthesized_expression "(uVar3 == uVar1)" (( "(") (binary_expression "uVar3 == uVar1" (identifier "uVar3") (== "==") (identifier "uVar1")) () ")")) (compound_statement "{\n        iVar8 = 0;\n        puVar2 = param_2 + 1;\n        do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);\n      }" ({ "{") (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar2 = param_2 + 1;" (assignment_expression "puVar2 = param_2 + 1" (identifier "puVar2") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (do_statement "do {\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        } while (uVar3 == uVar1);" (do "do") (compound_statement "{\n          iVar8 = iVar8 + 1;\n          if (param_5 == iVar8) goto LAB_00026e60;\n          uVar3 = puVar5[1];\n          uVar1 = *puVar2;\n          puVar5 = puVar5 + 1;\n          puVar2 = puVar2 + 1;\n        }" ({ "{") (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" (identifier "iVar8") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_5 == iVar8) goto LAB_00026e60;" (if "if") (parenthesized_expression "(param_5 == iVar8)" (( "(") (binary_expression "param_5 == iVar8" (identifier "param_5") (== "==") (identifier "iVar8")) () ")")) (goto_statement "goto LAB_00026e60;" (goto "goto") (statement_identifier "LAB_00026e60") (; ";"))) (expression_statement "uVar3 = puVar5[1];" (assignment_expression "uVar3 = puVar5[1]" (identifier "uVar3") (= "=") (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar1 = *puVar2;" (assignment_expression "uVar1 = *puVar2" (identifier "uVar1") (= "=") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" (identifier "puVar2") (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar3 == uVar1)" (( "(") (binary_expression "uVar3 == uVar1" (identifier "uVar3") (== "==") (identifier "uVar1")) () ")")) (; ";")) (} "}"))) (if_statement "if (uVar3 <= uVar1) {\n        return;\n      }" (if "if") (parenthesized_expression "(uVar3 <= uVar1)" (( "(") (binary_expression "uVar3 <= uVar1" (identifier "uVar3") (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (goto_statement "goto LAB_00026e60;" (goto "goto") (statement_identifier "LAB_00026e60") (; ";")) (} "}"))) (} "}"))) (if_statement "if (param_5 + -1 < 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_5 + -1 < 0)" (( "(") (binary_expression "param_5 + -1 < 0" (binary_expression "param_5 + -1" (identifier "param_5") (+ "+") (number_literal "-1")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (labeled_statement "LAB_00026e60:\n  iVar9 = param_5 + -1;" (statement_identifier "LAB_00026e60") (: ":") (expression_statement "iVar9 = param_5 + -1;" (assignment_expression "iVar9 = param_5 + -1" (identifier "iVar9") (= "=") (binary_expression "param_5 + -1" (identifier "param_5") (+ "+") (number_literal "-1"))) (; ";"))) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" (identifier "iVar8") (= "=") (number_literal "1")) (; ";")) (expression_statement "param_2 = param_2 + iVar9;" (assignment_expression "param_2 = param_2 + iVar9" (identifier "param_2") (= "=") (binary_expression "param_2 + iVar9" (identifier "param_2") (+ "+") (identifier "iVar9"))) (; ";")) (expression_statement "puVar5 = param_1 + iVar9 + param_5;" (assignment_expression "puVar5 = param_1 + iVar9 + param_5" (identifier "puVar5") (= "=") (binary_expression "param_1 + iVar9 + param_5" (binary_expression "param_1 + iVar9" (identifier "param_1") (+ "+") (identifier "iVar9")) (+ "+") (identifier "param_5"))) (; ";")) (do_statement "do {\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  } while (iVar9 != -1);" (do "do") (compound_statement "{\n    uVar6 = *puVar5;\n    uVar1 = *param_2;\n    iVar9 = iVar9 + -1;\n    param_2 = param_2 + -1;\n    uVar3 = uVar6 + iVar8;\n    uVar4 = ~uVar1 + uVar3;\n    *puVar5 = uVar4;\n    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);\n    puVar5 = puVar5 + -1;\n  }" ({ "{") (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" (identifier "uVar6") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" (identifier "uVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" (identifier "iVar9") (= "=") (binary_expression "iVar9 + -1" (identifier "iVar9") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" (identifier "param_2") (= "=") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar3 = uVar6 + iVar8;" (assignment_expression "uVar3 = uVar6 + iVar8" (identifier "uVar3") (= "=") (binary_expression "uVar6 + iVar8" (identifier "uVar6") (+ "+") (identifier "iVar8"))) (; ";")) (expression_statement "uVar4 = ~uVar1 + uVar3;" (assignment_expression "uVar4 = ~uVar1 + uVar3" (identifier "uVar4") (= "=") (binary_expression "~uVar1 + uVar3" (unary_expression "~uVar1" (~ "~") (identifier "uVar1")) (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "*puVar5 = uVar4;" (assignment_expression "*puVar5 = uVar4" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);" (assignment_expression "iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6)" (identifier "iVar8") (= "=") (binary_expression "(uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6)" (call_expression "(uint)(uVar4 < ~uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < ~uVar1)" (( "(") (binary_expression "uVar4 < ~uVar1" (identifier "uVar4") (< "<") (unary_expression "~uVar1" (~ "~") (identifier "uVar1"))) () ")"))) (+ "+") (call_expression "(uint)(uVar3 < uVar6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar3 < uVar6)" (( "(") (binary_expression "uVar3 < uVar6" (identifier "uVar3") (< "<") (identifier "uVar6")) () ")"))))) (; ";")) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + -1" (identifier "puVar5") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar9 != -1)" (( "(") (binary_expression "iVar9 != -1" (identifier "iVar9") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *var_1,type_1 *var_15,type_1 *mninv,type_1 *var_4,int var_2)

{
  type_1 var_11;
  type_2 var_13;
  type_1 *var_8;
  type_2 var_12;
  type_2 var_14;
  type_1 *var_7;
  int var_16;
  type_2 var_10;
  type_1 *var_9;
  type_2 *var_17;
  int var_6;
  
  var_7 = var_1 + var_2;
  var_3(var_7,mninv,var_4,var_2,var_4 + var_2 * 3);
  var_6 = var_2 * 2 + -1;
  var_5(var_4,var_15,var_4 + var_2,var_2,var_4 + var_2 * 3);
  if (var_6 < 0) {
    var_12 = 0;
  }
  else {
    var_8 = var_7 + var_2;
    var_12 = 0;
    var_9 = var_4 + var_2 + var_6;
    do {
      var_10 = var_8[-1];
      var_8 = var_8 + -1;
      var_11 = *var_9;
      var_9 = var_9 + -1;
      var_13 = var_10 + var_11;
      var_14 = var_12 + var_13;
      *var_8 = var_14;
      var_12 = (type_2)(var_14 < var_12) + (type_2)(var_13 < var_10);
    } while (var_1 != var_8);
  }
  if (0 < var_2) {
    var_6 = 0;
    var_8 = var_1;
    do {
      var_6 = var_6 + 1;
      var_8[var_2] = *var_8;
      *var_8 = 0;
      var_8 = var_8 + 1;
    } while (var_6 < var_2);
    if (var_12 == 0) {
      var_12 = *var_7;
      var_13 = *var_15;
      if (var_12 == var_13) {
        var_6 = 0;
        var_8 = var_15 + 1;
        do {
          var_6 = var_6 + 1;
          if (var_2 == var_6) goto LAB_00026e60;
          var_12 = var_7[1];
          var_13 = *var_8;
          var_7 = var_7 + 1;
          var_8 = var_8 + 1;
        } while (var_12 == var_13);
      }
      if (var_12 <= var_13) {
        return;
      }
      goto LAB_00026e60;
    }
  }
  if (var_2 + -1 < 0) {
    return;
  }
LAB_00026e60:
  var_16 = var_2 + -1;
  var_6 = 1;
  var_17 = var_15 + var_16;
  var_7 = var_1 + var_16 + var_2;
  do {
    var_10 = *var_7;
    var_13 = *var_17;
    var_16 = var_16 + -1;
    var_17 = var_17 + -1;
    var_12 = var_10 + var_6;
    var_14 = ~var_13 + var_12;
    *var_7 = var_14;
    var_6 = (type_2)(var_14 < ~var_13) + (type_2)(var_12 < var_10);
    var_7 = var_7 + -1;
  } while (var_16 != -1);
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement))) (goto_statement label: (statement_identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (return_statement))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (unary_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (unary_expression argument: (identifier))))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (return_statement))))

void MASKED(uint *param_1,uint *param_2,undefined4 param_3,int param_4,int param_5)

{
  uint uVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  uint *puVar5;
  uint uVar6;
  int *piVar7;
  int iVar8;
  int iVar9;
  
  puVar5 = param_1 + param_5;
  iVar9 = param_4 + param_5 * 0xc;
  FUN_00026a54(puVar5,param_3,param_4,param_5,iVar9);
  iVar8 = param_5 * 2 + -1;
  FUN_00026580(param_4,param_2,param_4 + param_5 * 4,param_5,iVar9);
  if (iVar8 < 0) {
    uVar3 = 0;
  }
  else {
    puVar2 = puVar5 + param_5;
    uVar3 = 0;
    piVar7 = (int *)(param_4 + iVar8 * 4 + param_5 * 4);
    do {
      uVar6 = puVar2[-1];
      puVar2 = puVar2 + -1;
      iVar8 = *piVar7;
      piVar7 = piVar7 + -1;
      uVar1 = uVar6 + iVar8;
      uVar4 = uVar3 + uVar1;
      *puVar2 = uVar4;
      uVar3 = (uint)(uVar4 < uVar3) + (uint)(uVar1 < uVar6);
    } while (param_1 != puVar2);
  }
  if (0 < param_5) {
    iVar8 = 0;
    puVar2 = param_1;
    do {
      iVar8 = iVar8 + 1;
      puVar2[param_5] = *puVar2;
      *puVar2 = 0;
      puVar2 = puVar2 + 1;
    } while (iVar8 < param_5);
    if (uVar3 == 0) {
      uVar3 = *puVar5;
      uVar1 = *param_2;
      if (uVar3 == uVar1) {
        iVar8 = 0;
        puVar2 = param_2 + 1;
        do {
          iVar8 = iVar8 + 1;
          if (param_5 == iVar8) goto LAB_00026e60;
          uVar3 = puVar5[1];
          uVar1 = *puVar2;
          puVar5 = puVar5 + 1;
          puVar2 = puVar2 + 1;
        } while (uVar3 == uVar1);
      }
      if (uVar3 <= uVar1) {
        return;
      }
      goto LAB_00026e60;
    }
  }
  if (param_5 + -1 < 0) {
    return;
  }
LAB_00026e60:
  iVar9 = param_5 + -1;
  iVar8 = 1;
  param_2 = param_2 + iVar9;
  puVar5 = param_1 + iVar9 + param_5;
  do {
    uVar6 = *puVar5;
    uVar1 = *param_2;
    iVar9 = iVar9 + -1;
    param_2 = param_2 + -1;
    uVar3 = uVar6 + iVar8;
    uVar4 = ~uVar1 + uVar3;
    *puVar5 = uVar4;
    iVar8 = (uint)(uVar4 < ~uVar1) + (uint)(uVar3 < uVar6);
    puVar5 = puVar5 + -1;
  } while (iVar9 != -1);
  return;
}

