
void poly1305_finalise(poly1305 *ctx,uchar *mac)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uchar *puVar9;
  int in_t9;
  bigval tmp;
  
  iVar1 = **(int **)(&DAT_00060b7c + in_t9);
  if (ctx->bufferIndex != 0) {
    poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex);
  }
  bigval_import_le(&tmp,ctx,0x10);
  uVar3 = (ctx->h).w[4];
  uVar2 = (uVar3 >> 2) * 5;
  uVar5 = (ctx->h).w[0] + uVar2;
  uVar2 = (uint)(uVar5 < uVar2);
  uVar7 = uVar2 + (ctx->h).w[1];
  uVar2 = (uint)(uVar7 < uVar2);
  uVar6 = uVar2 + (ctx->h).w[2];
  uVar2 = (uint)(uVar6 < uVar2);
  uVar8 = uVar2 + (ctx->h).w[3];
  iVar4 = (uVar3 & 3) + (uint)(uVar8 < uVar2);
  uVar2 = (uint)(uVar5 + 5 < uVar5);
  uVar2 = (uint)(uVar2 + uVar7 < uVar2);
  uVar2 = (uint)(uVar2 + uVar6 < uVar2);
  uVar2 = (iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2) * 5;
  uVar5 = uVar2 + uVar5;
  uVar2 = (uint)(uVar5 < uVar2);
  uVar7 = uVar2 + uVar7;
  uVar2 = (uint)(uVar7 < uVar2);
  uVar6 = uVar2 + uVar6;
  uVar2 = (uint)(uVar6 < uVar2);
  uVar8 = uVar2 + uVar8;
  (ctx->h).w[0] = uVar5;
  (ctx->h).w[1] = uVar7;
  (ctx->h).w[2] = uVar6;
  (ctx->h).w[3] = uVar8;
  (ctx->h).w[4] = iVar4 + (uint)(uVar8 < uVar2) & 3;
  bigval_add(&tmp,&tmp,&ctx->h);
  uVar2 = 0;
  do {
    puVar9 = mac + uVar2;
    uVar3 = uVar2;
    if ((int)uVar2 < 0) {
      uVar3 = uVar2 + 3;
    }
    uVar5 = uVar2 & 3;
    uVar2 = uVar2 + 1;
    *puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3));
  } while (uVar2 != 0x10);
  if (iVar1 == **(int **)(&DAT_00060b7c + in_t9)) {
    return;
  }
  (**(code **)(in_t9 + 0x60b50))();
  return;
}



uint FUN_0005816c(int param_1,int param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined1 *puVar7;
  uint local_28 [5];
  uint local_14;
  
  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;
  if (*(int *)(param_1 + 0x48) != 0) {
    FUN_00057bc0(param_1,param_1 + 0x38);
  }
  FUN_00057aa8(local_28,param_1,0x10);
  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;
  uVar3 = *(int *)(param_1 + 0x24) + uVar1;
  uVar1 = (uint)(uVar3 < uVar1);
  uVar5 = uVar1 + *(int *)(param_1 + 0x28);
  uVar1 = (uint)(uVar5 < uVar1);
  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);
  uVar1 = (uint)(uVar4 < uVar1);
  uVar6 = uVar1 + *(int *)(param_1 + 0x30);
  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);
  uVar1 = (uint)(uVar3 + 5 < uVar3);
  uVar1 = (uint)(uVar1 + uVar5 < uVar1);
  uVar1 = (uint)(uVar1 + uVar4 < uVar1);
  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;
  uVar3 = uVar1 + uVar3;
  uVar1 = (uint)(uVar3 < uVar1);
  uVar5 = uVar1 + uVar5;
  uVar1 = (uint)(uVar5 < uVar1);
  uVar4 = uVar1 + uVar4;
  uVar1 = (uint)(uVar4 < uVar1);
  uVar6 = uVar1 + uVar6;
  *(uint *)(param_1 + 0x24) = uVar3;
  *(uint *)(param_1 + 0x28) = uVar5;
  *(uint *)(param_1 + 0x2c) = uVar4;
  *(uint *)(param_1 + 0x30) = uVar6;
  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;
  FUN_00057b34(local_28,local_28,param_1 + 0x24);
  uVar1 = 0;
  do {
    puVar7 = (undefined1 *)(param_2 + uVar1);
    uVar3 = uVar1;
    if ((int)uVar1 < 0) {
      uVar3 = uVar1 + 3;
    }
    uVar4 = local_28[(int)uVar3 >> 2];
    uVar3 = uVar1 & 3;
    uVar1 = uVar1 + 1;
    *puVar7 = (char)(uVar4 >> (uVar3 << 3));
  } while (uVar1 != 0x10);
  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {
    return *(uint *)PTR___stack_chk_guard_000b8ce8;
  }
  (*(code *)PTR___stack_chk_fail_000b8cbc)();
  return uVar4;
}


