
void png_write_info_before_PLTE(png_structrp png_ptr,png_const_inforp info_ptr)

{
  byte bVar1;
  ushort uVar2;
  uint uVar3;
  png_const_bytep profile;
  
  if (((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)) ||
     ((png_ptr->mode & 0x400) != 0)) {
    return;
  }
  (*(code *)PTR_png_write_sig_000564e8)();
  if (((png_ptr->mode & 0x1000) != 0) && (png_ptr->mng_features_permitted != 0)) {
    (*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0);
    png_ptr->mng_features_permitted = 0;
  }
  png_write_IHDR(png_ptr,info_ptr->width,info_ptr->height,(uint)info_ptr->bit_depth,
                 (uint)info_ptr->color_type,(uint)info_ptr->compression_type,
                 (uint)info_ptr->filter_type,(uint)info_ptr->interlace_type);
  if ((int)(info_ptr->valid << 0xe) < 0) {
    png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays);
    uVar2 = (info_ptr->colorspace).flags;
  }
  else {
    uVar2 = (info_ptr->colorspace).flags;
  }
  if (((short)uVar2 < 0) ||
     ((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&
      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),
      (short)(info_ptr->colorspace).flags < 0)))) {
    if ((info_ptr->valid & 2) == 0) goto LAB_00038888;
    bVar1 = info_ptr->color_type;
LAB_00038840:
    png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);
LAB_00038858:
    uVar2 = (info_ptr->colorspace).flags;
    if ((short)uVar2 < 0) goto LAB_00038888;
  }
  else {
    uVar3 = info_ptr->valid;
    if ((uVar3 & 0x1000) != 0) {
      if ((uVar3 & 0x800) == 0) {
        profile = info_ptr->iccp_profile;
      }
      else {
        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);
        profile = info_ptr->iccp_profile;
      }
      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);
      uVar3 = info_ptr->valid;
LAB_00038830:
      if ((uVar3 & 2) != 0) {
LAB_0003883c:
        bVar1 = info_ptr->color_type;
        goto LAB_00038840;
      }
      goto LAB_00038858;
    }
    if ((uVar3 & 0x800) != 0) {
      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);
      uVar3 = info_ptr->valid;
      goto LAB_00038830;
    }
    if ((uVar3 & 2) != 0) goto LAB_0003883c;
    uVar2 = (info_ptr->colorspace).flags;
  }
  if (((uVar2 & 0x10) != 0) && ((info_ptr->valid & 4) != 0)) {
    png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy);
  }
LAB_00038888:
  write_unknown_chunks(png_ptr,info_ptr,1);
  png_ptr->mode = png_ptr->mode | 0x400;
  return;
}



void png_write_info_before_PLTE(int param_1,undefined4 *param_2)

{
  undefined1 uVar1;
  ushort uVar2;
  uint uVar3;
  undefined4 uVar4;
  
  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||
     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {
    return;
  }
  (*(code *)PTR_png_write_sig_000564e8)();
  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {
    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);
    *(undefined4 *)(param_1 + 0x300) = 0;
  }
  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),
               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),
               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));
  if ((int)(param_2[2] << 0xe) < 0) {
    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);
    uVar2 = *(ushort *)((int)param_2 + 0x72);
  }
  else {
    uVar2 = *(ushort *)((int)param_2 + 0x72);
  }
  if (((short)uVar2 < 0) ||
     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&
      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {
    if ((param_2[2] & 2) == 0) goto LAB_00038888;
    uVar1 = *(undefined1 *)((int)param_2 + 0x19);
LAB_00038840:
    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);
LAB_00038858:
    uVar2 = *(ushort *)((int)param_2 + 0x72);
    if ((short)uVar2 < 0) goto LAB_00038888;
  }
  else {
    uVar3 = param_2[2];
    if ((uVar3 & 0x1000) != 0) {
      if ((uVar3 & 0x800) == 0) {
        uVar4 = param_2[0x1e];
      }
      else {
        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);
        uVar4 = param_2[0x1e];
      }
      FUN_0003d404(param_1,param_2[0x1d],uVar4);
      uVar3 = param_2[2];
LAB_00038830:
      if ((uVar3 & 2) != 0) {
LAB_0003883c:
        uVar1 = *(undefined1 *)((int)param_2 + 0x19);
        goto LAB_00038840;
      }
      goto LAB_00038858;
    }
    if ((uVar3 & 0x800) != 0) {
      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));
      uVar3 = param_2[2];
      goto LAB_00038830;
    }
    if ((uVar3 & 2) != 0) goto LAB_0003883c;
    uVar2 = *(ushort *)((int)param_2 + 0x72);
  }
  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {
    FUN_0003da30(param_1,param_2 + 0xb,1);
  }
LAB_00038888:
  FUN_00037edc(param_1,param_2,1);
  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;
  return;
}


