
void fillbuf(int n)

{
  uint *puVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  int iVar5;
  uint uVar6;
  
  *(short *)(PTR_DAT_000374c4 + -0x539c) = *(short *)(PTR_DAT_000374c4 + -0x539c) << (n & 0x1fU);
  puVar4 = PTR_DAT_000374c4;
  puVar3 = PTR_inptr_00037400;
  puVar2 = PTR_insize_000373fc;
  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);
  if (iVar5 < n) {
    do {
      n = n - iVar5;
      *(ushort *)(puVar4 + -0x539c) =
           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);
      uVar6 = *(uint *)puVar3;
      if (uVar6 < *(uint *)puVar2) {
        *(uint *)puVar3 = uVar6 + 1;
        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];
      }
      else {
        iVar5 = fill_inbuf(1);
        if (iVar5 == -1) {
          *(undefined4 *)(puVar4 + -0x53a0) = 0;
        }
        else {
          *(int *)(puVar4 + -0x53a0) = iVar5;
        }
      }
      *(undefined4 *)(puVar4 + -0x53a4) = 8;
      iVar5 = 8;
    } while (8 < n);
    iVar5 = 8;
  }
  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);
  *(int *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - n;
  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =
       (ushort)(*puVar1 >> (iVar5 - n & 0x1fU)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);
  return;
}



void FUN_0001c410(uint param_1)

{
  uint *puVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  int iVar5;
  uint uVar6;
  
  *(short *)(PTR_DAT_000374c4 + -0x539c) =
       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);
  puVar4 = PTR_DAT_000374c4;
  puVar3 = PTR_inptr_00037400;
  puVar2 = PTR_insize_000373fc;
  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);
  if (iVar5 < (int)param_1) {
    do {
      param_1 = param_1 - iVar5;
      *(ushort *)(puVar4 + -0x539c) =
           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);
      uVar6 = *(uint *)puVar3;
      if (uVar6 < *(uint *)puVar2) {
        *(uint *)puVar3 = uVar6 + 1;
        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];
      }
      else {
        iVar5 = fill_inbuf(1);
        if (iVar5 == -1) {
          *(undefined4 *)(puVar4 + -0x53a0) = 0;
        }
        else {
          *(int *)(puVar4 + -0x53a0) = iVar5;
        }
      }
      *(undefined4 *)(puVar4 + -0x53a4) = 8;
      iVar5 = 8;
    } while (8 < (int)param_1);
    iVar5 = 8;
  }
  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);
  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;
  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =
       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);
  return;
}