lui gp,0x7
addiu gp,gp,-0x7edc
addu gp,gp,t9
addiu sp,sp,-0x40
sw ra,0x3c(sp)
sw s2,0x38(sp)
sw s1,0x34(sp)
sw s0,0x30(sp)
sw gp,0x10(sp)
or s0,a0,zero
or s2,a1,zero
lw v0,-0x75a8(gp)
lw v0,0x0(v0)
sw v0,0x2c(sp)
lw a2,0x48(a0)
bne a2,zero,0x000582c0
_lw t9,-0x7c50(gp)
li a2,0x10
or a1,s0,zero
addiu s1,sp,0x18
or a0,s1,zero
lw t9,-0x7c50(gp)
addiu t9,t9,0x7aa8
bal 0x00057aa8
_nop
lw gp,0x10(sp)
lw a0,0x24(s0)
lw v1,0x34(s0)
srl a1,v1,0x2
sll v0,a1,0x2
addu v0,v0,a1
addu a0,a0,v0
lw a3,0x28(s0)
sltu v0,a0,v0
addu a3,v0,a3
sltu v0,a3,v0
lw a2,0x2c(s0)
addu a2,v0,a2
sltu v0,a2,v0
lw t0,0x30(s0)
addu t0,v0,t0
sltu v0,t0,v0
andi v1,v1,0x3
addu v1,v1,v0
addiu a1,a0,0x5
sltu v0,a1,a0
addu a1,v0,a3
sltu a1,a1,v0
addu v0,a1,a2
sltu a1,v0,a1
addu v0,a1,t0
sltu v0,v0,a1
addu v0,v1,v0
srl a1,v0,0x2
sll v0,a1,0x2
addu v0,v0,a1
addu a0,v0,a0
sltu v0,a0,v0
addu a3,v0,a3
sltu v0,a3,v0
addu a2,v0,a2
sltu v0,a2,v0
addu t0,v0,t0
sltu v0,t0,v0
sw a0,0x24(s0)
sw a3,0x28(s0)
sw a2,0x2c(s0)
sw t0,0x30(s0)
addu v0,v1,v0
andi v0,v0,0x3
sw v0,0x34(s0)
addiu a2,s0,0x24
or a1,s1,zero
or a0,s1,zero
lw t9,-0x7c50(gp)
addiu t9,t9,0x7b34
bal 0x00057b34
_nop
lw gp,0x10(sp)
or v1,zero,zero
lui a1,0x8000
addiu a1,a1,0x3
li a3,-0x4
b 0x000582fc
_li a2,0x10
addiu a1,a0,0x38
addiu t9,t9,0x7bc0
bal 0x00057bc0
_nop
lw gp,0x10(sp)
b 0x000581b4
_li a2,0x10
b 0x00058308
_addiu v0,v1,0x3
sll v0,v0,0x3
lw a0,-0x18(a0)
srlv v0,a0,v0
addiu v1,v1,0x1
beq v1,a2,0x00058334
_sb v0,0x0(t0)
addu t0,s2,v1
bltz v1,0x000582dc
_or v0,v1,zero
sra a0,v0,0x2
sll a0,a0,0x2
addiu v0,sp,0x30
addu a0,v0,a0
and v0,v1,a1
bgez v0,0x000582e4
_nop
addiu v0,v0,-0x1
or v0,v0,a3
b 0x000582e4
_addiu v0,v0,0x1
lw v1,0x2c(sp)
lw v0,-0x75a8(gp)
lw v0,0x0(v0)
bne v1,v0,0x0005835c
_lw ra,0x3c(sp)
lw s2,0x38(sp)
lw s1,0x34(sp)
lw s0,0x30(sp)
jr ra
_addiu sp,sp,0x40
lw t9,-0x75d4(gp)
jalr t9
_nop
jr ra
_or v0,a0,zero
(translation_unit "uint FUN_0005816c(int param_1,int param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}\n\n" (function_definition "uint FUN_0005816c(int param_1,int param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}" type_identifier (function_declarator "FUN_0005816c(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "undefined1 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint local_28 [5];" type_identifier (array_declarator "local_28 [5]" identifier [ number_literal ]) ;) (declaration "uint local_14;" type_identifier identifier ;) (expression_statement "local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;" (assignment_expression "local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8" identifier = (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" * (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x48) != 0)" ( (binary_expression "*(int *)(param_1 + 0x48) != 0" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }" { (expression_statement "FUN_00057bc0(param_1,param_1 + 0x38);" (call_expression "FUN_00057bc0(param_1,param_1 + 0x38)" identifier (argument_list "(param_1,param_1 + 0x38)" ( identifier , (binary_expression "param_1 + 0x38" identifier + number_literal) ))) ;) })) (expression_statement "FUN_00057aa8(local_28,param_1,0x10);" (call_expression "FUN_00057aa8(local_28,param_1,0x10)" identifier (argument_list "(local_28,param_1,0x10)" ( identifier , identifier , number_literal ))) ;) (expression_statement "uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;" (assignment_expression "uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5" identifier = (binary_expression "(*(uint *)(param_1 + 0x34) >> 2) * 5" (parenthesized_expression "(*(uint *)(param_1 + 0x34) >> 2)" ( (binary_expression "*(uint *)(param_1 + 0x34) >> 2" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) >> number_literal) )) * number_literal)) ;) (expression_statement "uVar3 = *(int *)(param_1 + 0x24) + uVar1;" (assignment_expression "uVar3 = *(int *)(param_1 + 0x24) + uVar1" identifier = (binary_expression "*(int *)(param_1 + 0x24) + uVar1" (pointer_expression "*(int *)(param_1 + 0x24)" * (cast_expression "(int *)(param_1 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar3 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar3 < uVar1)" identifier = (call_expression "(uint)(uVar3 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar1)" ( (binary_expression "uVar3 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar5 = uVar1 + *(int *)(param_1 + 0x28);" (assignment_expression "uVar5 = uVar1 + *(int *)(param_1 + 0x28)" identifier = (binary_expression "uVar1 + *(int *)(param_1 + 0x28)" identifier + (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))))) ;) (expression_statement "uVar1 = (uint)(uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar5 < uVar1)" identifier = (call_expression "(uint)(uVar5 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < uVar1)" ( (binary_expression "uVar5 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar4 = uVar1 + *(int *)(param_1 + 0x2c);" (assignment_expression "uVar4 = uVar1 + *(int *)(param_1 + 0x2c)" identifier = (binary_expression "uVar1 + *(int *)(param_1 + 0x2c)" identifier + (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))))) ;) (expression_statement "uVar1 = (uint)(uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar4 < uVar1)" identifier = (call_expression "(uint)(uVar4 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar1)" ( (binary_expression "uVar4 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar6 = uVar1 + *(int *)(param_1 + 0x30);" (assignment_expression "uVar6 = uVar1 + *(int *)(param_1 + 0x30)" identifier = (binary_expression "uVar1 + *(int *)(param_1 + 0x30)" identifier + (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))))) ;) (expression_statement "iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);" (assignment_expression "iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1)" identifier = (binary_expression "(*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1)" (parenthesized_expression "(*(uint *)(param_1 + 0x34) & 3)" ( (binary_expression "*(uint *)(param_1 + 0x34) & 3" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) & number_literal) )) + (call_expression "(uint)(uVar6 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < uVar1)" ( (binary_expression "uVar6 < uVar1" identifier < identifier) ))))) ;) (expression_statement "uVar1 = (uint)(uVar3 + 5 < uVar3);" (assignment_expression "uVar1 = (uint)(uVar3 + 5 < uVar3)" identifier = (call_expression "(uint)(uVar3 + 5 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 + 5 < uVar3)" ( (binary_expression "uVar3 + 5 < uVar3" (binary_expression "uVar3 + 5" identifier + number_literal) < identifier) )))) ;) (expression_statement "uVar1 = (uint)(uVar1 + uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar1 + uVar5 < uVar1)" identifier = (call_expression "(uint)(uVar1 + uVar5 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 + uVar5 < uVar1)" ( (binary_expression "uVar1 + uVar5 < uVar1" (binary_expression "uVar1 + uVar5" identifier + identifier) < identifier) )))) ;) (expression_statement "uVar1 = (uint)(uVar1 + uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar1 + uVar4 < uVar1)" identifier = (call_expression "(uint)(uVar1 + uVar4 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 + uVar4 < uVar1)" ( (binary_expression "uVar1 + uVar4 < uVar1" (binary_expression "uVar1 + uVar4" identifier + identifier) < identifier) )))) ;) (expression_statement "uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;" (assignment_expression "uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5" identifier = (binary_expression "(iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5" (parenthesized_expression "(iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2)" ( (binary_expression "iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2" (binary_expression "iVar2 + (uint)(uVar1 + uVar6 < uVar1)" identifier + (call_expression "(uint)(uVar1 + uVar6 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 + uVar6 < uVar1)" ( (binary_expression "uVar1 + uVar6 < uVar1" (binary_expression "uVar1 + uVar6" identifier + identifier) < identifier) )))) >> number_literal) )) * number_literal)) ;) (expression_statement "uVar3 = uVar1 + uVar3;" (assignment_expression "uVar3 = uVar1 + uVar3" identifier = (binary_expression "uVar1 + uVar3" identifier + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar3 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar3 < uVar1)" identifier = (call_expression "(uint)(uVar3 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar1)" ( (binary_expression "uVar3 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar5 = uVar1 + uVar5;" (assignment_expression "uVar5 = uVar1 + uVar5" identifier = (binary_expression "uVar1 + uVar5" identifier + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar5 < uVar1)" identifier = (call_expression "(uint)(uVar5 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < uVar1)" ( (binary_expression "uVar5 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar4 = uVar1 + uVar4;" (assignment_expression "uVar4 = uVar1 + uVar4" identifier = (binary_expression "uVar1 + uVar4" identifier + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar4 < uVar1)" identifier = (call_expression "(uint)(uVar4 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar1)" ( (binary_expression "uVar4 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar6 = uVar1 + uVar6;" (assignment_expression "uVar6 = uVar1 + uVar6" identifier = (binary_expression "uVar1 + uVar6" identifier + identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x24) = uVar3;" (assignment_expression "*(uint *)(param_1 + 0x24) = uVar3" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x28) = uVar5;" (assignment_expression "*(uint *)(param_1 + 0x28) = uVar5" (pointer_expression "*(uint *)(param_1 + 0x28)" * (cast_expression "(uint *)(param_1 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x2c) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x2c) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x2c)" * (cast_expression "(uint *)(param_1 + 0x2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x30) = uVar6;" (assignment_expression "*(uint *)(param_1 + 0x30) = uVar6" (pointer_expression "*(uint *)(param_1 + 0x30)" * (cast_expression "(uint *)(param_1 + 0x30)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;" (assignment_expression "*(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) = (binary_expression "iVar2 + (uint)(uVar6 < uVar1) & 3" (binary_expression "iVar2 + (uint)(uVar6 < uVar1)" identifier + (call_expression "(uint)(uVar6 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < uVar1)" ( (binary_expression "uVar6 < uVar1" identifier < identifier) )))) & number_literal)) ;) (expression_statement "FUN_00057b34(local_28,local_28,param_1 + 0x24);" (call_expression "FUN_00057b34(local_28,local_28,param_1 + 0x24)" identifier (argument_list "(local_28,local_28,param_1 + 0x24)" ( identifier , identifier , (binary_expression "param_1 + 0x24" identifier + number_literal) ))) ;) (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) (do_statement "do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);" do (compound_statement "{\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  }" { (expression_statement "puVar7 = (undefined1 *)(param_2 + uVar1);" (assignment_expression "puVar7 = (undefined1 *)(param_2 + uVar1)" identifier = (cast_expression "(undefined1 *)(param_2 + uVar1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar1)" ( (binary_expression "param_2 + uVar1" identifier + identifier) )))) ;) (expression_statement "uVar3 = uVar1;" (assignment_expression "uVar3 = uVar1" identifier = identifier) ;) (if_statement "if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }" if (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar3 = uVar1 + 3;\n    }" { (expression_statement "uVar3 = uVar1 + 3;" (assignment_expression "uVar3 = uVar1 + 3" identifier = (binary_expression "uVar1 + 3" identifier + number_literal)) ;) })) (expression_statement "uVar4 = local_28[(int)uVar3 >> 2];" (assignment_expression "uVar4 = local_28[(int)uVar3 >> 2]" identifier = (subscript_expression "local_28[(int)uVar3 >> 2]" identifier [ (binary_expression "(int)uVar3 >> 2" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ])) ;) (expression_statement "uVar3 = uVar1 & 3;" (assignment_expression "uVar3 = uVar1 & 3" identifier = (binary_expression "uVar1 & 3" identifier & number_literal)) ;) (expression_statement "uVar1 = uVar1 + 1;" (assignment_expression "uVar1 = uVar1 + 1" identifier = (binary_expression "uVar1 + 1" identifier + number_literal)) ;) (expression_statement "*puVar7 = (char)(uVar4 >> (uVar3 << 3));" (assignment_expression "*puVar7 = (char)(uVar4 >> (uVar3 << 3))" (pointer_expression "*puVar7" * identifier) = (cast_expression "(char)(uVar4 >> (uVar3 << 3))" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> (uVar3 << 3))" ( (binary_expression "uVar4 >> (uVar3 << 3)" identifier >> (parenthesized_expression "(uVar3 << 3)" ( (binary_expression "uVar3 << 3" identifier << number_literal) ))) )))) ;) }) while (parenthesized_expression "(uVar1 != 0x10)" ( (binary_expression "uVar1 != 0x10" identifier != number_literal) )) ;) (if_statement "if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }" if (parenthesized_expression "(local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8)" ( (binary_expression "local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8" identifier == (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" * (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }" { (return_statement "return *(uint *)PTR___stack_chk_guard_000b8ce8;" return (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" * (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_000b8cbc)();" (call_expression "(*(code *)PTR___stack_chk_fail_000b8cbc)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000b8cbc)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000b8cbc" * (cast_expression "(code *)PTR___stack_chk_fail_000b8cbc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit "void poly1305_finalise(poly1305 *ctx,uchar *mac)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uchar *puVar9;\n  int in_t9;\n  bigval tmp;\n  \n  iVar1 = **(int **)(&DAT_00060b7c + in_t9);\n  if (ctx->bufferIndex != 0) {\n    poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex);\n  }\n  bigval_import_le(&tmp,ctx,0x10);\n  uVar3 = (ctx->h).w[4];\n  uVar2 = (uVar3 >> 2) * 5;\n  uVar5 = (ctx->h).w[0] + uVar2;\n  uVar2 = (uint)(uVar5 < uVar2);\n  uVar7 = uVar2 + (ctx->h).w[1];\n  uVar2 = (uint)(uVar7 < uVar2);\n  uVar6 = uVar2 + (ctx->h).w[2];\n  uVar2 = (uint)(uVar6 < uVar2);\n  uVar8 = uVar2 + (ctx->h).w[3];\n  iVar4 = (uVar3 & 3) + (uint)(uVar8 < uVar2);\n  uVar2 = (uint)(uVar5 + 5 < uVar5);\n  uVar2 = (uint)(uVar2 + uVar7 < uVar2);\n  uVar2 = (uint)(uVar2 + uVar6 < uVar2);\n  uVar2 = (iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2) * 5;\n  uVar5 = uVar2 + uVar5;\n  uVar2 = (uint)(uVar5 < uVar2);\n  uVar7 = uVar2 + uVar7;\n  uVar2 = (uint)(uVar7 < uVar2);\n  uVar6 = uVar2 + uVar6;\n  uVar2 = (uint)(uVar6 < uVar2);\n  uVar8 = uVar2 + uVar8;\n  (ctx->h).w[0] = uVar5;\n  (ctx->h).w[1] = uVar7;\n  (ctx->h).w[2] = uVar6;\n  (ctx->h).w[3] = uVar8;\n  (ctx->h).w[4] = iVar4 + (uint)(uVar8 < uVar2) & 3;\n  bigval_add(&tmp,&tmp,&ctx->h);\n  uVar2 = 0;\n  do {\n    puVar9 = mac + uVar2;\n    uVar3 = uVar2;\n    if ((int)uVar2 < 0) {\n      uVar3 = uVar2 + 3;\n    }\n    uVar5 = uVar2 & 3;\n    uVar2 = uVar2 + 1;\n    *puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3));\n  } while (uVar2 != 0x10);\n  if (iVar1 == **(int **)(&DAT_00060b7c + in_t9)) {\n    return;\n  }\n  (**(code **)(in_t9 + 0x60b50))();\n  return;\n}\n\n" (function_definition "void poly1305_finalise(poly1305 *ctx,uchar *mac)\n\n{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uchar *puVar9;\n  int in_t9;\n  bigval tmp;\n  \n  iVar1 = **(int **)(&DAT_00060b7c + in_t9);\n  if (ctx->bufferIndex != 0) {\n    poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex);\n  }\n  bigval_import_le(&tmp,ctx,0x10);\n  uVar3 = (ctx->h).w[4];\n  uVar2 = (uVar3 >> 2) * 5;\n  uVar5 = (ctx->h).w[0] + uVar2;\n  uVar2 = (uint)(uVar5 < uVar2);\n  uVar7 = uVar2 + (ctx->h).w[1];\n  uVar2 = (uint)(uVar7 < uVar2);\n  uVar6 = uVar2 + (ctx->h).w[2];\n  uVar2 = (uint)(uVar6 < uVar2);\n  uVar8 = uVar2 + (ctx->h).w[3];\n  iVar4 = (uVar3 & 3) + (uint)(uVar8 < uVar2);\n  uVar2 = (uint)(uVar5 + 5 < uVar5);\n  uVar2 = (uint)(uVar2 + uVar7 < uVar2);\n  uVar2 = (uint)(uVar2 + uVar6 < uVar2);\n  uVar2 = (iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2) * 5;\n  uVar5 = uVar2 + uVar5;\n  uVar2 = (uint)(uVar5 < uVar2);\n  uVar7 = uVar2 + uVar7;\n  uVar2 = (uint)(uVar7 < uVar2);\n  uVar6 = uVar2 + uVar6;\n  uVar2 = (uint)(uVar6 < uVar2);\n  uVar8 = uVar2 + uVar8;\n  (ctx->h).w[0] = uVar5;\n  (ctx->h).w[1] = uVar7;\n  (ctx->h).w[2] = uVar6;\n  (ctx->h).w[3] = uVar8;\n  (ctx->h).w[4] = iVar4 + (uint)(uVar8 < uVar2) & 3;\n  bigval_add(&tmp,&tmp,&ctx->h);\n  uVar2 = 0;\n  do {\n    puVar9 = mac + uVar2;\n    uVar3 = uVar2;\n    if ((int)uVar2 < 0) {\n      uVar3 = uVar2 + 3;\n    }\n    uVar5 = uVar2 & 3;\n    uVar2 = uVar2 + 1;\n    *puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3));\n  } while (uVar2 != 0x10);\n  if (iVar1 == **(int **)(&DAT_00060b7c + in_t9)) {\n    return;\n  }\n  (**(code **)(in_t9 + 0x60b50))();\n  return;\n}" primitive_type (function_declarator "poly1305_finalise(poly1305 *ctx,uchar *mac)" identifier (parameter_list "(poly1305 *ctx,uchar *mac)" ( (parameter_declaration "poly1305 *ctx" type_identifier (pointer_declarator "*ctx" * identifier)) , (parameter_declaration "uchar *mac" type_identifier (pointer_declarator "*mac" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uchar *puVar9;\n  int in_t9;\n  bigval tmp;\n  \n  iVar1 = **(int **)(&DAT_00060b7c + in_t9);\n  if (ctx->bufferIndex != 0) {\n    poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex);\n  }\n  bigval_import_le(&tmp,ctx,0x10);\n  uVar3 = (ctx->h).w[4];\n  uVar2 = (uVar3 >> 2) * 5;\n  uVar5 = (ctx->h).w[0] + uVar2;\n  uVar2 = (uint)(uVar5 < uVar2);\n  uVar7 = uVar2 + (ctx->h).w[1];\n  uVar2 = (uint)(uVar7 < uVar2);\n  uVar6 = uVar2 + (ctx->h).w[2];\n  uVar2 = (uint)(uVar6 < uVar2);\n  uVar8 = uVar2 + (ctx->h).w[3];\n  iVar4 = (uVar3 & 3) + (uint)(uVar8 < uVar2);\n  uVar2 = (uint)(uVar5 + 5 < uVar5);\n  uVar2 = (uint)(uVar2 + uVar7 < uVar2);\n  uVar2 = (uint)(uVar2 + uVar6 < uVar2);\n  uVar2 = (iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2) * 5;\n  uVar5 = uVar2 + uVar5;\n  uVar2 = (uint)(uVar5 < uVar2);\n  uVar7 = uVar2 + uVar7;\n  uVar2 = (uint)(uVar7 < uVar2);\n  uVar6 = uVar2 + uVar6;\n  uVar2 = (uint)(uVar6 < uVar2);\n  uVar8 = uVar2 + uVar8;\n  (ctx->h).w[0] = uVar5;\n  (ctx->h).w[1] = uVar7;\n  (ctx->h).w[2] = uVar6;\n  (ctx->h).w[3] = uVar8;\n  (ctx->h).w[4] = iVar4 + (uint)(uVar8 < uVar2) & 3;\n  bigval_add(&tmp,&tmp,&ctx->h);\n  uVar2 = 0;\n  do {\n    puVar9 = mac + uVar2;\n    uVar3 = uVar2;\n    if ((int)uVar2 < 0) {\n      uVar3 = uVar2 + 3;\n    }\n    uVar5 = uVar2 & 3;\n    uVar2 = uVar2 + 1;\n    *puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3));\n  } while (uVar2 != 0x10);\n  if (iVar1 == **(int **)(&DAT_00060b7c + in_t9)) {\n    return;\n  }\n  (**(code **)(in_t9 + 0x60b50))();\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uchar *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "int in_t9;" primitive_type identifier ;) (declaration "bigval tmp;" type_identifier identifier ;) (expression_statement "iVar1 = **(int **)(&DAT_00060b7c + in_t9);" (assignment_expression "iVar1 = **(int **)(&DAT_00060b7c + in_t9)" identifier = (pointer_expression "**(int **)(&DAT_00060b7c + in_t9)" * (pointer_expression "*(int **)(&DAT_00060b7c + in_t9)" * (cast_expression "(int **)(&DAT_00060b7c + in_t9)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(&DAT_00060b7c + in_t9)" ( (binary_expression "&DAT_00060b7c + in_t9" (pointer_expression "&DAT_00060b7c" & identifier) + identifier) )))))) ;) (if_statement "if (ctx->bufferIndex != 0) {\n    poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex);\n  }" if (parenthesized_expression "(ctx->bufferIndex != 0)" ( (binary_expression "ctx->bufferIndex != 0" (field_expression "ctx->bufferIndex" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex);\n  }" { (expression_statement "poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex);" (call_expression "poly1305_feed_chunk(ctx,ctx->buffer,ctx->bufferIndex)" identifier (argument_list "(ctx,ctx->buffer,ctx->bufferIndex)" ( identifier , (field_expression "ctx->buffer" identifier -> field_identifier) , (field_expression "ctx->bufferIndex" identifier -> field_identifier) ))) ;) })) (expression_statement "bigval_import_le(&tmp,ctx,0x10);" (call_expression "bigval_import_le(&tmp,ctx,0x10)" identifier (argument_list "(&tmp,ctx,0x10)" ( (pointer_expression "&tmp" & identifier) , identifier , number_literal ))) ;) (expression_statement "uVar3 = (ctx->h).w[4];" (assignment_expression "uVar3 = (ctx->h).w[4]" identifier = (subscript_expression "(ctx->h).w[4]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "uVar2 = (uVar3 >> 2) * 5;" (assignment_expression "uVar2 = (uVar3 >> 2) * 5" identifier = (binary_expression "(uVar3 >> 2) * 5" (parenthesized_expression "(uVar3 >> 2)" ( (binary_expression "uVar3 >> 2" identifier >> number_literal) )) * number_literal)) ;) (expression_statement "uVar5 = (ctx->h).w[0] + uVar2;" (assignment_expression "uVar5 = (ctx->h).w[0] + uVar2" identifier = (binary_expression "(ctx->h).w[0] + uVar2" (subscript_expression "(ctx->h).w[0]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) + identifier)) ;) (expression_statement "uVar2 = (uint)(uVar5 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar5 < uVar2)" identifier = (call_expression "(uint)(uVar5 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < uVar2)" ( (binary_expression "uVar5 < uVar2" identifier < identifier) )))) ;) (expression_statement "uVar7 = uVar2 + (ctx->h).w[1];" (assignment_expression "uVar7 = uVar2 + (ctx->h).w[1]" identifier = (binary_expression "uVar2 + (ctx->h).w[1]" identifier + (subscript_expression "(ctx->h).w[1]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]))) ;) (expression_statement "uVar2 = (uint)(uVar7 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar7 < uVar2)" identifier = (call_expression "(uint)(uVar7 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar7 < uVar2)" ( (binary_expression "uVar7 < uVar2" identifier < identifier) )))) ;) (expression_statement "uVar6 = uVar2 + (ctx->h).w[2];" (assignment_expression "uVar6 = uVar2 + (ctx->h).w[2]" identifier = (binary_expression "uVar2 + (ctx->h).w[2]" identifier + (subscript_expression "(ctx->h).w[2]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]))) ;) (expression_statement "uVar2 = (uint)(uVar6 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar6 < uVar2)" identifier = (call_expression "(uint)(uVar6 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < uVar2)" ( (binary_expression "uVar6 < uVar2" identifier < identifier) )))) ;) (expression_statement "uVar8 = uVar2 + (ctx->h).w[3];" (assignment_expression "uVar8 = uVar2 + (ctx->h).w[3]" identifier = (binary_expression "uVar2 + (ctx->h).w[3]" identifier + (subscript_expression "(ctx->h).w[3]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]))) ;) (expression_statement "iVar4 = (uVar3 & 3) + (uint)(uVar8 < uVar2);" (assignment_expression "iVar4 = (uVar3 & 3) + (uint)(uVar8 < uVar2)" identifier = (binary_expression "(uVar3 & 3) + (uint)(uVar8 < uVar2)" (parenthesized_expression "(uVar3 & 3)" ( (binary_expression "uVar3 & 3" identifier & number_literal) )) + (call_expression "(uint)(uVar8 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar8 < uVar2)" ( (binary_expression "uVar8 < uVar2" identifier < identifier) ))))) ;) (expression_statement "uVar2 = (uint)(uVar5 + 5 < uVar5);" (assignment_expression "uVar2 = (uint)(uVar5 + 5 < uVar5)" identifier = (call_expression "(uint)(uVar5 + 5 < uVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 + 5 < uVar5)" ( (binary_expression "uVar5 + 5 < uVar5" (binary_expression "uVar5 + 5" identifier + number_literal) < identifier) )))) ;) (expression_statement "uVar2 = (uint)(uVar2 + uVar7 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar2 + uVar7 < uVar2)" identifier = (call_expression "(uint)(uVar2 + uVar7 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 + uVar7 < uVar2)" ( (binary_expression "uVar2 + uVar7 < uVar2" (binary_expression "uVar2 + uVar7" identifier + identifier) < identifier) )))) ;) (expression_statement "uVar2 = (uint)(uVar2 + uVar6 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar2 + uVar6 < uVar2)" identifier = (call_expression "(uint)(uVar2 + uVar6 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 + uVar6 < uVar2)" ( (binary_expression "uVar2 + uVar6 < uVar2" (binary_expression "uVar2 + uVar6" identifier + identifier) < identifier) )))) ;) (expression_statement "uVar2 = (iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2) * 5;" (assignment_expression "uVar2 = (iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2) * 5" identifier = (binary_expression "(iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2) * 5" (parenthesized_expression "(iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2)" ( (binary_expression "iVar4 + (uint)(uVar2 + uVar8 < uVar2) >> 2" (binary_expression "iVar4 + (uint)(uVar2 + uVar8 < uVar2)" identifier + (call_expression "(uint)(uVar2 + uVar8 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 + uVar8 < uVar2)" ( (binary_expression "uVar2 + uVar8 < uVar2" (binary_expression "uVar2 + uVar8" identifier + identifier) < identifier) )))) >> number_literal) )) * number_literal)) ;) (expression_statement "uVar5 = uVar2 + uVar5;" (assignment_expression "uVar5 = uVar2 + uVar5" identifier = (binary_expression "uVar2 + uVar5" identifier + identifier)) ;) (expression_statement "uVar2 = (uint)(uVar5 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar5 < uVar2)" identifier = (call_expression "(uint)(uVar5 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < uVar2)" ( (binary_expression "uVar5 < uVar2" identifier < identifier) )))) ;) (expression_statement "uVar7 = uVar2 + uVar7;" (assignment_expression "uVar7 = uVar2 + uVar7" identifier = (binary_expression "uVar2 + uVar7" identifier + identifier)) ;) (expression_statement "uVar2 = (uint)(uVar7 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar7 < uVar2)" identifier = (call_expression "(uint)(uVar7 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar7 < uVar2)" ( (binary_expression "uVar7 < uVar2" identifier < identifier) )))) ;) (expression_statement "uVar6 = uVar2 + uVar6;" (assignment_expression "uVar6 = uVar2 + uVar6" identifier = (binary_expression "uVar2 + uVar6" identifier + identifier)) ;) (expression_statement "uVar2 = (uint)(uVar6 < uVar2);" (assignment_expression "uVar2 = (uint)(uVar6 < uVar2)" identifier = (call_expression "(uint)(uVar6 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < uVar2)" ( (binary_expression "uVar6 < uVar2" identifier < identifier) )))) ;) (expression_statement "uVar8 = uVar2 + uVar8;" (assignment_expression "uVar8 = uVar2 + uVar8" identifier = (binary_expression "uVar2 + uVar8" identifier + identifier)) ;) (expression_statement "(ctx->h).w[0] = uVar5;" (assignment_expression "(ctx->h).w[0] = uVar5" (subscript_expression "(ctx->h).w[0]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = identifier) ;) (expression_statement "(ctx->h).w[1] = uVar7;" (assignment_expression "(ctx->h).w[1] = uVar7" (subscript_expression "(ctx->h).w[1]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = identifier) ;) (expression_statement "(ctx->h).w[2] = uVar6;" (assignment_expression "(ctx->h).w[2] = uVar6" (subscript_expression "(ctx->h).w[2]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = identifier) ;) (expression_statement "(ctx->h).w[3] = uVar8;" (assignment_expression "(ctx->h).w[3] = uVar8" (subscript_expression "(ctx->h).w[3]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = identifier) ;) (expression_statement "(ctx->h).w[4] = iVar4 + (uint)(uVar8 < uVar2) & 3;" (assignment_expression "(ctx->h).w[4] = iVar4 + (uint)(uVar8 < uVar2) & 3" (subscript_expression "(ctx->h).w[4]" (field_expression "(ctx->h).w" (parenthesized_expression "(ctx->h)" ( (field_expression "ctx->h" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (binary_expression "iVar4 + (uint)(uVar8 < uVar2) & 3" (binary_expression "iVar4 + (uint)(uVar8 < uVar2)" identifier + (call_expression "(uint)(uVar8 < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar8 < uVar2)" ( (binary_expression "uVar8 < uVar2" identifier < identifier) )))) & number_literal)) ;) (expression_statement "bigval_add(&tmp,&tmp,&ctx->h);" (call_expression "bigval_add(&tmp,&tmp,&ctx->h)" identifier (argument_list "(&tmp,&tmp,&ctx->h)" ( (pointer_expression "&tmp" & identifier) , (pointer_expression "&tmp" & identifier) , (pointer_expression "&ctx->h" & (field_expression "ctx->h" identifier -> field_identifier)) ))) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n    puVar9 = mac + uVar2;\n    uVar3 = uVar2;\n    if ((int)uVar2 < 0) {\n      uVar3 = uVar2 + 3;\n    }\n    uVar5 = uVar2 & 3;\n    uVar2 = uVar2 + 1;\n    *puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3));\n  } while (uVar2 != 0x10);" do (compound_statement "{\n    puVar9 = mac + uVar2;\n    uVar3 = uVar2;\n    if ((int)uVar2 < 0) {\n      uVar3 = uVar2 + 3;\n    }\n    uVar5 = uVar2 & 3;\n    uVar2 = uVar2 + 1;\n    *puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3));\n  }" { (expression_statement "puVar9 = mac + uVar2;" (assignment_expression "puVar9 = mac + uVar2" identifier = (binary_expression "mac + uVar2" identifier + identifier)) ;) (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (if_statement "if ((int)uVar2 < 0) {\n      uVar3 = uVar2 + 3;\n    }" if (parenthesized_expression "((int)uVar2 < 0)" ( (binary_expression "(int)uVar2 < 0" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar3 = uVar2 + 3;\n    }" { (expression_statement "uVar3 = uVar2 + 3;" (assignment_expression "uVar3 = uVar2 + 3" identifier = (binary_expression "uVar2 + 3" identifier + number_literal)) ;) })) (expression_statement "uVar5 = uVar2 & 3;" (assignment_expression "uVar5 = uVar2 & 3" identifier = (binary_expression "uVar2 & 3" identifier & number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3));" (assignment_expression "*puVar9 = (uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3))" (pointer_expression "*puVar9" * identifier) = (call_expression "(uchar)(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3))" (parenthesized_expression "(uchar)" ( identifier )) (argument_list "(tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3))" ( (binary_expression "tmp.w[(int)uVar3 >> 2] >> (uVar5 << 3)" (subscript_expression "tmp.w[(int)uVar3 >> 2]" (field_expression "tmp.w" identifier . field_identifier) [ (binary_expression "(int)uVar3 >> 2" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ]) >> (parenthesized_expression "(uVar5 << 3)" ( (binary_expression "uVar5 << 3" identifier << number_literal) ))) )))) ;) }) while (parenthesized_expression "(uVar2 != 0x10)" ( (binary_expression "uVar2 != 0x10" identifier != number_literal) )) ;) (if_statement "if (iVar1 == **(int **)(&DAT_00060b7c + in_t9)) {\n    return;\n  }" if (parenthesized_expression "(iVar1 == **(int **)(&DAT_00060b7c + in_t9))" ( (binary_expression "iVar1 == **(int **)(&DAT_00060b7c + in_t9)" identifier == (pointer_expression "**(int **)(&DAT_00060b7c + in_t9)" * (pointer_expression "*(int **)(&DAT_00060b7c + in_t9)" * (cast_expression "(int **)(&DAT_00060b7c + in_t9)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(&DAT_00060b7c + in_t9)" ( (binary_expression "&DAT_00060b7c + in_t9" (pointer_expression "&DAT_00060b7c" & identifier) + identifier) )))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "(**(code **)(in_t9 + 0x60b50))();" (call_expression "(**(code **)(in_t9 + 0x60b50))()" (parenthesized_expression "(**(code **)(in_t9 + 0x60b50))" ( (pointer_expression "**(code **)(in_t9 + 0x60b50)" * (pointer_expression "*(code **)(in_t9 + 0x60b50)" * (cast_expression "(code **)(in_t9 + 0x60b50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x60b50)" ( (binary_expression "in_t9 + 0x60b50" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })))
(translation_unit "uint FUN_0005816c(int param_1,int param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}\n\n" (function_definition "uint FUN_0005816c(int param_1,int param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}" type_identifier (function_declarator "FUN_0005816c(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "undefined1 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint local_28 [5];" type_identifier (array_declarator "local_28 [5]" identifier [ number_literal ]) ;) (declaration "uint local_14;" type_identifier identifier ;) (expression_statement "local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;" (assignment_expression "local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8" identifier = (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" * (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x48) != 0)" ( (binary_expression "*(int *)(param_1 + 0x48) != 0" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }" { (expression_statement "FUN_00057bc0(param_1,param_1 + 0x38);" (call_expression "FUN_00057bc0(param_1,param_1 + 0x38)" identifier (argument_list "(param_1,param_1 + 0x38)" ( identifier , (binary_expression "param_1 + 0x38" identifier + number_literal) ))) ;) })) (expression_statement "FUN_00057aa8(local_28,param_1,0x10);" (call_expression "FUN_00057aa8(local_28,param_1,0x10)" identifier (argument_list "(local_28,param_1,0x10)" ( identifier , identifier , number_literal ))) ;) (expression_statement "uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;" (assignment_expression "uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5" identifier = (binary_expression "(*(uint *)(param_1 + 0x34) >> 2) * 5" (parenthesized_expression "(*(uint *)(param_1 + 0x34) >> 2)" ( (binary_expression "*(uint *)(param_1 + 0x34) >> 2" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) >> number_literal) )) * number_literal)) ;) (expression_statement "uVar3 = *(int *)(param_1 + 0x24) + uVar1;" (assignment_expression "uVar3 = *(int *)(param_1 + 0x24) + uVar1" identifier = (binary_expression "*(int *)(param_1 + 0x24) + uVar1" (pointer_expression "*(int *)(param_1 + 0x24)" * (cast_expression "(int *)(param_1 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar3 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar3 < uVar1)" identifier = (call_expression "(uint)(uVar3 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar1)" ( (binary_expression "uVar3 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar5 = uVar1 + *(int *)(param_1 + 0x28);" (assignment_expression "uVar5 = uVar1 + *(int *)(param_1 + 0x28)" identifier = (binary_expression "uVar1 + *(int *)(param_1 + 0x28)" identifier + (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))))) ;) (expression_statement "uVar1 = (uint)(uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar5 < uVar1)" identifier = (call_expression "(uint)(uVar5 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < uVar1)" ( (binary_expression "uVar5 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar4 = uVar1 + *(int *)(param_1 + 0x2c);" (assignment_expression "uVar4 = uVar1 + *(int *)(param_1 + 0x2c)" identifier = (binary_expression "uVar1 + *(int *)(param_1 + 0x2c)" identifier + (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))))) ;) (expression_statement "uVar1 = (uint)(uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar4 < uVar1)" identifier = (call_expression "(uint)(uVar4 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar1)" ( (binary_expression "uVar4 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar6 = uVar1 + *(int *)(param_1 + 0x30);" (assignment_expression "uVar6 = uVar1 + *(int *)(param_1 + 0x30)" identifier = (binary_expression "uVar1 + *(int *)(param_1 + 0x30)" identifier + (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))))) ;) (expression_statement "iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);" (assignment_expression "iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1)" identifier = (binary_expression "(*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1)" (parenthesized_expression "(*(uint *)(param_1 + 0x34) & 3)" ( (binary_expression "*(uint *)(param_1 + 0x34) & 3" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) & number_literal) )) + (call_expression "(uint)(uVar6 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < uVar1)" ( (binary_expression "uVar6 < uVar1" identifier < identifier) ))))) ;) (expression_statement "uVar1 = (uint)(uVar3 + 5 < uVar3);" (assignment_expression "uVar1 = (uint)(uVar3 + 5 < uVar3)" identifier = (call_expression "(uint)(uVar3 + 5 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 + 5 < uVar3)" ( (binary_expression "uVar3 + 5 < uVar3" (binary_expression "uVar3 + 5" identifier + number_literal) < identifier) )))) ;) (expression_statement "uVar1 = (uint)(uVar1 + uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar1 + uVar5 < uVar1)" identifier = (call_expression "(uint)(uVar1 + uVar5 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 + uVar5 < uVar1)" ( (binary_expression "uVar1 + uVar5 < uVar1" (binary_expression "uVar1 + uVar5" identifier + identifier) < identifier) )))) ;) (expression_statement "uVar1 = (uint)(uVar1 + uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar1 + uVar4 < uVar1)" identifier = (call_expression "(uint)(uVar1 + uVar4 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 + uVar4 < uVar1)" ( (binary_expression "uVar1 + uVar4 < uVar1" (binary_expression "uVar1 + uVar4" identifier + identifier) < identifier) )))) ;) (expression_statement "uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;" (assignment_expression "uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5" identifier = (binary_expression "(iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5" (parenthesized_expression "(iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2)" ( (binary_expression "iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2" (binary_expression "iVar2 + (uint)(uVar1 + uVar6 < uVar1)" identifier + (call_expression "(uint)(uVar1 + uVar6 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 + uVar6 < uVar1)" ( (binary_expression "uVar1 + uVar6 < uVar1" (binary_expression "uVar1 + uVar6" identifier + identifier) < identifier) )))) >> number_literal) )) * number_literal)) ;) (expression_statement "uVar3 = uVar1 + uVar3;" (assignment_expression "uVar3 = uVar1 + uVar3" identifier = (binary_expression "uVar1 + uVar3" identifier + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar3 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar3 < uVar1)" identifier = (call_expression "(uint)(uVar3 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 < uVar1)" ( (binary_expression "uVar3 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar5 = uVar1 + uVar5;" (assignment_expression "uVar5 = uVar1 + uVar5" identifier = (binary_expression "uVar1 + uVar5" identifier + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar5 < uVar1)" identifier = (call_expression "(uint)(uVar5 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < uVar1)" ( (binary_expression "uVar5 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar4 = uVar1 + uVar4;" (assignment_expression "uVar4 = uVar1 + uVar4" identifier = (binary_expression "uVar1 + uVar4" identifier + identifier)) ;) (expression_statement "uVar1 = (uint)(uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar4 < uVar1)" identifier = (call_expression "(uint)(uVar4 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar1)" ( (binary_expression "uVar4 < uVar1" identifier < identifier) )))) ;) (expression_statement "uVar6 = uVar1 + uVar6;" (assignment_expression "uVar6 = uVar1 + uVar6" identifier = (binary_expression "uVar1 + uVar6" identifier + identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x24) = uVar3;" (assignment_expression "*(uint *)(param_1 + 0x24) = uVar3" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x28) = uVar5;" (assignment_expression "*(uint *)(param_1 + 0x28) = uVar5" (pointer_expression "*(uint *)(param_1 + 0x28)" * (cast_expression "(uint *)(param_1 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x2c) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x2c) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x2c)" * (cast_expression "(uint *)(param_1 + 0x2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x30) = uVar6;" (assignment_expression "*(uint *)(param_1 + 0x30) = uVar6" (pointer_expression "*(uint *)(param_1 + 0x30)" * (cast_expression "(uint *)(param_1 + 0x30)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;" (assignment_expression "*(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3" (pointer_expression "*(uint *)(param_1 + 0x34)" * (cast_expression "(uint *)(param_1 + 0x34)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) = (binary_expression "iVar2 + (uint)(uVar6 < uVar1) & 3" (binary_expression "iVar2 + (uint)(uVar6 < uVar1)" identifier + (call_expression "(uint)(uVar6 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 < uVar1)" ( (binary_expression "uVar6 < uVar1" identifier < identifier) )))) & number_literal)) ;) (expression_statement "FUN_00057b34(local_28,local_28,param_1 + 0x24);" (call_expression "FUN_00057b34(local_28,local_28,param_1 + 0x24)" identifier (argument_list "(local_28,local_28,param_1 + 0x24)" ( identifier , identifier , (binary_expression "param_1 + 0x24" identifier + number_literal) ))) ;) (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) (do_statement "do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);" do (compound_statement "{\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  }" { (expression_statement "puVar7 = (undefined1 *)(param_2 + uVar1);" (assignment_expression "puVar7 = (undefined1 *)(param_2 + uVar1)" identifier = (cast_expression "(undefined1 *)(param_2 + uVar1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar1)" ( (binary_expression "param_2 + uVar1" identifier + identifier) )))) ;) (expression_statement "uVar3 = uVar1;" (assignment_expression "uVar3 = uVar1" identifier = identifier) ;) (if_statement "if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }" if (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar3 = uVar1 + 3;\n    }" { (expression_statement "uVar3 = uVar1 + 3;" (assignment_expression "uVar3 = uVar1 + 3" identifier = (binary_expression "uVar1 + 3" identifier + number_literal)) ;) })) (expression_statement "uVar4 = local_28[(int)uVar3 >> 2];" (assignment_expression "uVar4 = local_28[(int)uVar3 >> 2]" identifier = (subscript_expression "local_28[(int)uVar3 >> 2]" identifier [ (binary_expression "(int)uVar3 >> 2" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ])) ;) (expression_statement "uVar3 = uVar1 & 3;" (assignment_expression "uVar3 = uVar1 & 3" identifier = (binary_expression "uVar1 & 3" identifier & number_literal)) ;) (expression_statement "uVar1 = uVar1 + 1;" (assignment_expression "uVar1 = uVar1 + 1" identifier = (binary_expression "uVar1 + 1" identifier + number_literal)) ;) (expression_statement "*puVar7 = (char)(uVar4 >> (uVar3 << 3));" (assignment_expression "*puVar7 = (char)(uVar4 >> (uVar3 << 3))" (pointer_expression "*puVar7" * identifier) = (cast_expression "(char)(uVar4 >> (uVar3 << 3))" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> (uVar3 << 3))" ( (binary_expression "uVar4 >> (uVar3 << 3)" identifier >> (parenthesized_expression "(uVar3 << 3)" ( (binary_expression "uVar3 << 3" identifier << number_literal) ))) )))) ;) }) while (parenthesized_expression "(uVar1 != 0x10)" ( (binary_expression "uVar1 != 0x10" identifier != number_literal) )) ;) (if_statement "if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }" if (parenthesized_expression "(local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8)" ( (binary_expression "local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8" identifier == (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" * (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }" { (return_statement "return *(uint *)PTR___stack_chk_guard_000b8ce8;" return (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" * (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_000b8cbc)();" (call_expression "(*(code *)PTR___stack_chk_fail_000b8cbc)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000b8cbc)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000b8cbc" * (cast_expression "(code *)PTR___stack_chk_fail_000b8cbc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + LIT) < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + IDENT) < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + IDENT) < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + IDENT) < IDENT) )))) >> LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) & LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT << LIT) ))) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (return_statement return IDENT ;) })))
(function_definition "uint FUN_0005816c(int param_1,int param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}" (type_identifier "uint") (function_declarator "FUN_0005816c(int param_1,int param_2)" (identifier "FUN_0005816c") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  undefined1 *puVar7;\n  uint local_28 [5];\n  uint local_14;\n  \n  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;\n  if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }\n  FUN_00057aa8(local_28,param_1,0x10);\n  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;\n  uVar3 = *(int *)(param_1 + 0x24) + uVar1;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + *(int *)(param_1 + 0x28);\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + *(int *)(param_1 + 0x30);\n  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);\n  uVar1 = (uint)(uVar3 + 5 < uVar3);\n  uVar1 = (uint)(uVar1 + uVar5 < uVar1);\n  uVar1 = (uint)(uVar1 + uVar4 < uVar1);\n  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;\n  uVar3 = uVar1 + uVar3;\n  uVar1 = (uint)(uVar3 < uVar1);\n  uVar5 = uVar1 + uVar5;\n  uVar1 = (uint)(uVar5 < uVar1);\n  uVar4 = uVar1 + uVar4;\n  uVar1 = (uint)(uVar4 < uVar1);\n  uVar6 = uVar1 + uVar6;\n  *(uint *)(param_1 + 0x24) = uVar3;\n  *(uint *)(param_1 + 0x28) = uVar5;\n  *(uint *)(param_1 + 0x2c) = uVar4;\n  *(uint *)(param_1 + 0x30) = uVar6;\n  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;\n  FUN_00057b34(local_28,local_28,param_1 + 0x24);\n  uVar1 = 0;\n  do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);\n  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }\n  (*(code *)PTR___stack_chk_fail_000b8cbc)();\n  return uVar4;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "undefined1 *puVar7;" (type_identifier "undefined1") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "uint local_28 [5];" (type_identifier "uint") (array_declarator "local_28 [5]" (identifier "local_28") ([ "[") (number_literal "5") (] "]")) (; ";")) (declaration "uint local_14;" (type_identifier "uint") (identifier "local_14") (; ";")) (expression_statement "local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;" (assignment_expression "local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8" (identifier "local_14") (= "=") (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" (* "*") (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000b8ce8")))) (; ";")) (if_statement "if (*(int *)(param_1 + 0x48) != 0) {\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x48) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x48) != 0" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00057bc0(param_1,param_1 + 0x38);\n  }" ({ "{") (expression_statement "FUN_00057bc0(param_1,param_1 + 0x38);" (call_expression "FUN_00057bc0(param_1,param_1 + 0x38)" (identifier "FUN_00057bc0") (argument_list "(param_1,param_1 + 0x38)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00057aa8(local_28,param_1,0x10);" (call_expression "FUN_00057aa8(local_28,param_1,0x10)" (identifier "FUN_00057aa8") (argument_list "(local_28,param_1,0x10)" (( "(") (identifier "local_28") (, ",") (identifier "param_1") (, ",") (number_literal "0x10") () ")"))) (; ";")) (expression_statement "uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;" (assignment_expression "uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5" (identifier "uVar1") (= "=") (binary_expression "(*(uint *)(param_1 + 0x34) >> 2) * 5" (parenthesized_expression "(*(uint *)(param_1 + 0x34) >> 2)" (( "(") (binary_expression "*(uint *)(param_1 + 0x34) >> 2" (pointer_expression "*(uint *)(param_1 + 0x34)" (* "*") (cast_expression "(uint *)(param_1 + 0x34)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "5"))) (; ";")) (expression_statement "uVar3 = *(int *)(param_1 + 0x24) + uVar1;" (assignment_expression "uVar3 = *(int *)(param_1 + 0x24) + uVar1" (identifier "uVar3") (= "=") (binary_expression "*(int *)(param_1 + 0x24) + uVar1" (pointer_expression "*(int *)(param_1 + 0x24)" (* "*") (cast_expression "(int *)(param_1 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (+ "+") (identifier "uVar1"))) (; ";")) (expression_statement "uVar1 = (uint)(uVar3 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar3 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar3 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar3 < uVar1)" (( "(") (binary_expression "uVar3 < uVar1" (identifier "uVar3") (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar5 = uVar1 + *(int *)(param_1 + 0x28);" (assignment_expression "uVar5 = uVar1 + *(int *)(param_1 + 0x28)" (identifier "uVar5") (= "=") (binary_expression "uVar1 + *(int *)(param_1 + 0x28)" (identifier "uVar1") (+ "+") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))))) (; ";")) (expression_statement "uVar1 = (uint)(uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar5 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar5 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar5 < uVar1)" (( "(") (binary_expression "uVar5 < uVar1" (identifier "uVar5") (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar4 = uVar1 + *(int *)(param_1 + 0x2c);" (assignment_expression "uVar4 = uVar1 + *(int *)(param_1 + 0x2c)" (identifier "uVar4") (= "=") (binary_expression "uVar1 + *(int *)(param_1 + 0x2c)" (identifier "uVar1") (+ "+") (pointer_expression "*(int *)(param_1 + 0x2c)" (* "*") (cast_expression "(int *)(param_1 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))))) (; ";")) (expression_statement "uVar1 = (uint)(uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar4 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar4 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar1)" (( "(") (binary_expression "uVar4 < uVar1" (identifier "uVar4") (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar6 = uVar1 + *(int *)(param_1 + 0x30);" (assignment_expression "uVar6 = uVar1 + *(int *)(param_1 + 0x30)" (identifier "uVar6") (= "=") (binary_expression "uVar1 + *(int *)(param_1 + 0x30)" (identifier "uVar1") (+ "+") (pointer_expression "*(int *)(param_1 + 0x30)" (* "*") (cast_expression "(int *)(param_1 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))))) (; ";")) (expression_statement "iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);" (assignment_expression "iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1)" (identifier "iVar2") (= "=") (binary_expression "(*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1)" (parenthesized_expression "(*(uint *)(param_1 + 0x34) & 3)" (( "(") (binary_expression "*(uint *)(param_1 + 0x34) & 3" (pointer_expression "*(uint *)(param_1 + 0x34)" (* "*") (cast_expression "(uint *)(param_1 + 0x34)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))) (& "&") (number_literal "3")) () ")")) (+ "+") (call_expression "(uint)(uVar6 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar6 < uVar1)" (( "(") (binary_expression "uVar6 < uVar1" (identifier "uVar6") (< "<") (identifier "uVar1")) () ")"))))) (; ";")) (expression_statement "uVar1 = (uint)(uVar3 + 5 < uVar3);" (assignment_expression "uVar1 = (uint)(uVar3 + 5 < uVar3)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar3 + 5 < uVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar3 + 5 < uVar3)" (( "(") (binary_expression "uVar3 + 5 < uVar3" (binary_expression "uVar3 + 5" (identifier "uVar3") (+ "+") (number_literal "5")) (< "<") (identifier "uVar3")) () ")")))) (; ";")) (expression_statement "uVar1 = (uint)(uVar1 + uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar1 + uVar5 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar1 + uVar5 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar1 + uVar5 < uVar1)" (( "(") (binary_expression "uVar1 + uVar5 < uVar1" (binary_expression "uVar1 + uVar5" (identifier "uVar1") (+ "+") (identifier "uVar5")) (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar1 = (uint)(uVar1 + uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar1 + uVar4 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar1 + uVar4 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar1 + uVar4 < uVar1)" (( "(") (binary_expression "uVar1 + uVar4 < uVar1" (binary_expression "uVar1 + uVar4" (identifier "uVar1") (+ "+") (identifier "uVar4")) (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;" (assignment_expression "uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5" (identifier "uVar1") (= "=") (binary_expression "(iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5" (parenthesized_expression "(iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2)" (( "(") (binary_expression "iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2" (binary_expression "iVar2 + (uint)(uVar1 + uVar6 < uVar1)" (identifier "iVar2") (+ "+") (call_expression "(uint)(uVar1 + uVar6 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar1 + uVar6 < uVar1)" (( "(") (binary_expression "uVar1 + uVar6 < uVar1" (binary_expression "uVar1 + uVar6" (identifier "uVar1") (+ "+") (identifier "uVar6")) (< "<") (identifier "uVar1")) () ")")))) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "5"))) (; ";")) (expression_statement "uVar3 = uVar1 + uVar3;" (assignment_expression "uVar3 = uVar1 + uVar3" (identifier "uVar3") (= "=") (binary_expression "uVar1 + uVar3" (identifier "uVar1") (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "uVar1 = (uint)(uVar3 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar3 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar3 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar3 < uVar1)" (( "(") (binary_expression "uVar3 < uVar1" (identifier "uVar3") (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar5 = uVar1 + uVar5;" (assignment_expression "uVar5 = uVar1 + uVar5" (identifier "uVar5") (= "=") (binary_expression "uVar1 + uVar5" (identifier "uVar1") (+ "+") (identifier "uVar5"))) (; ";")) (expression_statement "uVar1 = (uint)(uVar5 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar5 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar5 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar5 < uVar1)" (( "(") (binary_expression "uVar5 < uVar1" (identifier "uVar5") (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar4 = uVar1 + uVar4;" (assignment_expression "uVar4 = uVar1 + uVar4" (identifier "uVar4") (= "=") (binary_expression "uVar1 + uVar4" (identifier "uVar1") (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "uVar1 = (uint)(uVar4 < uVar1);" (assignment_expression "uVar1 = (uint)(uVar4 < uVar1)" (identifier "uVar1") (= "=") (call_expression "(uint)(uVar4 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar1)" (( "(") (binary_expression "uVar4 < uVar1" (identifier "uVar4") (< "<") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar6 = uVar1 + uVar6;" (assignment_expression "uVar6 = uVar1 + uVar6" (identifier "uVar6") (= "=") (binary_expression "uVar1 + uVar6" (identifier "uVar1") (+ "+") (identifier "uVar6"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x24) = uVar3;" (assignment_expression "*(uint *)(param_1 + 0x24) = uVar3" (pointer_expression "*(uint *)(param_1 + 0x24)" (* "*") (cast_expression "(uint *)(param_1 + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x28) = uVar5;" (assignment_expression "*(uint *)(param_1 + 0x28) = uVar5" (pointer_expression "*(uint *)(param_1 + 0x28)" (* "*") (cast_expression "(uint *)(param_1 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x2c) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x2c) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x2c)" (* "*") (cast_expression "(uint *)(param_1 + 0x2c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x30) = uVar6;" (assignment_expression "*(uint *)(param_1 + 0x30) = uVar6" (pointer_expression "*(uint *)(param_1 + 0x30)" (* "*") (cast_expression "(uint *)(param_1 + 0x30)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;" (assignment_expression "*(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3" (pointer_expression "*(uint *)(param_1 + 0x34)" (* "*") (cast_expression "(uint *)(param_1 + 0x34)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))) (= "=") (binary_expression "iVar2 + (uint)(uVar6 < uVar1) & 3" (binary_expression "iVar2 + (uint)(uVar6 < uVar1)" (identifier "iVar2") (+ "+") (call_expression "(uint)(uVar6 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar6 < uVar1)" (( "(") (binary_expression "uVar6 < uVar1" (identifier "uVar6") (< "<") (identifier "uVar1")) () ")")))) (& "&") (number_literal "3"))) (; ";")) (expression_statement "FUN_00057b34(local_28,local_28,param_1 + 0x24);" (call_expression "FUN_00057b34(local_28,local_28,param_1 + 0x24)" (identifier "FUN_00057b34") (argument_list "(local_28,local_28,param_1 + 0x24)" (( "(") (identifier "local_28") (, ",") (identifier "local_28") (, ",") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")"))) (; ";")) (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" (identifier "uVar1") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  } while (uVar1 != 0x10);" (do "do") (compound_statement "{\n    puVar7 = (undefined1 *)(param_2 + uVar1);\n    uVar3 = uVar1;\n    if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }\n    uVar4 = local_28[(int)uVar3 >> 2];\n    uVar3 = uVar1 & 3;\n    uVar1 = uVar1 + 1;\n    *puVar7 = (char)(uVar4 >> (uVar3 << 3));\n  }" ({ "{") (expression_statement "puVar7 = (undefined1 *)(param_2 + uVar1);" (assignment_expression "puVar7 = (undefined1 *)(param_2 + uVar1)" (identifier "puVar7") (= "=") (cast_expression "(undefined1 *)(param_2 + uVar1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + uVar1)" (( "(") (binary_expression "param_2 + uVar1" (identifier "param_2") (+ "+") (identifier "uVar1")) () ")")))) (; ";")) (expression_statement "uVar3 = uVar1;" (assignment_expression "uVar3 = uVar1" (identifier "uVar3") (= "=") (identifier "uVar1")) (; ";")) (if_statement "if ((int)uVar1 < 0) {\n      uVar3 = uVar1 + 3;\n    }" (if "if") (parenthesized_expression "((int)uVar1 < 0)" (( "(") (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      uVar3 = uVar1 + 3;\n    }" ({ "{") (expression_statement "uVar3 = uVar1 + 3;" (assignment_expression "uVar3 = uVar1 + 3" (identifier "uVar3") (= "=") (binary_expression "uVar1 + 3" (identifier "uVar1") (+ "+") (number_literal "3"))) (; ";")) (} "}"))) (expression_statement "uVar4 = local_28[(int)uVar3 >> 2];" (assignment_expression "uVar4 = local_28[(int)uVar3 >> 2]" (identifier "uVar4") (= "=") (subscript_expression "local_28[(int)uVar3 >> 2]" (identifier "local_28") ([ "[") (binary_expression "(int)uVar3 >> 2" (cast_expression "(int)uVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar3")) (>> ">>") (number_literal "2")) (] "]"))) (; ";")) (expression_statement "uVar3 = uVar1 & 3;" (assignment_expression "uVar3 = uVar1 & 3" (identifier "uVar3") (= "=") (binary_expression "uVar1 & 3" (identifier "uVar1") (& "&") (number_literal "3"))) (; ";")) (expression_statement "uVar1 = uVar1 + 1;" (assignment_expression "uVar1 = uVar1 + 1" (identifier "uVar1") (= "=") (binary_expression "uVar1 + 1" (identifier "uVar1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar7 = (char)(uVar4 >> (uVar3 << 3));" (assignment_expression "*puVar7 = (char)(uVar4 >> (uVar3 << 3))" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (cast_expression "(char)(uVar4 >> (uVar3 << 3))" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "(uVar4 >> (uVar3 << 3))" (( "(") (binary_expression "uVar4 >> (uVar3 << 3)" (identifier "uVar4") (>> ">>") (parenthesized_expression "(uVar3 << 3)" (( "(") (binary_expression "uVar3 << 3" (identifier "uVar3") (<< "<<") (number_literal "3")) () ")"))) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar1 != 0x10)" (( "(") (binary_expression "uVar1 != 0x10" (identifier "uVar1") (!= "!=") (number_literal "0x10")) () ")")) (; ";")) (if_statement "if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }" (if "if") (parenthesized_expression "(local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8)" (( "(") (binary_expression "local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8" (identifier "local_14") (== "==") (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" (* "*") (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000b8ce8")))) () ")")) (compound_statement "{\n    return *(uint *)PTR___stack_chk_guard_000b8ce8;\n  }" ({ "{") (return_statement "return *(uint *)PTR___stack_chk_guard_000b8ce8;" (return "return") (pointer_expression "*(uint *)PTR___stack_chk_guard_000b8ce8" (* "*") (cast_expression "(uint *)PTR___stack_chk_guard_000b8ce8" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000b8ce8"))) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR___stack_chk_fail_000b8cbc)();" (call_expression "(*(code *)PTR___stack_chk_fail_000b8cbc)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000b8cbc)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000b8cbc" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000b8cbc" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000b8cbc"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}")))

void function_1(type_1 *ctx,type_2 *var_12)

{
  int var_13;
  type_3 var_5;
  type_3 var_4;
  int var_10;
  type_3 var_6;
  type_3 var_8;
  type_3 var_7;
  type_3 var_9;
  type_2 *puVar9;
  int var_1;
  type_4 tmp;
  
  var_13 = **(int **)(&DAT_00060b7c + var_1);
  if (ctx->bufferIndex != 0) {
    var_2(ctx,ctx->buffer,ctx->bufferIndex);
  }
  var_3(&tmp,ctx,0x10);
  var_4 = (ctx->h).w[4];
  var_5 = (var_4 >> 2) * 5;
  var_6 = (ctx->h).w[0] + var_5;
  var_5 = (type_3)(var_6 < var_5);
  var_7 = var_5 + (ctx->h).w[1];
  var_5 = (type_3)(var_7 < var_5);
  var_8 = var_5 + (ctx->h).w[2];
  var_5 = (type_3)(var_8 < var_5);
  var_9 = var_5 + (ctx->h).w[3];
  var_10 = (var_4 & 3) + (type_3)(var_9 < var_5);
  var_5 = (type_3)(var_6 + 5 < var_6);
  var_5 = (type_3)(var_5 + var_7 < var_5);
  var_5 = (type_3)(var_5 + var_8 < var_5);
  var_5 = (var_10 + (type_3)(var_5 + var_9 < var_5) >> 2) * 5;
  var_6 = var_5 + var_6;
  var_5 = (type_3)(var_6 < var_5);
  var_7 = var_5 + var_7;
  var_5 = (type_3)(var_7 < var_5);
  var_8 = var_5 + var_8;
  var_5 = (type_3)(var_8 < var_5);
  var_9 = var_5 + var_9;
  (ctx->h).w[0] = var_6;
  (ctx->h).w[1] = var_7;
  (ctx->h).w[2] = var_8;
  (ctx->h).w[3] = var_9;
  (ctx->h).w[4] = var_10 + (type_3)(var_9 < var_5) & 3;
  var_11(&tmp,&tmp,&ctx->h);
  var_5 = 0;
  do {
    puVar9 = var_12 + var_5;
    var_4 = var_5;
    if ((int)var_5 < 0) {
      var_4 = var_5 + 3;
    }
    var_6 = var_5 & 3;
    var_5 = var_5 + 1;
    *puVar9 = (type_2)(tmp.w[(int)var_4 >> 2] >> (var_6 << 3));
  } while (var_5 != 0x10);
  if (var_13 == **(int **)(&DAT_00060b7c + var_1)) {
    return;
  }
  (**(type_5 **)(var_1 + 0x60b50))();
  return;
}


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

uint MASKED(int param_1,int param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  undefined1 *puVar7;
  uint local_28 [5];
  uint local_14;
  
  local_14 = *(uint *)PTR___stack_chk_guard_000b8ce8;
  if (*(int *)(param_1 + 0x48) != 0) {
    FUN_00057bc0(param_1,param_1 + 0x38);
  }
  FUN_00057aa8(local_28,param_1,0x10);
  uVar1 = (*(uint *)(param_1 + 0x34) >> 2) * 5;
  uVar3 = *(int *)(param_1 + 0x24) + uVar1;
  uVar1 = (uint)(uVar3 < uVar1);
  uVar5 = uVar1 + *(int *)(param_1 + 0x28);
  uVar1 = (uint)(uVar5 < uVar1);
  uVar4 = uVar1 + *(int *)(param_1 + 0x2c);
  uVar1 = (uint)(uVar4 < uVar1);
  uVar6 = uVar1 + *(int *)(param_1 + 0x30);
  iVar2 = (*(uint *)(param_1 + 0x34) & 3) + (uint)(uVar6 < uVar1);
  uVar1 = (uint)(uVar3 + 5 < uVar3);
  uVar1 = (uint)(uVar1 + uVar5 < uVar1);
  uVar1 = (uint)(uVar1 + uVar4 < uVar1);
  uVar1 = (iVar2 + (uint)(uVar1 + uVar6 < uVar1) >> 2) * 5;
  uVar3 = uVar1 + uVar3;
  uVar1 = (uint)(uVar3 < uVar1);
  uVar5 = uVar1 + uVar5;
  uVar1 = (uint)(uVar5 < uVar1);
  uVar4 = uVar1 + uVar4;
  uVar1 = (uint)(uVar4 < uVar1);
  uVar6 = uVar1 + uVar6;
  *(uint *)(param_1 + 0x24) = uVar3;
  *(uint *)(param_1 + 0x28) = uVar5;
  *(uint *)(param_1 + 0x2c) = uVar4;
  *(uint *)(param_1 + 0x30) = uVar6;
  *(uint *)(param_1 + 0x34) = iVar2 + (uint)(uVar6 < uVar1) & 3;
  FUN_00057b34(local_28,local_28,param_1 + 0x24);
  uVar1 = 0;
  do {
    puVar7 = (undefined1 *)(param_2 + uVar1);
    uVar3 = uVar1;
    if ((int)uVar1 < 0) {
      uVar3 = uVar1 + 3;
    }
    uVar4 = local_28[(int)uVar3 >> 2];
    uVar3 = uVar1 & 3;
    uVar1 = uVar1 + 1;
    *puVar7 = (char)(uVar4 >> (uVar3 << 3));
  } while (uVar1 != 0x10);
  if (local_14 == *(uint *)PTR___stack_chk_guard_000b8ce8) {
    return *(uint *)PTR___stack_chk_guard_000b8ce8;
  }
  (*(code *)PTR___stack_chk_fail_000b8cbc)();
  return uVar4;
}