lui gp,0x2
addiu gp,gp,0x58f0
addu gp,gp,t9
beq a0,zero,0x0003872c
_nop
beq a1,zero,0x0003872c
_nop
lw v0,0x124(a0)
andi v0,v0,0x400
beq v0,zero,0x00038734
_nop
jr ra
_nop
addiu sp,sp,-0x38
sw ra,0x34(sp)
sw s1,0x30(sp)
sw s0,0x2c(sp)
sw gp,0x20(sp)
or s0,a1,zero
or s1,a0,zero
lw t9,-0x7b08(gp)
jalr t9
_nop
lw gp,0x20(sp)
lw v0,0x124(s1)
andi v0,v0,0x1000
beq v0,zero,0x0003877c
_nop
lw v0,0x300(s1)
bne v0,zero,0x000388c4
_lw a1,-0x7fd4(gp)
lbu v0,0x1c(s0)
sw v0,0x1c(sp)
lbu v0,0x1b(s0)
sw v0,0x18(sp)
lbu v0,0x1a(s0)
sw v0,0x14(sp)
lbu v0,0x19(s0)
sw v0,0x10(sp)
lbu a3,0x18(s0)
lw a2,0x4(s0)
lw a1,0x0(s0)
or a0,s1,zero
lw t9,-0x7dbc(gp)
bal 0x0003cc8c
_nop
lw gp,0x20(sp)
lw v0,0x8(s0)
ext v0,v0,0x11,0x1
bne v0,zero,0x000388e4
_or a0,s1,zero
lhu v0,0x72(s0)
seh v1,v0
bltz v1,0x00038924
_andi v0,v0,0x8
beq v0,zero,0x000387f4
_nop
lw v0,0x8(s0)
andi v0,v0,0x1
bne v0,zero,0x00038904
_or a0,s1,zero
lw v0,0x8(s0)
andi v1,v0,0x1000
beq v1,zero,0x0003895c
_andi v1,v0,0x800
andi v0,v0,0x800
bne v0,zero,0x0003893c
_lw a1,-0x7fd4(gp)
lw a2,0x78(s0)
lw a1,0x74(s0)
or a0,s1,zero
lw t9,-0x7db8(gp)
bal 0x0003d404
_nop
lw gp,0x20(sp)
lw v0,0x8(s0)
andi v0,v0,0x2
beq v0,zero,0x00038858
_nop
lbu a2,0x19(s0)
addiu a1,s0,0x94
or a0,s1,zero
lw t9,-0x7db4(gp)
bal 0x0003d8a8
_nop
lw gp,0x20(sp)
lhu v0,0x72(s0)
seh v1,v0
bltz v1,0x00038888
_li a2,0x1
andi v0,v0,0x10
beq v0,zero,0x00038888
_li a2,0x1
lw v0,0x8(s0)
andi v0,v0,0x4
bne v0,zero,0x00038994
_addiu a1,s0,0x2c
li a2,0x1
or a1,s0,zero
or a0,s1,zero
lw t9,-0x7e0c(gp)
addiu t9,t9,0x7edc
bal 0x00037edc
_nop
lw gp,0x20(sp)
lw v0,0x124(s1)
ori v0,v0,0x400
sw v0,0x124(s1)
lw ra,0x34(sp)
lw s1,0x30(sp)
lw s0,0x2c(sp)
jr ra
_addiu sp,sp,0x38
addiu a1,a1,0x14c0
or a0,s1,zero
lw t9,-0x7bac(gp)
jalr t9
_nop
lw gp,0x20(sp)
b 0x0003877c
_sw zero,0x300(s1)
lw a2,0x11c(s0)
lw a1,0x118(s0)
lw t9,-0x7db0(gp)
bal 0x0003f1ac
_nop
lw gp,0x20(sp)
b 0x000387d0
_lhu v0,0x72(s0)
lw a1,0x28(s0)
lw t9,-0x7dac(gp)
bal 0x0003d2a8
_nop
lw gp,0x20(sp)
lh v0,0x72(s0)
bgez v0,0x000387f4
_nop
lw v0,0x8(s0)
andi v0,v0,0x2
beq v0,zero,0x00038884
_nop
b 0x00038840
_lbu a2,0x19(s0)
addiu a1,a1,0x4cb4
or a0,s1,zero
lw t9,-0x7f70(gp)
bal 0x0001a6f4
_nop
lw gp,0x20(sp)
b 0x00038814
_lw a2,0x78(s0)
bne v1,zero,0x00038978
_or a0,s1,zero
andi v0,v0,0x2
bne v0,zero,0x0003883c
_nop
b 0x00038868
_lhu v0,0x72(s0)
lhu a1,0x70(s0)
lw t9,-0x7da8(gp)
bal 0x0003d34c
_nop
lw gp,0x20(sp)
b 0x00038830
_lw v0,0x8(s0)
or a0,s1,zero
lw t9,-0x7da4(gp)
bal 0x0003da30
_nop
lw gp,0x20(sp)
b 0x00038888
_li a2,0x1
(translation_unit "void png_write_info_before_PLTE(int param_1,undefined4 *param_2)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}\n\n" (function_definition "void png_write_info_before_PLTE(int param_1,undefined4 *param_2)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}" primitive_type (function_declarator "png_write_info_before_PLTE(int param_1,undefined4 *param_2)" identifier (parameter_list "(int param_1,undefined4 *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (if_statement "if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }" if (parenthesized_expression "(((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0))" ( (binary_expression "((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)" (parenthesized_expression "((param_1 == 0) || (param_2 == (undefined4 *)0x0))" ( (binary_expression "(param_1 == 0) || (param_2 == (undefined4 *)0x0)" (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) || (parenthesized_expression "(param_2 == (undefined4 *)0x0)" ( (binary_expression "param_2 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) || (parenthesized_expression "((*(uint *)(param_1 + 0x124) & 0x400) != 0)" ( (binary_expression "(*(uint *)(param_1 + 0x124) & 0x400) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x124) & 0x400)" ( (binary_expression "*(uint *)(param_1 + 0x124) & 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "(*(code *)PTR_png_write_sig_000564e8)();" (call_expression "(*(code *)PTR_png_write_sig_000564e8)()" (parenthesized_expression "(*(code *)PTR_png_write_sig_000564e8)" ( (pointer_expression "*(code *)PTR_png_write_sig_000564e8" * (cast_expression "(code *)PTR_png_write_sig_000564e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }" if (parenthesized_expression "(((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0))" ( (binary_expression "((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)" (parenthesized_expression "((*(uint *)(param_1 + 0x124) & 0x1000) != 0)" ( (binary_expression "(*(uint *)(param_1 + 0x124) & 0x1000) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x124) & 0x1000)" ( (binary_expression "*(uint *)(param_1 + 0x124) & 0x1000" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0x300) != 0)" ( (binary_expression "*(int *)(param_1 + 0x300) != 0" (pointer_expression "*(int *)(param_1 + 0x300)" * (cast_expression "(int *)(param_1 + 0x300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x300)" ( (binary_expression "param_1 + 0x300" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }" { (expression_statement "(*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);" (call_expression "(*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0)" (parenthesized_expression "(*(code *)PTR_png_warning_00056444)" ( (pointer_expression "*(code *)PTR_png_warning_00056444" * (cast_expression "(code *)PTR_png_warning_00056444" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1,PTR_LAB_0005601c + 0x14c0)" ( identifier , (binary_expression "PTR_LAB_0005601c + 0x14c0" identifier + number_literal) ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x300) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x300) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x300)" * (cast_expression "(undefined4 *)(param_1 + 0x300)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x300)" ( (binary_expression "param_1 + 0x300" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));" (call_expression "FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7))" identifier (argument_list "(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7))" ( identifier , (pointer_expression "*param_2" * identifier) , (subscript_expression "param_2[1]" identifier [ number_literal ]) , (pointer_expression "*(undefined1 *)(param_2 + 6)" * (cast_expression "(undefined1 *)(param_2 + 6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 6)" ( (binary_expression "param_2 + 6" identifier + number_literal) )))) , (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" * (cast_expression "(undefined1 *)((int)param_2 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x19)" ( (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)((int)param_2 + 0x1a)" * (cast_expression "(undefined1 *)((int)param_2 + 0x1a)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x1a)" ( (binary_expression "(int)param_2 + 0x1a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)((int)param_2 + 0x1b)" * (cast_expression "(undefined1 *)((int)param_2 + 0x1b)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x1b)" ( (binary_expression "(int)param_2 + 0x1b" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)(param_2 + 7)" * (cast_expression "(undefined1 *)(param_2 + 7)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) ))) ;) (if_statement "if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" if (parenthesized_expression "((int)(param_2[2] << 0xe) < 0)" ( (binary_expression "(int)(param_2[2] << 0xe) < 0" (cast_expression "(int)(param_2[2] << 0xe)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_2[2] << 0xe)" ( (binary_expression "param_2[2] << 0xe" (subscript_expression "param_2[2]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" { (expression_statement "FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);" (call_expression "FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47])" identifier (argument_list "(param_1,param_2[0x46],param_2[0x47])" ( identifier , (subscript_expression "param_2[0x46]" identifier [ number_literal ]) , (subscript_expression "param_2[0x47]" identifier [ number_literal ]) ))) ;) (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" else (compound_statement "{\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" { (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }))) (if_statement "if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" if (parenthesized_expression "(((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0))))" ( (binary_expression "((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))" (parenthesized_expression "((short)uVar2 < 0)" ( (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) || (parenthesized_expression "((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))" ( (parenthesized_expression "(((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0))" ( (binary_expression "((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)" (parenthesized_expression "((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0))" ( (binary_expression "(uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)" (binary_expression "(uVar2 & 8) != 0" (parenthesized_expression "(uVar2 & 8)" ( (binary_expression "uVar2 & 8" identifier & number_literal) )) != number_literal) && (parenthesized_expression "((param_2[2] & 1) != 0)" ( (binary_expression "(param_2[2] & 1) != 0" (parenthesized_expression "(param_2[2] & 1)" ( (binary_expression "param_2[2] & 1" (subscript_expression "param_2[2]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)" ( (comma_expression "FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0" (call_expression "FUN_0003d2a8(param_1,param_2[10])" identifier (argument_list "(param_1,param_2[10])" ( identifier , (subscript_expression "param_2[10]" identifier [ number_literal ]) ))) , (binary_expression "*(short *)((int)param_2 + 0x72) < 0" (pointer_expression "*(short *)((int)param_2 + 0x72)" * (cast_expression "(short *)((int)param_2 + 0x72)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) < number_literal)) ))) )) ))) )) (compound_statement "{\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }" { (if_statement "if ((param_2[2] & 2) == 0) goto LAB_00038888;" if (parenthesized_expression "((param_2[2] & 2) == 0)" ( (binary_expression "(param_2[2] & 2) == 0" (parenthesized_expression "(param_2[2] & 2)" ( (binary_expression "param_2[2] & 2" (subscript_expression "param_2[2]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00038888;" goto statement_identifier ;)) (expression_statement "uVar1 = *(undefined1 *)((int)param_2 + 0x19);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_2 + 0x19)" identifier = (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" * (cast_expression "(undefined1 *)((int)param_2 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x19)" ( (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (labeled_statement "LAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);" statement_identifier : (expression_statement "FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);" (call_expression "FUN_0003d8a8(param_1,param_2 + 0x25,uVar1)" identifier (argument_list "(param_1,param_2 + 0x25,uVar1)" ( identifier , (binary_expression "param_2 + 0x25" identifier + number_literal) , identifier ))) ;)) (labeled_statement "LAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);" statement_identifier : (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;)) (if_statement "if ((short)uVar2 < 0) goto LAB_00038888;" if (parenthesized_expression "((short)uVar2 < 0)" ( (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) (goto_statement "goto LAB_00038888;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" else (compound_statement "{\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" { (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (if_statement "if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" if (parenthesized_expression "((uVar3 & 0x1000) != 0)" ( (binary_expression "(uVar3 & 0x1000) != 0" (parenthesized_expression "(uVar3 & 0x1000)" ( (binary_expression "uVar3 & 0x1000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" { (if_statement "if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" if (parenthesized_expression "((uVar3 & 0x800) == 0)" ( (binary_expression "(uVar3 & 0x800) == 0" (parenthesized_expression "(uVar3 & 0x800)" ( (binary_expression "uVar3 & 0x800" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar4 = param_2[0x1e];\n      }" { (expression_statement "uVar4 = param_2[0x1e];" (assignment_expression "uVar4 = param_2[0x1e]" identifier = (subscript_expression "param_2[0x1e]" identifier [ number_literal ])) ;) }) (else_clause "else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" else (compound_statement "{\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" { (expression_statement "FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);" (call_expression "FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4)" identifier (argument_list "(param_1,PTR_LAB_0005601c + 0x4cb4)" ( identifier , (binary_expression "PTR_LAB_0005601c + 0x4cb4" identifier + number_literal) ))) ;) (expression_statement "uVar4 = param_2[0x1e];" (assignment_expression "uVar4 = param_2[0x1e]" identifier = (subscript_expression "param_2[0x1e]" identifier [ number_literal ])) ;) }))) (expression_statement "FUN_0003d404(param_1,param_2[0x1d],uVar4);" (call_expression "FUN_0003d404(param_1,param_2[0x1d],uVar4)" identifier (argument_list "(param_1,param_2[0x1d],uVar4)" ( identifier , (subscript_expression "param_2[0x1d]" identifier [ number_literal ]) , identifier ))) ;) (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (labeled_statement "LAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" statement_identifier : (if_statement "if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" if (parenthesized_expression "((uVar3 & 2) != 0)" ( (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" { (labeled_statement "LAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);" statement_identifier : (expression_statement "uVar1 = *(undefined1 *)((int)param_2 + 0x19);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_2 + 0x19)" identifier = (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" * (cast_expression "(undefined1 *)((int)param_2 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x19)" ( (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;)) (goto_statement "goto LAB_00038840;" goto statement_identifier ;) }))) (goto_statement "goto LAB_00038858;" goto statement_identifier ;) })) (if_statement "if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }" if (parenthesized_expression "((uVar3 & 0x800) != 0)" ( (binary_expression "(uVar3 & 0x800) != 0" (parenthesized_expression "(uVar3 & 0x800)" ( (binary_expression "uVar3 & 0x800" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }" { (expression_statement "FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));" (call_expression "FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c))" identifier (argument_list "(param_1,*(undefined2 *)(param_2 + 0x1c))" ( identifier , (pointer_expression "*(undefined2 *)(param_2 + 0x1c)" * (cast_expression "(undefined2 *)(param_2 + 0x1c)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) )))) ))) ;) (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_00038830;" goto statement_identifier ;) })) (if_statement "if ((uVar3 & 2) != 0) goto LAB_0003883c;" if (parenthesized_expression "((uVar3 & 2) != 0)" ( (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0003883c;" goto statement_identifier ;)) (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }))) (if_statement "if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }" if (parenthesized_expression "(((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0))" ( (binary_expression "((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)" (parenthesized_expression "((uVar2 & 0x10) != 0)" ( (binary_expression "(uVar2 & 0x10) != 0" (parenthesized_expression "(uVar2 & 0x10)" ( (binary_expression "uVar2 & 0x10" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "((param_2[2] & 4) != 0)" ( (binary_expression "(param_2[2] & 4) != 0" (parenthesized_expression "(param_2[2] & 4)" ( (binary_expression "param_2[2] & 4" (subscript_expression "param_2[2]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }" { (expression_statement "FUN_0003da30(param_1,param_2 + 0xb,1);" (call_expression "FUN_0003da30(param_1,param_2 + 0xb,1)" identifier (argument_list "(param_1,param_2 + 0xb,1)" ( identifier , (binary_expression "param_2 + 0xb" identifier + number_literal) , number_literal ))) ;) })) (labeled_statement "LAB_00038888:\n  FUN_00037edc(param_1,param_2,1);" statement_identifier : (expression_statement "FUN_00037edc(param_1,param_2,1);" (call_expression "FUN_00037edc(param_1,param_2,1)" identifier (argument_list "(param_1,param_2,1)" ( identifier , identifier , number_literal ))) ;)) (expression_statement "*(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;" (assignment_expression "*(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_1 + 0x124) | 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) | number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit "void png_write_info_before_PLTE(png_structrp png_ptr,png_const_inforp info_ptr)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  png_const_bytep profile;\n  \n  if (((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)) ||\n     ((png_ptr->mode & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((png_ptr->mode & 0x1000) != 0) && (png_ptr->mng_features_permitted != 0)) {\n    (*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0);\n    png_ptr->mng_features_permitted = 0;\n  }\n  png_write_IHDR(png_ptr,info_ptr->width,info_ptr->height,(uint)info_ptr->bit_depth,\n                 (uint)info_ptr->color_type,(uint)info_ptr->compression_type,\n                 (uint)info_ptr->filter_type,(uint)info_ptr->interlace_type);\n  if ((int)(info_ptr->valid << 0xe) < 0) {\n    png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays);\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  else {\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)))) {\n    if ((info_ptr->valid & 2) == 0) goto LAB_00038888;\n    bVar1 = info_ptr->color_type;\nLAB_00038840:\n    png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);\nLAB_00038858:\n    uVar2 = (info_ptr->colorspace).flags;\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = info_ptr->valid;\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  if (((uVar2 & 0x10) != 0) && ((info_ptr->valid & 4) != 0)) {\n    png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy);\n  }\nLAB_00038888:\n  write_unknown_chunks(png_ptr,info_ptr,1);\n  png_ptr->mode = png_ptr->mode | 0x400;\n  return;\n}\n\n" (function_definition "void png_write_info_before_PLTE(png_structrp png_ptr,png_const_inforp info_ptr)\n\n{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  png_const_bytep profile;\n  \n  if (((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)) ||\n     ((png_ptr->mode & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((png_ptr->mode & 0x1000) != 0) && (png_ptr->mng_features_permitted != 0)) {\n    (*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0);\n    png_ptr->mng_features_permitted = 0;\n  }\n  png_write_IHDR(png_ptr,info_ptr->width,info_ptr->height,(uint)info_ptr->bit_depth,\n                 (uint)info_ptr->color_type,(uint)info_ptr->compression_type,\n                 (uint)info_ptr->filter_type,(uint)info_ptr->interlace_type);\n  if ((int)(info_ptr->valid << 0xe) < 0) {\n    png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays);\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  else {\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)))) {\n    if ((info_ptr->valid & 2) == 0) goto LAB_00038888;\n    bVar1 = info_ptr->color_type;\nLAB_00038840:\n    png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);\nLAB_00038858:\n    uVar2 = (info_ptr->colorspace).flags;\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = info_ptr->valid;\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  if (((uVar2 & 0x10) != 0) && ((info_ptr->valid & 4) != 0)) {\n    png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy);\n  }\nLAB_00038888:\n  write_unknown_chunks(png_ptr,info_ptr,1);\n  png_ptr->mode = png_ptr->mode | 0x400;\n  return;\n}" primitive_type (function_declarator "png_write_info_before_PLTE(png_structrp png_ptr,png_const_inforp info_ptr)" identifier (parameter_list "(png_structrp png_ptr,png_const_inforp info_ptr)" ( (parameter_declaration "png_structrp png_ptr" type_identifier identifier) , (parameter_declaration "png_const_inforp info_ptr" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  ushort uVar2;\n  uint uVar3;\n  png_const_bytep profile;\n  \n  if (((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)) ||\n     ((png_ptr->mode & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((png_ptr->mode & 0x1000) != 0) && (png_ptr->mng_features_permitted != 0)) {\n    (*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0);\n    png_ptr->mng_features_permitted = 0;\n  }\n  png_write_IHDR(png_ptr,info_ptr->width,info_ptr->height,(uint)info_ptr->bit_depth,\n                 (uint)info_ptr->color_type,(uint)info_ptr->compression_type,\n                 (uint)info_ptr->filter_type,(uint)info_ptr->interlace_type);\n  if ((int)(info_ptr->valid << 0xe) < 0) {\n    png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays);\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  else {\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)))) {\n    if ((info_ptr->valid & 2) == 0) goto LAB_00038888;\n    bVar1 = info_ptr->color_type;\nLAB_00038840:\n    png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);\nLAB_00038858:\n    uVar2 = (info_ptr->colorspace).flags;\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = info_ptr->valid;\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  if (((uVar2 & 0x10) != 0) && ((info_ptr->valid & 4) != 0)) {\n    png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy);\n  }\nLAB_00038888:\n  write_unknown_chunks(png_ptr,info_ptr,1);\n  png_ptr->mode = png_ptr->mode | 0x400;\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "png_const_bytep profile;" type_identifier identifier ;) (if_statement "if (((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)) ||\n     ((png_ptr->mode & 0x400) != 0)) {\n    return;\n  }" if (parenthesized_expression "(((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)) ||\n     ((png_ptr->mode & 0x400) != 0))" ( (binary_expression "((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)) ||\n     ((png_ptr->mode & 0x400) != 0)" (parenthesized_expression "((png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0))" ( (binary_expression "(png_ptr == (png_structrp)0x0) || (info_ptr == (png_const_inforp)0x0)" (parenthesized_expression "(png_ptr == (png_structrp)0x0)" ( (binary_expression "png_ptr == (png_structrp)0x0" identifier == (cast_expression "(png_structrp)0x0" ( (type_descriptor "png_structrp" type_identifier) ) number_literal)) )) || (parenthesized_expression "(info_ptr == (png_const_inforp)0x0)" ( (binary_expression "info_ptr == (png_const_inforp)0x0" identifier == (cast_expression "(png_const_inforp)0x0" ( (type_descriptor "png_const_inforp" type_identifier) ) number_literal)) ))) )) || (parenthesized_expression "((png_ptr->mode & 0x400) != 0)" ( (binary_expression "(png_ptr->mode & 0x400) != 0" (parenthesized_expression "(png_ptr->mode & 0x400)" ( (binary_expression "png_ptr->mode & 0x400" (field_expression "png_ptr->mode" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "(*(code *)PTR_png_write_sig_000564e8)();" (call_expression "(*(code *)PTR_png_write_sig_000564e8)()" (parenthesized_expression "(*(code *)PTR_png_write_sig_000564e8)" ( (pointer_expression "*(code *)PTR_png_write_sig_000564e8" * (cast_expression "(code *)PTR_png_write_sig_000564e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (((png_ptr->mode & 0x1000) != 0) && (png_ptr->mng_features_permitted != 0)) {\n    (*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0);\n    png_ptr->mng_features_permitted = 0;\n  }" if (parenthesized_expression "(((png_ptr->mode & 0x1000) != 0) && (png_ptr->mng_features_permitted != 0))" ( (binary_expression "((png_ptr->mode & 0x1000) != 0) && (png_ptr->mng_features_permitted != 0)" (parenthesized_expression "((png_ptr->mode & 0x1000) != 0)" ( (binary_expression "(png_ptr->mode & 0x1000) != 0" (parenthesized_expression "(png_ptr->mode & 0x1000)" ( (binary_expression "png_ptr->mode & 0x1000" (field_expression "png_ptr->mode" identifier -> field_identifier) & number_literal) )) != number_literal) )) && (parenthesized_expression "(png_ptr->mng_features_permitted != 0)" ( (binary_expression "png_ptr->mng_features_permitted != 0" (field_expression "png_ptr->mng_features_permitted" identifier -> field_identifier) != number_literal) ))) )) (compound_statement "{\n    (*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0);\n    png_ptr->mng_features_permitted = 0;\n  }" { (expression_statement "(*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0);" (call_expression "(*(code *)PTR_png_warning_00056444)(png_ptr,PTR_LAB_0005601c + 0x14c0)" (parenthesized_expression "(*(code *)PTR_png_warning_00056444)" ( (pointer_expression "*(code *)PTR_png_warning_00056444" * (cast_expression "(code *)PTR_png_warning_00056444" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(png_ptr,PTR_LAB_0005601c + 0x14c0)" ( identifier , (binary_expression "PTR_LAB_0005601c + 0x14c0" identifier + number_literal) ))) ;) (expression_statement "png_ptr->mng_features_permitted = 0;" (assignment_expression "png_ptr->mng_features_permitted = 0" (field_expression "png_ptr->mng_features_permitted" identifier -> field_identifier) = number_literal) ;) })) (expression_statement "png_write_IHDR(png_ptr,info_ptr->width,info_ptr->height,(uint)info_ptr->bit_depth,\n                 (uint)info_ptr->color_type,(uint)info_ptr->compression_type,\n                 (uint)info_ptr->filter_type,(uint)info_ptr->interlace_type);" (call_expression "png_write_IHDR(png_ptr,info_ptr->width,info_ptr->height,(uint)info_ptr->bit_depth,\n                 (uint)info_ptr->color_type,(uint)info_ptr->compression_type,\n                 (uint)info_ptr->filter_type,(uint)info_ptr->interlace_type)" identifier (argument_list "(png_ptr,info_ptr->width,info_ptr->height,(uint)info_ptr->bit_depth,\n                 (uint)info_ptr->color_type,(uint)info_ptr->compression_type,\n                 (uint)info_ptr->filter_type,(uint)info_ptr->interlace_type)" ( identifier , (field_expression "info_ptr->width" identifier -> field_identifier) , (field_expression "info_ptr->height" identifier -> field_identifier) , (cast_expression "(uint)info_ptr->bit_depth" ( (type_descriptor "uint" type_identifier) ) (field_expression "info_ptr->bit_depth" identifier -> field_identifier)) , (cast_expression "(uint)info_ptr->color_type" ( (type_descriptor "uint" type_identifier) ) (field_expression "info_ptr->color_type" identifier -> field_identifier)) , (cast_expression "(uint)info_ptr->compression_type" ( (type_descriptor "uint" type_identifier) ) (field_expression "info_ptr->compression_type" identifier -> field_identifier)) , (cast_expression "(uint)info_ptr->filter_type" ( (type_descriptor "uint" type_identifier) ) (field_expression "info_ptr->filter_type" identifier -> field_identifier)) , (cast_expression "(uint)info_ptr->interlace_type" ( (type_descriptor "uint" type_identifier) ) (field_expression "info_ptr->interlace_type" identifier -> field_identifier)) ))) ;) (if_statement "if ((int)(info_ptr->valid << 0xe) < 0) {\n    png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays);\n    uVar2 = (info_ptr->colorspace).flags;\n  }\n  else {\n    uVar2 = (info_ptr->colorspace).flags;\n  }" if (parenthesized_expression "((int)(info_ptr->valid << 0xe) < 0)" ( (binary_expression "(int)(info_ptr->valid << 0xe) < 0" (cast_expression "(int)(info_ptr->valid << 0xe)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(info_ptr->valid << 0xe)" ( (binary_expression "info_ptr->valid << 0xe" (field_expression "info_ptr->valid" identifier -> field_identifier) << number_literal) ))) < number_literal) )) (compound_statement "{\n    png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays);\n    uVar2 = (info_ptr->colorspace).flags;\n  }" { (expression_statement "png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays);" (call_expression "png_write_acTL(png_ptr,info_ptr->num_frames,info_ptr->num_plays)" identifier (argument_list "(png_ptr,info_ptr->num_frames,info_ptr->num_plays)" ( identifier , (field_expression "info_ptr->num_frames" identifier -> field_identifier) , (field_expression "info_ptr->num_plays" identifier -> field_identifier) ))) ;) (expression_statement "uVar2 = (info_ptr->colorspace).flags;" (assignment_expression "uVar2 = (info_ptr->colorspace).flags" identifier = (field_expression "(info_ptr->colorspace).flags" (parenthesized_expression "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) )) . field_identifier)) ;) }) (else_clause "else {\n    uVar2 = (info_ptr->colorspace).flags;\n  }" else (compound_statement "{\n    uVar2 = (info_ptr->colorspace).flags;\n  }" { (expression_statement "uVar2 = (info_ptr->colorspace).flags;" (assignment_expression "uVar2 = (info_ptr->colorspace).flags" identifier = (field_expression "(info_ptr->colorspace).flags" (parenthesized_expression "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) )) . field_identifier)) ;) }))) (if_statement "if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)))) {\n    if ((info_ptr->valid & 2) == 0) goto LAB_00038888;\n    bVar1 = info_ptr->color_type;\nLAB_00038840:\n    png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);\nLAB_00038858:\n    uVar2 = (info_ptr->colorspace).flags;\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = info_ptr->valid;\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = (info_ptr->colorspace).flags;\n  }" if (parenthesized_expression "(((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0))))" ( (binary_expression "((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)))" (parenthesized_expression "((short)uVar2 < 0)" ( (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) || (parenthesized_expression "((((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)))" ( (parenthesized_expression "(((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0))" ( (binary_expression "((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)) &&\n      (png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)" (parenthesized_expression "((uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0))" ( (binary_expression "(uVar2 & 8) != 0 && ((info_ptr->valid & 1) != 0)" (binary_expression "(uVar2 & 8) != 0" (parenthesized_expression "(uVar2 & 8)" ( (binary_expression "uVar2 & 8" identifier & number_literal) )) != number_literal) && (parenthesized_expression "((info_ptr->valid & 1) != 0)" ( (binary_expression "(info_ptr->valid & 1) != 0" (parenthesized_expression "(info_ptr->valid & 1)" ( (binary_expression "info_ptr->valid & 1" (field_expression "info_ptr->valid" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0)" ( (comma_expression "png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma),\n      (short)(info_ptr->colorspace).flags < 0" (call_expression "png_write_gAMA_fixed(png_ptr,(info_ptr->colorspace).gamma)" identifier (argument_list "(png_ptr,(info_ptr->colorspace).gamma)" ( identifier , (field_expression "(info_ptr->colorspace).gamma" (parenthesized_expression "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) )) . field_identifier) ))) , (binary_expression "(short)(info_ptr->colorspace).flags < 0" (cast_expression "(short)(info_ptr->colorspace).flags" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (field_expression "(info_ptr->colorspace).flags" (parenthesized_expression "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) )) . field_identifier)) < number_literal)) ))) )) ))) )) (compound_statement "{\n    if ((info_ptr->valid & 2) == 0) goto LAB_00038888;\n    bVar1 = info_ptr->color_type;\nLAB_00038840:\n    png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);\nLAB_00038858:\n    uVar2 = (info_ptr->colorspace).flags;\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }" { (if_statement "if ((info_ptr->valid & 2) == 0) goto LAB_00038888;" if (parenthesized_expression "((info_ptr->valid & 2) == 0)" ( (binary_expression "(info_ptr->valid & 2) == 0" (parenthesized_expression "(info_ptr->valid & 2)" ( (binary_expression "info_ptr->valid & 2" (field_expression "info_ptr->valid" identifier -> field_identifier) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00038888;" goto statement_identifier ;)) (expression_statement "bVar1 = info_ptr->color_type;" (assignment_expression "bVar1 = info_ptr->color_type" identifier = (field_expression "info_ptr->color_type" identifier -> field_identifier)) ;) (labeled_statement "LAB_00038840:\n    png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);" statement_identifier : (expression_statement "png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1);" (call_expression "png_write_sBIT(png_ptr,&info_ptr->sig_bit,(uint)bVar1)" identifier (argument_list "(png_ptr,&info_ptr->sig_bit,(uint)bVar1)" ( identifier , (pointer_expression "&info_ptr->sig_bit" & (field_expression "info_ptr->sig_bit" identifier -> field_identifier)) , (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier) ))) ;)) (labeled_statement "LAB_00038858:\n    uVar2 = (info_ptr->colorspace).flags;" statement_identifier : (expression_statement "uVar2 = (info_ptr->colorspace).flags;" (assignment_expression "uVar2 = (info_ptr->colorspace).flags" identifier = (field_expression "(info_ptr->colorspace).flags" (parenthesized_expression "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) )) . field_identifier)) ;)) (if_statement "if ((short)uVar2 < 0) goto LAB_00038888;" if (parenthesized_expression "((short)uVar2 < 0)" ( (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) (goto_statement "goto LAB_00038888;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar3 = info_ptr->valid;\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = (info_ptr->colorspace).flags;\n  }" else (compound_statement "{\n    uVar3 = info_ptr->valid;\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = (info_ptr->colorspace).flags;\n  }" { (expression_statement "uVar3 = info_ptr->valid;" (assignment_expression "uVar3 = info_ptr->valid" identifier = (field_expression "info_ptr->valid" identifier -> field_identifier)) ;) (if_statement "if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" if (parenthesized_expression "((uVar3 & 0x1000) != 0)" ( (binary_expression "(uVar3 & 0x1000) != 0" (parenthesized_expression "(uVar3 & 0x1000)" ( (binary_expression "uVar3 & 0x1000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }\n      png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);\n      uVar3 = info_ptr->valid;\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" { (if_statement "if ((uVar3 & 0x800) == 0) {\n        profile = info_ptr->iccp_profile;\n      }\n      else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }" if (parenthesized_expression "((uVar3 & 0x800) == 0)" ( (binary_expression "(uVar3 & 0x800) == 0" (parenthesized_expression "(uVar3 & 0x800)" ( (binary_expression "uVar3 & 0x800" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        profile = info_ptr->iccp_profile;\n      }" { (expression_statement "profile = info_ptr->iccp_profile;" (assignment_expression "profile = info_ptr->iccp_profile" identifier = (field_expression "info_ptr->iccp_profile" identifier -> field_identifier)) ;) }) (else_clause "else {\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }" else (compound_statement "{\n        png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);\n        profile = info_ptr->iccp_profile;\n      }" { (expression_statement "png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4);" (call_expression "png_app_warning(png_ptr,PTR_LAB_0005601c + 0x4cb4)" identifier (argument_list "(png_ptr,PTR_LAB_0005601c + 0x4cb4)" ( identifier , (binary_expression "PTR_LAB_0005601c + 0x4cb4" identifier + number_literal) ))) ;) (expression_statement "profile = info_ptr->iccp_profile;" (assignment_expression "profile = info_ptr->iccp_profile" identifier = (field_expression "info_ptr->iccp_profile" identifier -> field_identifier)) ;) }))) (expression_statement "png_write_iCCP(png_ptr,info_ptr->iccp_name,profile);" (call_expression "png_write_iCCP(png_ptr,info_ptr->iccp_name,profile)" identifier (argument_list "(png_ptr,info_ptr->iccp_name,profile)" ( identifier , (field_expression "info_ptr->iccp_name" identifier -> field_identifier) , identifier ))) ;) (expression_statement "uVar3 = info_ptr->valid;" (assignment_expression "uVar3 = info_ptr->valid" identifier = (field_expression "info_ptr->valid" identifier -> field_identifier)) ;) (labeled_statement "LAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }" statement_identifier : (if_statement "if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }" if (parenthesized_expression "((uVar3 & 2) != 0)" ( (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\nLAB_0003883c:\n        bVar1 = info_ptr->color_type;\n        goto LAB_00038840;\n      }" { (labeled_statement "LAB_0003883c:\n        bVar1 = info_ptr->color_type;" statement_identifier : (expression_statement "bVar1 = info_ptr->color_type;" (assignment_expression "bVar1 = info_ptr->color_type" identifier = (field_expression "info_ptr->color_type" identifier -> field_identifier)) ;)) (goto_statement "goto LAB_00038840;" goto statement_identifier ;) }))) (goto_statement "goto LAB_00038858;" goto statement_identifier ;) })) (if_statement "if ((uVar3 & 0x800) != 0) {\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }" if (parenthesized_expression "((uVar3 & 0x800) != 0)" ( (binary_expression "(uVar3 & 0x800) != 0" (parenthesized_expression "(uVar3 & 0x800)" ( (binary_expression "uVar3 & 0x800" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);\n      uVar3 = info_ptr->valid;\n      goto LAB_00038830;\n    }" { (expression_statement "png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent);" (call_expression "png_write_sRGB(png_ptr,(uint)(info_ptr->colorspace).rendering_intent)" identifier (argument_list "(png_ptr,(uint)(info_ptr->colorspace).rendering_intent)" ( identifier , (field_expression "(uint)(info_ptr->colorspace).rendering_intent" (call_expression "(uint)(info_ptr->colorspace)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) ))) . field_identifier) ))) ;) (expression_statement "uVar3 = info_ptr->valid;" (assignment_expression "uVar3 = info_ptr->valid" identifier = (field_expression "info_ptr->valid" identifier -> field_identifier)) ;) (goto_statement "goto LAB_00038830;" goto statement_identifier ;) })) (if_statement "if ((uVar3 & 2) != 0) goto LAB_0003883c;" if (parenthesized_expression "((uVar3 & 2) != 0)" ( (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0003883c;" goto statement_identifier ;)) (expression_statement "uVar2 = (info_ptr->colorspace).flags;" (assignment_expression "uVar2 = (info_ptr->colorspace).flags" identifier = (field_expression "(info_ptr->colorspace).flags" (parenthesized_expression "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) )) . field_identifier)) ;) }))) (if_statement "if (((uVar2 & 0x10) != 0) && ((info_ptr->valid & 4) != 0)) {\n    png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy);\n  }" if (parenthesized_expression "(((uVar2 & 0x10) != 0) && ((info_ptr->valid & 4) != 0))" ( (binary_expression "((uVar2 & 0x10) != 0) && ((info_ptr->valid & 4) != 0)" (parenthesized_expression "((uVar2 & 0x10) != 0)" ( (binary_expression "(uVar2 & 0x10) != 0" (parenthesized_expression "(uVar2 & 0x10)" ( (binary_expression "uVar2 & 0x10" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "((info_ptr->valid & 4) != 0)" ( (binary_expression "(info_ptr->valid & 4) != 0" (parenthesized_expression "(info_ptr->valid & 4)" ( (binary_expression "info_ptr->valid & 4" (field_expression "info_ptr->valid" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy);\n  }" { (expression_statement "png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy);" (call_expression "png_write_cHRM_fixed(png_ptr,&(info_ptr->colorspace).end_points_xy)" identifier (argument_list "(png_ptr,&(info_ptr->colorspace).end_points_xy)" ( identifier , (pointer_expression "&(info_ptr->colorspace).end_points_xy" & (field_expression "(info_ptr->colorspace).end_points_xy" (parenthesized_expression "(info_ptr->colorspace)" ( (field_expression "info_ptr->colorspace" identifier -> field_identifier) )) . field_identifier)) ))) ;) })) (labeled_statement "LAB_00038888:\n  write_unknown_chunks(png_ptr,info_ptr,1);" statement_identifier : (expression_statement "write_unknown_chunks(png_ptr,info_ptr,1);" (call_expression "write_unknown_chunks(png_ptr,info_ptr,1)" identifier (argument_list "(png_ptr,info_ptr,1)" ( identifier , identifier , number_literal ))) ;)) (expression_statement "png_ptr->mode = png_ptr->mode | 0x400;" (assignment_expression "png_ptr->mode = png_ptr->mode | 0x400" (field_expression "png_ptr->mode" identifier -> field_identifier) = (binary_expression "png_ptr->mode | 0x400" (field_expression "png_ptr->mode" identifier -> field_identifier) | number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit "void png_write_info_before_PLTE(int param_1,undefined4 *param_2)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}\n\n" (function_definition "void png_write_info_before_PLTE(int param_1,undefined4 *param_2)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}" primitive_type (function_declarator "png_write_info_before_PLTE(int param_1,undefined4 *param_2)" identifier (parameter_list "(int param_1,undefined4 *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (if_statement "if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }" if (parenthesized_expression "(((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0))" ( (binary_expression "((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)" (parenthesized_expression "((param_1 == 0) || (param_2 == (undefined4 *)0x0))" ( (binary_expression "(param_1 == 0) || (param_2 == (undefined4 *)0x0)" (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) || (parenthesized_expression "(param_2 == (undefined4 *)0x0)" ( (binary_expression "param_2 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) || (parenthesized_expression "((*(uint *)(param_1 + 0x124) & 0x400) != 0)" ( (binary_expression "(*(uint *)(param_1 + 0x124) & 0x400) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x124) & 0x400)" ( (binary_expression "*(uint *)(param_1 + 0x124) & 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "(*(code *)PTR_png_write_sig_000564e8)();" (call_expression "(*(code *)PTR_png_write_sig_000564e8)()" (parenthesized_expression "(*(code *)PTR_png_write_sig_000564e8)" ( (pointer_expression "*(code *)PTR_png_write_sig_000564e8" * (cast_expression "(code *)PTR_png_write_sig_000564e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }" if (parenthesized_expression "(((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0))" ( (binary_expression "((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)" (parenthesized_expression "((*(uint *)(param_1 + 0x124) & 0x1000) != 0)" ( (binary_expression "(*(uint *)(param_1 + 0x124) & 0x1000) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x124) & 0x1000)" ( (binary_expression "*(uint *)(param_1 + 0x124) & 0x1000" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0x300) != 0)" ( (binary_expression "*(int *)(param_1 + 0x300) != 0" (pointer_expression "*(int *)(param_1 + 0x300)" * (cast_expression "(int *)(param_1 + 0x300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x300)" ( (binary_expression "param_1 + 0x300" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }" { (expression_statement "(*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);" (call_expression "(*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0)" (parenthesized_expression "(*(code *)PTR_png_warning_00056444)" ( (pointer_expression "*(code *)PTR_png_warning_00056444" * (cast_expression "(code *)PTR_png_warning_00056444" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1,PTR_LAB_0005601c + 0x14c0)" ( identifier , (binary_expression "PTR_LAB_0005601c + 0x14c0" identifier + number_literal) ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x300) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x300) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x300)" * (cast_expression "(undefined4 *)(param_1 + 0x300)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x300)" ( (binary_expression "param_1 + 0x300" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));" (call_expression "FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7))" identifier (argument_list "(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7))" ( identifier , (pointer_expression "*param_2" * identifier) , (subscript_expression "param_2[1]" identifier [ number_literal ]) , (pointer_expression "*(undefined1 *)(param_2 + 6)" * (cast_expression "(undefined1 *)(param_2 + 6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 6)" ( (binary_expression "param_2 + 6" identifier + number_literal) )))) , (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" * (cast_expression "(undefined1 *)((int)param_2 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x19)" ( (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)((int)param_2 + 0x1a)" * (cast_expression "(undefined1 *)((int)param_2 + 0x1a)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x1a)" ( (binary_expression "(int)param_2 + 0x1a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)((int)param_2 + 0x1b)" * (cast_expression "(undefined1 *)((int)param_2 + 0x1b)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x1b)" ( (binary_expression "(int)param_2 + 0x1b" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)(param_2 + 7)" * (cast_expression "(undefined1 *)(param_2 + 7)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) ))) ;) (if_statement "if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" if (parenthesized_expression "((int)(param_2[2] << 0xe) < 0)" ( (binary_expression "(int)(param_2[2] << 0xe) < 0" (cast_expression "(int)(param_2[2] << 0xe)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_2[2] << 0xe)" ( (binary_expression "param_2[2] << 0xe" (subscript_expression "param_2[2]" identifier [ number_literal ]) << number_literal) ))) < number_literal) )) (compound_statement "{\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" { (expression_statement "FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);" (call_expression "FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47])" identifier (argument_list "(param_1,param_2[0x46],param_2[0x47])" ( identifier , (subscript_expression "param_2[0x46]" identifier [ number_literal ]) , (subscript_expression "param_2[0x47]" identifier [ number_literal ]) ))) ;) (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" else (compound_statement "{\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" { (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }))) (if_statement "if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" if (parenthesized_expression "(((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0))))" ( (binary_expression "((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))" (parenthesized_expression "((short)uVar2 < 0)" ( (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) || (parenthesized_expression "((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))" ( (parenthesized_expression "(((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0))" ( (binary_expression "((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)" (parenthesized_expression "((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0))" ( (binary_expression "(uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)" (binary_expression "(uVar2 & 8) != 0" (parenthesized_expression "(uVar2 & 8)" ( (binary_expression "uVar2 & 8" identifier & number_literal) )) != number_literal) && (parenthesized_expression "((param_2[2] & 1) != 0)" ( (binary_expression "(param_2[2] & 1) != 0" (parenthesized_expression "(param_2[2] & 1)" ( (binary_expression "param_2[2] & 1" (subscript_expression "param_2[2]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)" ( (comma_expression "FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0" (call_expression "FUN_0003d2a8(param_1,param_2[10])" identifier (argument_list "(param_1,param_2[10])" ( identifier , (subscript_expression "param_2[10]" identifier [ number_literal ]) ))) , (binary_expression "*(short *)((int)param_2 + 0x72) < 0" (pointer_expression "*(short *)((int)param_2 + 0x72)" * (cast_expression "(short *)((int)param_2 + 0x72)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) < number_literal)) ))) )) ))) )) (compound_statement "{\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }" { (if_statement "if ((param_2[2] & 2) == 0) goto LAB_00038888;" if (parenthesized_expression "((param_2[2] & 2) == 0)" ( (binary_expression "(param_2[2] & 2) == 0" (parenthesized_expression "(param_2[2] & 2)" ( (binary_expression "param_2[2] & 2" (subscript_expression "param_2[2]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00038888;" goto statement_identifier ;)) (expression_statement "uVar1 = *(undefined1 *)((int)param_2 + 0x19);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_2 + 0x19)" identifier = (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" * (cast_expression "(undefined1 *)((int)param_2 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x19)" ( (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (labeled_statement "LAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);" statement_identifier : (expression_statement "FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);" (call_expression "FUN_0003d8a8(param_1,param_2 + 0x25,uVar1)" identifier (argument_list "(param_1,param_2 + 0x25,uVar1)" ( identifier , (binary_expression "param_2 + 0x25" identifier + number_literal) , identifier ))) ;)) (labeled_statement "LAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);" statement_identifier : (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;)) (if_statement "if ((short)uVar2 < 0) goto LAB_00038888;" if (parenthesized_expression "((short)uVar2 < 0)" ( (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) < number_literal) )) (goto_statement "goto LAB_00038888;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" else (compound_statement "{\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" { (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (if_statement "if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" if (parenthesized_expression "((uVar3 & 0x1000) != 0)" ( (binary_expression "(uVar3 & 0x1000) != 0" (parenthesized_expression "(uVar3 & 0x1000)" ( (binary_expression "uVar3 & 0x1000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" { (if_statement "if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" if (parenthesized_expression "((uVar3 & 0x800) == 0)" ( (binary_expression "(uVar3 & 0x800) == 0" (parenthesized_expression "(uVar3 & 0x800)" ( (binary_expression "uVar3 & 0x800" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar4 = param_2[0x1e];\n      }" { (expression_statement "uVar4 = param_2[0x1e];" (assignment_expression "uVar4 = param_2[0x1e]" identifier = (subscript_expression "param_2[0x1e]" identifier [ number_literal ])) ;) }) (else_clause "else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" else (compound_statement "{\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" { (expression_statement "FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);" (call_expression "FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4)" identifier (argument_list "(param_1,PTR_LAB_0005601c + 0x4cb4)" ( identifier , (binary_expression "PTR_LAB_0005601c + 0x4cb4" identifier + number_literal) ))) ;) (expression_statement "uVar4 = param_2[0x1e];" (assignment_expression "uVar4 = param_2[0x1e]" identifier = (subscript_expression "param_2[0x1e]" identifier [ number_literal ])) ;) }))) (expression_statement "FUN_0003d404(param_1,param_2[0x1d],uVar4);" (call_expression "FUN_0003d404(param_1,param_2[0x1d],uVar4)" identifier (argument_list "(param_1,param_2[0x1d],uVar4)" ( identifier , (subscript_expression "param_2[0x1d]" identifier [ number_literal ]) , identifier ))) ;) (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (labeled_statement "LAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" statement_identifier : (if_statement "if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" if (parenthesized_expression "((uVar3 & 2) != 0)" ( (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" { (labeled_statement "LAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);" statement_identifier : (expression_statement "uVar1 = *(undefined1 *)((int)param_2 + 0x19);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_2 + 0x19)" identifier = (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" * (cast_expression "(undefined1 *)((int)param_2 + 0x19)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x19)" ( (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;)) (goto_statement "goto LAB_00038840;" goto statement_identifier ;) }))) (goto_statement "goto LAB_00038858;" goto statement_identifier ;) })) (if_statement "if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }" if (parenthesized_expression "((uVar3 & 0x800) != 0)" ( (binary_expression "(uVar3 & 0x800) != 0" (parenthesized_expression "(uVar3 & 0x800)" ( (binary_expression "uVar3 & 0x800" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }" { (expression_statement "FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));" (call_expression "FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c))" identifier (argument_list "(param_1,*(undefined2 *)(param_2 + 0x1c))" ( identifier , (pointer_expression "*(undefined2 *)(param_2 + 0x1c)" * (cast_expression "(undefined2 *)(param_2 + 0x1c)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) )))) ))) ;) (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_00038830;" goto statement_identifier ;) })) (if_statement "if ((uVar3 & 2) != 0) goto LAB_0003883c;" if (parenthesized_expression "((uVar3 & 2) != 0)" ( (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0003883c;" goto statement_identifier ;)) (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" identifier = (pointer_expression "*(ushort *)((int)param_2 + 0x72)" * (cast_expression "(ushort *)((int)param_2 + 0x72)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x72)" ( (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }))) (if_statement "if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }" if (parenthesized_expression "(((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0))" ( (binary_expression "((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)" (parenthesized_expression "((uVar2 & 0x10) != 0)" ( (binary_expression "(uVar2 & 0x10) != 0" (parenthesized_expression "(uVar2 & 0x10)" ( (binary_expression "uVar2 & 0x10" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "((param_2[2] & 4) != 0)" ( (binary_expression "(param_2[2] & 4) != 0" (parenthesized_expression "(param_2[2] & 4)" ( (binary_expression "param_2[2] & 4" (subscript_expression "param_2[2]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }" { (expression_statement "FUN_0003da30(param_1,param_2 + 0xb,1);" (call_expression "FUN_0003da30(param_1,param_2 + 0xb,1)" identifier (argument_list "(param_1,param_2 + 0xb,1)" ( identifier , (binary_expression "param_2 + 0xb" identifier + number_literal) , number_literal ))) ;) })) (labeled_statement "LAB_00038888:\n  FUN_00037edc(param_1,param_2,1);" statement_identifier : (expression_statement "FUN_00037edc(param_1,param_2,1);" (call_expression "FUN_00037edc(param_1,param_2,1)" identifier (argument_list "(param_1,param_2,1)" ( identifier , identifier , number_literal ))) ;)) (expression_statement "*(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;" (assignment_expression "*(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_1 + 0x124) | 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" * (cast_expression "(uint *)(param_1 + 0x124)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x124)" ( (binary_expression "param_1 + 0x124" identifier + number_literal) )))) | number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) ))) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) ))) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( 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) )))) = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) , (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) ))) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT) < LIT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) ))) )) && (parenthesized_expression ( (comma_expression (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) < LIT)) ))) )) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , IDENT ))) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT) < LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;)) (goto_statement goto statement_identifier ;) }))) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , LIT ))) ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;) (return_statement return ;) })))
(function_definition "void png_write_info_before_PLTE(int param_1,undefined4 *param_2)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}" (primitive_type "void") (function_declarator "png_write_info_before_PLTE(int param_1,undefined4 *param_2)" (identifier "png_write_info_before_PLTE") (parameter_list "(int param_1,undefined4 *param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  undefined1 uVar1;\n  ushort uVar2;\n  uint uVar3;\n  undefined4 uVar4;\n  \n  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }\n  (*(code *)PTR_png_write_sig_000564e8)();\n  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }\n  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));\n  if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }\nLAB_00038888:\n  FUN_00037edc(param_1,param_2,1);\n  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;\n  return;\n}" ({ "{") (declaration "undefined1 uVar1;" (type_identifier "undefined1") (identifier "uVar1") (; ";")) (declaration "ushort uVar2;" (type_identifier "ushort") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (if_statement "if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {\n    return;\n  }" (if "if") (parenthesized_expression "(((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0))" (( "(") (binary_expression "((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||\n     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)" (parenthesized_expression "((param_1 == 0) || (param_2 == (undefined4 *)0x0))" (( "(") (binary_expression "(param_1 == 0) || (param_2 == (undefined4 *)0x0)" (parenthesized_expression "(param_1 == 0)" (( "(") (binary_expression "param_1 == 0" (identifier "param_1") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(param_2 == (undefined4 *)0x0)" (( "(") (binary_expression "param_2 == (undefined4 *)0x0" (identifier "param_2") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (|| "||") (parenthesized_expression "((*(uint *)(param_1 + 0x124) & 0x400) != 0)" (( "(") (binary_expression "(*(uint *)(param_1 + 0x124) & 0x400) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x124) & 0x400)" (( "(") (binary_expression "*(uint *)(param_1 + 0x124) & 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" (* "*") (cast_expression "(uint *)(param_1 + 0x124)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x124)" (( "(") (binary_expression "param_1 + 0x124" (identifier "param_1") (+ "+") (number_literal "0x124")) () ")")))) (& "&") (number_literal "0x400")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_png_write_sig_000564e8)();" (call_expression "(*(code *)PTR_png_write_sig_000564e8)()" (parenthesized_expression "(*(code *)PTR_png_write_sig_000564e8)" (( "(") (pointer_expression "*(code *)PTR_png_write_sig_000564e8" (* "*") (cast_expression "(code *)PTR_png_write_sig_000564e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_png_write_sig_000564e8"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }" (if "if") (parenthesized_expression "(((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0))" (( "(") (binary_expression "((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)" (parenthesized_expression "((*(uint *)(param_1 + 0x124) & 0x1000) != 0)" (( "(") (binary_expression "(*(uint *)(param_1 + 0x124) & 0x1000) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x124) & 0x1000)" (( "(") (binary_expression "*(uint *)(param_1 + 0x124) & 0x1000" (pointer_expression "*(uint *)(param_1 + 0x124)" (* "*") (cast_expression "(uint *)(param_1 + 0x124)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x124)" (( "(") (binary_expression "param_1 + 0x124" (identifier "param_1") (+ "+") (number_literal "0x124")) () ")")))) (& "&") (number_literal "0x1000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0x300) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x300) != 0" (pointer_expression "*(int *)(param_1 + 0x300)" (* "*") (cast_expression "(int *)(param_1 + 0x300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x300)" (( "(") (binary_expression "param_1 + 0x300" (identifier "param_1") (+ "+") (number_literal "0x300")) () ")")))) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);\n    *(undefined4 *)(param_1 + 0x300) = 0;\n  }" ({ "{") (expression_statement "(*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);" (call_expression "(*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0)" (parenthesized_expression "(*(code *)PTR_png_warning_00056444)" (( "(") (pointer_expression "*(code *)PTR_png_warning_00056444" (* "*") (cast_expression "(code *)PTR_png_warning_00056444" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_png_warning_00056444"))) () ")")) (argument_list "(param_1,PTR_LAB_0005601c + 0x14c0)" (( "(") (identifier "param_1") (, ",") (binary_expression "PTR_LAB_0005601c + 0x14c0" (identifier "PTR_LAB_0005601c") (+ "+") (number_literal "0x14c0")) () ")"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x300) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x300) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x300)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x300)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x300)" (( "(") (binary_expression "param_1 + 0x300" (identifier "param_1") (+ "+") (number_literal "0x300")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));" (call_expression "FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7))" (identifier "FUN_0003cc8c") (argument_list "(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),\n               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),\n               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*param_2" (* "*") (identifier "param_2")) (, ",") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (, ",") (pointer_expression "*(undefined1 *)(param_2 + 6)" (* "*") (cast_expression "(undefined1 *)(param_2 + 6)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 6)" (( "(") (binary_expression "param_2 + 6" (identifier "param_2") (+ "+") (number_literal "6")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" (* "*") (cast_expression "(undefined1 *)((int)param_2 + 0x19)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x19)" (( "(") (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x19")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)((int)param_2 + 0x1a)" (* "*") (cast_expression "(undefined1 *)((int)param_2 + 0x1a)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x1a)" (( "(") (binary_expression "(int)param_2 + 0x1a" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x1a")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)((int)param_2 + 0x1b)" (* "*") (cast_expression "(undefined1 *)((int)param_2 + 0x1b)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x1b)" (( "(") (binary_expression "(int)param_2 + 0x1b" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x1b")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)(param_2 + 7)" (* "*") (cast_expression "(undefined1 *)(param_2 + 7)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")")))) () ")"))) (; ";")) (if_statement "if ((int)(param_2[2] << 0xe) < 0) {\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }\n  else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" (if "if") (parenthesized_expression "((int)(param_2[2] << 0xe) < 0)" (( "(") (binary_expression "(int)(param_2[2] << 0xe) < 0" (cast_expression "(int)(param_2[2] << 0xe)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(param_2[2] << 0xe)" (( "(") (binary_expression "param_2[2] << 0xe" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (<< "<<") (number_literal "0xe")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" ({ "{") (expression_statement "FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);" (call_expression "FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47])" (identifier "FUN_0003f1ac") (argument_list "(param_1,param_2[0x46],param_2[0x47])" (( "(") (identifier "param_1") (, ",") (subscript_expression "param_2[0x46]" (identifier "param_2") ([ "[") (number_literal "0x46") (] "]")) (, ",") (subscript_expression "param_2[0x47]" (identifier "param_2") ([ "[") (number_literal "0x47") (] "]")) () ")"))) (; ";")) (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)((int)param_2 + 0x72)" (* "*") (cast_expression "(ushort *)((int)param_2 + 0x72)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x72)" (( "(") (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x72")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" (else "else") (compound_statement "{\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" ({ "{") (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)((int)param_2 + 0x72)" (* "*") (cast_expression "(ushort *)((int)param_2 + 0x72)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x72)" (( "(") (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x72")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }\n  else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" (if "if") (parenthesized_expression "(((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0))))" (( "(") (binary_expression "((short)uVar2 < 0) ||\n     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))" (parenthesized_expression "((short)uVar2 < 0)" (( "(") (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar2")) (< "<") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))" (( "(") (parenthesized_expression "(((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0))" (( "(") (binary_expression "((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&\n      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)" (parenthesized_expression "((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0))" (( "(") (binary_expression "(uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)" (binary_expression "(uVar2 & 8) != 0" (parenthesized_expression "(uVar2 & 8)" (( "(") (binary_expression "uVar2 & 8" (identifier "uVar2") (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) (&& "&&") (parenthesized_expression "((param_2[2] & 1) != 0)" (( "(") (binary_expression "(param_2[2] & 1) != 0" (parenthesized_expression "(param_2[2] & 1)" (( "(") (binary_expression "param_2[2] & 1" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)" (( "(") (comma_expression "FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0" (call_expression "FUN_0003d2a8(param_1,param_2[10])" (identifier "FUN_0003d2a8") (argument_list "(param_1,param_2[10])" (( "(") (identifier "param_1") (, ",") (subscript_expression "param_2[10]" (identifier "param_2") ([ "[") (number_literal "10") (] "]")) () ")"))) (, ",") (binary_expression "*(short *)((int)param_2 + 0x72) < 0" (pointer_expression "*(short *)((int)param_2 + 0x72)" (* "*") (cast_expression "(short *)((int)param_2 + 0x72)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x72)" (( "(") (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x72")) () ")")))) (< "<") (number_literal "0"))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n    if ((param_2[2] & 2) == 0) goto LAB_00038888;\n    uVar1 = *(undefined1 *)((int)param_2 + 0x19);\nLAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);\nLAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n    if ((short)uVar2 < 0) goto LAB_00038888;\n  }" ({ "{") (if_statement "if ((param_2[2] & 2) == 0) goto LAB_00038888;" (if "if") (parenthesized_expression "((param_2[2] & 2) == 0)" (( "(") (binary_expression "(param_2[2] & 2) == 0" (parenthesized_expression "(param_2[2] & 2)" (( "(") (binary_expression "param_2[2] & 2" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00038888;" (goto "goto") (statement_identifier "LAB_00038888") (; ";"))) (expression_statement "uVar1 = *(undefined1 *)((int)param_2 + 0x19);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_2 + 0x19)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" (* "*") (cast_expression "(undefined1 *)((int)param_2 + 0x19)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x19)" (( "(") (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x19")) () ")"))))) (; ";")) (labeled_statement "LAB_00038840:\n    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);" (statement_identifier "LAB_00038840") (: ":") (expression_statement "FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);" (call_expression "FUN_0003d8a8(param_1,param_2 + 0x25,uVar1)" (identifier "FUN_0003d8a8") (argument_list "(param_1,param_2 + 0x25,uVar1)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_2 + 0x25" (identifier "param_2") (+ "+") (number_literal "0x25")) (, ",") (identifier "uVar1") () ")"))) (; ";"))) (labeled_statement "LAB_00038858:\n    uVar2 = *(ushort *)((int)param_2 + 0x72);" (statement_identifier "LAB_00038858") (: ":") (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)((int)param_2 + 0x72)" (* "*") (cast_expression "(ushort *)((int)param_2 + 0x72)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x72)" (( "(") (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x72")) () ")"))))) (; ";"))) (if_statement "if ((short)uVar2 < 0) goto LAB_00038888;" (if "if") (parenthesized_expression "((short)uVar2 < 0)" (( "(") (binary_expression "(short)uVar2 < 0" (cast_expression "(short)uVar2" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar2")) (< "<") (number_literal "0")) () ")")) (goto_statement "goto LAB_00038888;" (goto "goto") (statement_identifier "LAB_00038888") (; ";"))) (} "}")) (else_clause "else {\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" (else "else") (compound_statement "{\n    uVar3 = param_2[2];\n    if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }\n    if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }\n    if ((uVar3 & 2) != 0) goto LAB_0003883c;\n    uVar2 = *(ushort *)((int)param_2 + 0x72);\n  }" ({ "{") (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" (identifier "uVar3") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if ((uVar3 & 0x1000) != 0) {\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" (if "if") (parenthesized_expression "((uVar3 & 0x1000) != 0)" (( "(") (binary_expression "(uVar3 & 0x1000) != 0" (parenthesized_expression "(uVar3 & 0x1000)" (( "(") (binary_expression "uVar3 & 0x1000" (identifier "uVar3") (& "&") (number_literal "0x1000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }\n      FUN_0003d404(param_1,param_2[0x1d],uVar4);\n      uVar3 = param_2[2];\nLAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }\n      goto LAB_00038858;\n    }" ({ "{") (if_statement "if ((uVar3 & 0x800) == 0) {\n        uVar4 = param_2[0x1e];\n      }\n      else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" (if "if") (parenthesized_expression "((uVar3 & 0x800) == 0)" (( "(") (binary_expression "(uVar3 & 0x800) == 0" (parenthesized_expression "(uVar3 & 0x800)" (( "(") (binary_expression "uVar3 & 0x800" (identifier "uVar3") (& "&") (number_literal "0x800")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar4 = param_2[0x1e];\n      }" ({ "{") (expression_statement "uVar4 = param_2[0x1e];" (assignment_expression "uVar4 = param_2[0x1e]" (identifier "uVar4") (= "=") (subscript_expression "param_2[0x1e]" (identifier "param_2") ([ "[") (number_literal "0x1e") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" (else "else") (compound_statement "{\n        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);\n        uVar4 = param_2[0x1e];\n      }" ({ "{") (expression_statement "FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);" (call_expression "FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4)" (identifier "FUN_0001a6f4") (argument_list "(param_1,PTR_LAB_0005601c + 0x4cb4)" (( "(") (identifier "param_1") (, ",") (binary_expression "PTR_LAB_0005601c + 0x4cb4" (identifier "PTR_LAB_0005601c") (+ "+") (number_literal "0x4cb4")) () ")"))) (; ";")) (expression_statement "uVar4 = param_2[0x1e];" (assignment_expression "uVar4 = param_2[0x1e]" (identifier "uVar4") (= "=") (subscript_expression "param_2[0x1e]" (identifier "param_2") ([ "[") (number_literal "0x1e") (] "]"))) (; ";")) (} "}")))) (expression_statement "FUN_0003d404(param_1,param_2[0x1d],uVar4);" (call_expression "FUN_0003d404(param_1,param_2[0x1d],uVar4)" (identifier "FUN_0003d404") (argument_list "(param_1,param_2[0x1d],uVar4)" (( "(") (identifier "param_1") (, ",") (subscript_expression "param_2[0x1d]" (identifier "param_2") ([ "[") (number_literal "0x1d") (] "]")) (, ",") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" (identifier "uVar3") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (labeled_statement "LAB_00038830:\n      if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" (statement_identifier "LAB_00038830") (: ":") (if_statement "if ((uVar3 & 2) != 0) {\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" (if "if") (parenthesized_expression "((uVar3 & 2) != 0)" (( "(") (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" (( "(") (binary_expression "uVar3 & 2" (identifier "uVar3") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);\n        goto LAB_00038840;\n      }" ({ "{") (labeled_statement "LAB_0003883c:\n        uVar1 = *(undefined1 *)((int)param_2 + 0x19);" (statement_identifier "LAB_0003883c") (: ":") (expression_statement "uVar1 = *(undefined1 *)((int)param_2 + 0x19);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_2 + 0x19)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined1 *)((int)param_2 + 0x19)" (* "*") (cast_expression "(undefined1 *)((int)param_2 + 0x19)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x19)" (( "(") (binary_expression "(int)param_2 + 0x19" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x19")) () ")"))))) (; ";"))) (goto_statement "goto LAB_00038840;" (goto "goto") (statement_identifier "LAB_00038840") (; ";")) (} "}")))) (goto_statement "goto LAB_00038858;" (goto "goto") (statement_identifier "LAB_00038858") (; ";")) (} "}"))) (if_statement "if ((uVar3 & 0x800) != 0) {\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }" (if "if") (parenthesized_expression "((uVar3 & 0x800) != 0)" (( "(") (binary_expression "(uVar3 & 0x800) != 0" (parenthesized_expression "(uVar3 & 0x800)" (( "(") (binary_expression "uVar3 & 0x800" (identifier "uVar3") (& "&") (number_literal "0x800")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));\n      uVar3 = param_2[2];\n      goto LAB_00038830;\n    }" ({ "{") (expression_statement "FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));" (call_expression "FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c))" (identifier "FUN_0003d34c") (argument_list "(param_1,*(undefined2 *)(param_2 + 0x1c))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined2 *)(param_2 + 0x1c)" (* "*") (cast_expression "(undefined2 *)(param_2 + 0x1c)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x1c)" (( "(") (binary_expression "param_2 + 0x1c" (identifier "param_2") (+ "+") (number_literal "0x1c")) () ")")))) () ")"))) (; ";")) (expression_statement "uVar3 = param_2[2];" (assignment_expression "uVar3 = param_2[2]" (identifier "uVar3") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (goto_statement "goto LAB_00038830;" (goto "goto") (statement_identifier "LAB_00038830") (; ";")) (} "}"))) (if_statement "if ((uVar3 & 2) != 0) goto LAB_0003883c;" (if "if") (parenthesized_expression "((uVar3 & 2) != 0)" (( "(") (binary_expression "(uVar3 & 2) != 0" (parenthesized_expression "(uVar3 & 2)" (( "(") (binary_expression "uVar3 & 2" (identifier "uVar3") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0003883c;" (goto "goto") (statement_identifier "LAB_0003883c") (; ";"))) (expression_statement "uVar2 = *(ushort *)((int)param_2 + 0x72);" (assignment_expression "uVar2 = *(ushort *)((int)param_2 + 0x72)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)((int)param_2 + 0x72)" (* "*") (cast_expression "(ushort *)((int)param_2 + 0x72)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x72)" (( "(") (binary_expression "(int)param_2 + 0x72" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x72")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }" (if "if") (parenthesized_expression "(((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0))" (( "(") (binary_expression "((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)" (parenthesized_expression "((uVar2 & 0x10) != 0)" (( "(") (binary_expression "(uVar2 & 0x10) != 0" (parenthesized_expression "(uVar2 & 0x10)" (( "(") (binary_expression "uVar2 & 0x10" (identifier "uVar2") (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((param_2[2] & 4) != 0)" (( "(") (binary_expression "(param_2[2] & 4) != 0" (parenthesized_expression "(param_2[2] & 4)" (( "(") (binary_expression "param_2[2] & 4" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    FUN_0003da30(param_1,param_2 + 0xb,1);\n  }" ({ "{") (expression_statement "FUN_0003da30(param_1,param_2 + 0xb,1);" (call_expression "FUN_0003da30(param_1,param_2 + 0xb,1)" (identifier "FUN_0003da30") (argument_list "(param_1,param_2 + 0xb,1)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_2 + 0xb" (identifier "param_2") (+ "+") (number_literal "0xb")) (, ",") (number_literal "1") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_00038888:\n  FUN_00037edc(param_1,param_2,1);" (statement_identifier "LAB_00038888") (: ":") (expression_statement "FUN_00037edc(param_1,param_2,1);" (call_expression "FUN_00037edc(param_1,param_2,1)" (identifier "FUN_00037edc") (argument_list "(param_1,param_2,1)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (number_literal "1") () ")"))) (; ";"))) (expression_statement "*(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;" (assignment_expression "*(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" (* "*") (cast_expression "(uint *)(param_1 + 0x124)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x124)" (( "(") (binary_expression "param_1 + 0x124" (identifier "param_1") (+ "+") (number_literal "0x124")) () ")")))) (= "=") (binary_expression "*(uint *)(param_1 + 0x124) | 0x400" (pointer_expression "*(uint *)(param_1 + 0x124)" (* "*") (cast_expression "(uint *)(param_1 + 0x124)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x124)" (( "(") (binary_expression "param_1 + 0x124" (identifier "param_1") (+ "+") (number_literal "0x124")) () ")")))) (| "|") (number_literal "0x400"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 var_1,type_2 var_2)

{
  type_3 bVar1;
  type_4 var_6;
  type_5 var_9;
  type_6 profile;
  
  if (((var_1 == (type_1)0x0) || (var_2 == (type_2)0x0)) ||
     ((var_1->mode & 0x400) != 0)) {
    return;
  }
  (*(type_7 *)PTR_png_write_sig_000564e8)();
  if (((var_1->mode & 0x1000) != 0) && (var_1->mng_features_permitted != 0)) {
    (*(type_7 *)PTR_png_warning_00056444)(var_1,var_3 + 0x14c0);
    var_1->mng_features_permitted = 0;
  }
  var_4(var_1,var_2->width,var_2->height,(type_5)var_2->bit_depth,
                 (type_5)var_2->color_type,(type_5)var_2->compression_type,
                 (type_5)var_2->filter_type,(type_5)var_2->interlace_type);
  if ((int)(var_2->valid << 0xe) < 0) {
    var_5(var_1,var_2->num_frames,var_2->num_plays);
    var_6 = (var_2->colorspace).flags;
  }
  else {
    var_6 = (var_2->colorspace).flags;
  }
  if (((short)var_6 < 0) ||
     ((((var_6 & 8) != 0 && ((var_2->valid & 1) != 0)) &&
      (var_7(var_1,(var_2->colorspace).gamma),
      (short)(var_2->colorspace).flags < 0)))) {
    if ((var_2->valid & 2) == 0) goto LAB_00038888;
    bVar1 = var_2->color_type;
LAB_00038840:
    var_8(var_1,&var_2->sig_bit,(type_5)bVar1);
LAB_00038858:
    var_6 = (var_2->colorspace).flags;
    if ((short)var_6 < 0) goto LAB_00038888;
  }
  else {
    var_9 = var_2->valid;
    if ((var_9 & 0x1000) != 0) {
      if ((var_9 & 0x800) == 0) {
        profile = var_2->iccp_profile;
      }
      else {
        var_10(var_1,var_3 + 0x4cb4);
        profile = var_2->iccp_profile;
      }
      var_11(var_1,var_2->iccp_name,profile);
      var_9 = var_2->valid;
LAB_00038830:
      if ((var_9 & 2) != 0) {
LAB_0003883c:
        bVar1 = var_2->color_type;
        goto LAB_00038840;
      }
      goto LAB_00038858;
    }
    if ((var_9 & 0x800) != 0) {
      var_12(var_1,(type_5)(var_2->colorspace).rendering_intent);
      var_9 = var_2->valid;
      goto LAB_00038830;
    }
    if ((var_9 & 2) != 0) goto LAB_0003883c;
    var_6 = (var_2->colorspace).flags;
  }
  if (((var_6 & 0x10) != 0) && ((var_2->valid & 4) != 0)) {
    var_13(var_1,&(var_2->colorspace).end_points_xy);
  }
LAB_00038888:
  var_14(var_1,var_2,1);
  var_1->mode = var_1->mode | 0x400;
  return;
}


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

void MASKED(int param_1,undefined4 *param_2)

{
  undefined1 uVar1;
  ushort uVar2;
  uint uVar3;
  undefined4 uVar4;
  
  if (((param_1 == 0) || (param_2 == (undefined4 *)0x0)) ||
     ((*(uint *)(param_1 + 0x124) & 0x400) != 0)) {
    return;
  }
  (*(code *)PTR_png_write_sig_000564e8)();
  if (((*(uint *)(param_1 + 0x124) & 0x1000) != 0) && (*(int *)(param_1 + 0x300) != 0)) {
    (*(code *)PTR_png_warning_00056444)(param_1,PTR_LAB_0005601c + 0x14c0);
    *(undefined4 *)(param_1 + 0x300) = 0;
  }
  FUN_0003cc8c(param_1,*param_2,param_2[1],*(undefined1 *)(param_2 + 6),
               *(undefined1 *)((int)param_2 + 0x19),*(undefined1 *)((int)param_2 + 0x1a),
               *(undefined1 *)((int)param_2 + 0x1b),*(undefined1 *)(param_2 + 7));
  if ((int)(param_2[2] << 0xe) < 0) {
    FUN_0003f1ac(param_1,param_2[0x46],param_2[0x47]);
    uVar2 = *(ushort *)((int)param_2 + 0x72);
  }
  else {
    uVar2 = *(ushort *)((int)param_2 + 0x72);
  }
  if (((short)uVar2 < 0) ||
     ((((uVar2 & 8) != 0 && ((param_2[2] & 1) != 0)) &&
      (FUN_0003d2a8(param_1,param_2[10]), *(short *)((int)param_2 + 0x72) < 0)))) {
    if ((param_2[2] & 2) == 0) goto LAB_00038888;
    uVar1 = *(undefined1 *)((int)param_2 + 0x19);
LAB_00038840:
    FUN_0003d8a8(param_1,param_2 + 0x25,uVar1);
LAB_00038858:
    uVar2 = *(ushort *)((int)param_2 + 0x72);
    if ((short)uVar2 < 0) goto LAB_00038888;
  }
  else {
    uVar3 = param_2[2];
    if ((uVar3 & 0x1000) != 0) {
      if ((uVar3 & 0x800) == 0) {
        uVar4 = param_2[0x1e];
      }
      else {
        FUN_0001a6f4(param_1,PTR_LAB_0005601c + 0x4cb4);
        uVar4 = param_2[0x1e];
      }
      FUN_0003d404(param_1,param_2[0x1d],uVar4);
      uVar3 = param_2[2];
LAB_00038830:
      if ((uVar3 & 2) != 0) {
LAB_0003883c:
        uVar1 = *(undefined1 *)((int)param_2 + 0x19);
        goto LAB_00038840;
      }
      goto LAB_00038858;
    }
    if ((uVar3 & 0x800) != 0) {
      FUN_0003d34c(param_1,*(undefined2 *)(param_2 + 0x1c));
      uVar3 = param_2[2];
      goto LAB_00038830;
    }
    if ((uVar3 & 2) != 0) goto LAB_0003883c;
    uVar2 = *(ushort *)((int)param_2 + 0x72);
  }
  if (((uVar2 & 0x10) != 0) && ((param_2[2] & 4) != 0)) {
    FUN_0003da30(param_1,param_2 + 0xb,1);
  }
LAB_00038888:
  FUN_00037edc(param_1,param_2,1);
  *(uint *)(param_1 + 0x124) = *(uint *)(param_1 + 0x124) | 0x400;
  return;
}