lui gp,0x2
addiu gp,gp,0x2f50
addu gp,gp,t9
addiu sp,sp,-0x40
sw ra,0x3c(sp)
sw s7,0x38(sp)
sw s6,0x34(sp)
sw s5,0x30(sp)
sw s4,0x2c(sp)
sw s3,0x28(sp)
sw s2,0x24(sp)
sw s1,0x20(sp)
sw s0,0x1c(sp)
sw gp,0x10(sp)
lw v1,-0x7e9c(gp)
lhu v0,-0x539c(v1)
sllv v0,v0,a0
sh v0,-0x539c(v1)
lw v0,-0x7e9c(gp)
lw v0,-0x53a4(v0)
slt v1,v0,a0
beq v1,zero,0x0001c510
_or s0,a0,zero
lw s2,-0x7e9c(gp)
lw s1,-0x7e9c(gp)
lw s3,-0x7f60(gp)
lw s7,-0x7f64(gp)
lw s6,-0x7e9c(gp)
li s4,0x8
b 0x0001c4c0
_or s5,s4,zero
li a0,0x1
lw t9,-0x7f5c(gp)
bal 0x0001f3a8
_nop
lw gp,0x10(sp)
li v1,-0x1
bne v0,v1,0x0001c504
_nop
sw zero,-0x53a0(s1)
sw s5,-0x53a4(s6)
slti v1,s0,0x9
bne v1,zero,0x0001c50c
_or v0,s4,zero
subu s0,s0,v0
lw v0,-0x53a0(s1)
sllv v0,v0,s0
lhu v1,-0x539c(s2)
or v0,v0,v1
sh v0,-0x539c(s2)
lw v1,0x0(s3)
lw v0,0x0(s7)
sltu v0,v1,v0
beq v0,zero,0x0001c48c
_addiu v0,v1,0x1
sw v0,0x0(s3)
lw v0,-0x7f48(gp)
addu v1,v0,v1
lbu v0,0x0(v1)
b 0x0001c4b0
_sw v0,-0x53a0(s1)
b 0x0001c4b0
_sw v0,-0x53a0(s1)
li v0,0x8
lw v1,-0x7e9c(gp)
lw v1,-0x53a0(v1)
subu s0,v0,s0
lw v0,-0x7e9c(gp)
sw s0,-0x53a4(v0)
lw a0,-0x7e9c(gp)
srlv s0,v1,s0
lhu v0,-0x539c(a0)
or v0,s0,v0
sh v0,-0x539c(a0)
lw ra,0x3c(sp)
lw s7,0x38(sp)
lw s6,0x34(sp)
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x40
(translation_unit "void FUN_0001c410(uint param_1)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}\n\n" (function_definition "void FUN_0001c410(uint param_1)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" primitive_type (function_declarator "FUN_0001c410(uint param_1)" identifier (parameter_list "(uint param_1)" ( (parameter_declaration "uint param_1" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (expression_statement "*(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);" (assignment_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) = (binary_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) << (parenthesized_expression "(param_1 & 0x1f)" ( (binary_expression "param_1 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "puVar4 = PTR_DAT_000374c4;" (assignment_expression "puVar4 = PTR_DAT_000374c4" identifier = identifier) ;) (expression_statement "puVar3 = PTR_inptr_00037400;" (assignment_expression "puVar3 = PTR_inptr_00037400" identifier = identifier) ;) (expression_statement "puVar2 = PTR_insize_000373fc;" (assignment_expression "puVar2 = PTR_insize_000373fc" identifier = identifier) ;) (expression_statement "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);" (assignment_expression "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4)" identifier = (pointer_expression "*(int *)(PTR_DAT_000374c4 + -0x53a4)" * (cast_expression "(int *)(PTR_DAT_000374c4 + -0x53a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a4" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }" if (parenthesized_expression "(iVar5 < (int)param_1)" ( (binary_expression "iVar5 < (int)param_1" identifier < (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }" { (do_statement "do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);" do (compound_statement "{\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    }" { (expression_statement "param_1 = param_1 - iVar5;" (assignment_expression "param_1 = param_1 - iVar5" identifier = (binary_expression "param_1 - iVar5" identifier - identifier)) ;) (expression_statement "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);" (assignment_expression "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c)" (pointer_expression "*(ushort *)(puVar4 + -0x539c)" * (cast_expression "(ushort *)(puVar4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x539c)" ( (binary_expression "puVar4 + -0x539c" identifier + number_literal) )))) = (binary_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c)" (call_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f))" ( (binary_expression "*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)" (pointer_expression "*(int *)(puVar4 + -0x53a0)" * (cast_expression "(int *)(puVar4 + -0x53a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) << (parenthesized_expression "(param_1 & 0x1f)" ( (binary_expression "param_1 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(puVar4 + -0x539c)" * (cast_expression "(ushort *)(puVar4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x539c)" ( (binary_expression "puVar4 + -0x539c" identifier + number_literal) )))))) ;) (expression_statement "uVar6 = *(uint *)puVar3;" (assignment_expression "uVar6 = *(uint *)puVar3" identifier = (pointer_expression "*(uint *)puVar3" * (cast_expression "(uint *)puVar3" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" if (parenthesized_expression "(uVar6 < *(uint *)puVar2)" ( (binary_expression "uVar6 < *(uint *)puVar2" identifier < (pointer_expression "*(uint *)puVar2" * (cast_expression "(uint *)puVar2" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }" { (expression_statement "*(uint *)puVar3 = uVar6 + 1;" (assignment_expression "*(uint *)puVar3 = uVar6 + 1" (pointer_expression "*(uint *)puVar3" * (cast_expression "(uint *)puVar3" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];" (assignment_expression "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6]" (pointer_expression "*(uint *)(puVar4 + -0x53a0)" * (cast_expression "(uint *)(puVar4 + -0x53a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = (cast_expression "(uint)(byte)PTR_inbuf_00037418[uVar6]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)PTR_inbuf_00037418[uVar6]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "PTR_inbuf_00037418[uVar6]" identifier [ identifier ])))) ;) }) (else_clause "else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" else (compound_statement "{\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" { (expression_statement "iVar5 = fill_inbuf(1);" (assignment_expression "iVar5 = fill_inbuf(1)" identifier = (call_expression "fill_inbuf(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (compound_statement "{\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }" { (expression_statement "*(undefined4 *)(puVar4 + -0x53a0) = 0;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a0) = 0" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a0)" * (cast_expression "(undefined4 *)(puVar4 + -0x53a0)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" else (compound_statement "{\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" { (expression_statement "*(int *)(puVar4 + -0x53a0) = iVar5;" (assignment_expression "*(int *)(puVar4 + -0x53a0) = iVar5" (pointer_expression "*(int *)(puVar4 + -0x53a0)" * (cast_expression "(int *)(puVar4 + -0x53a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = identifier) ;) }))) }))) (expression_statement "*(undefined4 *)(puVar4 + -0x53a4) = 8;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a4) = 8" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a4)" * (cast_expression "(undefined4 *)(puVar4 + -0x53a4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a4)" ( (binary_expression "puVar4 + -0x53a4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" identifier = number_literal) ;) }) while (parenthesized_expression "(8 < (int)param_1)" ( (binary_expression "8 < (int)param_1" number_literal < (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" identifier = number_literal) ;) })) (expression_statement "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);" (assignment_expression "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0)" identifier = (cast_expression "(uint *)(PTR_DAT_000374c4 + -0x53a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a0)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a0" identifier + number_literal) )))) ;) (expression_statement "*(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;" (assignment_expression "*(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1" (pointer_expression "*(uint *)(PTR_DAT_000374c4 + -0x53a4)" * (cast_expression "(uint *)(PTR_DAT_000374c4 + -0x53a4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a4" identifier + number_literal) )))) = (binary_expression "iVar5 - param_1" identifier - identifier)) ;) (expression_statement "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);" (assignment_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) = (binary_expression "(ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (call_expression "(ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*puVar1 >> (iVar5 - param_1 & 0x1f))" ( (binary_expression "*puVar1 >> (iVar5 - param_1 & 0x1f)" (pointer_expression "*puVar1" * identifier) >> (parenthesized_expression "(iVar5 - param_1 & 0x1f)" ( (binary_expression "iVar5 - param_1 & 0x1f" (binary_expression "iVar5 - param_1" identifier - identifier) & number_literal) ))) ))) | (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))))) ;) (return_statement "return;" return ;) })))
(translation_unit "void fillbuf(int n)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) = *(short *)(PTR_DAT_000374c4 + -0x539c) << (n & 0x1fU);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < n) {\n    do {\n      n = n - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < n);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(int *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - n;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - n & 0x1fU)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}\n\n" (function_definition "void fillbuf(int n)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) = *(short *)(PTR_DAT_000374c4 + -0x539c) << (n & 0x1fU);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < n) {\n    do {\n      n = n - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < n);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(int *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - n;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - n & 0x1fU)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" primitive_type (function_declarator "fillbuf(int n)" identifier (parameter_list "(int n)" ( (parameter_declaration "int n" primitive_type identifier) ))) (compound_statement "{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) = *(short *)(PTR_DAT_000374c4 + -0x539c) << (n & 0x1fU);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < n) {\n    do {\n      n = n - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < n);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(int *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - n;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - n & 0x1fU)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (expression_statement "*(short *)(PTR_DAT_000374c4 + -0x539c) = *(short *)(PTR_DAT_000374c4 + -0x539c) << (n & 0x1fU);" (assignment_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) = *(short *)(PTR_DAT_000374c4 + -0x539c) << (n & 0x1fU)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) = (binary_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) << (n & 0x1fU)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) << (parenthesized_expression "(n & 0x1fU)" ( (binary_expression "n & 0x1fU" identifier & number_literal) )))) ;) (expression_statement "puVar4 = PTR_DAT_000374c4;" (assignment_expression "puVar4 = PTR_DAT_000374c4" identifier = identifier) ;) (expression_statement "puVar3 = PTR_inptr_00037400;" (assignment_expression "puVar3 = PTR_inptr_00037400" identifier = identifier) ;) (expression_statement "puVar2 = PTR_insize_000373fc;" (assignment_expression "puVar2 = PTR_insize_000373fc" identifier = identifier) ;) (expression_statement "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);" (assignment_expression "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4)" identifier = (pointer_expression "*(int *)(PTR_DAT_000374c4 + -0x53a4)" * (cast_expression "(int *)(PTR_DAT_000374c4 + -0x53a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a4" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 < n) {\n    do {\n      n = n - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < n);\n    iVar5 = 8;\n  }" if (parenthesized_expression "(iVar5 < n)" ( (binary_expression "iVar5 < n" identifier < identifier) )) (compound_statement "{\n    do {\n      n = n - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < n);\n    iVar5 = 8;\n  }" { (do_statement "do {\n      n = n - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < n);" do (compound_statement "{\n      n = n - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    }" { (expression_statement "n = n - iVar5;" (assignment_expression "n = n - iVar5" identifier = (binary_expression "n - iVar5" identifier - identifier)) ;) (expression_statement "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c);" (assignment_expression "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c)" (pointer_expression "*(ushort *)(puVar4 + -0x539c)" * (cast_expression "(ushort *)(puVar4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x539c)" ( (binary_expression "puVar4 + -0x539c" identifier + number_literal) )))) = (binary_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)) | *(ushort *)(puVar4 + -0x539c)" (call_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*(int *)(puVar4 + -0x53a0) << (n & 0x1fU))" ( (binary_expression "*(int *)(puVar4 + -0x53a0) << (n & 0x1fU)" (pointer_expression "*(int *)(puVar4 + -0x53a0)" * (cast_expression "(int *)(puVar4 + -0x53a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) << (parenthesized_expression "(n & 0x1fU)" ( (binary_expression "n & 0x1fU" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(puVar4 + -0x539c)" * (cast_expression "(ushort *)(puVar4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x539c)" ( (binary_expression "puVar4 + -0x539c" identifier + number_literal) )))))) ;) (expression_statement "uVar6 = *(uint *)puVar3;" (assignment_expression "uVar6 = *(uint *)puVar3" identifier = (pointer_expression "*(uint *)puVar3" * (cast_expression "(uint *)puVar3" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" if (parenthesized_expression "(uVar6 < *(uint *)puVar2)" ( (binary_expression "uVar6 < *(uint *)puVar2" identifier < (pointer_expression "*(uint *)puVar2" * (cast_expression "(uint *)puVar2" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }" { (expression_statement "*(uint *)puVar3 = uVar6 + 1;" (assignment_expression "*(uint *)puVar3 = uVar6 + 1" (pointer_expression "*(uint *)puVar3" * (cast_expression "(uint *)puVar3" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];" (assignment_expression "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6]" (pointer_expression "*(uint *)(puVar4 + -0x53a0)" * (cast_expression "(uint *)(puVar4 + -0x53a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = (cast_expression "(uint)(byte)PTR_inbuf_00037418[uVar6]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)PTR_inbuf_00037418[uVar6]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "PTR_inbuf_00037418[uVar6]" identifier [ identifier ])))) ;) }) (else_clause "else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" else (compound_statement "{\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" { (expression_statement "iVar5 = fill_inbuf(1);" (assignment_expression "iVar5 = fill_inbuf(1)" identifier = (call_expression "fill_inbuf(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (compound_statement "{\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }" { (expression_statement "*(undefined4 *)(puVar4 + -0x53a0) = 0;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a0) = 0" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a0)" * (cast_expression "(undefined4 *)(puVar4 + -0x53a0)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" else (compound_statement "{\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" { (expression_statement "*(int *)(puVar4 + -0x53a0) = iVar5;" (assignment_expression "*(int *)(puVar4 + -0x53a0) = iVar5" (pointer_expression "*(int *)(puVar4 + -0x53a0)" * (cast_expression "(int *)(puVar4 + -0x53a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = identifier) ;) }))) }))) (expression_statement "*(undefined4 *)(puVar4 + -0x53a4) = 8;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a4) = 8" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a4)" * (cast_expression "(undefined4 *)(puVar4 + -0x53a4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a4)" ( (binary_expression "puVar4 + -0x53a4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" identifier = number_literal) ;) }) while (parenthesized_expression "(8 < n)" ( (binary_expression "8 < n" number_literal < identifier) )) ;) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" identifier = number_literal) ;) })) (expression_statement "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);" (assignment_expression "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0)" identifier = (cast_expression "(uint *)(PTR_DAT_000374c4 + -0x53a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a0)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a0" identifier + number_literal) )))) ;) (expression_statement "*(int *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - n;" (assignment_expression "*(int *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - n" (pointer_expression "*(int *)(PTR_DAT_000374c4 + -0x53a4)" * (cast_expression "(int *)(PTR_DAT_000374c4 + -0x53a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a4" identifier + number_literal) )))) = (binary_expression "iVar5 - n" identifier - identifier)) ;) (expression_statement "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - n & 0x1fU)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);" (assignment_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - n & 0x1fU)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) = (binary_expression "(ushort)(*puVar1 >> (iVar5 - n & 0x1fU)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (call_expression "(ushort)(*puVar1 >> (iVar5 - n & 0x1fU))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*puVar1 >> (iVar5 - n & 0x1fU))" ( (binary_expression "*puVar1 >> (iVar5 - n & 0x1fU)" (pointer_expression "*puVar1" * identifier) >> (parenthesized_expression "(iVar5 - n & 0x1fU)" ( (binary_expression "iVar5 - n & 0x1fU" (binary_expression "iVar5 - n" identifier - identifier) & number_literal) ))) ))) | (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0001c410(uint param_1)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}\n\n" (function_definition "void FUN_0001c410(uint param_1)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" primitive_type (function_declarator "FUN_0001c410(uint param_1)" identifier (parameter_list "(uint param_1)" ( (parameter_declaration "uint param_1" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (expression_statement "*(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);" (assignment_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) = (binary_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) << (parenthesized_expression "(param_1 & 0x1f)" ( (binary_expression "param_1 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "puVar4 = PTR_DAT_000374c4;" (assignment_expression "puVar4 = PTR_DAT_000374c4" identifier = identifier) ;) (expression_statement "puVar3 = PTR_inptr_00037400;" (assignment_expression "puVar3 = PTR_inptr_00037400" identifier = identifier) ;) (expression_statement "puVar2 = PTR_insize_000373fc;" (assignment_expression "puVar2 = PTR_insize_000373fc" identifier = identifier) ;) (expression_statement "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);" (assignment_expression "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4)" identifier = (pointer_expression "*(int *)(PTR_DAT_000374c4 + -0x53a4)" * (cast_expression "(int *)(PTR_DAT_000374c4 + -0x53a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a4" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }" if (parenthesized_expression "(iVar5 < (int)param_1)" ( (binary_expression "iVar5 < (int)param_1" identifier < (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }" { (do_statement "do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);" do (compound_statement "{\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    }" { (expression_statement "param_1 = param_1 - iVar5;" (assignment_expression "param_1 = param_1 - iVar5" identifier = (binary_expression "param_1 - iVar5" identifier - identifier)) ;) (expression_statement "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);" (assignment_expression "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c)" (pointer_expression "*(ushort *)(puVar4 + -0x539c)" * (cast_expression "(ushort *)(puVar4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x539c)" ( (binary_expression "puVar4 + -0x539c" identifier + number_literal) )))) = (binary_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c)" (call_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f))" ( (binary_expression "*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)" (pointer_expression "*(int *)(puVar4 + -0x53a0)" * (cast_expression "(int *)(puVar4 + -0x53a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) << (parenthesized_expression "(param_1 & 0x1f)" ( (binary_expression "param_1 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(puVar4 + -0x539c)" * (cast_expression "(ushort *)(puVar4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x539c)" ( (binary_expression "puVar4 + -0x539c" identifier + number_literal) )))))) ;) (expression_statement "uVar6 = *(uint *)puVar3;" (assignment_expression "uVar6 = *(uint *)puVar3" identifier = (pointer_expression "*(uint *)puVar3" * (cast_expression "(uint *)puVar3" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" if (parenthesized_expression "(uVar6 < *(uint *)puVar2)" ( (binary_expression "uVar6 < *(uint *)puVar2" identifier < (pointer_expression "*(uint *)puVar2" * (cast_expression "(uint *)puVar2" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }" { (expression_statement "*(uint *)puVar3 = uVar6 + 1;" (assignment_expression "*(uint *)puVar3 = uVar6 + 1" (pointer_expression "*(uint *)puVar3" * (cast_expression "(uint *)puVar3" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];" (assignment_expression "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6]" (pointer_expression "*(uint *)(puVar4 + -0x53a0)" * (cast_expression "(uint *)(puVar4 + -0x53a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = (cast_expression "(uint)(byte)PTR_inbuf_00037418[uVar6]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)PTR_inbuf_00037418[uVar6]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "PTR_inbuf_00037418[uVar6]" identifier [ identifier ])))) ;) }) (else_clause "else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" else (compound_statement "{\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" { (expression_statement "iVar5 = fill_inbuf(1);" (assignment_expression "iVar5 = fill_inbuf(1)" identifier = (call_expression "fill_inbuf(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (compound_statement "{\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }" { (expression_statement "*(undefined4 *)(puVar4 + -0x53a0) = 0;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a0) = 0" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a0)" * (cast_expression "(undefined4 *)(puVar4 + -0x53a0)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" else (compound_statement "{\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" { (expression_statement "*(int *)(puVar4 + -0x53a0) = iVar5;" (assignment_expression "*(int *)(puVar4 + -0x53a0) = iVar5" (pointer_expression "*(int *)(puVar4 + -0x53a0)" * (cast_expression "(int *)(puVar4 + -0x53a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a0)" ( (binary_expression "puVar4 + -0x53a0" identifier + number_literal) )))) = identifier) ;) }))) }))) (expression_statement "*(undefined4 *)(puVar4 + -0x53a4) = 8;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a4) = 8" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a4)" * (cast_expression "(undefined4 *)(puVar4 + -0x53a4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + -0x53a4)" ( (binary_expression "puVar4 + -0x53a4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" identifier = number_literal) ;) }) while (parenthesized_expression "(8 < (int)param_1)" ( (binary_expression "8 < (int)param_1" number_literal < (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" identifier = number_literal) ;) })) (expression_statement "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);" (assignment_expression "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0)" identifier = (cast_expression "(uint *)(PTR_DAT_000374c4 + -0x53a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a0)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a0" identifier + number_literal) )))) ;) (expression_statement "*(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;" (assignment_expression "*(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1" (pointer_expression "*(uint *)(PTR_DAT_000374c4 + -0x53a4)" * (cast_expression "(uint *)(PTR_DAT_000374c4 + -0x53a4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" ( (binary_expression "PTR_DAT_000374c4 + -0x53a4" identifier + number_literal) )))) = (binary_expression "iVar5 - param_1" identifier - identifier)) ;) (expression_statement "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);" (assignment_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))) = (binary_expression "(ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (call_expression "(ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(*puVar1 >> (iVar5 - param_1 & 0x1f))" ( (binary_expression "*puVar1 >> (iVar5 - param_1 & 0x1f)" (pointer_expression "*puVar1" * identifier) >> (parenthesized_expression "(iVar5 - param_1 & 0x1f)" ( (binary_expression "iVar5 - param_1 & 0x1f" (binary_expression "iVar5 - param_1" identifier - identifier) & number_literal) ))) ))) | (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" * (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" ( (binary_expression "PTR_DAT_000374c4 + -0x539c" identifier + number_literal) )))))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (do_statement do (compound_statement { (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) )))) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }) (else_clause else (compound_statement { (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) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) while (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) >> (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) & LIT) ))) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (return_statement return ;) })))
(function_definition "void FUN_0001c410(uint param_1)\n\n{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0001c410(uint param_1)" (identifier "FUN_0001c410") (parameter_list "(uint param_1)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  uint uVar6;\n  \n  *(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);\n  puVar4 = PTR_DAT_000374c4;\n  puVar3 = PTR_inptr_00037400;\n  puVar2 = PTR_insize_000373fc;\n  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);\n  if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }\n  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);\n  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;\n  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);\n  return;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined *puVar4;" (type_identifier "undefined") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (expression_statement "*(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);" (assignment_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) =\n       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" (* "*") (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" (( "(") (binary_expression "PTR_DAT_000374c4 + -0x539c" (identifier "PTR_DAT_000374c4") (+ "+") (number_literal "-0x539c")) () ")")))) (= "=") (binary_expression "*(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f)" (pointer_expression "*(short *)(PTR_DAT_000374c4 + -0x539c)" (* "*") (cast_expression "(short *)(PTR_DAT_000374c4 + -0x539c)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" (( "(") (binary_expression "PTR_DAT_000374c4 + -0x539c" (identifier "PTR_DAT_000374c4") (+ "+") (number_literal "-0x539c")) () ")")))) (<< "<<") (parenthesized_expression "(param_1 & 0x1f)" (( "(") (binary_expression "param_1 & 0x1f" (identifier "param_1") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "puVar4 = PTR_DAT_000374c4;" (assignment_expression "puVar4 = PTR_DAT_000374c4" (identifier "puVar4") (= "=") (identifier "PTR_DAT_000374c4")) (; ";")) (expression_statement "puVar3 = PTR_inptr_00037400;" (assignment_expression "puVar3 = PTR_inptr_00037400" (identifier "puVar3") (= "=") (identifier "PTR_inptr_00037400")) (; ";")) (expression_statement "puVar2 = PTR_insize_000373fc;" (assignment_expression "puVar2 = PTR_insize_000373fc" (identifier "puVar2") (= "=") (identifier "PTR_insize_000373fc")) (; ";")) (expression_statement "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);" (assignment_expression "iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(PTR_DAT_000374c4 + -0x53a4)" (* "*") (cast_expression "(int *)(PTR_DAT_000374c4 + -0x53a4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" (( "(") (binary_expression "PTR_DAT_000374c4 + -0x53a4" (identifier "PTR_DAT_000374c4") (+ "+") (number_literal "-0x53a4")) () ")"))))) (; ";")) (if_statement "if (iVar5 < (int)param_1) {\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }" (if "if") (parenthesized_expression "(iVar5 < (int)param_1)" (( "(") (binary_expression "iVar5 < (int)param_1" (identifier "iVar5") (< "<") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) () ")")) (compound_statement "{\n    do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);\n    iVar5 = 8;\n  }" ({ "{") (do_statement "do {\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    } while (8 < (int)param_1);" (do "do") (compound_statement "{\n      param_1 = param_1 - iVar5;\n      *(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);\n      uVar6 = *(uint *)puVar3;\n      if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }\n      *(undefined4 *)(puVar4 + -0x53a4) = 8;\n      iVar5 = 8;\n    }" ({ "{") (expression_statement "param_1 = param_1 - iVar5;" (assignment_expression "param_1 = param_1 - iVar5" (identifier "param_1") (= "=") (binary_expression "param_1 - iVar5" (identifier "param_1") (- "-") (identifier "iVar5"))) (; ";")) (expression_statement "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);" (assignment_expression "*(ushort *)(puVar4 + -0x539c) =\n           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c)" (pointer_expression "*(ushort *)(puVar4 + -0x539c)" (* "*") (cast_expression "(ushort *)(puVar4 + -0x539c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -0x539c)" (( "(") (binary_expression "puVar4 + -0x539c" (identifier "puVar4") (+ "+") (number_literal "-0x539c")) () ")")))) (= "=") (binary_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c)" (call_expression "(ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f))" (( "(") (binary_expression "*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)" (pointer_expression "*(int *)(puVar4 + -0x53a0)" (* "*") (cast_expression "(int *)(puVar4 + -0x53a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -0x53a0)" (( "(") (binary_expression "puVar4 + -0x53a0" (identifier "puVar4") (+ "+") (number_literal "-0x53a0")) () ")")))) (<< "<<") (parenthesized_expression "(param_1 & 0x1f)" (( "(") (binary_expression "param_1 & 0x1f" (identifier "param_1") (& "&") (number_literal "0x1f")) () ")"))) () ")"))) (| "|") (pointer_expression "*(ushort *)(puVar4 + -0x539c)" (* "*") (cast_expression "(ushort *)(puVar4 + -0x539c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -0x539c)" (( "(") (binary_expression "puVar4 + -0x539c" (identifier "puVar4") (+ "+") (number_literal "-0x539c")) () ")")))))) (; ";")) (expression_statement "uVar6 = *(uint *)puVar3;" (assignment_expression "uVar6 = *(uint *)puVar3" (identifier "uVar6") (= "=") (pointer_expression "*(uint *)puVar3" (* "*") (cast_expression "(uint *)puVar3" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar3")))) (; ";")) (if_statement "if (uVar6 < *(uint *)puVar2) {\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }\n      else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" (if "if") (parenthesized_expression "(uVar6 < *(uint *)puVar2)" (( "(") (binary_expression "uVar6 < *(uint *)puVar2" (identifier "uVar6") (< "<") (pointer_expression "*(uint *)puVar2" (* "*") (cast_expression "(uint *)puVar2" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar2")))) () ")")) (compound_statement "{\n        *(uint *)puVar3 = uVar6 + 1;\n        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];\n      }" ({ "{") (expression_statement "*(uint *)puVar3 = uVar6 + 1;" (assignment_expression "*(uint *)puVar3 = uVar6 + 1" (pointer_expression "*(uint *)puVar3" (* "*") (cast_expression "(uint *)puVar3" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar3"))) (= "=") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];" (assignment_expression "*(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6]" (pointer_expression "*(uint *)(puVar4 + -0x53a0)" (* "*") (cast_expression "(uint *)(puVar4 + -0x53a0)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -0x53a0)" (( "(") (binary_expression "puVar4 + -0x53a0" (identifier "puVar4") (+ "+") (number_literal "-0x53a0")) () ")")))) (= "=") (cast_expression "(uint)(byte)PTR_inbuf_00037418[uVar6]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (cast_expression "(byte)PTR_inbuf_00037418[uVar6]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "PTR_inbuf_00037418[uVar6]" (identifier "PTR_inbuf_00037418") ([ "[") (identifier "uVar6") (] "]"))))) (; ";")) (} "}")) (else_clause "else {\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" (else "else") (compound_statement "{\n        iVar5 = fill_inbuf(1);\n        if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }\n      }" ({ "{") (expression_statement "iVar5 = fill_inbuf(1);" (assignment_expression "iVar5 = fill_inbuf(1)" (identifier "iVar5") (= "=") (call_expression "fill_inbuf(1)" (identifier "fill_inbuf") (argument_list "(1)" (( "(") (number_literal "1") () ")")))) (; ";")) (if_statement "if (iVar5 == -1) {\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }\n        else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" (if "if") (parenthesized_expression "(iVar5 == -1)" (( "(") (binary_expression "iVar5 == -1" (identifier "iVar5") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n          *(undefined4 *)(puVar4 + -0x53a0) = 0;\n        }" ({ "{") (expression_statement "*(undefined4 *)(puVar4 + -0x53a0) = 0;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a0) = 0" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a0)" (* "*") (cast_expression "(undefined4 *)(puVar4 + -0x53a0)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -0x53a0)" (( "(") (binary_expression "puVar4 + -0x53a0" (identifier "puVar4") (+ "+") (number_literal "-0x53a0")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" (else "else") (compound_statement "{\n          *(int *)(puVar4 + -0x53a0) = iVar5;\n        }" ({ "{") (expression_statement "*(int *)(puVar4 + -0x53a0) = iVar5;" (assignment_expression "*(int *)(puVar4 + -0x53a0) = iVar5" (pointer_expression "*(int *)(puVar4 + -0x53a0)" (* "*") (cast_expression "(int *)(puVar4 + -0x53a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -0x53a0)" (( "(") (binary_expression "puVar4 + -0x53a0" (identifier "puVar4") (+ "+") (number_literal "-0x53a0")) () ")")))) (= "=") (identifier "iVar5")) (; ";")) (} "}")))) (} "}")))) (expression_statement "*(undefined4 *)(puVar4 + -0x53a4) = 8;" (assignment_expression "*(undefined4 *)(puVar4 + -0x53a4) = 8" (pointer_expression "*(undefined4 *)(puVar4 + -0x53a4)" (* "*") (cast_expression "(undefined4 *)(puVar4 + -0x53a4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + -0x53a4)" (( "(") (binary_expression "puVar4 + -0x53a4" (identifier "puVar4") (+ "+") (number_literal "-0x53a4")) () ")")))) (= "=") (number_literal "8")) (; ";")) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" (identifier "iVar5") (= "=") (number_literal "8")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(8 < (int)param_1)" (( "(") (binary_expression "8 < (int)param_1" (number_literal "8") (< "<") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) () ")")) (; ";")) (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" (identifier "iVar5") (= "=") (number_literal "8")) (; ";")) (} "}"))) (expression_statement "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);" (assignment_expression "puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0)" (identifier "puVar1") (= "=") (cast_expression "(uint *)(PTR_DAT_000374c4 + -0x53a0)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a0)" (( "(") (binary_expression "PTR_DAT_000374c4 + -0x53a0" (identifier "PTR_DAT_000374c4") (+ "+") (number_literal "-0x53a0")) () ")")))) (; ";")) (expression_statement "*(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;" (assignment_expression "*(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1" (pointer_expression "*(uint *)(PTR_DAT_000374c4 + -0x53a4)" (* "*") (cast_expression "(uint *)(PTR_DAT_000374c4 + -0x53a4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000374c4 + -0x53a4)" (( "(") (binary_expression "PTR_DAT_000374c4 + -0x53a4" (identifier "PTR_DAT_000374c4") (+ "+") (number_literal "-0x53a4")) () ")")))) (= "=") (binary_expression "iVar5 - param_1" (identifier "iVar5") (- "-") (identifier "param_1"))) (; ";")) (expression_statement "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);" (assignment_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c) =\n       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" (* "*") (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" (( "(") (binary_expression "PTR_DAT_000374c4 + -0x539c" (identifier "PTR_DAT_000374c4") (+ "+") (number_literal "-0x539c")) () ")")))) (= "=") (binary_expression "(ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c)" (call_expression "(ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(*puVar1 >> (iVar5 - param_1 & 0x1f))" (( "(") (binary_expression "*puVar1 >> (iVar5 - param_1 & 0x1f)" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (>> ">>") (parenthesized_expression "(iVar5 - param_1 & 0x1f)" (( "(") (binary_expression "iVar5 - param_1 & 0x1f" (binary_expression "iVar5 - param_1" (identifier "iVar5") (- "-") (identifier "param_1")) (& "&") (number_literal "0x1f")) () ")"))) () ")"))) (| "|") (pointer_expression "*(ushort *)(PTR_DAT_000374c4 + -0x539c)" (* "*") (cast_expression "(ushort *)(PTR_DAT_000374c4 + -0x539c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_000374c4 + -0x539c)" (( "(") (binary_expression "PTR_DAT_000374c4 + -0x539c" (identifier "PTR_DAT_000374c4") (+ "+") (number_literal "-0x539c")) () ")")))))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (do_statement body: (compound_statement (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: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (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)))))))) (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: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (binary_expression left: (identifier) right: (number_literal)))) (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: (cast_expression type: (type_descriptor type: (type_identifier)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (identifier))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (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: (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: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (pointer_expression argument: (identifier)) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))))) right: (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)))))))) (return_statement))))

void MASKED(uint param_1)

{
  uint *puVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  int iVar5;
  uint uVar6;
  
  *(short *)(PTR_DAT_000374c4 + -0x539c) =
       *(short *)(PTR_DAT_000374c4 + -0x539c) << (param_1 & 0x1f);
  puVar4 = PTR_DAT_000374c4;
  puVar3 = PTR_inptr_00037400;
  puVar2 = PTR_insize_000373fc;
  iVar5 = *(int *)(PTR_DAT_000374c4 + -0x53a4);
  if (iVar5 < (int)param_1) {
    do {
      param_1 = param_1 - iVar5;
      *(ushort *)(puVar4 + -0x539c) =
           (ushort)(*(int *)(puVar4 + -0x53a0) << (param_1 & 0x1f)) | *(ushort *)(puVar4 + -0x539c);
      uVar6 = *(uint *)puVar3;
      if (uVar6 < *(uint *)puVar2) {
        *(uint *)puVar3 = uVar6 + 1;
        *(uint *)(puVar4 + -0x53a0) = (uint)(byte)PTR_inbuf_00037418[uVar6];
      }
      else {
        iVar5 = fill_inbuf(1);
        if (iVar5 == -1) {
          *(undefined4 *)(puVar4 + -0x53a0) = 0;
        }
        else {
          *(int *)(puVar4 + -0x53a0) = iVar5;
        }
      }
      *(undefined4 *)(puVar4 + -0x53a4) = 8;
      iVar5 = 8;
    } while (8 < (int)param_1);
    iVar5 = 8;
  }
  puVar1 = (uint *)(PTR_DAT_000374c4 + -0x53a0);
  *(uint *)(PTR_DAT_000374c4 + -0x53a4) = iVar5 - param_1;
  *(ushort *)(PTR_DAT_000374c4 + -0x539c) =
       (ushort)(*puVar1 >> (iVar5 - param_1 & 0x1f)) | *(ushort *)(PTR_DAT_000374c4 + -0x539c);
  return;
}

